一、Linux运维实战之DNS基础
    DNS服务作为网络的一种基础架构,在网络中有举足轻重的地位。它担负着整个网络用户计算机的名称解析工作。没有正确的名称解析,服务器就无法识别各客户机。我们在日常进行的浏览网页等上网活动,无一例外都在使用DNS服务。
*******************************************************************************
    DNS的基本知识:
        DNS服务器的组成
        DNS域名称空间
        DNS服务器的工作原理
        DNS的名称解析库及资源记录
*******************************************************************************
1、DNS服务器的组成:
【DNS是什么】:
由网络知识可知:两台主机之间相互通信依靠的是IP地址,而数字对人类而言确实难以记忆,所以人类喜欢用更方便于人类记忆的方式(www.google.com)来定位诸如网络上的Web服务器这样的计算机。但计算机是用数字地址在网络上通信的。由此,如果用方便记忆的名称该如何实现在网络上主机间的通信呢?为了满足人们使用互联网但同时不必记忆复杂的IP地址,DNS技术诞生了。

DNS:(Domain Name Service)域名服务,是一种组织成层次结构的计算机和网络服务命名系统,用于实现名称解析(Hostname <--->IP).其中通过计算机名解析成IP地址的叫做正向解析,通过IP地址解析成计算机名的叫做反向解析。DNS服务监听在主机的TCP/UDP的53号端口。

TEST:www.google.com是一个主机名还是域名?
    Answer:www.google.com是一个主机名,而google.com才是一个域名;

【DNS服务器的组成】
    一个典型的DNS服务器包含四个部分:

wKioL1X5f-PCkAA2AAKICtpLvJw471.jpg

    1、DNS域名称空间:它指定用于组织名称的域的层次结构;
    2、资源记录RR(Resource Record):它将DNS域名映射到特定类型的资源信息,以供在名称空间中注册或解析名称时使用。在Linux系统中,通常"名称解析库(文本文件,位于/var/named/)"中的每一行称作一个资源记录。
    3、DNS服务器:它存储和应答资源记录的名称查询;
    4、DNS客户端(解析程序):它查询从服务器来的搜索及将名称解析为查询中指定的资源记录类型;

【DNS服务器的类型】
    缓存DNS服务器:不包含域名数据库文件,它每次将从域名服务器得到的查询结果返回给客户端,并在本地留以缓存,以供下次查询使用。
    主DNS服务器(master):数据库更新由管理员手动完成;
    辅助DNS服务器(slave):数据库更新从主服务器或其他辅助DNS服务器那里完成。
    转发DNS服务器(forward):转发服务器接受查询请求,把查询发送到其他DNS服务器,查询结果保存到缓存中。如没有指定转发服务器,DNS服务器会使用根区域记录,向根发送查询;
2、DNS域名称空间:
    DNS域名空间是一种层次化的结构,这种层次化的结构在计算机有利于将复杂的问题简单化,能够简化查找的复杂度(例如:OSI参考模型的层次化,IP地址的层次化,Linux文件系统的层次化等;)

    【组织DNS域名称空间】
    DNS域名称空间的组织如图DNS域名空间所示:

wKiom1X5fd_y7RfTAAGWwTc1A9Y002.jpg    整个DNS域名空间呈倒立的树状结构分布,被称为“域树”。
    根域:最上面是根域名 dot,全球13台根域服务器(a.root-server.net~m.root-server.net),没有一台在中国。

    Tips:根域服务器的地址、位置、IP
        A INTERNIC.NET(美国,弗吉尼亚州) 198.41.0.4
        B 美国信息科学研究所(美国,加利弗尼亚州) 128.9.0.107
        C PSINet公司(美国,弗吉尼亚州) 192.33.4.12
        D 马里兰大学(美国马里兰州) 128.8.10.90
        E 美国航空航天管理局(美国加利弗尼亚州) 192.203.230.10
        F 因特网软件联盟(美国加利弗尼亚州) 192.5.5.241
        G 美国国防部网络信息中心(美国弗吉尼亚州) 192.112.36.4
        H 美国陆军研究所(美国马里兰州) 128.63.2.53
        I Autonomica公司(瑞典,斯德哥尔摩) 192.36.148.17
        J VeriSign公司(美国,弗吉尼亚州) 192.58.128.30
        K RIPE NCC(英国,伦敦) 193.0.14.129
        L IANA(美国,弗吉尼亚州) 198.32.64.12
        M WIDE Project(日本,东京) 202.12.27.33

    顶级域:由两三个字母组成的名称,用于知识国家(地区)或使用名称的单位的类型。如:
        组织域:.net  .com  .org  .mil  .edu  .gov .cc .mobi
        国家域:.jp  .tw  .hk .iq  .ir .cn .uk .us

    二级域:在Internet上使用而注册到个人或单位的长度可变的名称。这些名称始终基于相应的顶级域,这取决于单位的类型或使用名称所在的地理位置。如:
        sina.com.是由Internet DNS域名注册人员注册到新浪公司的二级域名

    子域:单位可创建的其他名称,这些名称从已注册的二级域名中派生。包括为扩大单位名称的DNS树添加的名称,并将其分为部门或地理位置。如:
        sports.sina.com.是新浪网体育版块的子域.

    重点理解:子域授权
        授权是自上而下的,也就是说,上级知道下级的存在并知道下级的主DNS服务器地址(上级的名称解析库中有一条下级域的NS记录和主机A记录),而下级并不知道上级的存在,因此下级需要从根域开始查找。

        举例说明:
            如图DNS域名空间2.所示,nwtraders.com域下有3个子域,现在假设主机server1想要与子域east.nwtraders.com下的某台主机通信,DNS查询的过程是怎样的呢?它首先把请求发送到主持本区域的DNS服务器,主持本区域的DNS服务器查询自己的名称解析库发现主机server1发送的查询请求的区域并不归自己负责,那它必然要向外迭代哈,此时它首先要找根域,然后层层迭代以至找到最终答案。注意,它并不知道south.nwtraders.com域和nwtraders.com的存在,因此它不能通过south.nwtraders.com域直接找到答案。
    
    *反向域:IP --> FQDN,反向解析:即将IP地址解析为主机名;

wKiom1X5fgnCVoJkAAGWwTc1A9Y217.jpg

    【名词解释】
    (1) FQDN:Fully Qualified Domain Name,完全限定域名,简单来说:就是从根.开始,一层一层往下找,最终能唯一确定主机的完全路径,FQDN保证网络中的主机不会重名;
    (2) 主机名:在上图中,server1就是主机名,类似于人名;不包含上层查找路径;

3、DNS的工作原理:
(1)DNS服务器的名称查询原理
    【DNS服务器的解析过程】

wKioL1X5gHDS4FCmAAaTUwNC9y8267.jpg

    【两种查询方法详解】
    (1)递归查询:客户端要求直接得到结果,要么成功,要么失败(本地客户端和DNS服务直接交互,被请求的DNS服务器必须给出最终答案。)

wKiom1X5fpHDwAe_AAK_i_NS830131.jpg

    (2)迭代查询:服务器以相关参考性应答返回本地DNS(DNS服务与DNS服务交互,得到的是参考答案。)

wKioL1X5gPKiKlfYAAN9Vb_E8EM488.jpg    本地客户端向本地域名服务器查询请求时,查询类型为:一次递归,多次迭代;

    【根提示功能】

wKiom1X5fvXwXbaWAAL30-hKHL4226.jpg

    一般情况下,DNS服务器之间的查询方式都是迭代查询。如果要查询www.lifehacker.com(lifehacker.com域不是本地DNS负责的区域),那么本地DNS就需要向外迭代查询(迭代查询从根域开始,因此,本地DNS就必须知道根域的IP地址)。根提示的功能可以让本地DNS服务器查询根域DNS服务器;
    在Linux系统中,安装好了bind服务,会自动创建全球13台根服务器的解析库文件,保存在/var/named/named.ca文件中;[root@localhost ~]# cat /var/named/named.ca

(2)DNS服务器的反向查询原理:
    在大部分DNS查询中,客户端一般执行正向查询,正向查询是基于存储在地址(A)资源记录中的另一台计算机的DNS名称来搜索IP地址等信息。DNS也提供反向查询过程,允许客户端在名称查询期间使用已知的IP地址查询计算机名。
    反向查询采取问答形式进行。例如:“您能告诉我使用IP地址192.168.0.250的计算机的DNS名称吗?”
    DNS在最初设计上并不支持反向查询。因为支持反向查询过程可能存在一个问题,即DNS名称空间如何组织和索引名称,IP地址如何分配,这些方面都有差别。为了解决这个问题,在DNS标准中采用了一种叫做“线索追踪的机制”,即定义了特殊域“in-addr.arpa”,并保留在Internet DNS名称空间中。为了创建名称空间,in-addr.arpa域中的子域是按照带句点十进制编号的IP地址的相反顺序构造,且采用与正向解析完全不同的解析库。因此,创建in-addr.arpa域树的时候,IP地址八位字节的书讯必须倒置,并且定义一种新的资源记录类型“PTR”。

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

【区域传送的类型】

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

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

【区域传送原理】
如图DNS服务器之间的区域传送:

wKiom1X5fyPT8fRtAAFAbgO1lik533.jpg    (1)在新的配置过程中,目标服务器会向配置为区域源的主要DNS服务器发送初始“所有区域”传送(AXFR)的请求;
    (2)主(源)服务器作出响应,并将此区域完全传送到辅助(目标)服务器;
         该区域发送给请求传送的目标服务器,通过启动SOA资源记录的属性中的“序列号”字段建立的版本一起传送。SOA RR也包含一个以秒为单位的状态刷新间隔(默认设置是900秒或15分钟),指出目标服务器下一次应该在何时请求使用源服务器来续订该区域
    (3)刷新间隔到期时,目标服务器使用SOA查询来请求从源服务器续订此区域;
    (4)源服务器应答其SOA记录的查询。该响应包括该区域在源服务器中的当前状态的序列号。
    (5)目标服务器检查响应中的SOA记录的序列号并确定怎样续订该区域;
        如果SOA响应中的序列号等于其当前的本地序列号,那么区域在两个服务器中都相同,并且不需要区域传送。然后,目标服务器根据来自源服务器的SOA响应中的该字段值重新设置其刷新间隔来续订该区域。  
        如果SOA响应中的序列号比其当前本地序列号要高,则可以确定此区域已更新并需要区域传送;
    (6)如果这个目标服务器推断此区域已经更改,则它会把IXFR查询发送至源服务器,其中包括此区域的SOA记录中序列号的当前本地值。
    (7)源服务器通过区域的递增传送或完全传送做出响应。
         如果源服务器支持增量传送,则通过IXFR做出应答,否则通过AXFR做出应答。

4、DNS的名称解析库及资源记录:
【问题引入】当客户端发起一个DNS查询请求时,DNS服务器如何解析该查询请求呢?
    DNS服务器要解析客户端发来的查询请求,必须要有相应的名称解析库。
【名称解析】:以主机名为搜索码,在DNS解析数据库中查找对应的IP地址的过程;

    在本地通过hosts文件来解析:

    类Unix系统中:/etc/hosts

    windows系统中:%windir%\system32\drivers\etc\hosts

【DNS解析类型】

    正向解析:FQDN-->IP

    反向解析: IP --> FQDN

【DNS的名称解析库】
    在Linux系统中,DNS的名称解析库通常是一个文本文件(只能包含资源记录和宏定义),通常保存在/var/named/目录下。其中文本文件的每一行称作一个资源记录。
    每一个名称解析库称作”区域(zone)“
    说明:区域(zone)与域之间的差异
    区域zone是一个物理概念,一个区域就是一个DNS解析库
    域是一个逻辑概念,一个域对应一个DNS域名称空间
    正向解析与反向解析采用的是不同的解析库,一个配置了正向解析库和反向解析库的DNS意味着其包含了两个区域(正向zone和反向zone)
【资源记录】

        1、资源记录有类型:
            FQDN-->IPv4: A (Address)

            FQDN-->IPv6: AAAA

            Domain-->DNS Server:NS (Name Server)

            Domain-->Master DNS: SOA (Start Of Authority), 起始授权记录(用于明确说明一个域内的主DNS服务器是哪个,必须是名称解析库中的第一条记录)

            FQDN-->FQDN: CNAME (Canonical Name)

            IP-->FQDN: PTR (pointer)

            Domain-->Mail Server: MX (Mail eXchanger), 有优先级:0-99,数字越小级别越高

        注:SOA记录定义了一个域内的主DNS是谁?主辅DNS服务器之间如何同步(即如何进行区域传送)

            正向解析不能有PTR记录

            反向解析不能有A记录,也不需要MX记录

            对于互联网上的邮件服务器来说,PTR记录是必须的(为什么?因为如果只能正向解析而不能反向解析,那么大多邮件服务器会把其作为垃圾邮件来处理)

        理解MX记录:我们的电子邮箱地址一般都是“用户名@域名”,例如tom@sina.com,然而我们的邮件一般都是发送到某个主机而不是域,那么发到哪个主机呢?DNS查询邮件地址@后面的域名所对应的MX记录来确定。因此,DNS可以有多个(通过主辅来区别),MX也可以有多个(通过优先级来区别)。

        2、资源记录的格式:

            name    [ttl]    class  type  value

            说明:
                name(名字)]:      name字段表示该记录所描述的实体(通常是主机或者一个域)。如果几个连续的记录涉及同一个实体的话,那么第一条之后可以省略,利用@来代替这个name字段。

                [ttl]字段:TTL(time to live (存活时间)),默认字段以秒为单位指定时间长度,在指定的时间内,数据项可被缓存并且仍被认为是有效的。TTL必须位于该区域数据文件的第一行,默认可省

                class:class指定网络类型:默认类型为IN,IN(指Internet)、HS(Hesiod:本地使用的目录服务)、CH(供域名服务器内部用来标示自己)

                type:资源记录类型

                value:  资源记录的值(具体解释见后面介绍)
        3、各资源记录类型其“名称”有要求:

            SOA: zone

            NS: zone

            A, AAAA: FQDN

            CNAME: FQDN

            PTR: ReverseIP.in-addr.arpa.

            MX: zone

        4、各资源记录类型其“value”有要求:

            SOA: 主DNS服务器的FQDN

            NS: 对应DNS服务器的FQDN

            A,AAAA:IP

            CNAME:FQDN

            PTR:FQDN

            MX: Mail Server FQDN


        【举例说明各资源记录的格式】
        SOA记录:

 mageedu.com 600 IN SOA dns.magedu.com. admin.magedu.com. ( #也可以用@表示当前域magedu.com
                                                                        20150916001 #序列号;
                                                                        2H
                                                                        20M
                                                                        7D
                                                                        5H)
        NS记录:
        magedu.com      600 IN  NS      dns.magedu.com.
        主机A记录:
        dns.magedu.com. 600     IN A 192.168.0.105
        别名记录(CNAME):
        ftp.magedu.com. 600     IN      CNAME   www
        邮件记录:
        magedu.com      600     IN      MX      20      mailserver1.magedu.com.
        PTR记录:
      105.0.168.192.in-addr.arpa     600    IN PTR     dns.magedu.com.


    所有资源记录中,SOA记录的格式最特别,下面详细阐述之:
        写法一:

 SOA:
                zone [TTL] IN  FQDN  admin_mailbox  (
                2013081201   ;序列号, serial number,每次更改配置值是都要在原来的基础上加上1,表示有更新
                2h                   ;刷新时间, refresh time, 通知(notify): 只通知给本区域解析库文件中定义NS记录的所有主机;
                5m ;重试时间, retry time
                7d ;过期时间, expire time
                1d ;否定答案的ttl
                )

        写法二:        

SOA:
            @ [TTL] IN  FQDN  admin_mailbox  (
            2013081201   ;序列号, serial number
            2h           ;刷新时间, refresh time, 通知(notify): 只通知给本区域解析库文件中定义NS记录的所有主机;
            5m ;重试时间, retry time
            7d ;过期时间, expire time
            1d ;否定答案的ttl
            )

注:nsadmin@magedu.com --> nsadmin.magedu.com.     管理员邮箱在此种写法下的写法(注意最后一个点不能省略,因为它表示的是根域。)


二、Linux运维之DNS(bind)服务器的安装与配置:

****************************************************************************************************
主要内容:
    bind服务器简介(包括客户端工具dig的介绍)
    配置正向解析DNS服务器
    配置反向解析DNS服务器
    配置辅助DNS服务器并在主辅之间实现区域传送
****************************************************************************************************
1、BIND服务器程序简介:
    Bind是Berkeley Internet Name Domain Service的简写,它是一款实现DNS服务器的开放源码软件。Bind原本是美国DARPA资助伯克利大学(Berkeley)开设的一个研究生课题,后来经过多年的变化发展,已经成为世界上使用最为广泛的DNS服务器软件,目前Internet上半数以上的DNS服务器有都是用Bind来架设的。
【什么是“服务”以及服务的特性】
    1、什么是套接字:
    套接字socket,简单来说就是IP:port(IP地址端口对)。
        以电话系统为例,电话的通话双方相当于相互通信的两个进程,区号是它的IP地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。任何用户在通话之前,首先要使用一部电话,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方的区号,相当于给出网络地址)。对方假如在场并空闲(相当于通信的另一主机开机且可以接收连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话相当于关闭socket,撤销连接。
    端口:
        TCP:0~65535
        UDP:0~65535
        小于1024的端口为知名端口;Linux系统中0~1023的端口只有root用户有开放关闭的权利(服务都是以root用户身份启动,之后以一个系统用户的身份运行。)
        例如:DNS服务监听在tcp的53号端口(DNS区域传送)和udp的53号端口,Web服务监听在TCP的80端口。

2、服务的特性:
    运行于后台,处于监听(listen)状态
    监听的原理:
    如上图(监听的原理)所示,
wKiom1X5el3ju_p5AAHGfzTVAC0873.jpg    (1)当DNS服务端程序安装并启动之后,它首先通过socket()系统调用向内核注册使用一个套接字,并调用bind()系统调用将本地socket地址(包括本地主机地址和本地端口)与所创建的socket号联系起来。一旦注册成功,守护进程named就处于监听状态(即named进程处于阻塞状态,等待客户端的连接)。注意,服务器必须首先启动,直到它执行完socket()调用进入等待状态后,方能接受客户请求,假如客户机先启动,则connect()将返回出错代码,连接不成功。

    (2)之后,DNS的请求报文发送到DNS的服务器的网卡上,而网卡是硬件,能够与硬件打交道的只有内核。内核内部的TCP/IP协议栈将请求报文解包查看其IP首部和TCP首部(即检查请求报文中的套接字是什么)。

    (3)内核查看文件句柄fd(file deiscriptor)数据库以确认是否有相关的应用程序进程注册了该套接字。如果有,则将请求报文发送给该进程。


3、DNS服务器类型:

    缓存服务器:不负责解析,仅为加速,不需要注册
    主DNS服务器:负责解析本地客户端请求
    辅助DNS服务器:辅助服务器的区域数据都是从主服务器复制而来,其数据都是只读的

4、bind详解:

        包名:bind

        进程:named

        协议:dns

        使用端口:53(tcp,udp)

        相关包:

        bind-chroot:将named进程的活动范围限定在chroot目录,保证安全性。

        bind-devel:与开发相关的头文件和库文件(编译安装bind时所需)

        bind-libs:bind服务器端和客户端都使用到的公共库文件

        bind-utils :  bind客户端工具

        程序文件:/usr/sbin/named

    bind权限相关:

    安装完named会自动创建用户named系统用户

    小知识点:早期Linux服务都是以root权限启动和运行的,随着技术的发展,各种服务变得越来越复杂,导致BUG和漏洞越来越多。***利用服务的漏洞***系统,能获得root级别的权限,从而控制整个系统。为了减缓这种***所带来的负面影响,现在服务器软件通常设计为以root权限启动,然后服务器进程自行放弃root,再以某个低权限的系统账号(named)来运行进程。这种方式的好处在于该服务被***者利用漏洞***时,由于进程权限很低,***者得到的访问权限又是基于这个较低权限。

    【配置文件】

[root@localhost etc]# rpm -qc bind
        /etc/logrotate.d/named    
        /etc/named.conf            #主配置文件
        /etc/named.iscdlv.key
        /etc/named.rfc1912.zones    #区域配置文件(用include指令包含在主配置文件中)
        /etc/named.root.key            #根区域的key文件以实现事务签名;
        /etc/rndc.conf                #rndc(远程名称服务器控制器)配置文件;
        /etc/rndc.key                #rndc加密密钥
        /etc/sysconfig/named
        /var/named/named.ca           #13个根服务器存放文件/var/named/named.empty
        /var/named/named.empty
        /var/named/named.localhost
        /var/named/named.loopback

    主配置文件:named.conf,每个语句都要使用分号结尾;其功能如下:

        定义区域
        定义各区域的全局配置
        定义视图
        定义日志

    【bind客户端工具】

 [root@Centos ~]# rpm -ql bind-utils
        /usr/bin/dig        #最常用的DNS服务器测试工具
        /usr/bin/host      #一款轻量级DNS测试工具
        /usr/bin/nslookup    #DNS查询工具,在众多平台上都有实现(windows上也有)
        /usr/bin/nsupdate    #更新工具
        /usr/share/man/man1/dig.1.gz
        /usr/share/man/man1/host.1.gz
        /usr/share/man/man1/nslookup.1.gz
        /usr/share/man/man1/nsupdate.1.gz

    dig命令:

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

    工作机制:

    若不加"@server-ip":则根据/etc/resolv.conf文件中的配置解析文件来查询

    ForExample:

  [root@localhost etc]# dig -t NS www.baidu.com
        ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t NS www.baidu.com
        ;; global options: +cmd
        ;; Got answer:
        ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58677
        ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
        ;; QUESTION SECTION:
        ;www.baidu.com.            IN    NS
        ;; ANSWER SECTION:
        www.baidu.com.        138    IN    CNAME    www.a.shifen.com.
        ;; AUTHORITY SECTION:
        a.shifen.com.        500    IN    SOA    ns1.a.shifen.com. baidu_dns_master.baidu.com. 1509110003 5 5 86400 3600
        ;; Query time: 16 msec
        ;; SERVER: 124.207.160.106#53(124.207.160.106)    #通过此处的DNS服务器解析;
        ;; WHEN: Mon Sep 14 06:41:52 2015
        ;; MSG SIZE  rcvd: 115

    说明:

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

    (2)注意标志位:
        ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
        如果flags后出现aa标志,则说明这是一条权威应答
    Note:dig命令不会查缓存,而是直接查服务器;
        例如:     

 [root@localhost etc]# dig -t A www.baidu.com @114.114.114.114
        ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t A www.baidu.com @114.114.114.114
        ;; global options: +cmd
        ;; Got answer:
        ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5861
        ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 5, ADDITIONAL: 5
        ;; QUESTION SECTION:
        ;www.baidu.com.            IN    A
        ;; ANSWER SECTION:
        www.baidu.com.        600    IN    CNAME    www.a.shifen.com.
        www.a.shifen.com.    600    IN    A    119.75.218.70
        www.a.shifen.com.    600    IN    A    119.75.217.109
        ;; AUTHORITY SECTION:
        a.shifen.com.        681    IN    NS    ns1.a.shifen.com.
        a.shifen.com.        681    IN    NS    ns4.a.shifen.com.
        a.shifen.com.        681    IN    NS    ns5.a.shifen.com.
        a.shifen.com.        681    IN    NS    ns2.a.shifen.com.
        a.shifen.com.        681    IN    NS    ns3.a.shifen.com.
        ;; ADDITIONAL SECTION:
        ns1.a.shifen.com.    553    IN    A    61.135.165.224
        ns2.a.shifen.com.    365    IN    A    180.149.133.241
        ns3.a.shifen.com.    439    IN    A    61.135.162.215
        ns4.a.shifen.com.    213    IN    A    115.239.210.176
        ns5.a.shifen.com.    213    IN    A    119.75.222.17
        ;; Query time: 4 msec
        ;; SERVER: 114.114.114.114#53(114.114.114.114)  #使用的是该地址查询;
        ;; WHEN: Mon Sep 14 06:50:11 2015
        ;; MSG SIZE  rcvd: 260

    dig 常用选项:

    dig -x IP @server-ip:查询方向解析;
    dig -t axfr zone :验证完全区域传送;
    dig -t 资源记录类型 名称 +trace:追踪解析过程      

 [root@localhost etc]# dig -t A www.baidu.com +trace
            ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t A www.baidu.com +trace
            ;; global options: +cmd
            #首先找根
            .            248296    IN    NS    c.root-servers.net.
            .            248296    IN    NS    l.root-servers.net.
            .            248296    IN    NS    g.root-servers.net.
            .            248296    IN    NS    k.root-servers.net.
            .            248296    IN    NS    i.root-servers.net.
            .            248296    IN    NS    h.root-servers.net.
            .            248296    IN    NS    d.root-servers.net.
            .            248296    IN    NS    j.root-servers.net.
            .            248296    IN    NS    b.root-servers.net.
            .            248296    IN    NS    a.root-servers.net.
            .            248296    IN    NS    f.root-servers.net.
            .            248296    IN    NS    m.root-servers.net.
            .            248296    IN    NS    e.root-servers.net.
            ;; Received 496 bytes from 124.207.160.106#53(124.207.160.106) in 1320 ms
            #然后找.com
            com.            172800    IN    NS    k.gtld-servers.net.
            com.            172800    IN    NS    m.gtld-servers.net.
            com.            172800    IN    NS    c.gtld-servers.net.
            com.            172800    IN    NS    a.gtld-servers.net.
            com.            172800    IN    NS    f.gtld-servers.net.
            com.            172800    IN    NS    g.gtld-servers.net.
            com.            172800    IN    NS    j.gtld-servers.net.
            com.            172800    IN    NS    d.gtld-servers.net.
            com.            172800    IN    NS    l.gtld-servers.net.
            com.            172800    IN    NS    h.gtld-servers.net.
            com.            172800    IN    NS    i.gtld-servers.net.
            com.            172800    IN    NS    e.gtld-servers.net.
            com.            172800    IN    NS    b.gtld-servers.net.
            ;; Received 503 bytes from 192.5.5.241#53(192.5.5.241) in 103 ms
            #然后找baidu.com
            baidu.com.        172800    IN    NS    dns.baidu.com.
            baidu.com.        172800    IN    NS    ns2.baidu.com.
            baidu.com.        172800    IN    NS    ns3.baidu.com.
            baidu.com.        172800    IN    NS    ns4.baidu.com.
            baidu.com.        172800    IN    NS    ns7.baidu.com.
            ;; Received 201 bytes from 192.41.162.30#53(192.41.162.30) in 266 ms
            #最后找到最终结果;
            www.baidu.com.        1200    IN    CNAME    www.a.shifen.com.
            a.shifen.com.        1200    IN    NS    ns5.a.shifen.com.
            a.shifen.com.        1200    IN    NS    ns4.a.shifen.com.
            a.shifen.com.        1200    IN    NS    ns2.a.shifen.com.
            a.shifen.com.        1200    IN    NS    ns1.a.shifen.com.
            a.shifen.com.        1200    IN    NS    ns3.a.shifen.com.
            ;; Received 228 bytes from 61.135.165.235#53(61.135.165.235) in 12 ms

    host命令:
    语法:host -t 资源记录类型  名称

    [root@localhost etc]# host -t A www.baidu.com
        www.baidu.com is an alias for www.a.shifen.com.
        www.a.shifen.com has address 119.75.217.109
        www.a.shifen.com has address 119.75.218.70

2、DNS(bind)服务器的配置:
BIND的配置主要分以下四个:
    配置正向解析的bind
    配置反向解析的bind
    配置辅助bind
    实现主辅DNS之间的区域传送
******************************************************************************************************************************************************
【实验环境规划】
VMware station 10
BIND服务器:两台CentOS 6.4虚拟机做主辅DNS
一台windows 7做客户端
Domain Name:test.com.                 192.168.1.0/24
主DNS:LinuxMaster.test.com.        192.168.1.58
辅助DNS:LinuxSlave.test.com.        192.168.1.59
Win2008Slave.test.com.   192.168.80.3  (在windows 2008 R2上实现 )
web主机:www.test.com.     192.168.1.58    192.168.1.59   192.168.80.3
ftp主机:ftp.test.com.   CNAME   www.test.com.
mx邮件服务器:mx.test.com.  192.168.1.58
****************************************************************************************************
1、配置正向解析

【将一台主机配置成可正向解析的DNS之步骤】

第一步:使用YUM安装DNS所使用的软件包(BIND)

第二步:创建或修改主配置文件(/etc/named.conf)

第三步:创建区域数据文件(/var/named/***.zone)

第四步:使用相关命令(named-checkconf、named-checkzone)测试配置文件及区域文件是否存在语法错误

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

第六步:重启服务或重新加载配置文件

第七步:更改iptables和selinux的设置(如果不了解此两项可以暂时关闭它们)

第八步:分别使用(dig/nslookup)在Linux/Windows主机进行查询DNS相关资源记录  
#######################################################################

具体配置过程如下:

第一步:通过yum安装bind:
]# yum install -y bind     #bind相关软件包在CentOS光盘镜像中就有;

第二步:自己创建或修改主配置文件(/etc/named.conf)

[root@localhost etc]# cat /etc/named.conf
// C/C++风格的语法,注释用//或/* */
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
    listen-on port 53 { 127.0.0.1; };        //指明监听端口;
    listen-on-v6 port 53 { ::1; };
    directory     "/var/named";        //指明存放区域文件根目录,后面给出的相对路径都是相对此目录;
    dump-file     "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
    allow-query     { localhost; };        //允许那些主机查询;
    recursion yes;                        //是否允许递归查询;
    dnssec-enable yes;
    dnssec-validation yes;
    dnssec-lookaside auto;
    /* Path to ISC DLV key */
    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
};
logging {                                //定义日志;
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
zone "." IN {                //定义根区域文件名称
    type hint;                //类型 为根
    file "named.ca";        //使用的是相对路径,默认存放在/var/named/named.ca
};
//把另外两个文件也包含进来,作为主配置文件的一部分;
include "/etc/named.rfc1912.zones";            //该文件 定义区域配置文件;
include "/etc/named.root.key";                //该文件,根区域的key文件,与实务签名相关;


注释掉上述文件中的以下三行:

//    listen-on port 53 { 127.0.0.1; };        //指明监听端口;
//    listen-on-v6 port 53 { ::1; };            //IPv6
//    allow-query     { localhost; };        //允许那些主机查询;


启动named服务:

[root@localhost etc]# /etc/rc.d/init.d/named start
    Generating /etc/rndc.key:                                  [  OK  ]
    Starting named:                                            [  OK  ]
    [root@localhost etc]#

验证named服务是否已经启动: 

 [root@localhost etc]# ss -taunl | grep "53"
    udp    UNCONN     0      0          172.16.21.100:53                    *:*     
    udp    UNCONN     0      0          192.168.0.105:53                    *:*     
    udp    UNCONN     0      0              127.0.0.1:53                    *:*     
    tcp    LISTEN     0      3          172.16.21.100:53                    *:*     
    tcp    LISTEN     0      3          192.168.0.105:53                    *:*     
    tcp    LISTEN     0      3              127.0.0.1:53                    *:*     
    tcp    LISTEN     0      128                  ::1:953                  :::*     
    tcp    LISTEN     0      128            127.0.0.1:953                   *:*

将named服务设为开机启动:

 [root@localhost etc]# chkconfig --list named
    named              0:off    1:off    2:off    3:off    4:off    5:off    6:off
    [root@localhost etc]# chkconfig named on
    [root@localhost etc]# chkconfig --list named
    named              0:off    1:off    2:on    3:on    4:on    5:on    6:off

 至此,一台DNS缓存服务器就配置好了。


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

在里面新建一个区域,格式如下:

    zone "区域名称" IN {
        type master|slave|forward;  //注意每个语句要以分号结尾
        file "ZONE_NAME.zone";     
    };  //注意要以分号结尾

此处新建的区域如下:
    zone "company.com" IN {
            type master;
            file "company.com.zone";
    };

第三步:创建区域数据文件(/var/named/***.zone)
    在/var/named/下建立"ZONE_NAME.zone"文件,通常只包含宏定义和资源记录,且第一个记录必须是SOA记录(格式如下:)
        $TTL 600;
        name  [TTL]  IN  RR_Type  value

(1)一个FQDN可对应同多个IP;(负载均衡)
(2)多个FQDN可对应一个IP:(一台主机有多个名称,且可以用CNAME定义)

    $TTL 600;
    @ IN    SOA     LinuxMaster.company.com. admin.company.com.(
                                            20150916001
                                            1H
                                            5M
                                            7D
                                            3D )
            IN      NS      LinuxMaster
            IN      MX      20 MX
    LinuxMaster     IN      A 192.168.0.105
    www     IN      A       192.168.0.105
    www     IN      A       172.16.21.100
    www     IN      A       192.168.0.110
    mx      IN      A       192.168.0.110
    ftp     IN      CNAME   www

第四步:使用相关命令(named-checkconf、named-checkzone)测试配置文件及区域文件是否存在语法错误;

  [root@localhost named]# named-checkconf 
    [root@localhost named]# named-checkzone "company.com" /var/named/company.com.zone 
    zone company.com/IN: loaded serial 2971046817
    OK
    [root@localhost named]#

第五步:确保主配置文件和各区域解析库文件的权限为640,属主为root,属组为named;
(1)检查主配置文件的权限:

[root@localhost named]# ls -l /etc/named*
    -rw-r----- 1 root named 1014 Sep 14 07:26 /etc/named.conf   #权限为640,属主root,数组named;
    -rw-r----- 1 root named 1014 Sep 12 12:12 /etc/named.conf.rpmsave
    -rw-r--r-- 1 root named 2389 Oct 15  2014 /etc/named.iscdlv.key
    -rw-r----- 1 root named  999 Sep 14 07:42 /etc/named.rfc1912.zones #权限为640,属主root,数组named;
    -rw-r--r-- 1 root named  487 Jul 19  2010 /etc/named.root.key

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

[root@localhost named]# ls -l /var/named/company.com.zone 
        -rw-r--r-- 1 root root 288 Sep 14 07:55 /var/named/company.com.zone   #权限不对,要改!

    更改权限:    

[root@localhost named]# chown root:named /var/named/company.com.zone 
        [root@localhost named]# chmod 640 /var/named/company.com.zone 
        [root@localhost named]# ll /var/named/company.com.zone 
        -rw-r----- 1 root named 288 Sep 14 07:55 /var/named/company.com.zone

第六步:重启服务或重新加载配置文件:  

 [root@localhost named]# /etc/rc.d/init.d/named restart
    Stopping named:                                            [  OK  ]
    Starting named:                                            [  OK  ]

第七步:更改iptables和selinux的位置(也可直接关闭) 

 [root@localhost named]# service iptables stop
    [root@localhost named]# setenforce 0
    setenforce: SELinux is disabled
    [root@localhost named]# getenforce 
    Disabled
    [root@localhost named]#

第八步:分别使用(dig/nslookup)在Linux/Windows主机进行查询DNS相关资源记录
(1) 使用dig命令在Linux主机上进行DNS资源查询; 

 [root@localhost ~]# hostname
    LinuxSlave.company.com    #在辅助Linux主机上查询
    [root@localhost ~]# dig -t SOA company.com @192.168.0.105    #通过主Linux主机查询
    ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t SOA company.com @192.168.0.105
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37165
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
    ;; QUESTION SECTION:                #请求部分;
    ;company.com.            IN    SOA
    ;; ANSWER SECTION:                   #应答部分;
    company.com.        600    IN    SOA    LinuxMaster.company.com. admin.company.com. 2971046817 3600 300 604800 259200
    **********************************************************
    ;; AUTHORITY SECTION:
    company.com.        600    IN    NS    LinuxMaster.company.com.
    ;; ADDITIONAL SECTION:
    LinuxMaster.company.com. 600    IN    A    192.168.0.105
    **********************************************************
    ;; Query time: 4 msec
    ;; SERVER: 192.168.0.105#53(192.168.0.105)
    ;; WHEN: Mon Sep 14 08:16:39 2015
    ;; MSG SIZE  rcvd: 113

至此,一台能够正向解析的bind服务器就配置好了哈!

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

    反向区域的区域名称格式:
        ReverseIP.in-addr.arpa.

例如:假设网络地址为192.168.0.1,那么规则命名为0.168.192.in-addr.arpa

第一步:修改配置文件/etc/named.conf,添加反向解析区域配置文件;
    zone "168.192.in-addr.arpa" IN {
        type master;
        file "0.168.192.zone"   //反向解析区域文件名;

    };
第二步:创建反向区域解析文件0.168.192.zone  

 $TTL 600;
    @ IN SOA LinuxMaster.company.com. admin.company.com. (
                                            20150916001
                                            1H
                                            5M
                                            7D
                                            3D )
            IN      NS      LinuxMaster.company.com.
    105     IN      PTR     LinuxMaster.company.com.
    105     IN      PTR     mx.company.com.
    105     IN      PTR     www.company.com.
    110     IN      PTR     www.company.com.
    3       IN      PTR     www.company.com.

;注:反向解析不需要CNAME记录,并且MX记录觉不允许出现在反向解析库例

;105没有写全会自动不上定义在主配置文件中定义的区域名“0.168.192.in-addr-arpa",没写全最后一定不能有。

第三步:检查语法错误:  

 [root@localhost named]# named-checkconf 
    [root@localhost named]# named-checkzone "0.168.192.zone" /var/named/0.168.192.zone 
    zone 0.168.192.zone/IN: loaded serial 2971046817
    OK

第四步:设置权限;  

 [root@localhost named]# chmod 640 /var/named/0.168.192.zone 
    [root@localhost named]# chown root:named /var/named/0.168.192.zone
    [root@localhost named]# ll /var/named/0.168.192.zone
    -rw-r----- 1 root named 528 Sep 14 09:19 /var/named/0.168.192.zone

第五步:重新加载配置文件:

 [root@localhost named]# service named restart
    Stopping named:                                            [  OK  ]
    Starting named:                                            [  OK  ]

第六步:用Windows客户端验证解析:
    如图:Windows验证反向解析

第七步:使用dig命令验证反向解析:   

[root@localhost named]# dig -x 192.168.0.105 @192.168.0.105
        ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -x 192.168.0.105 @192.168.0.105
        ;; global options: +cmd
        ;; Got answer:
        ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47804
        ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 1, ADDITIONAL: 1
        ;; QUESTION SECTION:
        ;105.0.168.192.in-addr.arpa.    IN    PTR
        ;; ANSWER SECTION:
        105.0.168.192.in-addr.arpa. 600    IN    PTR    www.company.com.
        105.0.168.192.in-addr.arpa. 600    IN    PTR    LinuxMaster.company.com.
        105.0.168.192.in-addr.arpa. 600    IN    PTR    mx.company.com.
        ;; AUTHORITY SECTION:
        0.168.192.in-addr.arpa.    600    IN    NS    LinuxMaster.company.com.
        ;; ADDITIONAL SECTION:
        LinuxMaster.company.com. 600    IN    A    192.168.0.105
        ;; Query time: 0 msec
        ;; SERVER: 192.168.0.105#53(192.168.0.105)
        ;; WHEN: Mon Sep 14 09:59:28 2015
        ;; MSG SIZE  rcvd: 146

至此,正向解析和反向解析都已OK,休息一下,吃饭去了!

3、rndc的相关知识:
(1)rndc是什么?
    Remote Name Domain Controller,远程名称域控制器;
    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 following:
        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
        例如:   

[root@localhost named]# rndc status
            version: 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6
            CPUs found: 2
            worker threads: 2
            number of zones: 21
            debug level: 0
            xfers running: 0
            xfers deferred: 0
            soa queries in progress: 0
            query logging is OFF
            recursive clients: 0/0/1000
            tcp clients: 0/100
            server is up and running

4、辅助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服务并做相应的配置:编辑/etc/named.rfc1912.zones,添加如下记录:   

        zoen "company.com" IN {
                type slave;
                file "slaves/company.com.zone";
                master{ 192.168.0.105; };
            };
            zone "168.192.in-addr.arpa" IN {
                type slave;
                file "slaves/168.192.zone";
                masters{ 192.168.0.105; };
            };

        检查语法错误:          

 [root@localhost ~]# named-checkconf

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

 vim /var/named/company.com.zone
            $TTL 600;
            @ IN    SOA     LinuxMaster.company.com. admin.company.com. (
                                                    20150916001
                                                    1H
                                                    5M
                                                    7D
                                                    3D )
                    IN      NS      LinuxMaster
                    IN      NS      LinuxSlave      #新增
                    IN      NS      Win2008Slave    #新增
                    IN      MX      20 MX
            LinuxMaster     IN      A 192.168.0.105
            LinuxSlave      IN      A       192.168.0.102   #新增
            Win2008Slave    IN      A       192.168.0.104   #新增
            www     IN      A       192.168.0.105
            www     IN      A       172.16.21.100
            www     IN      A       192.168.0.110
            mx      IN      A       192.168.0.110
            ftp     IN      CNAME   www
        vim /var/named/0.168.192.zone
            $TTL 600;
            @ IN SOA LinuxMaster.company.com. admin.company.com. (
                                                    20150916001
                                                    1H
                                                    5M
                                                    7D
                                                    3D )
                    IN      NS      LinuxMaster.company.com.
                    IN      NS      LinuxSlave.company.com.    #新增
                    IN      NS      Win2008Slave.company.com.  #新增
            105     IN      PTR     LinuxMaster.company.com.
            102     IN      PTR     LinuxSlave.company.com.    #新增
            104     IN      PTR     Win2008Slave.company.com.  #新增
            105     IN      PTR     mx.company.com.
            105     IN      PTR     www.company.com.
            110     IN      PTR     www.company.com.
            3       IN      PTR     www.company.com.

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

  [root@localhost named]# named-checkconf 
        [root@localhost named]# named-checkzone "company.com.zone" /var/named/company.com.zone 
        zone company.com.zone/IN: loaded serial 2971046817
        OK
        [root@localhost named]# named-checkzone "0.168.192.zone" /var/named/0.168.192.zone 
        zone 0.168.192.zone/IN: loaded serial 2971046817
        OK
        [root@localhost named]# rndc reload
        server reload successful

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

 [root@localhost named]# dig -t NS company.com @192.168.0.105
            ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t NS company.com @192.168.0.105
            ;; global options: +cmd
            ;; Got answer:
            ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16293
            ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 3
            ;; QUESTION SECTION:
            ;company.com.            IN    NS
            ;; ANSWER SECTION:
            company.com.        600    IN    NS    LinuxMaster.company.com.
            company.com.        600    IN    NS    Win2008Slave.company.com.    #新增
            company.com.        600    IN    NS    LinuxSlave.company.com.      #新增
            ;; ADDITIONAL SECTION:
            LinuxMaster.company.com. 600    IN    A    192.168.0.105
            LinuxSlave.company.com.    600    IN    A    192.168.0.102            #新增
            Win2008Slave.company.com. 600    IN    A    192.168.0.104        #新增
            ;; Query time: 0 msec
            ;; SERVER: 192.168.0.105#53(192.168.0.105)
            ;; WHEN: Mon Sep 14 11:18:45 2015
            ;; MSG SIZE  rcvd: 155
        反向解析:
            [root@localhost named]# dig -x 192.168.0.105 @192.168.0.105
            ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -x 192.168.0.105 @192.168.0.105
            ;; global options: +cmd
            ;; Got answer:
            ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64024
            ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 3, ADDITIONAL: 3
            ;; QUESTION SECTION:
            ;105.0.168.192.in-addr.arpa.    IN    PTR
            ;; ANSWER SECTION:
            105.0.168.192.in-addr.arpa. 600    IN    PTR    LinuxMaster.company.com.
            105.0.168.192.in-addr.arpa. 600    IN    PTR    mx.company.com.
            105.0.168.192.in-addr.arpa. 600    IN    PTR    www.company.com.
            ;; AUTHORITY SECTION:
            0.168.192.in-addr.arpa.    600    IN    NS    LinuxSlave.company.com.         #新增
            0.168.192.in-addr.arpa.    600    IN    NS    Win2008Slave.company.com.       #新增
            0.168.192.in-addr.arpa.    600    IN    NS    LinuxMaster.company.com.     
            ;; ADDITIONAL SECTION:
            LinuxMaster.company.com. 600    IN    A    192.168.0.105
            LinuxSlave.company.com.    600    IN    A    192.168.0.102                  #新增
            Win2008Slave.company.com. 600    IN    A    192.168.0.104              #新增
            ;; Query time: 0 msec
            ;; SERVER: 192.168.0.105#53(192.168.0.105)
            ;; WHEN: Mon Sep 14 11:22:06 2015
            ;; MSG SIZE  rcvd: 230

    启动辅助DNS服务器上的named进程;
    在主DNS服务器上查看日志,检验主辅DNS之间的区域传送:  

   [root@localhost named]# named-checkzone "company.com" /var/named/company.com.zone 
        zone company.com/IN: loaded serial 2971046817
        OK
        [root@localhost named]# rndc reload
        server reload successful
        [root@localhost named]# tail -f /var/log/messages
        Sep 14 11:27:34 localhost named[4527]: client 192.168.0.102#34544: transfer of 'company.com/IN': AXFR started
        Sep 14 11:27:34 localhost named[4527]: client 192.168.0.102#34544: transfer of 'company.com/IN': AXFR ended

    windows上的就不做了,懒得截图!

第二步:实现从主DNS服务器完全同步区域数据文件,查看日志文件验证辅助服务器是否完成同步:
    在辅助DNS服务器上用dig命令检测下是否能从主DNS服务器同步数据(完全区域传送)

  [root@localhost slaves]# hostname
    LinuxSlave.company.com
    [root@localhost slaves]# ls /var/named/slaves/
    168.192.zone  company.com.zone
    [root@localhost slaves]#

    手动完全同步数据:

 [root@localhost slaves]# dig -t axfr company.com @192.168.0.105
        ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t axfr company.com @192.168.0.105
        ;; global options: +cmd
        company.com.        600    IN    SOA    LinuxMaster.company.com. admin.company.com. 2971046821 3600 300 604800 259200
        company.com.        600    IN    NS    LinuxMaster.company.com.
        company.com.        600    IN    NS    LinuxSlave.company.com.
        company.com.        600    IN    MX    20 MX.company.com.
        ftp.company.com.    600    IN    CNAME    www.company.com.
        LinuxMaster.company.com. 600    IN    A    192.168.0.105
        LinuxSlave.company.com.    600    IN    A    192.168.0.102
        mx.company.com.        600    IN    A    192.168.0.110
        www.company.com.    600    IN    A    192.168.0.105
        www.company.com.    600    IN    A    192.168.0.1
        www.company.com.    600    IN    A    172.16.21.100
        www.company.com.    600    IN    A    192.168.0.110
        company.com.        600    IN    SOA    LinuxMaster.company.com. admin.company.com. 2971046821 3600 300 604800 259200
        ;; Query time: 0 msec
        ;; SERVER: 192.168.0.105#53(192.168.0.105)
        ;; WHEN: Mon Sep 14 12:33:08 2015
        ;; XFR size: 13 records (messages 1, bytes 314)

    再来看看辅助DNS上这些区域文件的内容是什么:   

[root@localhost slaves]# cat /var/named/slaves/company.com.zone 
        $ORIGIN .
        $TTL 600    ; 10 minutes
        company.com        IN SOA    LinuxMaster.company.com. admin.company.com. (
                        2971046821 ; serial
                        3600       ; refresh (1 hour)
                        300        ; retry (5 minutes)
                        604800     ; expire (1 week)
                        259200     ; minimum (3 days)
                        )
                    NS    LinuxMaster.company.com.
                    NS    LinuxSlave.company.com.
                    MX    20 MX.company.com.
        $ORIGIN company.com.
        ftp            CNAME    www
        LinuxMaster        A    192.168.0.105
        LinuxSlave        A    192.168.0.102
        mx            A    192.168.0.110
        www            A    192.168.0.105
                    A    192.168.0.1
                    A    172.16.21.100
                    A    192.168.0.110

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

    vim /var/named/company.com.zone
    www     IN      A       172.16.21.100    #添加记录

wKiom1X5gBHxrUW_AAE1oqYPmWo522.jpg   

 查看日志/var/log/messages发现:

wKioL1X5gnSRq9zYAAS6-B3_uNo594.jpg

在辅助DNS服务器上查看日志情况:

wKiom1X5gFqAfIVbAARClmnD8RU380.jpg    查看辅助DNS服务器上的区域文件:

wKioL1X5grzjzIshAAI3js2n9m0736.jpg****************************************************************************************************
DNS服务器的基本配置就这么多哈,下面来简单总结下:

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

2、创建slave的时候,其配置文件类型必须是type slve; 必须指定主服务器的 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记录

****************************************************************************************************

暂时告一段落,周末再写剩下的其他部分!睡觉了!