![为什么我不能拥有具有不同 TTL 的同名两个记录?](https://linux22.com/image/1483089/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E4%B8%8D%E8%83%BD%E6%8B%A5%E6%9C%89%E5%85%B7%E6%9C%89%E4%B8%8D%E5%90%8C%20TTL%20%E7%9A%84%E5%90%8C%E5%90%8D%E4%B8%A4%E4%B8%AA%E8%AE%B0%E5%BD%95%EF%BC%9F.png)
我刚刚更新了我的 TLS 证书,但还没有安装新的证书。我想添加新的 TLSA 记录,降低旧记录的 TTL,等待一段时间,然后交换证书并删除旧记录。但是,BIND 似乎不喜欢有多个具有相同名称和不同 TTL 的记录:它写入TTL set to prior TTL
其日志,现在使用我给第一个记录的 TTL 来提供这两条记录。我写了一个快速测试区域并运行它named-compilezone
,结果相同:
$TTL 1w
$ORIGIN foo.example.
@ SOA bar hostmaster (
2016020600 1d 3h 1w 1d
)
@ NS a.ns.example.
@ NS b.ns.example.
bar 1w A 203.0.113.5
bar 1d A 198.51.100.143
/dev/stdin:11: TTL set to prior TTL (604800) zone foo.example/IN: loaded serial 2016020600 foo.example. 604800 IN SOA bar.foo.example. hostmaster.foo.example. 2016020600 86400 10800 604800 86400 foo.example. 604800 IN NS a.ns.example. foo.example. 604800 IN NS b.ns.example. bar.foo.example. 604800 IN A 198.51.100.143 bar.foo.example. 604800 IN A 203.0.113.5 OK
我搜索过RFC 1035和BIND 手册,但我找不到任何内容表明同名的记录必须具有相同的 TTL。那么到底是怎么回事呢?
答案1
首先我想问你为什么要这样做,你的用例是什么?几乎肯定有更好的方法,,,
这项规定已经执行了很长时间,这就是为什么你会收到一条日志消息,指出它将两个记录规范化为具有哪个 TTL(在本例中为 604800)。
这样做的原因很简单(如果您仔细想想,就会发现这完全说得通),因为这样两个记录都会同时从 Internet 上某个解析 DNS 服务器上的缓存中刷新,并且下次在该遥远的地方询问 A 记录时,这两个记录都会被重新检索。这是您作为域所有者对远程 DNS 缓存的唯一控制权。如果不这样做,那么您的较短记录 TTL 将首先被刷新,而较长记录 TTL 则独自留在缓存中。如果这是针对 Web 服务器的,那么您就失去了那个遥远地方的冗余,因为该本地 DNS 服务器在本周剩余时间内只会返回那一条 A 记录。这最终会导致难以排除故障的不稳定行为。