使用bind9搭建顶级域名NS(2)从服务器域传送、加密域传送

上一节我们成功配置了主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

发表评论