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

幽映每白日,清辉照衣裳。这篇文章主要讲述简述DNS服务器原理,并搭建主-从服务器相关的知识,希望能为你提供帮助。
      DNS??(Domain Name System)??域名系统,属于应用层协议,是互联网的一项服务。DNS作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网它是基于C/S架构。
?一、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软件包??(如下图)??。



  1. ?修改配置文件?
【简述DNS服务器原理,并搭建主-从服务器】    执行 ?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。
    具体操作如下:



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

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

    其中,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选项可保留文件属性??(如下图)??。

    打开并修改johnnyfang.com.zone文件:
    ①将SOA后面的@改为master,或者改成johnnyfang.com.,注意com后面有点;
    ②Rname.invalid.部分为邮箱,如果DNS出问题会发到邮箱,注意填写邮箱不能用@,@用.代替,注意邮箱后面也要加.;
    ③添加NS记录,将主服务器、从服务器和www所对应的ip信息添加进去。
    具体操作如下:

    区域解析库其他信息说明:
    ①serial:记录版本号,当名称解析数据库文件内容有所变动时需要加1,不然无法解析,仍旧按之前版本的来;
    ②refresh:同步拉取时间,默认的为1天。可能会涉及多台DNS服务器,部署主-从服务器时,数据同步有两种机制,一种是主服务器更新后主动将更新内容推给从服务器,一种是从服务器主动从主服务器拉更新数据;
    ③retry:当从服务器数据拉取失败时的再次拉取时间,默认为1h,即失败了每隔一小时拉取一次;
    ④expire:过期时间,默认的是一周。指的是如果拉取数据失败,连续一周还没拉取到,则认为从服务器数据过久,不能再对外提供服务;
    ⑤minimum:默认为3小时。指的是用户想服务器发送请求,但是请求内容不正确,一直寻找会对磁盘造成压力,就直接告诉用户不存在。对这种不存在的请求自动生成缓存,缓存时间为3小时。
    修改并保存区域解析库文件后,执行  ?systemctl enable --now named  ?命令启动服务,并设为开机启动,如果下载后就开启了服务,执行  ?rndc reload  ?命令重启服务即可??(用 rndc reload 代替 systemctl testart named,可避免正在访问的用户出现访问中断等情况)??。



?(二)从服务器配置?
    搭建从服务器的目的在于提升容错性,当主服务器不能使用的时候,从服务器能够顶上,避免一定时间段的用户无法查询等,并能实现一定程度的负载均衡。
  1. ?下载bind?
    同主服务器一样,从服务器也需要下载bind软件来进行配置。



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



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

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

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


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




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



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

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



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


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



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

    推荐阅读