主辅同步的过程:
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
注意事项:
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报文的发送。