DNS​(Domain Name System)​域名系统,属于应用层协议,是互联网的一项服务。DNS作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网它是基于C/S架构。

一、DNS服务器原理

    一图看懂DNS服务器工作原理:

简述DNS服务器原理,并搭建主-从服务器_库文件

    上图中,假设用户想去查询www.magedu.com这个域名所对应的ip,需要先经过所在区域的DNS服务器:

    ①如果该区域之前有用户查询过同域名所对应的ip,则DNS服务器中会有缓存,直接将结果返回给客户;

    ②如果区域DNS服务器没查到,则转向根DNS服务器查询,根DNS服务器如果有缓存记录,返回给区域服务器,区域服务器再将结果返回给用户;

    ③如果区域服务器也没缓存记录,则会根据.com顶级域名、magedu.com二级域名、www.magedu.com指定主机的顺序去迭代查询,直到查询到ip,并将结果返回给区域DNS服务器,再由区域DNS服务器将结果返回给用户。

    其中,用户和区域DNS服务器(即本地DNS服务器)之间属于递归查询,区域DNS服务器未找到缓存转向其他DNS服务器进行查询属于迭代查询。


二、搭建主-从服务器

    笔者这边准备三台虚拟机,ip为10.0.0.152-154的分别作为客户端​(取名client)​、主服务器​(取名master)​和从服务器​(取名slave1)​,希望实现客户端通过主-从服务器去解析指定域名​(www.johnnyfang.com)​所对应的ip。

(一) 主服务器配置

  1.  下载bind

    DNS服务器软件包括bind、powerdns、dnsmasq、unbound和coredns等,bind是老牌的DNS软件,笔者这边通过bind来操作,执行 ​yum install -y bind​ 命令下载bind软件包​(如下图)​。

简述DNS服务器原理,并搭建主-从服务器_库文件_02


  1. 修改配置文件

    执行 ​rpm -ql bind​ 命令可查看bind包详情,bind包配置文件与其他软件的取名不同,而是命名为named.conf,执行 ​vim /etc/named.conf​ ,修改配置文件:

    ①找到“listen-on port 53”一行,在前面加//注释掉,即网段内的所有ip可用,也可将默认的12.0.0.1改为localhost;

    ②找到“allow-query”一行,这里默认的localhost指的是仅本主机可用,在前面加//注释掉,即任何人可查询,或者将localhost改为any也可。如果是比较私密的东西,也可添加具体的ip或者网段可查询;

    ③添加“allow-transfer  { 10.0.0.154;};”,即指定ip为10.0.0.154的从服务器进行区域传输,防止黑*客获得所有从节点信息后,按照名单去攻*击服务器;

    ④为了避免实验失败,建议关闭加密验证,将dnssec-enable和dnssec-validation默认的yes改为no。

    具体操作如下:

简述DNS服务器原理,并搭建主-从服务器_库文件_03


  1. 设置DNS的区域

    ​主服务器的区域虽然也可直接在配置文件中参照范例添加,不过一般不直接放在配置文件中,而是在推荐的文件中进行设置​(如下图)​。

简述DNS服务器原理,并搭建主-从服务器_dns服务器_04

    执行 ​vim /etc/named.rfc1912.zones​ 命令打开推荐的文件,在注释行下面添加如图所示内容:

简述DNS服务器原理,并搭建主-从服务器_dns服务器_05

    其中,zone限定了是什么域名需要进行解析,这里的主机是主服务器,故类型为master,file部分指定了存放名称解析服务的区域解析库文件名称。


  1. 创建区域解析库文件

    ​但是并不存在笔者所填写的“johnnyfang.com.zone”区域解析库文件,也没有指定文件的相对路径。区域解析库文件的相对路径在/etc/named.conf文件中已有设定,在/var/named目录下,进入到该目录下,可以看到有一个名为“named.localhost”的文件,可参考此文件来创建区域解析库文件,执行 ​cp named.localhost johnnyfang.com.zone -p​ 命令,拷贝生成指定名为johnnyfang.com.zone的文件,-p选项可保留文件属性​(如下图)​。

简述DNS服务器原理,并搭建主-从服务器_服务器_06

    打开并修改johnnyfang.com.zone文件:

    ①将SOA后面的@改为master,或者改成johnnyfang.com.,注意com后面有点;

    ②Rname.invalid.部分为邮箱,如果DNS出问题会发到邮箱,注意填写邮箱不能用@,@用.代替,注意邮箱后面也要加.;

    ③添加NS记录,将主服务器、从服务器和www所对应的ip信息添加进去。

    具体操作如下:

简述DNS服务器原理,并搭建主-从服务器_库文件_07

    区域解析库其他信息说明:

    ①serial:记录版本号,当名称解析数据库文件内容有所变动时需要加1,不然无法解析,仍旧按之前版本的来;

    ②refresh:同步拉取时间,默认的为1天。可能会涉及多台DNS服务器,部署主-从服务器时,数据同步有两种机制,一种是主服务器更新后主动将更新内容推给从服务器,一种是从服务器主动从主服务器拉更新数据;

    ③retry:当从服务器数据拉取失败时的再次拉取时间,默认为1h,即失败了每隔一小时拉取一次;

    ④expire:过期时间,默认的是一周。指的是如果拉取数据失败,连续一周还没拉取到,则认为从服务器数据过久,不能再对外提供服务;

    ⑤minimum:默认为3小时。指的是用户想服务器发送请求,但是请求内容不正确,一直寻找会对磁盘造成压力,就直接告诉用户不存在。对这种不存在的请求自动生成缓存,缓存时间为3小时。

    修改并保存区域解析库文件后,执行 ​systemctl enable --now named ​命令启动服务,并设为开机启动,如果下载后就开启了服务,执行 ​rndc reload ​命令重启服务即可​(用 rndc reload 代替 systemctl testart named,可避免正在访问的用户出现访问中断等情况)​。

简述DNS服务器原理,并搭建主-从服务器_库文件_08


(二)从服务器配置

    搭建从服务器的目的在于提升容错性,当主服务器不能使用的时候,从服务器能够顶上,避免一定时间段的用户无法查询等,并能实现一定程度的负载均衡。

  1. 下载bind

    同主服务器一样,从服务器也需要下载bind软件来进行配置。

简述DNS服务器原理,并搭建主-从服务器_dns服务器_09


  1. 修改配置文件

    修改配置文件部分,从服务器与主服务器类似,也是四部分内容需修改,但是添加的“allow-transfer ”,即允许与自己进行区域传输部分需填写none,以避免黑*客抓取各从节点信息来进行攻*击服务器​(如下图)​。

简述DNS服务器原理,并搭建主-从服务器_dns服务器_10


  1. 设置DNS区域

    可参照之前主服务器的区域设置来填写,不过此处的类型为slave,即从服务器,同时要指定主服务器的ip​(如下图)​。

简述DNS服务器原理,并搭建主-从服务器_库文件_11

    执行 ​systemctl enable --now named​ 启动服务。

简述DNS服务器原理,并搭建主-从服务器_服务器_12

    此时进入到/var/named/slaves目录下,会发现自动生成了一个640权限的区域解析库文件,同时这个文件做了二进制的转化,无法直接查看内容,相对也比较安全。


(三)客户端配置

  1. 下载bind-utils

    客户端无需下载bind,执行 ​yum list bind*​ 命令可查看光盘中的bind包有哪些相关包,其中有个名为bind-utils的包是专业的DNS测试工具,能提供dig、host和nslookup等命令,可以下载一个。

简述DNS服务器原理,并搭建主-从服务器_服务器_13

简述DNS服务器原理,并搭建主-从服务器_服务器_14


  1. 修改网卡

    将客户端的DNS改为主-从服务器ip,修改保存后执行 ​service network restart​ 命令让网卡生效,笔者这边客户端使用的是CentOS7,如果是CentOS8,需要先加载网卡,再启动网卡,让网卡生效​(如下图)​。

简述DNS服务器原理,并搭建主-从服务器_服务器_15


  1. 客户端测试

    ​客户端执行 ​host www.johnnyfang.com​ 命令,可解析出对应的ip地址为10.0.0.188,这与主服务器中设定的相符合的,执行 ​dig www.johnnyfang.com ​命令也可解析出对应的ip,并且默认走的是主服务器ip的DNS​(如下图)​。

简述DNS服务器原理,并搭建主-从服务器_服务器_16

    返回到主服务器master,执行 ​rndc stop ​命令,停止bind服务,再返回客户端执行 ​dig www.johnnyfang.com ​命令,依旧可以解析出对应ip,此时使用的则是从服务器ip的DNS​(如下图)​。

简述DNS服务器原理,并搭建主-从服务器_服务器_17


  1. 同步功能测试

    ​主服务器段修改域名所对应的ip,同时将版本号加1,执行 ​rndc reload​ 命令重新加载区域解析库文件。此时,返回从服务器,查看/var/named/slaves目录,从时间上看已重新生成了新的解析库文件​(如下图)​。

简述DNS服务器原理,并搭建主-从服务器_库文件_18

简述DNS服务器原理,并搭建主-从服务器_库文件_19

    客户端执行 ​dig www.johnnyfang.com​ 命令,解析到的对应ip已变成修改后的10.0.0.189​(如下图)​。

简述DNS服务器原理,并搭建主-从服务器_服务器_20


    通过实验,我们可以发现,搭建主-从服务器后,如果主服务因断网或其他原因等导致用户无法直接使用解析功能时,从服务器可以及时地替补上去供用户使用,从而提升容错性。