DNS BIND主辅同步部署

为了提高DNS服务的可用性,我们通常会部署DNS主辅同步以实现数据备份,或用以实现读写分离,DNS主辅可以部署为一主多辅,同步可以控制到具体的zone。
主辅同步的过程

master DNS服务器更新完配置后,首先会向slave DNS服务器发送notify消息。随后slave DNS服务器向master DNS服务器发送SOA查询请求,主DNS服务器返回结果给从DNS服务器,slave DNS服务器会对比其serial,如果小于自己的serial就结束同步过程。如果返回的查询结果中的serial号比自己的大,向master DNS服务器发送zone transfer请求,master DNS响应后会发送结果,slave DNS服务器接收数据,完成更新。


一、安装主辅服务器bind

参考:http://blog.csdn.net/zhu_tianwei/article/details/45045431

二、配置环境
主服务器:192.168.36.54
辅服务器:192.168.36.189
三、配置

1.主服务器配置

key "rndc-key" {
        algorithm hmac-md5;
        secret "GfdVJ8ppCKJiCejNVq3xkQ==";
};

controls {
        inet 127.0.0.1 port 953
                allow { 127.0.0.1; } keys { "rndc-key"; };
};
options{
        listen-on port 53{
                192.168.36.54;
        };
        version "vdns3.0";
        directory "/var/named";
        pid-file "/var/run/named.pid";
        session-keyfile "/var/run/session.key";
        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";
        rrset-order { 
                order cyclic;
        };
        recursion yes; 
        allow-query{
                any;
        };
        allow-query-cache{
                any;
        };
        allow-transfer{
                192.168.36.189;
        }; 
        notify yes;
        also-notify{
                192.168.36.189;
        };
        #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 "/var/named/data/named.run";
                severity dynamic;
        };
        channel query_info { 
                file "/var/named/log/query.log" versions 1 size 100m; 
                severity info; 
                print-category yes; 
                print-severity yes; 
                print-time yes; 
        }; 
 
        category queries { 
                query_info; 
                default_debug; 
        }; 
 
        channel notify_info { 
                file "/var/named/log/notify.log" versions 8 size 128m; 
                severity info; 
                print-category yes; 
                print-severity yes; 
                print-time yes; 
        }; 
 
        category notify { 
                notify_info; 
                default_debug; 
        };

        channel xfer_in_log {  
                file "/var/named/log/xfer_in.log" versions 100 size 10m;  
                severity info;  
                print-category yes;  
                print-severity yes;  
                print-time yes;  
        };  
  
        channel xfer_out_log {  
                file "/var/named/log/xfer_out.log" versions 100 size 10m;  
                severity info;  
                print-category yes;  
                print-severity yes;  
                print-time yes;  
        };  

        category xfer-in { xfer_in_log; };  
        category xfer-out { xfer_out_log; };  
 
}; 

zone "." in{
        type hint;
        file "named.root";
};
zone "localhost" in{
        type master;
        file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" in{
        type master;
        file "localhost.rev";
        allow-update { none; };
};

zone "test.com" IN {
        type master;
        file "zone/test.com.zone";
};
主要增加参数:

1)allow-transfer

语句定义:allow-transfer { address_match_list }; 

设定哪台主机允许和本地服务器进行域传输。allow-transfer也可以设置在zone语句中,这样全局options中的allow-transfer选项在这里就不起作用了。如果没有设定,默认值是允许和所有主机进行域传输。

2)notify

语句定义:notify yes_or_no | explicit;

如果是yes(默认),当一个授权的服务器修改了一个域后,DNS NOTIFY信息被发送出去。此信息将会发给列在域NS记录上的服务器(除了由SOA MNAME标示的主域名服务器)和任何列在also-notify选项中的服务器。如果是explicit,则notify将只发给列在also-notify中的服务器。如果是no,就不会发出任何报文。notify选项也可能设定在zone语句中,这样它就替代了options中的notify 语句。如果notify会使得辅域名服务器崩溃,就需要将此选项关闭。
3)also-notify

语句定义:also-notify { ip_addr [port ip_port] ; [ ip_addr [port ip_port] ; ... ] }; 

定义一个用于全局的域名服务器IP地址列表。无论何时,当一个新的域文件被调入系统,域名服务器都会向这些地址,还有这些域中的NS记录发送NOTIFY信息。这有助于更新的域文件尽快在相关的域名服务器上收敛同步。如果一个also-notify列表配置在一个zone语句中,全局options中的also-notify语句就会在这里失效。当一个zone-notify语句被设定为no,系统就不会向在全局中also-notify列表中的IP地址发送NOTIFY消息。缺省状态为空表(没有全局通知列表)。

注:bind的主辅同步可以针对具体的每一个zone,也就是说每个zone都可以配置自己的从服务器。当域名的数据量很庞大时,为提高解析效率,实现读写分离,使用一台主服务器写,并将域名均分到多台从服务器上,以提高读的效率。

如果配置到具体的zone,只需要将以上3个参数配置zone里面即可(从服务器无需变化),如下:

zone "test.com" IN {
        type master;
        file "zone/test.com.zone";
        allow-transfer{
                192.168.36.189;
        };
        notify yes;
        also-notify{
                192.168.36.189;
        };
};

2.辅服务器配置

key "rndc-key" {
        algorithm hmac-md5;
        secret "6Kb4sKpIUJq5i4ozE2AXzQ==";
};

controls {
        inet 127.0.0.1 port 953
                allow { 127.0.0.1; } keys { "rndc-key"; };
};
options{
        listen-on port 53{
                192.168.36.189;
        };
        version "vdns3.0";
        directory "/var/named";
        pid-file "/var/run/named.pid";
        session-keyfile "/var/run/session.key";
        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";
        rrset-order { 
                order cyclic;
        };
        recursion yes; 
        allow-query{
                any;
        };
        allow-query-cache{
                any;
        };
        allow-transfer{
                none;
        }; 
        #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 "/var/named/data/named.run";
                severity dynamic;
        };
        channel query_info { 
                file "/var/named/log/query.log" versions 1 size 100m; 
                severity info; 
                print-category yes; 
                print-severity yes; 
                print-time yes; 
        }; 
 
        category queries { 
                query_info; 
                default_debug; 
        }; 
 
        channel notify_info { 
                file "/var/named/log/notify.log" versions 8 size 128m; 
                severity info; 
                print-category yes; 
                print-severity yes; 
                print-time yes; 
        }; 
 
        category notify { 
                notify_info; 
                default_debug; 
        }; 
        channel xfer_in_log {  
                file "/var/named/log/xfer_in.log" versions 100 size 10m;
                severity info;
                print-category yes;
                print-severity yes;
                print-time yes;
        };

        channel xfer_out_log {
                file "/var/named/log/xfer_out.log" versions 100 size 10m;
                severity info;
                print-category yes;
                print-severity yes;
                print-time yes;
        };    

        category xfer-in { xfer_in_log; };
        category xfer-out { xfer_out_log; }; 
}; 

zone "." in{
        type hint;
        file "named.root";
};
zone "localhost" in{
        type master;
        file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" in{
        type master;
        file "localhost.rev";
        allow-update { none; };
};

zone "test.com" IN {
        type slave;
        file "zone/test.com.zone";
        masters{
                192.168.36.54;
        };
};
主要增加参数:

masters 配置主服务器

type slave指定为从服务器

四、测试

启动主辅服务器,检查是否能正常解析,然后修改主服务器zone/test.com.zone SOA中的Serial值+1,再重启主服务器,查看辅服务器日志可以看到:

18-Apr-2015 15:15:10.126 client 192.168.36.54#3028: received notify for zone 'test.com'
18-Apr-2015 15:15:10.130 zone test.com/IN: Transfer started.
18-Apr-2015 15:15:10.131 transfer of 'test.com/IN' from 192.168.36.54#53: connected using 192.168.36.189#42824
18-Apr-2015 15:15:10.134 zone test.com/IN: transferred serial 58
18-Apr-2015 15:15:10.135 transfer of 'test.com/IN' from 192.168.36.54#53: Transfer completed: 1 messages, 8 records, 211 bytes, 0.002 secs (105500 bytes/sec)
18-Apr-2015 15:15:10.136 zone test.com/IN: sending notifies (serial 58)
可以看到 辅服务器数据已经同步,可以dig查看一下结果。
查看日志方式:
1.cat /var/log/messages |grep named
2.启动参数添加-g
3.可以查看日志/var/named/log/xfer_in.log
注意事项:
A.修改区域数据文件在每次存盘时要注意增加Serial值,主要用来让辅助服务器同步主服务器的区域数据文件。
B.使用绝对域名时千万别忘了后面要带"."。
C.主配置文件named.conf的";"不能少。
1、指定可以从主DNS服务器上同步数据的主机。
在每块区域上添加参数allow-transfer,花括号内填写可以同步的主机IP,一般填写辅助DNS服务器的IP地址。
使用dig命令测试,区域同步:
1、dig -t axfr ZONE_NAME @DNS_SERVCER_IP
2、指定可以从辅助DNS服务器上同步数据的主机。
allow-transfer{none;};
我们只有一台辅助DNS服务器,所以根本不会有主机从这台机器同步数据,所以我们设置成不允许任何人同步。

其他配置说明:

BIND有适当的机制来简化域传输,并限定系统传输的负载量。下列设定应用于域传输:
max-transfer-time-in
比设定时间更长的进入的域传输将会被终止。默认值是120分钟(2小时)。
max-transfer-idle-in
在设定时间下没有任何进展的进入域传输将会被终止。默认为60分钟(1小时)。
max-transfer-time-out
运行时间比设定的时间长的发出的域传输将会被终止。默认为120分钟(2小时).
max-transfer-idle-out
在设定时间下没有任何进展的发出的域传输将会被终止。默认为60分钟(1小时)。
serial-query-rate
辅域名服务器将会定时查询主域名服务器,来确定域的串号是否改变。每个查询将会占用一些辅域名服务器网络带宽。为限制占用的带宽,BIND9可以限制每个查询发送的频率。serial-query-rate的值是一个整数,就是每秒能发送的最大查询数。默认值为20。
serial-queries
在BIND8中, serial-queries选项设定了在任何时候允许达到的最大的并发查询数。BIND9不限制串号查询的数量并忽略了serial-queries选项。它会使用serial-query-rate选项来限制查询的频率。
transfer-format
域传输可以用两种不同格式,one-answer和many-answer。transfer-format选项使用在主域名服务器上,用来确定发送哪种格式。one-answer在每个资源记录传输中使用一个
DNS消息。many-answer则将尽可能多的资源记录集中在一个消息中。many-answer是
更加有效的,但只有相对比较新的辅域名服务器才支持它,如BIND9、BIND8.x 和打了补丁的BIND4.9.5。默认的设置为many-answer。使用server语句中的相关选项,可以替代全局选项中的transfer-format设置。
transfers-in
可以同时运行的进入的域传输的最大值。默认值为10。增加transfers-in的值,可以加速辅域的收敛速度,但也可能增加本地系统的负载。
transfers-out
可以同时运行的发出的传输的最大值。超过限定的域传输请求将会被拒绝。默认值为10。
transfers-per-ns
从一台指定的远程域名服务器,同时进行的进入的域传输的最大值。默认值2。增加
transfers-per-ns的值,会加速辅域的收敛速度,但也可能增加远程系统的负载。使用
server语句中的transfer短语可以替代全局选项中的transfers-per-ns。
transfer-source
transfer-source决定在从外部域名服务器上得到域传送数据时,选哪个本地的ip地址使用在IPV4的TCP连接中。它可以选定IPV4的源地址,和可选的UDP端口,用于更新的查询和转发的动态更新。不过不做设置,它会缺省挑选一个系统中的地址(常常是最靠近远程终端服务器的接口地址)。但这个地址必须已经配置在远程终端的allow-tranfer选项中,才能进行域传送。此语句为所有的域设定了transfer-source,但如果view或zone中也使用了transfer-source语句,则全局选项中的配置就在这里失效了。
transfer-source-v6
和transfer-source一样,只是域传输是通过IPV6执行的。
notify-source
notify-source确定使用哪些本地的源地址和可选的UDP端口,用于发送NOTIFY消息。这个地址必须在辅域名服务器的master域或在allow-notify中设置。它会为所有域设定
notify-source, 但如果view或zone中也使用了notify-source语句,则全局选项中的配置就在这里失效了。
notify-source-v6与notify-source类似,但应用于ipv6地址的notify报文的发送。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值