为什么我不能拥有具有不同 TTL 的同名两个记录?

为什么我不能拥有具有不同 TTL 的同名两个记录?

我刚刚更新了我的 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 1035BIND 手册,但我找不到任何内容表明同名的记录必须具有相同的 TTL。那么到底是怎么回事呢?

答案1

首先我想问你为什么要这样做,你的用例是什么?几乎肯定有更好的方法,,,

这项规定已经执行了很长时间,这就是为什么你会收到一条日志消息,指出它将两个记录规范化为具有哪个 TTL(在本例中为 604800)。

这样做的原因很简单(如果您仔细想想,就会发现这完全说得通),因为这样两个记录都会同时从 Internet 上某个解析 DNS 服务器上的缓存中刷新,并且下次在该遥远的地方询问 A 记录时,这两个记录都会被重新检索。这是您作为域所有者对远程 DNS 缓存的唯一控制权。如果不这样做,那么您的较短记录 TTL 将首先被刷新,而较长记录 TTL 则独自留在缓存中。如果这是针对 Web 服务器的,那么您就失去了那个遥远地方的冗余,因为该本地 DNS 服务器在本周剩余时间内只会返回那一条 A 记录。这最终会导致难以排除故障的不稳定行为。

相关内容