我在 Debian 上运行 bind 9.16.33 名称服务器。它一直运行良好,但突然间几个域停止工作。命名日志显示:
dns_master_load: ki9.us.db:3: TTL 604800 exceeds configured max-zone-ttl 86400
dns_master_load: ki9.us.db:3: out of range
zone ki9.us/IN: loading from master file ki9.us.db failed: out of range
zone ki9.us/IN: not loaded due to errors.
这件事是在半夜突然发生的,并未经过任何改变。
答案1
自上次 dnssec 密钥重新签名以来的某个时间点,我添加了一些 TTL 为 604800 的新记录。这max-zone-ttl
是 的一部分dnssec-policy
。根据v9.18 文档:
这指定了区域的最大允许 TTL 值。加载区域文件时,任何 TTL 值高于 max-zone-ttl 的记录都会导致区域被拒绝。
这可确保在滚动到新的 DNSKEY 时,旧密钥将保持可用,直到 RRSIG 记录从缓存中过期。max-zone-ttl 选项可确保区域中的最大 TTL 不高于已知且可预测的值。
因此,直到密钥被旋转后,问题才出现。我一直使用默认值dnssec-policy
,其max-zone-ttl
值显然是 86400。
我没有改变我的记录,而是决定增加 中的最大值named.conf.local
。当它不起作用时,情况如下:
zone "ki9.us" {
dnssec-policy default;
....
}
我把它改成了这样:
dnssec-policy "bigttl" {
max-zone-ttl 604800;
}
zone "ki9.us" {
dnssec-policy bigttl;
....
}
然后重新启动 bind,问题就解决了。新的“bigttl”策略只需定义一次,然后就可以在我的每个域的区域部分中引用它。