我有一台包含许多区域的 BIND9 服务器,我需要将区域文件的序列号增加一。有些区域使用 YYYYMMDDXX 格式,但其他区域只是将其增加一,因为它们是动态 DNS 区域,因此对我来说,更新所有区域只需要增加一即可。
有办法吗?我试过,sed
但我缺乏自动执行此操作的知识。
答案1
这在“sed”中很难做到,但在“awk”中却相当容易。
awk '{ if ( $0 ~ /[\t ]SOA[\t ]/ ) $7=$7+1; print}'
如果它是 SOA 行(“SOA”,前后有空格或制表符),则增加字段 7(序列号)。打印每一行。
这仅会增加所要求的序列号,但是您仍然需要触发重新加载并通知辅助服务器以传播更改。
答案2
由于绑定区域格式非常灵活,任何简单的文本操作工具都可能有点危险。
实现目标的一种方法可能是为所有区域启用动态更新,并使用 acl 限制仅从本地计算机进行访问。然后只需添加,然后使用 nsupdate 在每个区域中删除临时记录。Bind 将为您处理序列的更新。
答案3
如果您正在处理一次性事件并需要强制传输,那么rndc retransfer
忽略序列号并直接执行传输是首选工具。这种方法不应用于日常工作(它会影响序列号的准确性),但有时带外工作的需求更大。
按照下面的循环应该可以达到目的:
rndc -s ${someslave} -k ${yourkey} retransfer ${i}.example.com
(附注:这也是在未来增加序列号时修复序列号的首选方法)
答案4
我使用了一个叫做氢操作 BIND 区域文件。我第一次了解它是在 O'Reilly DNS 和 BIND 一书中。您需要“-y”选项。