DNS详解

概述

    互联网访问绝大多数都是基于域名的访问,互联网访问的基础是基于IP来实现的,因此,需要有一种将域名解析成IP的机制,让用户在利用域名访问时,自动将域名转换成为对应的IP,这就是DNS的功能,本章将介绍一些DNS相关的内容,具体分为:

    1、DNS的基础概念

    2、配置DNS作为缓存DNS服务器

    3、DNS的正向解析区域

    4、DNS的反向解析区域

    5、主从DNS实现

    6、子域授权

    7、区域转发

    8、DNS安全相关的配置(ACL及安全配置项)

    9、智能DNS(DNS的view)

第一章    DNS的基础概念

    1、DNS:Domain Name Service,基于C/S模式的域名解析服务,应用层协议

        监听在53/udp,53/tcp端口

        TCP用来区域传送

        UDP用来解析

    2、域名分类

        根域 .

        TLD(top level domain顶级域):

            组织域:.com、.net、.org、.gov、.mil

            国家域:.iq、.tw、.hk、.jp、.cn……

        二级域:就是在顶级域上个人或组织申请的名称

        所谓注册域名实际是在某个顶级域内注册的某个二级域

        如:nwc.com.

        然后在申请到的域内的建自己的各个子域名

        www.nwc.com.

        test.nwc.com.

        ftp.nwc.com.

        ….

    3、DNS的查找过程:

        递归查询:

            客户端向自己所指定的DNS服务器请求的过程,是递归的,也就是说客户端向服务器请求时,服务器返回的必须是一个明确的结果,要么找到,要么找不到

        迭代查询:

            是指当客户端请求到达直接指定的DNS服务器后,如果该服务器上没有缓存相关的条目,则需要向根域请求,根域返回给DNS服务器一个顶级域的地址,然后DNS服务器又根据返回的顶级域地址去找,顶级域又返回一个二级域的地址,而后,DNS服务器又向二级域去请求,追踪返回出一个明确的解析结果给DNS服务器,这个DNS一级一级去查找的过程就是迭代查询

    4、DNS的名称解析方式:

        名称 –> IP  正向解析

            正向解析时,给的地址是,如:www.nwc.com.

        IP –> 名称  反向解析

            反向解析时,给的地址是,如:4.3.2.1.in-addr.arpa.

            解析的实际地址是1.2.3.4

        注意:正向解析和反向解析的名称空间,不是同一个空间,也就是不是同一颗树形结构;因此也不是同一个解析库

    5、DNS服务器的类型:

        负责解析至少一个域的服务器

            主名称服务器:新增的解析条目只能通过主服务器

            辅助名称服务器:可以接受解析请求并响应,但新增的解析条目只能在主服务器上新增。主服务器故障后,从服务器也不向外提供解析服务了

        不负责域解析的服务器:缓存名称服务器

    6、DNS解析的答案类型:

        肯定答案:有解析出来的结果

        否定答案:不存在查询的键,因此,不存在与其查询的键对应的值

        对于肯定答案和否定答案都可以进行缓存,也都可以指定缓存时长

        权威答案:由直接负责的DNS服务器给出的答案,也就是给出的结果是自己负责解析域时,给出的答案

        非权威答案:给出的答案是缓存中的缓存下来的条目,此时因为缓存还在有效期,而后端真实的结果可能已经改变,但是由于有缓存,则依然用缓存响应请求,此时返回的就是非权威答案

    7、DNS一次完整的查询请求所经过的流程:

        Client一旦希望以主机名与对方主机通信,此时就需要名称解析,其会先查本地的hosts文件

        如果host文件中没有对应的名称和地址的对应关系,则客户端会查DNS服务的本地缓存

        如果本地DNS服务的缓存没有命中,则客户端会向客户端所指向的DNS服务器(可能是缓存DNS服务器,也可能是负责具体解析的某DNS主名称服务器)发送查询请求,此时的请求是递归请求(recursion请求)

        DNS服务器收到请求后,

            如果客户端请求的就是自己负责的域,则直接查询数据库,并返回答案

            如果客户端请求的不是自己负责解析的域,则先找服务器自己的缓存,如果缓存没命中,则基于迭代的方式先找根域,然后再找顶级域,然后找二级域,一步一步完成查询请求,并最终返回答案给客户端

    8、主-辅DNS服务器:

        主DNS服务器:维护所负责解析的域的数据库的那台服务器;读写操作均可进行

        从DNS服务器:从主DNS服务器那里,或其他的从DNS服务器那里同步或复制一份解析库,但是只能进行读操作

        复制或同步操作的实施方式:

            序列号:serial

                也就是解析数据库的版本号,一旦主服务器的数据库内容发生改变时,其版本号递增。从服务器会每隔一段时间,就向主服务器请求其版本号,如果发现版本号与其不匹配,则执行同步

            刷新时间间隔:refresh

                从服务器每隔多久到主服务器或其他从服务器上检查序列号,用于判断更新的状况

            重试时间间隔:retry

                当从服务器尝试与主服务器进行通信,获取其序列号时,发现无法联系上主服务器,则进行重试,两次重试之间的时间间隔

                故重试时间间隔应该小于刷新时间间隔,而且要远小于刷新时间间隔

            过期时长:expire

                从服务器始终联系不上主服务器时,多久之后,放弃从主服务器同步数据;从服务器也就停止提供服务

            否定答案的缓存时长:

                当结果是明确的无法解析到时,此类否定答案缓存多长时间

            主服务器"通知"从服务器随时更新数据

    9、区域(zone)和域(domain):区域是物理概念,域是逻辑概念

        比如:nwc.com.这个域

        FQDN–>IP:

            正向解析库和正向解析的功能,就是一个正向解析区域

        IP–>FQDN:

            反向解析库和反向解析的功能,就是一个反向解析区域

        一般而言,一个域分为正向解析区域和反向解析区域,但是单纯的域却不一定比区域大,因为父域的区域,可能就比子域的域要大

     

    10、区域传送:

        全量传送:axfr,传送整个数据库;一般在从服务器第一次向主服务器同步数据时

        增量传送:lxfr,进传送变化的数据

    11、区域数据库文件:主要由资源记录(RR,resource record)组成

        常见资源记录类型:A、AAAA、PTR、SOA、NS、CNAME、MX

        SOA:start of authority,起始授权记录,一个区域解析库有且只能有一个SOA记录,且必须放在所有资源记录的第一条

        NS:name service,域名服务记录,一个区域解析库可以有多个NS记录,一个NS记录表示一台DNS服务器,其中一个为主的,其余的为辅的

        A:address,地址记录,也就是从FQDN–>IPv4

        AAAA:address,地址记录,从FQDN–>IPv6

        CNAME:别名记录

        PTR:pointer,主要用于实现IP–>FQDN

        MX:mail exchanger,邮件交换器,用于标明域内邮件服务器的地址的记录,MX记录可以有多个,其MX记录有优先级的概念

            优先级 0-99,数字越小,优先级越高

    12、资源记录的定义格式:

        语法:NAME [TTL] IN RR_TYPE  VALUE

        SOA记录:

            NAME:当前区域的名字,例如:nwc.com.  或者如果是反向区域,则 1.168.192.in-addr.arpa.

            VALUE:有多部分组成

                <1>当前区域的区域名称(也可以使用主DNS服务器名称);

                <2>当前区域的管理员的邮箱地址,但地址中不能使用@符号,一般用点号.来替代;

                <3>主从服务的协调属性的定义以及否定答案的缓存时长,整个内容要用()括号括起来,每行内容之后可以用;分号表示后面的都是注释信息

            完整的SOA记录定义示例:

                nwc.com. 86400  IN SOA  nwc.com.  admin.nwc.com  (

                    2016091801   //代表序列号,不能超过10位

                    2H           //代表从服务器向主服务器同步数据的刷新时间间隔,此处表示2小时

                    10M          //表示联系不上主服务器时,从服务器再次联系主服务器时的间隔时间,10分钟

                    1W           //表示过期时间,也就是服务器始终联系不上主服务器时的最长等待时间,也就是此时间一过,就判定主服务器故障,然后从服务器也停止服务,1周

                    1D           //表示否定答案的缓存时长,1天

                    )

        NS记录:可有多个NS记录,一个NS记录对应一个DNS服务器,每个NS记录应该有一个对应的A记录

            NAME:当前区域的区域名称

            VALUE:当前区域的某DNS服务器的名字,例如ns1.nwc.com

            例如:

                nwc.com.  86400  IN  NS  ns1.nwc.com.

                nwc.com.  86400  IN  NS  ns2.nwc.com.

        MX记录:MX记录可以有多个,一个MX记录对应一个邮件服务器,每个记录的VALUE之前应该有一个数字,用于表示其优先级,数字越小,优先级越高。每个MX记录应该有一个对应的A记录

            NAME:当前区域的区域名称

            VALUE:当前区域某邮件服务器的主机名

            例如:

                nwc.com.  IN  MX  5  mail1.nwc.com.

                nwc.com.  IN  MX  20  mail2.nwc.com.

        A记录:FQDN–>IPv4

            NAME:某FQDN,如:web.nwc.com.

            VALUE:某IPv4地址

            例如:

                web.nwc.com.  IN  A  1.1.1.1

                web.nwc.com.  IN  A  1.1.1.2

                bbs.nwc.com.  IN  A  1.1.1.2

            一个主机名额可以有多个IP,一个IP也可以有多个主机名          

                *.nwc.com.  IN  A   10.1.32.1

                表示将前面没有单独定义的都解析到10.1.32.1

                nwc.com.  IN   A    10.1.32.1

                表示当用户访问域名前不带任何字符时,也即是直接访问nwc.com.时解析到的地址是10.1.32.1

                $GENERATE 1-254  server$   IN   A   1.1.1.$

                    表示将server1.nwc.com.  解析的地址为1.1.1.1

                    server2.nwc.com. 解析的地址为1.1.1.2

                    server3.nwc.com.  解析为1.1.1.3

                    ….

                    server254.nwc.com.  解析为1.1.1.254

                同理:

                $GENERATE 5-20  test$   IN   A   1.1.1.2$

                    表示将test5.nwc.com.  解析的地址为1.1.1.25

                    test6.nwc.com. 解析的地址为1.1.1.26

                    test7.nwc.com.  解析为1.1.1.27

                    ….

                    test20.nwc.com.  解析为1.1.1.220

        

        AAAA记录FQDN–>IPv6地址,定义方式与A记录类似

        PTR记录:反向解析记录

            NAME:IP地址,有特定格式,IP反过来写,而且要加特定后缀,如:192.168.1.2的记录应该写成2.1.168.192.in-addr.arpa。

            VALUE:为FQDN

            例如:

                2.1.168.192.in-addr.arpa.  IN PTR  bbs.nwc.com.

        CNAME记录:别名记录

            NAME:FQDN格式的别名;

            VALUE:FQDN格式的正式名称

            例如:

                web.nwc.com.  IN CNAME www.nwc.com.

                表示web.nwc.com.是www.nwc.com.的别名

        注意:

            <1>TTL值可以从全局继承,不用每个记录都单独定义

            <2>@可以用来表示当前的区域的名字

            <3>相邻的两条记录,其NAME相同时,后面那条记录的NAME可以省略

            <4>任何MX、NS等类型的记录的value为一个FQDN,此FQDN应该有一个A记录

    13、测试DNS的工具:dig、host、nslookup

        dig工具:用于测试DNS系统,因此其不会查询hosts文件

            dig -t RR_TYPE NAME @SERVER [QUERY_OPTIONS]

            表示测试哪种资源记录类型,NAME表示需要测试的地址或反向测试时的IP,@SERVER表示通过那个DNS服务器进行解析

            常见查询选项:

                +[no]trace 跟踪或不跟踪解析过程

                +[no]recurse 进行递归解析 

                如果不写@SERVER,则表示通过本机测试

            如:

                dig -t A www.baidu.com 

                dig -t A www.nwc.com @10.1.32.11

            反向解析:dig -x IP

                如:dig -x 119.75.222.17

                有正向解析不一定有反向解析的记录

            dig命令模拟完全区域传送:

                dig -t axfr DOMAIN [@SERVER]

        host工具:

            host -t A www.baidu.com 

                表示解析www.baidu.com这个域名的A记录,也就是其对应的IP

            host -t NS baidu.com

                表示解析baidu.com的NS记录,也就是看baidu.com这个域内,有哪些DNS服务器

            host -t MX baidu.com

                表示解析baidu.com的MX记录,也就是看baidu.com这个域内,有哪些邮件服务器

            host -t PTR 119.75.222.17

                表示解析 119.75.222.17这个IP对应的域名是什么

        注意,以上使用方式中,可以在命令后面加上SERVER_IP表示利用指定的DNS服务器进行测试,而不是使用本机测试

        nslookup工具:

            nslookup [-OPTIONS] [NAME] [SERVER]

            有两种工作模式,一种是交互式模式,一种是命令行模式,命令行模式与上述的工具类似,交互式则直接在命令行中输入nslookup然后回车即可

            交互式模式下的命令:

                server IP  表示以指定的IP作为DNS服务器进行查询

                set q=RR_TYPE  表示要查询的资源记录类型

                NAME  表示查询的名称(各种资源记录类型对应的NAME是不一样的)

    14、rndc的使用

        rndc是DNS远程管理的工具,默认只监听在本地的127.0.0.1的953端口,只能在本机使用,如果要远程主机上管理,需要在/etc/named.conf配置文件中修改相关的配置选项,不过为了安全考虑,不建议用rndc命令在远程主机上管理,在本地管理即可

        rndc status  可显示DNS服务器的状态信息

        rndc stats   可显示DNS的统计数据

        rndc stop    可停止DNS服务

        rndc flush   表示清空DNS服务器的DNS缓存条目

        rndc reload  表示重新装载DNS服务的配置文件和区域数据库文件

第二章    配置DNS作为缓存DNS服务器

    1、BIND的安装包:

        BIND是dns协议的一种实现

        BIND的程序运行时的进程名为named

    2、BIND的程序包:bind

        bind  提供DNS服务器端程序,和解析库文件,以及几个常用的测试程序

        bind-libs 被bind的主程序和bind-utils包中的程序共同用到的库文件

        bind-utils  bind客户端程序集,提供了如dig、host、nslookup等工具

        bind-chroot  可选装的程序包,让bind程序能运行在一个子shell中,万一bind程序被劫持,不会影响外面的shell的程序

    3、bind安装完成后,生成了许多文件,其中:

        /etc/named.conf  是其主配置文件,其内部用include指令包含进来了很多其他的文件,如

                /etc/named.rfc1912.zones  区域定义文件

                /etc/named.iscdlv.key

                /etc/named.root.key

        /var/named/  是区域解析库文件的存放位置,也就是named的工作目录,该目录下文件名一般为ZONE_NAME.zone

        /usr/sbin/rndc 是DNS的远程控制工具程序,其工作在tcp/953端口,默认只监听在127.0.0.1的地址,因此仅允许本地使用

        注意:

            <1>1台DNS服务器可同时为多个区域提供解析

            <2>在/etc/named/目录下,必须要有根域的解析库文件,在centos上一般为name.ca

            <3>在/etc/named/目录下,还应该有两个区域解析库文件:localhost和127.0.0.1的正向和反向解析的解析库文件,正向为named.localhost、反向为named.loopback文件

        bind程序安装完成后,默认即可作为缓存名称服务器使用,可以让其他客户端将DNS指向该主机,作为其DNS服务器,当该DNS服务器中没有相应的缓存,或不是自己负责解析的区域后,也能够向根域发起迭代的查询请求,从而能够返回给客户端答案

        如果安装完成bind后,如果没有专门负责解析的区域,将配置文件中的监听地址由120.0.0.1改为可与外部通信的地址,关闭dnssec功能,然后直接启动服务即可

    4、主配置文件格式:

        全局配置段:

            options {

                …

            }

        日志配置段:

            logging {

                …

            }

        区域配置段:定义由本机负责解析的区域,或转发的区域

            zone {

                …

            }

            可单独定义在/etc/named.rfc1912.zones文件中

        注意:

            每个配置语句必须以分号;结尾,否则为语法错误

            注释的风格为C语言风格,//表示注释单行,/*  */表示注释多行

    5、修改相关配置

        修改全局配置段中的监听地址为可与外部通信的地址:

            listen-on port 53;表示监听本机所有地址的53端口

            listen-on port 53 { 10.1.32.11; }; 表示监听本机10.1.32.11这个IP的53端口,多个IP用分号间隔,{}两段有空格

        学习时,建议关闭dnssec功能:

            dnssec-enable no;

            dnssec-validation no;

            dnssec-lookaside no;

        关闭仅允许本地查询:

            注释掉该行,// allow-query { localhost; };

    6、检查配置文件语法错误

        named-checkconf  /etc/name.conf

    7、启动服务

        centos6 : service named start

        centos7 : systemctl start named.service 

第三章    DNS的正向解析区域

    1、定义区域

        在主配置文件中或主配置文件的辅助配置文件中实现;

        在配置文件中,利用:

            zone "ZONE_NAME" IN { 定义区域名称,就是域名

                type master|slave|hint|forward;

                    指明区域的类型是主|从|根|转发

                file "ZONE_NAME.zone";

                    指明区域数据文件,如果不指名文件的目录,则默认会到/var/named/目录下去找

            };

            注意:区域名字即为域名

        一般不在主配置文件中编辑,而是到其include进来的专门定义区域文件/etc/named.rfc1912.zones中定义

             vim /etc/named.rfc1912.zones

             zone "nwc.com." IN {

             type master;

             file "nwc.com.zone";

             };

             区域名最后那个.可以不用加

    2、建立区域数据文件(主要记录为A记录或AAAA记录)

        在区域数据库存放的位置/var/named/目录下建立区域数据文件

        一般数据文件其权限为640,属主为root,属组为named

        如:vim /etc/named/nwc.com.zone

            $TTL 3600

            $ORIGIN nwc.com.   表示当域名没写完整时,自动补上的部分的内容

            @   IN  SOA  nwc.com.   dnsadmin.nwc.com  (

                2016091801

                1H

                10M

                3D

                1D

                )

                //SOA记录中的NAME可以写成域名,也可以写成该区域内的主DNS服务器的主机名,如此处的"nwc.com."可以用"ns1.nwc.com.替代"

            IN  NS  ns1  

               //前面没写@,是因为两个相邻的记录NAME一样,则后面不用写,后面写ns1是因为利用$ORIGIN定义了之后,会自动补上nwc.com.

            IN  MX  10  mail1

               //表示定义了一个mail1.nwc.com.的邮件服务器,其优先级为10

            IN  MX  20  mail2

                //又定义了一个mail2.nwc.com.的邮件服务器,其优先级为20

        ns1   IN  A   10.1.32.11

                //ns1.nwc.com.的IP地址为10.1.32.11

        mail1   IN  A   10.1.32.33

                //mail1.nwc.com.的IP地址为10.1.32.1

        mail2   IN  A   10.1.32.55

                //mail2.nwc.com.的IP地址为10.1.32.55

        www   IN   A   10.1.32.1

                //www.nwc.com.的IP地址为10.1.32.1

        www   IN   A   10.1.32.2

                //www.nwc.com.的IP地址为10.1.32.2

        web   IN   CNAME   www

                //web.nwc.com.是www.nwc.com.的别名

        bbs  IN  A  10.1.32.1

                //bbs.nwc.com.的IP为10.1.32.1

        修改区域数据文件的属主为root,属组为named,并修改其权限为640

    3、检查配置文件语法和区域数据文件语法

        named-checkconf /etc/named.conf

        named-checkzone  nwc.com.  /var/named/nwc.com.zone

        指明区域名称,和区域数据文件的位置

    4、让服务器重载配置文件和区域数据文件即可

        用rndc reload命令即可实现

        如果是centos7,也可以用:

            systemctl reload named.service

    5、用rndc status查看DNS服务器的状态,然后利用相关DNS测试工具进行测试dig、host、nslookup

第四章    DNS的反向解析区域

    1、定义区域

        在主配置文件中或主配置文件的辅助配置文件中实现;

        在配置文件中,利用:

        zone "ZONE_NAME" IN { 定义区域名称,就是域名

            type master|slave|hint|forward;

                指明区域的类型是主|从|根|转发

            file "ZONE_NAME.zone";

                指明区域数据文件,如果不指名文件的目录,则默认会到/var/named/目录下去找

        };

        注意:反向区域的名字的格式为:

                网段地址反写.in-addr.arpa.

                如本例为:32.1.10.arpa.

        一般不在主配置文件中编辑,而是到其include进来的专门定义区域文件/etc/named.rfc1912.zones中定义

            vim /etc/named.rfc1912.zones

            zone "32.1.10.arpa." IN {

                type master;

                file "32.1.10.zone";

            };

            区域名最后那个.可以不用加

    2、定义区域解析库文件:(反向解析库的主要记录为PTR记录)

        在区域数据库存放的位置/var/named/目录下建立区域数据文件

        一般数据文件其权限为640,属主为root,属组为named

        vim /var/named/32.1.10.zone

            $TTL 3600

            $ORIGIN 32.1.10.in-addr.arpa.

            @    IN    SOA    ns1.nwc.com.  dnsadmin.nwc.com  (

                2016091801 

                1H

                10M

                3D

                12H

                )

                IN    NS   ns1.nwc.com.

                     //域内的NS记录,表示DNS服务器为ns1.nwc.com.

            11   IN    PTR  ns1.nwc.com.

                    //ns1.nwc.com.的IP为10.1.32.11

            1    IN    PTR  www.nwc.com.

            2    IN    PTR  www.nwc.com.

            1    IN    PTR  bbs.nwc.com.

        注意:

            反显区域数据文件中补充的是32.1.10.in-addr.arpa.,故其中的域名就不能与正向解析数据文件中写成www,bbs之类的,因为自动补充的不是域名,是网络地址反写的区域名

            反向区域文件中不需要MX记录的反向解析,也就是不需要对邮箱服务器进行反向解析

            不需要为正向解析区域的别名记录定义反向解析

            反向解析也可以有别名记录,只是别名记录的意义是ip到ip,相当于两个IP地址之间的别名

        修改该反向解析区域文件的属主为root,属组为named,权限为640

    3、检查配置文件语法和区域数据文件语法

        named-checkconf /etc/named.conf

        named-checkzone  32.1.10.in-addr.arpa  /var/named/32.1.10.zone

        指明区域名称,和区域数据文件的位置

    4、让服务器重载配置文件和区域数据文件即可

        用rndc reload命令即可实现

        如果是centos7,也可以用:

            systemctl reload named.service

    5、用rndc status查看DNS服务器的状态,然后利用相关DNS测试工具进行测试dig、host、nslookup

第五章    主从DNS

    1、从服务器是区域级别的概念;

        如,上述实验中,我们将ns1.nwc.com这台服务器,配置成了nwc.com.这个正向区域解析的主DNS服务器,同时也配置成了32.1.10.in-addr.arpa这个反向解析区域的主DNS服务器,但是我们可以在另外一台服务器上,假设为ns2.nwc.com这台服务器上,只配置其作为正向区域nwc.com.的从DNS服务器,或者只配置其作为反向区域32.1.10.in-addr.arpa的从DNS服务器,这样相当于ns2.nwc.com服务器只作为正向的从服务器,或者反向的从服务器

        当然,我们也可以将ns2.nwc.com这台服务器即作为正向区域nwc.com.的从DNS服务器,也作为反向区域32.1.10.in-addr.arpa的从DNS服务器

也可以将ns1.nwc.com这台服务器做为正向区域的主DNS服务器,但是作为反向区域的从DNS服务器,而ns2.nwc.com这台服务器作为反向区域的主DNS服务器,正向区域的从DNS服务器

        注意:在主从同步时,区域数据文件的复制可以级联复制

            也就是说可以ns1.nwc.com这个服务器作为主服务器,ns2到ns1这台服务器上进行复制区域数据文件,作为ns1的从服务器,而ns3可以在ns2上同步数据文件,ns3作为ns2的从服务器,这样一级一级的级联

    2、环境及准备工作

        环境:

            利用上述实验中的ns1.nwc.com作为主DNS服务器,其地址为10.1.32.11,添加一台ns2.nwc.com作为其从DNS服务器,其地址为10.1.32.22

        准备工作:

            在ns2上安装bind,然后修改其监听的地址为10.1.32.22

            关掉dnssec的相关功能

            关闭仅允许本地查询:注释掉该行,// allow-query { localhost; };

    3、在从服务器上定义一个区域,其区域类型为slave

        在/etc/named.rfc1912.zones中定义:

            zone "ZONE_NAME" IN {

                type slave;

                file "slaves/ZONE_NAME.zone";

                masters {MASTER_IP;}

            };

            区域数据文件不用手动建立,因为从服务器会自动的从主服务器去同步数据文件

        注意:此处file 指定区域文件的路径要放在/var/named/目录下的slaves目录下的原因是:因为named进程是以named这个用户的身份运行,而named用户针对/var/named/这个目录的权限为r-x,也就是没有写权限,因此当从服务器从主服务器那边同步过来的数据文件,要写入该目录时,是无法完成的。但是在/var/named/这个目录下,专门建了一个目录为slaves,而named用户对这个目录是有写权限的,故区域数据文件放在该目录下,则可以完成同步的操作

        例如:

            vim /etc/named.rfc1912.zones

            zone "nwc.com."  IN {

                type slave ;

                file "slaves/nwc.com.slave.zone" ;

                masters { 10.1.32.11 ; };

            };

    4、在从服务器上,检测配置文件语法检查:named-checkconfig

    5、在从服务器上,启动服务service named start或重载配置

        用rndc reload命令即可实现

        如果是centos7,也可以用:

            systemctl reload named.service

    6、在主服务器上,确保区域数据文件中为每一个从服务器配置了NS记录,且有对应的A记录

        如,在本例中,我们需要在主服务器的区域数据文件/etc/named/nwc.com.zone中加上一个NS记录和对应的A记录:

        @    IN    NS    ns2.nwc.com.

        ns2.nwc.com.   IN   A   10.1.32.22

        注意:在配置了主从的结构中,从服务器已经启动,当我们手动修改了主服务器的区域配置文件后,要将其序列号人为的加1,否则从服务器无法通过判断主服务器的序列号来进行同步

    7、如何让一部分客户端用主DNS服务器解析请求,一部分客户端利用从DNS服务器解析请求

        在不同的客户端上匹配不同的DNS服务器,一部分执行主DNS服务器地址,一部分指向从DNS服务器

    8、如果想让ns2作为ns1上的反向解析区域的从服务器,步骤根上述类似,现在从服务器上定义一个区域,指明区域类型为slave,指明区域文件路径,指明master为哪个服务器

        然后在主服务器上的反向区域的区域数据文件中增加一个NS记录,指向到ns2上,添加对应的PTR记录

        <1>在从服务器上,添加区域:

            vim /etc/named.rfc1912.zones 

            zone "32.1.10.in-addr.arpa" IN {

                type slave ;

                file "slaves/32.1.10.zone"

                masters { 10.1.32.11 ; };

            };

        <2>在主服务器上的反向解析的区域数据文件中增加NS记录和PTR记录

            vim /var/named/32.1.10.zone

            增加:

                @   IN   NS   ns2.nwc.com.

                22  IN   PTR   ns2.nwc.com.

            注意修改其序列号+1

            检查主服务器配置文件,区域配置文件语法:

                named-checkconf /etc/named.conf

                named-checkzone  32.1.10.in-addr.arpa  /var/named/32.1.10.zone

                指明区域名称,和区域数据文件的位置

            重载配置文件:

                rndc reload

        <3>检查从服务器匹配文件语法:named-checkconf

        <4>重载从服务器配置文件:rndc reload

        <5>在从服务器上利用dig、host、nslookup进行测试

    9、如果从服务器的区域数据文件没有从主服务器上正常同步过来,则可以利用dig -t axfr nwc.com. @10.1.32.11测试区域传送,表示从主服务器10.1.32.11上完全传送 nwc.com.这个区域数据文件到本机

    10、注意:主从服务器的时间要同步,ntpdate命令

第六章    子域授权

    假设,在我们之前的nwc.com.这个域中,我们希望建一个子域,子域的域名为:ops.nwc.com.,该子域自己内部有自己的DNS服务器,而针对nwc.com.这个父域有我们之前建的两个DNS服务器,也就是上述实验中建的一主一从DNS服务器

    如果在父域的DNS服务器上实现,将对子域的解析,都交给子域自己去实现,而不是直接利用父域上添加相应的资源记录来实现。

    环境:

        在之前实验的基础上,添加对子域的授权,假设子域为 ops.nwc.com.  子域内的DNS服务器为ns1.ops.nwc.com这台服务器,服务器地址为10.1.32.111,子域的ns1的从DNS服务器ns2.ops.nwc.com,其地址为:10.1.32.222

    1、在父域的主DNS服务器上,编辑其区域数据文件,添加对子域的授权NS记录和A记录:

        vim /var/named/nwc.com.zone

        加入:

        ops.nwc.com.   IN   NS   ns1.ops.nwc.com.

        ops.nwc.com.   IN   NS   ns2.ops.nwc.com.

        ns1.ops.nwc.com.  IN  A   10.1.32.111

        ns2.ops.nwc.com.  IN  A   10.1.32.222

        注意:父域的DNS服务器由于有从服务器,且从服务器已经在工作,故修改完配置文件后,要将其序列号+1

        检查配置文件和区域数据文件的语法:

            named-checkconfig

            named-checkzone nwc.com. /var/named/nwc.com

        重载配置文件:rndc reload

        在各个顶级域如.com域内,实际上也是用类似的方法授权子域的

    2、在子域的主DNS服务器ns1.ops.nwc.com这台服务器上配置:

        <1>安装bind程序,修改监听的地址为10.1.32.111,关闭dnssec功能

            关闭仅允许本地查询:注释掉该行,// allow-query { localhost; };

        <2>添加区域的定义:

            vim /etc/named.rfc1912.zones

            加上:

            zone "ops.nwc.com" IN {

                type master ;

                file "ops.nwc.com";

            };

        <3>添加区域数据文件:

            vim /var/named/ops.nwc.com.zone

            $TTL  3600

            $ORIGIN  ops.nwc.com.

            @    IN   SOA   ns1.ops.nwc.com.  dnsadmin.ops.nwc.com.  (

                2016091801

                1H

                10M

                1D

                2H

                ) 

                IN  NS   ns1

                IN  NS   ns2

                IN  MX  10 mail1

            ns1   IN   A   10.1.32.111

            ns2   IN   A   10.1.32.222

            www   IN   A   10.1.32.100

            web   IN   CNAME  www

            mail1  IN   A   10.1.32.100

            mail2  IN   A   10.1.32.200

            修改区域文件的属主为root,属组为named,权限为640

        <4>检查配置文件和区域数据文件语法:

            named-checkconfig

            named-checkzone  ops.nwc.com  /var/named/ops.nwc.com.zone

        <5>启动服务,或重载配置文件rndc reload

    3、定义子域的从DNS服务器

        在子域的从DNS服务器上:

        <1>安装bind程序,修改监听的地址为10.1.32.111,关闭dnssec功能

            关闭仅允许本地查询:注释掉该行,// allow-query { localhost; };

        <2>添加区域的定义:

            vim /etc/named.rfc1912.zones

            加上:

            zone "ops.nwc.com" IN {

                type slave ;

                file "slaves/ops.nwc.com"

                master { 10.1.32.111 ; };

            };

        <3>检查配置文件语法:

            named-checkconfig

        <4>启动服务,或重载配置文件rndc reload

第七章    区域转发

    在正常情况下,子域是无法直接找到父域内的解析的,因为当子域内的客户端向子域内的DNS服务器,请求解析某地址时,如果该地址不是子域DNS服务器自己负责解析的区域,则子域的DNS服务器会去找根域,然后根域告诉其找顶级域,顶级域告诉其找二级域,这样进行迭代查询。

    但是在本实验中,子域内的主机如果要找的是父域的DNS负责解析的地址,则按照上述的工作模式还是要先去找根域,然后一级一级找到父域,然后解析,这样不符合实际需求,此时就需要用到定义转发的概念了

    定义转发有两种:

        <1>区域转发:表示仅将某特定区域的解析请求进行转发

        <2>全局转发:表示只要不是本DNS服务器直接负责解析的区域,都进行转发。相当于针对本地没有通过zone定义的区域查询请求,一律转发到某目标服务器

        注意:被转发的服务器,必须允许为当前定义转发的服务器对其做递归查询,默认情况下,是允许给任何人递归的

    1、如何定义某区域转发:

        要在区域定义文件中/etc/named.rfc1912.zones中定义一个区域:区域类型为forward

        zone "ZONE_NAME" IN  {

            type  forward ;

            forward  first|only ;

            forwarders  { SERVER_IP ; };

        };

        区域类型为forward

        forward  定义转发的类型,有first和only两种

            first:首先转发,表示当本DNS服务器解析不了时,就转发给目标服务器进行解析,当目标服务器由于不在线或其他原因,不响应时,则当前DNS服务器就自己去找根域,然后一步一步迭代查询

            only:只转发,表示当本地DNS服务器解析不了时,不管转发的目标服务器有没有响应,都转发,没响应就一直等着

        forwarders  定义转发给谁,转发的目标服务器的IP(注意:转发的目标服务器必须要允许本服务器对其发起递归查询请求,默认都是允许的)

        如,在上述实验中,希望子域在解析请求时,先去找父域(父域的主DNS服务器IP为10.1.32.11,父域的从DNS服务器IP为10.1.32.22),如果父域没响应时,则子域自己去找根域,然后迭代查询,则可以如下定义:

            在子域的主DNS服务器ns1.ops.nwc.com服务器上进行:

            vim /etc/named.rfc1912.zones 

            加入:

            zone "nwc.com" IN  {

                type forward ;

                forward first ;

                forwarders { 10.1.32.11 ; 10.1.32.22 ; };

            };

            在实验环境中,可以将forward类型为only,因为没有外网环境,无法找到根域

            因为父域有主从两个DNS服务器,两个DNS服务器都能解析请求,故此处可以定义转发的目标服务器为两个

        配置完成后检查配置文件语法:

            named-checkconfig

        重载配置文件:rndc reload

    2、如何定义全局转发

        假设我们在子域上定义,凡是不是子域DNS服务器直接负责解析的,就都转到父域的DNS服务器上

        如果定义全局转发,就不需要定义区域的方式进行配置,而是要在主配置文件中的全局配置段options中定义

        在子域的ns1.ops.nwc.com这台服务器上:

            vim /etc/named.conf

            在options段中加入:

            forward only|first ; 

                 //根据需要选择是first还是only

            forwarders { 10.1.32.11; 10.1.32.22; };

                 //选择转发的目标服务器地址

        这样定义之后,表示只要不是自己负责的区域,则都转交给10.1.32.11或10.1.32.22的DNS服务器(注意:前提是目标服务器要允许本机对其发起DNS的递归查询请求,默认是允许的)

        配置完成后检查配置文件语法:

            named-checkconfig

        重载配置文件:rndc reload

第八章    DNS安全相关的配置

    1、acl : 

        访问控制列表,可以把一个或多个地址归并为一个命名的集合,随后,通过此名称即可对此集合内的所有主机实现统一调用;

        定义方式:

            acl ACL_NAME {

                IP ;

                NET_ADDR/MASK ;

            };

        如:

            acl mynet {

                10.1.32.0/24;

                127.0.0.0/8;

            };

        注意:

            定义acl的语句,要放在bind主配置文件/etc/named.conf文件最前面,不能放在某个具体配置段中间

            acl只能先定义,后使用

        bind有4个内置的acl:

            none  表示没有一个主机

            any   表示所有任意的主机

            local  表示本机上的所有IP地址

            loaclnet  表示本机IP所在的网络的网络内的所有主机

    2、可以调用acl的访问控制指令

        <1>allow-query { };  

            表示允许查询的主机,也就是只允许哪些主机对本机的DNS发起查询请求,括号内填入acl名称,如果不指定该指令,则默认允许所有的主机进行查询

            此指令可以加在options中,表示对全局生效,也可以加在某个zone的定义中,表示仅对该区域生效

        <2>allow-transfer {};

            表示允许向哪些主机做区域传送,默认为向所有主机;为了加强安全性,应该配置为仅允许向自己服务器的从服务器做区域传送

            此指令可以加在options中,表示对全局生效,也可以加在某个zone的定义中,表示仅对该区域生效

            如:

                vim /etc/named.conf

                加入:

                acl slaves {

                    10.1.32.22;

                    127.0.0.1;

                };

            定义一个acl叫slaves,其内部的主机为10.1.32.22

            然后在options中加入:

                allow-transfer { slaves; };

                表示所有的区域数据,仅允许对10.1.32.22这个主机进行区域传送

            如果将allow-transfer定义在某个具体的zone中,则可以实现该区域的数据仅向指定的主机传送

        <3>allow-recursion {};

            表示允许哪些主机向当前DNS服务器发起递归查询请求,也就是要求本DNS如果没有解析的内容,本DNS就要一级一级的向根域,顶级域迭代查询的

            如:实现本DNS服务器允许本地的主机对其发起递归查询请求

                配置acl,定义本地网络:

                vim /etc/named.conf

                加入:

                acl mynet {

                    10.1.32.0/24;

                    127.0.0.0/8;

                };

                在options配置段中加入:

                allow-recursion { mynet ; };

            注意:配置文件中默认有一项 recursion  yes;表示允许所有的递归请求,如果要实现只对本地的请求进行递归,则需要将该项注释掉

        <4>allow-update {};

            表示允许动态更新区域数据库文件中的内容(也就是区域的具体各个资源记录的内容);一般情况下,除非使用了DDNS,否则需要定义为allow-update { none; };

第九章    智能DNS(view)

    1、bind view  bind视图,也就是智能解析

        bind视图的意义是:假设一个主机www.nwc.com这台服务器上有两个IP,一个是内网IP,一个是外网IP,或者一个是联通服务器的IP,一个是电信服务器的IP;那么,我们可以在DNS服务器上定义,当来自内网用户的访问,都解析到内网的IP上,通过外网用户的访问,都解析到外网的IP上。或者来自联通的用户访问,都解析到联通的IP上,来自电信的用户,都解析到电信的IP上,这样就可以实现来自对同一个域名的请求,根据需要,可以解析到不同的IP上

        定义视图:

            view VIEW_NAME {

                ZONE1;

                ZONE2;

            };

    2、示例

        假设nwc.com.域内有一个主机为www.nwc.com,其有两个IP地址,一个面向外网,172.16.32.1,一个面向内网,10.1.32.1

        实现将来自10.1.32.0/24这个网络的主机访问www.nwc.com时,解析到10.1.32.1上

        实现将来自172.16.32.0/24这个完了的主机访问www.nwc.com时,解析到172.1.32.1上

        DNS服务器为ns1.nwc.com,IP为10.1.32.11

        <1>在DNS服务器上定义区域(要将区域定义在view中)

            vim /etc/named.rfc1912.zones

            加入:

            view inside {

                match-client {

                    10.1.32.0/24;

                };

                    //表示匹配请求的来源的IP地址,可以是acl定义的地址

                zone "nwc.com" IN {

                    type master;

                    file "nwc.com.inside.zone"

                };

            };

            view outside {

                match-client {

                    172.16.32.0/24;

                };

                    //表示匹配的来源的IP地址,可以是acl定义的地址

                zone "nwc.com" IN {

                    type master;

                    file "nwc.com.outside.zone"

                };

            };

        <2>配置区域数据文件,将不同的请求解析到不同的IP上

            vim /var/named/nwc.com.inside.zone

            $TTL 3600

            $ORIGIN  nwc.com.

            @    IN    SOA    ns1.nwc.com.   dnsadmin.nwc.com. (

                2016091801

                1H

                10M

                1D

                1D

                )

                IN    NS    ns1

            ns1   IN   A    10.1.32.11

            www   IN   A    10.1.32.1

            vim /var/named/nwc.com.outside.zone

            $TTL 3600

            $ORIGIN  nwc.com.

            @    IN    SOA    ns1.nwc.com.   dnsadmin.nwc.com. (

                2016091801

                1H

                10M

                1D

                1D

                )

                IN    NS    ns1

            ns1   IN   A    172.16.32.11

            www   IN   A    172.16.32.1

        view的实现过程实际就是将区域定义在view内部,然后view匹配不同的请求来源地址,然后指向不同的区域数据文件,各个区域数据文件中解析的内容不一样来实现

原创文章,作者:M20-1倪文超,如若转载,请注明出处:http://www.178linux.com/49376