不确定是否可行,但我正在尝试寻找此类设置的解决方案:
- BIND9 服务器,由 Puppet 管理(https://github.com/ajjahn/puppet-dns)Puppet 为所有静态主机填充区域文件
- 除了 Puppet,我们还有一组由 Ansible 管理的网络设备,我们希望在那里动态生成 DNS 记录,并使用 nsupdate_module 更新 DNS
rndc freeze
我已经找到使用/来更新 DDNS 启用区域的方法rndc thaw
,但我的问题是,在thaw
BIND9 不想使用日志这一步,它只显示这样的错误:
journal file is out of date: removing journal file
我找到了另一个选项,ixfr-from-differences
但是有了这个选项,之后rndc thaw
,所有动态变化都会消失。
即看起来这种冻结/修改/解冻方法在手动更改下运行良好,但不符合配置管理模式,因为在修改步骤中,Puppet 正在从目录中重新创建所有静态 DNS 记录并丢弃 ddns 主机。
因此,也许有人看到了更多的技巧,如何解决这样的问题,或者也许我遗漏了什么?
答案1
BIND 中的动态区域是日志记录的(类似于数据库和文件系统):更新不会立即重新生成实际的区域文件(对于大型区域,这可能非常耗时或耗费 I/O);它们仅附加到 .jnl 文件中,直到发生某些定期同步。
如果我没记错的话,在较旧的 BIND 版本中rndc freeze
会自动刷新日志,但现在它不再这样做了——它只会让服务器拒绝新的更新,并且不对已经接收到日志但还未刷新的消息执行任何操作。
因此,您需要rndc sync -clean
在冻结之后但在进行编辑之前运行,以保留所有动态更改。