原来DNS这么简单!全网最通俗的BIND配置教程(附主从复制)

原来DNS这么简单!全网最通俗的BIND配置教程(附主从复制)
DNS 的基本概念文章摘要本文全面介绍了 DNS域名系统的基本概念、工作原理及 BIND 服务的实战部署。内容涵盖 DNS 的层次结构、查询类型、资源记录类型并详细演示了如何在 CentOS 系统上搭建 DNS 缓存服务器、配置正向/反向解析、CNAME/MX 记录以及实现主从复制和高可用架构。通过图文并茂的配置示例和 Mermaid 流程图帮助读者深入理解 DNS 服务的核心机制与安全加固方法。DNS 概述DNS(域名解析服务)DNSDomain Name System域名系统,应用层协议,是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库能够使人更方便地访问互联网基于C/S架构服务器端:53/udp, 53/tcpBIND: Bekerley Internet Name Domain,由 ISC (www.isc.org)提供的DNS软件实现DNS域名结构例:www.test.com.study.test.com.FQDN全称域名主机名(名)域名(姓)域名子域名父域名根域一级域名: Top Level Domain: tldcom, edu, mil, gov, net, org, int,arpa 三类: 组织域、国家域(.cn, .ca, .hk, .tw)、反向域二级域名:test.com三级域名: study.test.com最多可达到127级域名DNS 原理DNS 查询流程示意图缓存命中缓存未命中缓存命中缓存未命中客户端发起DNS查询如: www.example.com检查本地缓存hosts文件 DNS缓存返回解析结果查询结束本地DNS服务器(递归解析器)检查服务器缓存返回解析结果向根域名服务器查询返回顶级域名服务器地址(如: .com服务器)向顶级域名服务器查询返回权威域名服务器地址(如: example.com服务器)向权威域名服务器查询返回最终IP地址(如: 192.0.2.1)本地DNS服务器缓存结果返回结果给客户端DNS 查询类型递归查询: 最终结果负责到底迭代杳询· 最好结果不负责到底名称服务器Name Server,域内负责解析本域内的名称的DNS服务器IPv4的根名称服务器:全球共13个负责解析根域的DNS服务器美国10个荷兰1瑞典1日本1IPv6的根名称服务器:全球共25个中国1主3从美国1主2从完整的查询请求经过的流程client --hosts文件–client DNS service Local cache -- DNS server本身数据库 (recursion递归查询) -- DNS server cache --iteration(迭代)–根–顶级域名DNS–二级域名DNS…DNS 资源记录资源记录就是DNS服务需要使用的相关数据。 例如192.168.100.123 对应着 server01.test.com 192.168.100.124 对应着 server02.test.com 192.168.100.125 对应着 server03.test.com 资源记录的常用类型如下类型记录类别标明SOA(起始授权机构记录)负责注册更新的DNS服务器名称和其它控制参数 SOA记录总是第一条记录NS(域名服务器记录)负责权威解析的DNS服务器名称A(主机A记录)一个名称对应的IPv4地址AAAA(主机AAAA记录)一个名称对应的IPv6地址CNAME(别名记录)一个名称的别名MX(邮件交换器记录)一个域名空间中的邮件服务器的名称SRV(服务位置记录)各种网络服务的位置信息TXT(文本记录)些文本信息,用于其他目的如:防范邮件服务器被冒名顶替PTR(反向记录)一个IP地址对应的名称DNS 角色类型DNS角色类型功能说明DNS根服务器全球有13个根服务器,大部分在美国DNS 缓存服务器代人提问、缓存应答,不提供权威解析DNS Master (主) 权威服务器可提供注册更新和权威解析DNS Slave(从)权威服务器同步复制 Master数据,可提供权威解析DNS 服务安装安装DNS 服务组件安装 DNS 软件包bindyuminstall-ybindbind-utils systemctlenablenamed systemctl start namednetstat-tunlp|grepnamed953端口是rndc 的端口rndc可以管理named服务查看配named的配置可以看到vim/etc/named.conf做本地 DNS 缓存服务器cat/etc/resolv.conf指定的 dns 服务器使用本 dns 服务器做缓存 dns 即可nmcli con mod ens160 ipv4.dns127.0.0.1 nmcli con up ens160修改为本地的 dns 服务器ping-c4baidu.com图上可以看到当dns指向本地dns服务器时则可以通过本地dns服务器进行dns查询了,哪其它服务器能通使用自建的dns服务器查 询吗?查看自建dns服务器ipipa|grepens160开一台服务器做为客户端指定自建dns服务器测试ping-c4baidu.com图上可以看不能解析www.baidu.com,原因是19.128 机器绑定的ip是127.0.0.1修改配置文件vim/etc/named.confnamed-checkconf rndc reload# 或 systemctl restart named再次在客户端测试ping-c4baidu.com上图可以看到客户端指定自建的dns服务器后可以进行dns缓存查询了DNS 正向解析配置正向解析将域名解析成ip配置创建独立的正向区域 控制文件在以下配置文件中添加以下内容vim/etc/named.rfc1912.zoneszonetest.comIN{// 标明:区域名称test.comtypemaster;// 设置:区域类型master主filezone.test.com;// 指定:区域数据文件zone.test.com文件(这是相对路径)allow-update{none;};// 禁止:DNS动态更新};cp-a/var/named/named.localhost /var/named/zone.test.comvim/var/named/zone.test.com重启服务、检测效果named-checkconf /etc/named.conf#(检测配置文件语法格式,是否正确)systemctl restart named#(重启服务)named-checkzone test.com /var/named/zone.test.com#(检测区域配置文件语法格式,是否正确)nslookupdns01.test.comhostdns01.test.com客户端测试ping-c4dns01.test.com避免用户写错名称时给错误答案可通过泛域名解析进行解析至某特定地址DNS 的 CNAME 记录vim/var/named/zone.test.com这里的别名记录相当于当访问 www.test.com 时分别将流量分配到两台服务器 192.168.19.129 和192.168.19.130named-checkzone test.com /var/named/zone.test.com rndc reload准备两台服务器192.168.19.129192.168.19.130 并安装httpd服务以便看效果两台机器指定DNS服务器为192.168.19.128hostnamectl set-hostname client01 hostnamectl set-hostname client02yum-yinstallhttpdechowebserver 192.168.19.129/var/www/html/index.html systemctl start httpdyum-yinstallhttpdechowebserver 192.168.19.130/var/www/html/index.html systemctl start httpddigwww.test.com shortDNS泛域名匹配假如我们访问的是 wwwww.test.com会有什么结果呢curlwwww.test.com此时就就可以通过泛域名来匹配rndc reloadcurlw.test.comcurlagdav.test.comDNS 当前域匹配如果只访问当前域会出现什么问题呢curltest.comvim/var/named/zone.test.comrndc reloadDNS 的 MX 记录一个域名空间中的邮件服务器的名称一个区域内MX记录可有多个;但每个记录的value之前应该有一个数字(0-99)表示此服务器的优先级;数字越小优先级越高对MX记录而言任何一个MX记录后面的服务器名字都应该在后续有一个A记录vim/var/named/zone.test.com邮件记录通过优先级来确定优先使用哪台服务器当优先邮件服务器宕机后再使用优先级低的邮件服务器。查看邮件服务器dig-tmx test.comDNS 反向区域 PTR 记录反向区域将IP地址解析为名字区域名称网络地址反写.in-addr.arpa.创建独立的反向区域控制文件vim/etc/named.rfc1912.zoneszone19.168.192.in-addr.arpaIN{// 标明区域名称10.168.192.in-addr.arpatypemaster;// 设置区域类型master主filezone.19.168.192;// 指定区域数据文件zone.10.168.192文件(这是相对路径)allow-update{none;};// 禁止DNS动态更新};创建独立的反向区域 数据文件vim/var/named/zone.19.168.192重启服务、检测效果named-checkconf /etc/named.conf#检测配置文件语法格式是否正确systemctl restart named#重启服务named-checkzone19.168.192.in-addr.arpa /var/named/zone.19.168.192#检测区域配置文件语法格式是否正确dig-tptr129.19.168.192.in-addr.arpadig-x192.168.19.130DNS 主从复制主从复制条件应该为一台独立的名称服务器主服务器的区域解析库文件中必须有一条 NS 记录指向从服务器从服务器只需要定义区域而无须提供解析库文件解析库文件应该放置于/var/named/slaves/目录中主服务器得允许从服务器作区域传送主从服务器时间应该同步可通过 ntp 进行bind 程序的版本应该保持一致否则应该从高主低主从复制意义实现 DNS Master主/Slave从冗余部署实现DNS高可用性在Master主无法响应的时候客户端可以自动通过Slave从获得名称解析服务。DNS主从复制架构图客户端集群从DNS服务器 (Slave)主DNS服务器 (Master)1. 区域传输(AXFR/IXFR)2. 数据同步3. 故障检测4. 主服务器故障5. 自动重定向5. 自动重定向5. 自动重定向权威区域数据zone.test.com配置更新版本号递增同步区域数据slaves/zone.test.com.slave只读副本加密存储客户端1客户端2客户端N故障切换环境准备主机IP描述Master192.168.19.128主DNS服务器Slave192.168.19.129从DNS服务器关闭防火墙,selinux,修改主机名,做时间同步服务(略)hostnamectl set-hostname masterhostnamectl set-hostname slave配置Master 主192.168.19.128 已经配置dns配置Slave 从安装DNSyum-yinstallbindbind-utils定义从区域格式zoneZONE_NAMEIN{typeslave;masters{MASTER_IP};fileslaves/ZONE_NAME.zone;};vim/etc/named.conf在下面配置文件中添加以下内容vim/etc/named.rfc1912.zoneszonetest.comIN{typeslave;masters{192.168.19.128;};fileslaves/zone.test.com.slave;};ls/var/named/slaves/ systemctl start named ll /var/named/slaves/客户端测试digwww.test.com 192.168.19.129修改主配置文件测试从是否能时时同步主服务器masterrndc reloadslavell /var/named/slaves/原因①主服务器修改配置文件以后,版本号需要变更,因为同步有两种机制一种是推一种是拉,主服务器要么推数据到从服务器,但是 版本号未变,因此会认为没有变化,一种是从机向主拉数据,但是有时间上面配置的刷新时间是1D 也就是一天,时间没到(版本号 也需要变化)②主服务器需要指定从服务器的NS记录和A记录,告诉网络中还有一台从服务器,需要进行数据同步mastervim/var/named/zone.test.comrndc reloadll /var/named/slaves/digwww.test.com 192.168.19.129现在可以看到可以备用DNS服务器可以正常同步主服务器的解析数据了对于从服务器而言它同步的配置文件是加密的方式保存的!这是一种安全机制但实际上仅仅是把同步文件加密了就安全了 吗并不是对于从服务器而言主服务器并没有限制谁能同步自己的数据因此任何服务器只要配置了DNS都可以去同步主服务器的数据。这样很明显是不安全的如下:dig-taxfr test.com 192.168.19.128可以看到任何一台服务器上都可以通过命令将 DNS 服务器的解析可以轻松的以明文的形式给获取到 这样就可以对指定服务器进行攻击很明显是不安全的安全加固默认任何都可以从主服务器同步区域数据库,这有很大安全风险mastervim/etc/named.confallow-transfer { 192.168.19.129; }; 只允许192.168.19.129机器同步数据rndc reloadvim/etc/named.confallow-transfer { none; }; 从不允许任何机器同步数据rndc reload再次测试dig-taxfr test.com 192.168.19.128dig-taxfr test.com 192.168.19.129再次测试