一、DNS基本概念

    1、DNS概念:

        DNS:Domain Name System ,域名解析系统,因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使得用户可以方便的访问互联网,而不用去记主机对应的IP地址的过程叫做域名解析。

        DNS协议运行在UDP协议之上,使用端口号53。 DNS服务器的功能:每个IP地址都有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开。有了主机名,就不要去记每台设备的IP地址,只需要记住相对直观有意义的主机名就可以了。这就是DNS协议所要完成的功能。

    2、DNS映射方式:

        主机名到IP地址的映射有两种方式:1、静态映射:每台设备上都配置主机到IP地址的映射,各设备独立维护自己的映射表,而且只供本设备使用。2、动态映射:建立一套域名解析系统(DNS),只在专门的DNS服务器上配置主机到IP地址的映射,网络上需要使用主机名通信的设备,需要再DNS服务器上查询主机对应的IP地址。

        通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。在解析域名时,可以首先采用静态域名解析的方法,如果静态域名解析不成功,再采用动态域名解析的方法。可以将一些常用的域名放入静态域名解析列表中,这样可以大大提高域名解析效率。

    3、DNS常用的资源记录类型

        A:地址 此记录列出特定主机名的IP地址。这是名称解析的重要记录

        CNAME:标准名称 此记录指定标准主机名的别名

        MX:邮件交换服务器,此记录列出了负责接收到域中的电子邮件的主机。

        NS:名称服务器此记录指定负责给定区域的名称服务器

    4、DNS服务器类型:

            缓存服务器:不负责解析,仅为加速,不需要注册

            主DNS服务器:负责解析本地客户端请求

            辅助DNS服务器:辅助服务器的区域数据都是从主服务器复制而来,其数据都是只读的。

    5、dig命令:

        语法:dig -t 资源记录类型 名称@server-ip

        工作机制:不加“@server-ip”:根据 /etc/resolv.conf 配置的解析文件类查询

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_Linux

        加“@server-ip”:根据指定的DNS服务器来解析,绕过了本地解析库中设置的DNS服务器。

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_操作系统 _02

        dig -x IP @server-ip :查询反向解析

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_03

        dig -t 资源记录类型 名称+trace:追踪解析过程

        

二、环境配置

    1、操作系统:CentOS Linux release 7.6.1810 (Core)  Windowserver2008R2

    2、DNS服务器IP地址:

            Domain Name: melvin.com

            主DNS服务器:LinuxMaster.melvin.com     172.28.5.156

            备DNS服务器:LinuxSlave.melvin.com      172.28.5.157

            辅助DNS服务器:Win2008Slave.melvin.com     172.28.5.158

            辅助DNS服务器:

            web主机:www.melvin.com        172.28.5.156   172.28.5.157   172.28.5.158

            ftp主机: ftp.melvin.com    CNAME    www.melvin.com.

            mx邮件服务器:mx.melvin.com.        172.28.5.158

    3、正向解析思路:以172.28.5.165的机器为DNS服务器,其他服务器(例如:172.28.5.155)通过DNS服务器172.28.5.156解析后以域名melvintest.com来访问172.28.5.155,在172.28.5.155上通过域名melvintest.com来登录172.28.5.156.

    4、反向解析设计思路:以172.28.5.156为DNS服务器,通过172.28.5.155主机的IP来查询其域名:melvintest.com

三、正向解析配置

    1、DNS服务器需要安装bind、bind-chroot、bind-utils

        yum -y install bind bind-utils bind-chroot

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_Linux_04

        编辑配置文件 /etc/named.conf :

           vim /etc/named.conf 

        禁用如下三行: 

          Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_05

        启动named服务:

            service named start

            Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_06    

        验证named服务是否启动:

        netstat -ntlp

       Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_07 

        配置开机启动:

        systemctl enable named 

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_Linux_08

    2、配置区域配置文件:

         编辑区域配置文件: /etc/named.rfc1912.zones

          vim /etc/named.rfc1912.zones

        新建区域如下:

         Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_09

    3、创建区域数据文件(/var/named/***.zone)可以复制 name.localhost文件 然后进行修改

        在/var/named下建立“zone_name.zone”文件,通常只包含宏定义和资源记录,且第一个记录必须是SOA记录,(格式如下):

            $TTL 600;

            name[TTL] IN RR_TYPE value

        注: 一个FQDN可对应多个IP ;负载均衡

                多个FQDN可对应一个IP; 一台主机有多个名称,且可以用CNAME定义

            vim melvin.com.zone 

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_Linux_10

    4、测试配置文件及区域文件是否存在语法错误

        使用命令:named-checkconf

                          named-checkzone "melvin.com.zone" /var/named/data/melvin.com.zone

            Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_Linux_11

    5、确保主配置文件和各区域解析库文件的权限为640,属主为root,属组为named;

        (1)检查主配置文件的权限

            Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_Linux_12

        (2)检查区域解析库文件/var/named/melvin.com.zone的权限:

            Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_操作系统 _13    

        (3)更改权限

            Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_Linux_14

    6、重启服务

            systemctl restart named

    7、更改iptables和selinux的设置(如果不了解此两项可以暂时关闭)

        systenctl stop firewalld

        vi /etc/sysconfig/selinux

    8、分别使用(dig/nslookup)在Linux/Windows主机进行查询DNS相关资源记录。

        (1)使用dig命令在Linux主机上进行DNS资源查询

        dig -t SOA melvin.com @172.28.5.156

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_Linux_15

        (2)使用nslookup命令在windows系统平台下测试DNS相关资源记录:

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_Linux_16

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_Linux_17

        以上操作步骤,一台能够正向解析的bind服务器就配置成功了。

四、配置反向解析bind服务

        正向解析与反向解析各自采用不同的解析库,一台DNS服务器可以只有正向解析库或只有反向解析库,也可以同时提供正向/反向解析。

        反向区域的区域名称格式:

        ReverseIP.in-add.arpa.

        例如:假如网络地址为 172.16.100.1  那么规则命名为100.16.172.in-addr.arpa

        这里我本地的内网IP地址为:172.28.5.0 ,所以则写成 5.28.172.in-addr.arpa

    1、修改配置文件 /etc/named.conf , 添加反向解析区域配置文件

        vim /etc/named.conf 

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_Linux_18

    2、创建反向区域解析文件 28.172.zone   (可以复制 melvin.com.zone这个文件,然后进行修改)

        vim /var/named/28.172.zone

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_19

    3、检查语法错误

        named-checkconf

        named-checkzone "28.172.zone"  /var/named/28.172.zone

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_Linux_20

    4、设置权限

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_21

    5、重启dns服务

        systemctl restart named

    6、使用Windows系统客户端进行验证解析

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_操作系统 _22

    以上配置步骤完成了主bind服务器的配置方法,能够实现正向解析,同时也可以实现反向地址解析

五、rndc的相关知识

    1、什么是rndc:

        rndc:Remote Name Domain Controller ,远程名称域控制器,rndc是BIND安装包提供的一种控制域名服务运行的工具。

        rndc 通过一个TCP连接与名字服务器通信,发送经过数字签名认证的命令。在当前版本的rndc和named中,唯一支持的认证算法是HMAC-MD5 , 在连接的两端使用共享密钥。它为命令请求和名字服务器的响应提供TSIG类型的认证。所有经由通道发送的命令都必须被一个服务器所知道的key_id签名。

        监听端口:953/tcp

        语法:

        rndc [-b address] [-c config] [-s server] [-p port]

        [-k key-file] [-y key] [-V] command

        command is one of the follwoing:

        reload Reload configuration file and zones .  #重新加载配置文件和区域文件

        reconfig Reload configuration file and new zones only .  #重新加载配置文件和新的区域文件

        freeze Suspend updates to all dynamic zones.

        stats Write server statistics to the statistics file. #将服务器统计信息写入统计文件中

        stop Save pending updates to master files and stop the server.

        halt Stop the server without saving pending updates.

        flush Flushes all of the server's caches. #清空DNS缓存

        status Display status of the server. #显示bind服务器的工作状态

    2、rndc的调试和日志:    

        调试:显示程序运行中的详细信息(会产生I/O,正常情况下建设关闭)

        调试级别:0,1,2,3 ....

        提升调试级别:

            rndc trace

            rndc trace LEVEL

            rndc notrace

        打开查询日志:记录查询动作(会增加磁盘I/O)

        rndc querylog

            Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_Linux_23

六、区域传送原理

    1、为什么需要区域传送:

        DNS辅助服务器是一种容错设计,考虑的是一旦DNS主服务器出现故障或因负载太重无法及时响应客户机请求,辅助服务器将挺身而出代替主服务器。辅助服务器的区域数据都是从主服务器复制而来,因此辅助服务器的数据都是只读的,当然,如果有必要,我们可以很轻松地辅助服务器升级为主服务器。辅助服务器从主服务器复制区域数据的过程叫“区域传送”。区域传送使用TCP的53号端口。

    2、区域传送的类型:

        (1)完全区域传送(AXFR)

        (2)增量区域传送(IXFR)

    3、区域传送原理

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_24

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_操作系统 _25

七、辅助DNS服务器的配置

        注意:辅助DNS是针对区域来说的;如果有多台DNS服务器,必须为每个DNS服务器建立NS记录,否则主DNS将不向其发送通知;

    1、区域的定义:

        

        zone “区域名称” IN {

         type slave; #区域类型为辅助

         file "slaves/ZONE_NAME.zone"; #区域文件必须保存在slaves目录下,放在其他目录没有权限

         masters { #指出主服务器是谁,注意:花括号前后要有一个空格

         MASTER_DNS_IP;

         MASTER_DNS2_IP;

         };

        };

    2、辅助DNS和区域传送的配置:

        第一步:先创建一个辅助DNS (分别在LinuxSlave 和win2008的虚拟主机中实现)

        (1)在LinuxSlave主机上安装bind服务并做相应的配置:

        yum -y install bind bind-chroot bind-utils

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_Linux_26

        编辑/etc/named.rfc1912.zones,添加如下记录:

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_Linux_27

        检查语法错误: 

        named-checkconf

        (2)在主DNS服务器所在LinuxMaster主机上的区域文件/var/named/melvin.com.zone 和/var/named/28.172.zone中添加相应的记录:

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_28

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_Linux_29

        检查语法错误、重读配置文件

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_操作系统 _30

        在主DNS服务器上,用dig命令做下检测,看看新增加的记录是否出现:

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_Linux_31

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_操作系统 _32

    3、在windows server 2008 R2 上配置辅助DNS

        准备工作:配置好网络,是的win2008虚拟机能够ping通主DNS服务器并安排好DNS相关组件。

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_操作系统 _33

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_34

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_Linux_35

        win2008 服务器创建DNS服务器角色:

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_Linux_36

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_37

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_38

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_39

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_操作系统 _40

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_Linux_41

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_42

        新建DNS区域:

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_43

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_操作系统 _44

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_45

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_46

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_47

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_48

        同样的方法创建反向代理区域:

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_49

        第二步:实现从主DNS服务器完全同步区域数据文件,查看日志文件验证辅助服务器是否完成同步:

        在辅助DNS服务器上使用dig命令检测是否能从主DNS服务器同步数据(完全区域传送)

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_50

        在辅助DNS服务器上查看对应的区域文件是否已经有了:

        ls /var/named/slaves/

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_51

        第三步:在主DNS服务器上新增一条资源记录并查看日志文件,然后到辅助DNS服务器上查看日志是否完成增量数据同步

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_52

        rndc reload

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_操作系统 _53

        查看辅助DNS服务器日志信息:

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_54

        第四步:在windows客户端用nslookup 命令来验证辅助DNS的配置

        Linux初级运维(二十二)——Centos7操作系统搭建DNS服务器_使用_55

八、DNS服务器配置总结

    1、每个DNS服务器必须要有一个对应的NS资源记录;

    2、创建slave的时候,其配置文件类型必须是type slave ;必须指定主服务器的IP地址

    3、可以使用dig -t axfr test.com @server_IP 从主DNS服务器拉取所有解析库资源记录;

    4、主辅同步完成后,将自动在slave服务器上的slaves/目录下生成zone文件,这些区域文件是从主DNS同步过来的,一般为只读,不建议更改slave的zone文件;

    5、在主DNS上修改区域文件时,必须将SOA记录的serial加1因为slave是通过serial值来进行判断更新的(windows系统上是自动完成的);

    6、DNS的日志默认全部保存在/var/log/messege文件中;

    7、DNS的解析依赖于解析库,所以就算是所配置的内容是完全不存在的也可以解析(且正向解析和反向解析的解析是各自独立的)。需要注意,正向解析力没有PTR记录,而反向解析库里不需要A记录、MX记录和CNAME记录。