上一节我们成功配置了主NS服务器。DNS系统在网络中的地位可谓重中之重,一旦DNS服务失效,几乎所有服务都随之停止。所以设置冗余备份非常重要。这一节我们来尝试搭建一个从服务器。
从服务器配置
我们可以配置一个从服务器,只从主服务器拉取所有记录数据,当主服务器内容发生改变时,主服务器也能通知从服务器,重新拉取。
主从服务器配置非常简单,主服务器配置只需增加一行:
zone "mewwoof.cn" IN {
type master;
file "/etc/bind/mewwoof.cn.db";
allow-query {any;};
allow-transfer {
12.23.34.45; 2001:2345::123;
};
notify yes; # 非必需,默认会开启通知
};
安装完从服务器后,只需添加相应的配置到配置文件,设置主服务器地址即可:
zone "mewwoof.cn." IN {
type slave;
masters {
1.2.3.45; 2408:1245::234;
};
file "slaves/mewwoof.cn.db"; # 注意最好写相对路径,这个文件将存到临时文件夹
};
分别重启主从服务,可以看到从服务器输出日志:
named[2345]: transfer of 'mewwoof.cn/IN' from 1.2.3.45#53 connected using 12.23.34.45#12345
named[2345]: zone mewwoof.cn/IN: transferred serial 2022010215
...
...Transfer completed: 1 messages, 90 records, ...
dig mewwoof.cn. SOA @localhost
测试一下,返回正确的序列号,说明传送成功。
注:貌似需要打开TCP53端口才能成功传输区域文件,而不是解析用的UDP53。
然后修改主服务器上的区域文件,比如加一条TXT记录,检查并重新加载区域文件:
named-checkzone mewwoof.cn. /etc/bind/mewwoof.cn.db # 检查区域文件
rndc reload # 重新加载区域文件,无需重启服务
若无错误,再打开从服务器的日志,可以看到:
named[2346]: client @0df3edfe 52.74.208.55#38873 : received notify for zone 'mewwoof.cn'
named[2346]: zone mewwoof.cn/IN: notify from 1.2.3.45#42678: serial 2022010216
named[2346]: zone mewwoof.cn/IN: Transfer started.
named[2346]: transfer of 'mewwoof.cn/IN' from 1.2.3.45#53 connected using 12.23.34.45#12345
named[2346]: zone mewwoof.cn/IN: transferred serial 2022010216
...
...Transfer completed: 1 messages, 90 records, ...
再次使用dig
查看,就可以发现最新修改已经应用了。事实上每次主服务器rndc reload
都会通知从服务器拉取。
你可能会认为使用明文传输域数据不安全,寻求一种加密的方案。那么下面我们来介绍如何加密传输这些数据。
加密域传送
RFC2845规定了TSIG(Transaction Signature),用于NS服务器之间的认证和加密。
首先,生成一个密钥。一些老的文章可能用的是dnssec-keygen,现在应该使用tsig-keygen。使用一个域名格式的名称(带根域名),生成并保存到文件:
tsig-keygen -a hmac-sha512 host1-host2. > host1-host2.key
将这个密钥分别上传到主、从服务器:
scp ./host1-host2.key root@server1:/etc/bind/
scp ./host1-host2.key root@server2:/etc/bind/
为了加强安全,建议将文件权限设置为640(需要保留bind组的读取权限):
chown root:bind /etc/bind/host1-host2.key
chmod 640 /etc/bind/host1-host2.key
在主、从服务器都将密钥文件包含进配置文件/etc/bind/named.conf:
include "/etc/bind/host1-host2.key"
在配置文件中为特定服务器启用加密:
server 12.23.34.45 {
keys { "host1-host2."; };
};
server 2001:2345::123 {
keys { "host1-host2."; };
};
从服务器类似,为特定服务器启用加密。
分别重启主从服务器,查看从服务器日志:
named[4559]: zone mewwoof.cn/IN: Transfer started.
named[4559]: transfer of 'mewwoof.cn/IN' from 1.2.3.45#53: connected using 12.23.34.45#53515 TSIG host1-host2
named[4559]: zone mewwoof.cn/IN: transferred serial 2022010216: TSIG 'host1-host2'
named[4559]: transfer of 'mewwoof.cn/IN' from 1.2.3.45#53: Transfer status: success
named[4559]: transfer of 'mewwoof.cn/IN' from 1.2.3.45#53: Transfer completed: 1 messages, 90 records, 3092 bytes, 0.128 secs (24156 bytes/sec)
说明成功用加密的方式传送域。
TSIG参考文献:https://bind9.readthedocs.io/en/latest/advanced.html#tsig