我在 FreeBSD 10 上以受限配置运行 BIND 9.10.2 端口,并且遇到了一个问题,rndc reload
即使 SOA 序列已正确递增,也无法获取任何(主要主)区域文件更改。
该命令本身似乎成功了:
#rndc reload
server reload successful
在日志中我看到:
May 9 16:03:47 y named[81516]: all zones loaded
May 9 16:03:47 y named[81516]: running
但只有重新启动才能named
获取区域更新。
rndc zonestatus my_zone.com
打印旧序列。因此,BIND 无法重新读取区域文件。
我该如何调试它?
答案1
如果这确实是一个动态更新的区域(allow-update
/update-policy
由于区域文件已指定,因此直接编辑区域文件是不安全的!
在这样的设置中,BIND 负责维护区域文件;缓冲日志文件 ( .jnl
) 中的更改并定期重写区域文件本身。
对区域数据的所有更改都应通过动态更新协议进行,并由 BIND 管理,而不是通过直接更改区域文件进行。无论如何更改区域文件都会导致行为不一致,因为区域文件内容将与日志内容和状态不同步named
。
简而言之,通常你使用动态更新对此类区域进行所有更改(例如使用nsupdate
或任何其他客户端),但如果出于某种原因你必须直接控制区域文件,你可以使用以下方法暂时暂停动态更新:rndc freeze
然后继续使用rndc thaw
)。暂停更新是一种相当具有侵入性的操作(任何更新都将失败,并且更改历史记录可能会被清除,具体取决于ixfr-from-differences
),因此您可能不应该在正常操作期间执行此操作。