在BIND9中自动增加一个区域文件的序列号

我有一个有很多区域的BIND9服务器,我需要增加一个区域文件的序列号。 一些区域使用YYYYMMDDXX格式,但其他区域只是增加一个,因为它们是dynamicDNS区域,因此全部更新将为我完成这项工作。

有办法做到这一点? 我试着用sed但我缺乏知识自动做到这一点。

由于绑定区域格式非常灵活,任何简单的文本操作工具都可能有点危险。

一种方法来实现你的目标,可能是为所有的区域启用dynamic更新,而acls只限制从本地机器访问。 然后只需添加添加,然后使用nsupdate删除每个区域中的临时logging。 绑定将为您处理更新序列。

如果您正在处理一次性事件,并且需要强制转移,那么rndc retransfer转发是忽略序列号并正好执行的工具。 这种方法不应该用于日常工作(它会抛出序列号的准确性),但有时需要工作在带外。

围绕下面的循环应该做的伎俩:
rndc -s ${someslave} -k ${yourkey} retransfer ${i}.example.com

(作为一个侧面说明,这也是确定一个序列号时,增加到未来的首选方式)

如果所有域的SOA都是相同的,只要将SOA放在一个单独的文件db.soa或其他东西中,然后将其包含在每个区域中:

 $INCLUDE db.soa 

这样,只有一个地方需要增加。 另外,根据具体的实现方式,无论你在做什么,将UNIX历元时间用作串行,而不是每次递增一次更有意义。 你可以创build一个脚本,比如说touch-zones.sh,它会覆盖db.soa文件,并在串口中使用当前的unix时间戳。 那么所有的区域都会被包含在内,这些区域的序列会增加。

我用一个名为h2n的工具来操作BIND区域文件。 我第一次了解到O'Reilly的DNS和BIND书。 你想要“-y”选项。

一个很好的HOWTO关于这个是: http : //www.microhowto.info/howto/reset_the_serial_number_of_a_dns_zone.html

这也是DNS和BIND书(2006版)推荐的方法。 要理解的重要的事情是,DNS SOA序列号“环绕”。 不幸的是,典型的YYYYMMDDXX序列号会随着dynamic更新而中断,我认为完全可以放弃这一点,并使用单调递增的序列号并保持版本控制中的区域文件。

对于具体的问题,我认为面临的更大的挑战是确定让所有区域都是更大的区域的数量,并将这些数据同步。

关于SX的类似问题:

  1. 将DNS序列号更改为过去
  2. https://unix.stackexchange.com/questions/36869/how-can-i-reset-or-lower-the-serial-used-in-bind-dns-servers-soa-record