一、BIND软件的组成:    

    BIND软件的主要rpm包:

        bind:主程序包,包括:

    DNS服务程序(named)

    解析库

    检测工具;

    bind-libs:Bind软件的共享库程序包;

    bind-utils:通用工具包,包括各种服务测试工具,如:dig, host, nslookup等;

    bind-chroot:设置伪根,启用监牢模式;bind-9+版本中出现的安全功能实现;


    应用层协议是DNS协议;DNS,Domain Name System;

        DNS的应用程序实现:BIND;

        BIND程序的服务主程序:named;

    53/TCP:完成区域传送;

    53/UDP:完成主机名的解析查询;

    953/TCP:rndc程序的监听端口;


    配置文件:       

        主配置文件:/etc/named.conf

        辅助配置文件:可以在主配置文件中利用include命令来包含其他配置文件;

    /etc/named.rfc1912.zones:声明了区域;

        安全认证秘钥文件

    /etc/named.iscdlv.key

    /etc/named.root.key

        主程序:/usr/sbin/named

        远程管理工具:/usr/sbin/rndc

        配置文件检测工具:

    /usr/sbin/named-checkconf

        区域文件检测工具:

    /usr/sbin/named-checkzone

        日志文件:

    /var/log/named.log

        区域文件的存放目录

    /var/named

        存放辅助区域文件的目录

    /var/named/slaves


二、主配置文件/etc/named.conf

    文件格式:        

        分段式配置格式


    1.配置行的注释方式:

        //:单行注释

        /* */:多行注释

    2.主配置文件中的常用配置段

        1)访问控制列表配置段

    acl string { address_match_element;... };  //注意花括号左右有空格

        2)全局选项配置段

    options { statements; ... };

        3)日志配置段

    logging { statements; ... };

        4)区域配置段

    zone string optional_class { statements;... };

        5)视图配置段

    view string optional_class { statements; ... }

        6)include命令

    include /PATH/TO/SOME_CONFIG_FILE


    3.全局配置段:

        options {

    listen-on port 53 { 127.0.0.1; 172.16.72.2; };

                //在启动DNS服务时,named进程所监听的套接字;

    directory "/var/named"

                //定义解析库(区域数据库文件)的根目录:在主配置文件中添加此配置语句之后,可以在后面定义区域数据库时使用相对路径

    allow-query  { localhost; };    

                //访问控制语句,意思是允许本服务器去处理哪些主机发送来的解析查询请求;默认为localhost,即只允许本机以127.0.0.1发送查询请求,allow-query  { any; }则可以处理所有主机发来的解析查询请求

    recursion yes;

                //允许本服务器为所有查询请求做递归查询,建议关闭,使用条件递归

    allow-recursion { 172.16.72.1/16; };

                //访问控制指令,允许为哪些客户端做递归查询;

    pid-files "/run/named/named.pid"

                //定义存放主进程pid文件的路径

            };

    4.配置区域段:

        zone "FQDN" IN {

        //声明一个区域名称;此名称要是有FQDN表示,如:ppp213.com

    type master;

                /*区域的类型

    master:主区域,主服务器

    slave:辅助区域,从区域

    hint:提示区域,仅能在根域上设置

    file "name.localhost"

    forward:转发区域*/

    file "named.localhost"

                //存放与该域有关的解析信息的数据库文件的路径;如果是相对路径,则相对于主配置文件的全局配置段中的"directory"指令所定义的目录而言;

                //注:文件的所有权和权限设置必须能够让named用户有读取权限;

    allow-update { none; };

                //访问控制指令,允许哪些客户端对数据库内容进行动态更新:主要用于DDNS;

    allow-transfer { 172.16.0.0/16; };

                //允许哪些主机能够从当前服务器进行区域传送;

    allow-query { address_match_element; ... };

                //访问控制指令,允许哪些主机进行区域内的解析查询

    allow-notify { address_match_element; ... };

                //访问控制指令,允许哪些主服务器向当前服务器发送区域变更通知;

};


        例:在主配置文件中添加区域段

            zone "ppp213.com" IN {
                type master;
                file "ppp213.zone";
                allow-update { none; };
                allow-transfer { none; };
            };



    

三、创建资源记录的一般步骤

    1.创建数据库文件,修改权限并添加相应资源记录:

        vim /var/named/ppp213.zone

    

        示例:

            @       IN      SOA     ns1.ppp213.com. root.ppp213.com.        (2018040701 1H 15M 1W 1D)
                    IN      NS      ns1
                    IN      MX 10   mail.ppp213.com.
            ns1     IN      A       192.168.109.136
            mail    IN      A       192.168.109.136
            www     IN      A       192.168.109.100
            www     IN      A       192.168.109.101
            web     IN      CNAME   www
            ftp     IN      CNAME   web
            *       IN      A       192.168.109.136
            ppp213.com.     IN      A       192.168.109.136

    2.检测区域文件的语法格式:

        named-checkzone FQDN /PATH/TO/ZONE_FILE



    3.对主配置文件或区域数据库文件进行修改之后并不会立即生效;只有在重新加载配置文件和区域文件之后文件才生效

        重载配置文件的方法:

            1)systemctl reload named.service

            2)rndc reload 

            3)systemctl restart named.service(不推荐)

            4)service named reload(centos 6-)

        注意:对于应用程序服务进程冲在配置文件的操作,如果能使用reload,就使用reload,不要轻易执行restart


四、客户端测试工具:dig,host,nslookup

    1.dig命令

        格式: dig [@server] [-t type] [-x addr] [queryopt]

    @server:表示此次查询请求使用指定的DNS服务器而不使用在/etc/resolve.conf文件中定义的nameserver;

    -t RR_type:指定此次查询的资源记录的类型:

    -x addr:进行反向解析查询时,用于指定IP地址:

    queryopt:查询选项:

            +[no]recurse:要求目标服务器必须[不]以递归的方式进行查询

            +[no]trace:[不]跟踪显示整个查询请求的解析过程


        模拟区域传送(需要在主配置文件区域段中修改Allow-transfer{ };)

    dig -t axfr|ixfr DOMAIN_NAME_FQDN  


    2.host命令

        host [-t RR_type ] {name} [server]

        格式:

    host [-t RR_type] {name} [server]

                 host -t A www.ppp213.com 192.168.109.136


    3.nslookup命令

        交互式命令:

    server IP_ADDR:指定使用哪个DNS服务器进行查询

    set q=RR_type:指定此次查询的资源记录的类型及相关答案

    set type=RR_type:同q

    FQDN | IP_ADDR :根据FQDN进行正向查询解析或根据IP_ADDR进行反向查询解析;

        命令行工具:

    nslookup FQDN NS_SERV

    示例:

                nslookup www.ppp213.com 192.168.109.136


五、配置反向解析区域

    反向域的FQDN:

172.16.0.0/16  反向域名: 16.172.in-addr.arpa


    添加区域段

     zone "109.168.192.in-addr.arpa" IN {
            type master;
            file "192.168.109.local";
            allow-transfer { none; };
        };


    创建192.168.109.local文件(同时修改权限)

        $ORIGIN 109.168.192.in-addr.arpa.
        $TTL 86400
        @       IN      SOA     ns1.ppp213.com. root.ppp213.com. (2018041301 1H 15M 1W 6H)
        IN      NS      ns1.ppp213.com.
        136     IN      PTR     ns1.ppp213.com.
        136     IN      PTR     mail.ppp213.com.
        100     IN      PTR     www.ppp213.com.
        101     IN      PTR     www.ppp213.com.


    检测:

named-checkzone 109.168.192-addr.arpa 192.168.109.local

        rndc reload

        dig -x 192.168.109.136


六、主从DNS服务器:(主辅)

    1.注意事项:

1)主服务器和辅助服务器都是域级别的概念

2)必须保证主辅服务器之间的网络通信的顺畅以及时间同步

3)为了确保所有的名称服务器都能被识别和使用,需要在区域数据库中添加所有的名称服务器的NS资源记录

4)区域数据库中每条ns资源记录都必须有A记录与之对应

5)从服务器上可以默认将复制而来的数据库文件保存至/var/named/slaves/目录中

6)在主服务器上应该通过访问控制指令允许从服务器进行区域传送,同时从服务器要指定主服务器


    2.配置从DNS服务器

        将主服务器(192.168.109.136)的对应区域段修改为允许从服务器(192.168.109.2)区域传送

            allow-transfer { 192.168.109.2; };:


        将从服务器的全局配置段修改为允许解析查询

            allow-query     { any; };


        在从服务器中添加区域段:

            zone "ppp213.com" IN {        
                    type slave;
                    masters { 192.168.109.136; };
                    file "slaves/ppp213.slave.zone";
                    allow-transfer { none; };
                };
        
            zone "109.168.192.in-addr-apra" IN {
                    type slave;
                    masters { 192.168.109.136; };
                    file "slaves/192.168.109.slvae.local";
                    allow-transfer { none; };
                };

    

        之后在从服务器使用dig进行名称解析时,会自动调用主服务器的数据库,注意将主辅服务器的防火墙关闭

            iptables -F; setenforce 0

            

七、转发器:

    全局转发:对于凡是不能由本服务器管理的域的请求,全部以转发的方式由指定的服务器进行递归查询;

在bind的主配置文件的全局配置段中定义;

        options {
            forward first;
            forwarders { 192.168.109.136; };
        };

    

    区域转发:专门针对于某个特定的域的请求,如果不能给出权威答案,则转发至指定的服务器进行递归查询;

在bind的主配置文件的区域配置段中定义;

        zone "ppp213.com" IN {        
                    type forward;
                        //类型为转发区域
                    forward only;
                        //only:只转发,不找本地。first:先转发,再找本地
                    forwarders; { 192.168.109.136; };
                };

        

八、子域委派授权

    将子域的管理权授权给子域中的名称服务器;父域中不保存任何子域数据库中资源记录;但为了能够成功授权,需要添加一条NS记录,指向子域的名称服务器;

        在子域名称服务器(192.168.109.2)中添加区域段:

        zone "pp.ppp213.com" IN {
            type master;
            file "pp.ppp213.com.zone";
            allow-transfer { none; };
        };

    

         创建pp.ppp213.com.zone文件

        $ORIGIN pp.ppp213.com.
        $TTL 86400
        @       IN      SOA     ns1.pp.ppp213.com.      root.pp.ppp213.com. ( 2018041301 3H 30M 10D 8H )
                IN      NS      ns1
        ns1     IN      A       192.168.109.2
        www     IN      A       1.2.3.4

        

        在父域名称服务器(192.168.109.136)中,在ppp213.zone文件添加两行

        pp.ppp213.com.  IN      NS      ns1.pp.ppp213.com.
        ns1.pp.ppp213.com.      IN      A       192.168.109.2

        

        此时在其他服务器使用

            dig -t a www.pp.ppp213.com @192.168.109.136

        可以得到 1.2.3.4 的结果


九、Bind中的基础安全相关的配置:

    1.访问控制列表:

acl,Access Control List,将一个或多个IP地址,归并为一个集合,随后可以通过实现定义好的名称对集合中的多个IP地址进行统一调用或设置;

bind内部有四个内置的acl:

    any:包括所有的IP地址,整个IP地址栈中的所有有效IP地址;

    none:不包括任何一个IP地址;

    local:仅包含本地已经配置生效的所有IP地址;

    localnet:包含本机所有已经配置并生效的IP地址所在的网段的IP地址;


定义acl的语法格式:

    acl acl_name {

[!] ip_addr;

[!] network/prefix;

};


示例:

        acl myacl {        
            192.168.109.136/24;
            ! 192.168.109.2;
            192.168.109.3;
        };


注意:

    1)在调用ACL之前,确保事先已经定义了指定的ACL;

    2)通常在主配置文件/etc/named.conf中定义ACL,建议将自定义的ACL放置在配置文件的最前面,以保证后面的操作可以成功调用到此ACL;


所有的allow*语句,都是可以调用ACL的,包括:

    allow-update { acl_name; }; 

    allow-transfer { acl_name; };

    allow-recursion { acl_name; };

    allow-query { acl_name; };

    allow-notify { acl_name; };

    ...