DNS服务基础(二)之Bind

一、BIND服务器简介

    Bind(Berkeley Internet Name Domain Service),它是一款实现DNS服务器的开放源码软件,够提供双向解析,转发,子域授权,view等功能,是世界上使用最为广泛的DNS服务器软件,目前Internet上半数以上的DNS服务器有都是用Bind来架设的。


二、BIND基本安装与配置

    1、Bind安装(最基本的bind:主程序、bind-libs:库文件、bind-utils:客户端工具三个组件)

    #yum install bind

    2、Bind主要文件

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

    rndc配置文件:/etc/rndc.conf,remote name domain controller,默认与bind安装在同一主机,且只能通过127.0.0.1来连接named进程;提供辅助性的管理功能,端口:953/tcp

    数据目录:/var/named/,/var/named/*.zone(区域解析库文件,其中的配置仅为当前区域有效)

    2.1、配置文件named.conf简要注解

    named.conf文件主要分两部分:全局配置和zone配置。


options {
listen-on port 53 { 127.0.0.1; }; #指定named监听的端口和IP。
listen-on-v6 port 53 { ::1; };   #IPV6监听设定。
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; }; #允许查询本DNS的客户端地址或列表
recursion yes;   #是否允许去迭代查询。
dnssec-enable yes;  #支持验证DNS数据由效性的系统(注:建议测试时关闭dnssec)   
dnssec-validation yes; # 是否进行DNSSEC确认开关
/* 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 {    #根区域的Zone段,里面记录了世界互联网上的根域名服务器地址,在使用时需要更新
type hint;    #由于根服务器是权威的,根域也不是本DNS服务器自己主管的,所以类型用Hint
file "named.ca";   #指定了根区域文件
};
include "/etc/named.rfc1912.zones";  #定义正反解区域相关
include "/etc/named.root.key";  #实现事物签名的秘钥文件



     注:区域文件格式:

     zone "ZONE_NAME" IN {

     type {hint|master|slave|forward};        

     file "ZONE_FILE";

     };

     <从服务器>

     zone "ZONE_NAME" IN {                

     type slave;                 #指定类型为从服务器;

     file "slaves/ZONE_FILE";    #由于从服务器会从主服务器直接同步解析库,所以无需设置,但是还是要将同步文件指向存放到指定目录下。

     };

     <转发>

     zone "ZONE_NAME" IN {

     type forward;              #指定类型为转发。

     forward {only|first};      #指定转发的方式,only表示将指定范围内的所有查询都转发,first只转发一次,无回应则自己完成查询。

     forwarders { "acl" };        #指定转发的范围。

     };

    <view> #DNS view:能够智能地自动判断访问者的IP地址,然后根据不同的访问者把域名分别解析成不同的IP地址,从而让不同的IP指向在不不同网络上的主机,例如使网通用户会访问到


网通服务器,电信用户会访问到电信服务器。

    view [NAME] {                #如果在服务器上设定了view,则所有的区域设定都要包含在view中。

    match clients { "acl"; };    #指定view所负责的范围。

    zone "name" {};

     ...                            包含的区域。

    };


   2.2、named.rfc1912.zones区域文件简要注解

// named.rfc1912.zones:
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "localhost" IN {   #定义本本地的区域
type master;      #类型属于master、属于自己的
file "named.localhost";   #指定的文件
allow-update { none; };   #不允许任何人传送的
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;     
file "named.loopback";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {  #定义反向解析的
type master;     #类型属于master、属于自己的
file "named.loopback";  #指定的文件
allow-update { none; };  #不允许任何人传送的
};
zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};


三、实战Bind配置正反向解析、主从、VIEW

    平台:centos 6.7

    Bind版本:9.8

    本地测试域名:daisy.com

    服务器:node1:192.168.2.5(主DNS);node2:192.168.2.6(从DNS);测试机器:192.168.2.9

    3.1、实战DNS正向解析

    1)、编辑配置named.conf

        options {
                listen-on port 53 { any;  };    #允许
                directory       "/var/named";           zone文件存放目录。
                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     { any; };     注释掉查询白名单,表示循序所有主机查询。
                recursion yes;          允许DNS服务器在不知道查询主机的情况下,去像其他服务器做迭代查询得到结果。
                dnssec-enable no;       关闭安全审查机制。
                dnssec-validation no;
                dnssec-lookaside no;
                /* Path to ISC DLV key */
        //      bindkeys-file "/etc/named.iscdlv.key";   使用key来加密,注释不使用。
        //      managed-keys-directory "/var/named/dynamic";    
        };
        logging {
                channel default_debug {
                        file "data/named.run";
                        severity dynamic;
                };
        };
zone "." IN {   
type hint;    
file "named.ca";   
};
include "/etc/named.rfc1912.zones";  
include "/etc/named.root.key";



    2)、编辑named.rfc1912.zones添加域daisy.com区域管理

// named.rfc1912.zones:
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "localhost" IN {   #定义本本地的区域
type master;      #类型属于master、属于自己的
file "named.localhost";   #指定的文件
allow-update { none; };   #不允许任何人传送的
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;     
file "named.loopback";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {  #定义反向解析的
type master;     #类型属于master、属于自己的
file "named.loopback";  #指定的文件
allow-update { none; };  #不允许任何人传送的
};
zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};


########以下新增daisy.com区域################

zone "daisy.com" IN {

    type master;    #类型为主服务器

    file "daisy.com.zone";    #指定资源解析库存放位置,这个路径是相对;named.conf中定义的directory的,即实际位置为/var/named/daisy.com.zone

};


  3)、添加资源记录,创建文件/var/named/daisy.com.zone,并修改过权限和属主属组

      ==以下对资源记录简介,详解见“DNS服务基础(一)”篇章

#*********************************************************************

#** $TTL 43200;  #这里可以定义全局变量,如果没有定义TTL则继承这里的43200单位秒 

#** #第一条记录必须为SOA记录

#** daisy.com. #区域名称,可以写成@直接引用当前区域名称    

#** 86400  #TTL,可不定义,会直接继承全局的  

#** IN #Internet,固定格式   

#** SOA #记录类型   

#** ns.daisy.com. #主服务器的FQDN    

#** admin.daisy.com #管理员邮箱,因为@有特殊意义用点代替 

#********************************************************************


$TTL 43200
@    86400    IN    SOA    ns.daisy.com.    admin.daisy.com. (
        201608270001 #serial number序列号
        1h    # refresh time 主辅之间刷新时间
        5m    # retry time 拉取信息不成功的重试时间
        7d    #expire time 过期时间,过期后辅服务器也将放弃解析
        1d )  # 否定答案的TTL
         
@  #引用当前域名,可省略 IN  NS  ns.daisy.com. 
    IN  MX  10  mail1.daisy.com.
    IN  MX  20  mail2 #相当于mail2.daisy.com.
ns  IN  A   192.168.2.5
www IN  A   192.168.2.6
webmail IN CNAME   mail2
mail1.daisy.com.  IN  A   192.168.2.6  
mail2.daisy.com.  IN  A   192.168.2.6


  ==修改一下权限和属主属组:

   # chown root:named /var/named/daisy.com.zone

   # chmod 640 /var/named/daisy.com.zone


  4)、检查主配置文件和区域数据文件有没有语法错误

   # named-checkconf    #这个是检查主配置文件语法的  

   # named-checkzone "daisy.com" /var/named/daisy.com.zone  #这个是检查区域数据文件语法的、指定区域和指定文件

   zone daisy.com/IN: loaded serial 4039774385

   OK

   # service named configtest  #即检查区域、又检查主配置文件的

   # service named start|restart|stop #启动服务

 

  [root@node1 named]# dig -t NS daisy.com @192.168.2.5  #检查解析
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> -t NS daisy.com @192.168.2.5
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15587
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1  #标志aa(authority answer)权威答案
;; QUESTION SECTION:
;daisy.com.INNS
;; ANSWER SECTION:
daisy.com.43200INNSns.daisy.com.
;; ADDITIONAL SECTION:
ns.daisy.com.43200INA192.168.2.5
;; Query time: 24 msec
;; SERVER: 192.168.2.5#53(192.168.2.5)
;; WHEN: Sat Aug 27 16:35:27 2016
;; MSG SIZE  rcvd: 60


    3.2、实战DNS反向解析

    1)、编辑named.rfc1912.zones添加域2.168.192.in-addr.arpa区域管理

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

    type master;

    file "192.168.2.zone";

};

    2)、添加资源记录,创建文件/var/named/192.168.2.zone,并修改过权限和属主属组

    注意:上面的正向解析A记录,反向解析要有相应的的PTR记录

$TTL 43200
@   86400   IN  SOA ns.daisy.com. admin.daisy.com. (
        201608270001
        1h
        5m
        7d
        1d )
 
    IN  NS  ns.daisy.com.    # NS记录是必须的
    IN  MX  10  mail1.daisy.com.
    IN  MX  20  mail2.daisy.com.
5   IN  PTR ns.daisy.com.
6  IN  PTR www.daisy.com.
6  IN  PTR mail1.daisy.com.
6  IN  PTR mail2.daisy.com.

  注意:正向cname不用反向解析


  ==修改一下权限和属主属组:

   # chown root:named /var/named/192.168.2.zone

   # chmod 640 /var/named/192.168.2.zone

   3)、改一下NDS服务器的指向192.168.2.5、域名和查询都指向daisy.com、编辑/etc/resolv.conf,重启服务named。

   domain daisy.com

   search daisy.com

   nameserver 192.168.2.5

   # named-checkzone "2.168.192.in-addr.arpa" 192.168.2.zone  #检查zone区域

   zone 2.168.192.in-addr.arpa/IN: loaded serial 1

   OK

   #service named restart  


[root@node1 named]# dig -x 192.168.2.5 @192.168.2.5  #检查解析
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> -x 192.168.2.5 @192.168.2.5
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43842
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1
;; QUESTION SECTION:
;5.2.168.192.in-addr.arpa.INPTR
;; ANSWER SECTION:
5.2.168.192.in-addr.arpa. 86400 INPTRns.daisy.com.
;; AUTHORITY SECTION:
2.168.192.in-addr.arpa.86400INNSns.daisy.com.
;; ADDITIONAL SECTION:
ns.daisy.com.86400INA192.168.2.5
;; Query time: 1 msec
;; SERVER: 192.168.2.5#53(192.168.2.5)
;; WHEN: Sat May 14 13:26:12 2016
;; MSG SIZE  rcvd: 125


    3.3、实战DNS主从服务器

    这里假定node2主机(192.168.2.6)DNS从服务器

    1)、node1节点主DNS服务器,/var/named/daisy.com.zone正向解析zone添加多一条备用NS、A资源记录如下:

$TTL 43200
@    86400    IN    SOA    ns.daisy.com.    admin.daisy.com. (
        201608270001
        1h   
        5m  
        7d  
        1d )  
         
@   IN  NS  ns.daisy.com. 
    IN  NS  ns1.daisy.com.  #新添加NS记录
    IN  MX  10  mail1.daisy.com.
    IN  MX  20  mail2 
ns  IN  A   192.168.2.5
ns1 IN  A   192.168.2.6   #新增A记录
www IN  A   192.168.2.6
webmail IN CNAME   mail2
mail1.daisy.com.  IN  A   192.168.2.6  
mail2.daisy.com.  IN  A   192.168.2.6


    注:node1节点主DNS服务器,/var/named/192.168.2.zone反向解析zone添加多一条备用NS、PTR资源记录如下:

$TTL 43200
@   86400   IN  SOA ns.daisy.com. admin.daisy.com. (
        201608270001
        1h
        5m
        7d
        1d )
 
    IN  NS  ns.daisy.com.    
    IN  NS  ns1.daisy.com.   #新增NS记录
    IN  MX  10  mail1.daisy.com.
    IN  MX  20  mail2.daisy.com.
5   IN  PTR ns.daisy.com.
6   IN  PTR ns1.daisy.com.  #新增PTR记录
6  IN  PTR www.daisy.com.
6  IN  PTR mail1.daisy.com.
6  IN  PTR mail2.daisy.com.


    2)、node2服务器安装Bind、修改/etc/named.conf配置(同node1操作),编辑/etc/named.rfc1912.zones解析库新增如下:

zone "daisy.com" IN {

        type slave;  #slave 配置为从服务器

        masters { 192.168.2.5; };   #需要同步主dns服务器IP

        file "slaves/daisy.com.zone";   #默认保存在/var/named/salves文件中

};   


    #service named start #启动服务

   注:这里只配置正向从DNS服务器

   3)、检查同步

    [root@node2 named]# rndc reload  #同步载入

    server reload successful

   [root@node2 named]# cd slaves/

   [root@node2 slaves]# cat daisy.com.zone  #查看/var/named/salves/daisy.com.zone文件,是否正常同步了daisy.com.zone正向解析库

$ORIGIN .
$TTL 43200
@    86400    IN    SOA    ns.daisy.com.    admin.daisy.com. (
        201608270001
        1h   
        5m  
        7d  
        1d )  
         
@   IN  NS  ns.daisy.com. 
    IN  NS  ns1.daisy.com.  
    IN  MX  10  mail1.daisy.com.
    IN  MX  20  mail2 
ns  IN  A   192.168.2.5
ns1 IN  A   192.168.2.6   
www IN  A   192.168.2.6
webmail IN CNAME   mail2
mail1.daisy.com.  IN  A   192.168.2.6  
mail2.daisy.com.  IN  A   192.168.2.6


  测试主DNS修改增加记录,是否及时同步到从DNS服务器

  注意:序列必须增加1

  ==node1增加1条A记录,并且使用rndc reload(同步载入) 如下:

$TTL 43200
@    86400    IN    SOA    ns.daisy.com.    admin.daisy.com. (
        201608270002 #修改序列号
        1h   
        5m  
        7d  
        1d )  
         
@   IN  NS  ns.daisy.com. 
    IN  NS  ns1.daisy.com.  
    IN  MX  10  mail1.daisy.com.
    IN  MX  20  mail2 
ns  IN  A   192.168.2.5
ns1 IN  A   192.168.2.6   
www IN  A   192.168.2.6
webmail IN CNAME   mail2
mail1.daisy.com.  IN  A   192.168.2.6  
mail2.daisy.com.  IN  A   192.168.2.6
*   IN  A  192.168.2.5  #新增A记录泛解析


   ==再次查看/var/named/salves/daisy.com.zone文件,是否正常同步新增记录

$ORIGIN .
$TTL 43200
@    86400    IN    SOA    ns.daisy.com.    admin.daisy.com. (
        201608270002
        1h   
        5m  
        7d  
        1d )  
         
@   IN  NS  ns.daisy.com. 
    IN  NS  ns1.daisy.com.
*   IN  A   192.168.2.5    #新同步的A记录
    IN  MX  10  mail1.daisy.com.
    IN  MX  20  mail2 
ns  IN  A   192.168.2.5
ns1 IN  A   192.168.2.6   
www IN  A   192.168.2.6
webmail IN CNAME   mail2
mail1.daisy.com.  IN  A   192.168.2.6  
mail2.daisy.com.  IN  A   192.168.2.6

 注:反向解析从DNS服务器,类似正向解析从DNS服务这里不再做演示。