整理BIND 9配置:把琐碎的子域合并为一个zone
我的权威DNS跑在BIND 9上,采用Hidden Master架构,并开启了DNSSEC的inline-signing。
家里用不同的VLAN和网段做了隔离。早期规划时,我简单地把网段和子域做了一对一映射,每个子域都是一个独立的zone:
example.net.(主域名)sjc.example.net.guest.sjc.example.net.iot.sjc.example.net.tiot.sjc.example.net.t.sjc.example.net.ut.sjc.example.net.
这些子域基本都由内网的DHCP服务器通过动态更新(RFC 2136)维护。这样,在内网访问某台机器时,不必去查它拿到了什么IP地址,直接用主机名加上所在的VLAN就行。不过时间长了,这套配置带来了很多不必要的维护负担:
- 每个zone都有自己的一套DNSSEC密钥。我配置的
dnssec-policy为每个zone生成一把Ed25519(RFC 8080)CSK,对应K*.key、K*.private、K*.state三个文件,目录里还堆满了各种.signed、.jnl和临时的.jbk文件。 - 每多委派一个签名子zone,父zone就得多维护一组NS和DS记录。密钥轮换时,如果旧DS还在缓存里,对应的DNSKEY却已经撤下,验证就会失败,客户端看到的就是SERVFAIL。
named.conf里写满了大同小异的zone声明和ACL,Hidden Master后面的每台辅DNS服务器上,也都得再为它们各配一遍。
这些子域都由同一台DHCP服务器、用同一把TSIG密钥更新,拆成独立的zone在安全性方面没有必要。
今天花了些时间撤销这5个子域的独立zone和委派,把记录并进sjc.example.net。主机名不变,例如myhost.iot.sjc.example.net依然按原样解析,只是不再单独维护iot.sjc这个zone。

