如果不允许在同一个记录集内设置不同的 TTL,为什么 bind 允许通过记录设置 TTL?
如果我使用以下命令设置区域 ttl:
$TTL 39600
然后使用以下命令设置记录 TTL:
@ 300 IN A 1.1.1.1
我的日志中收到警告:
TTL set to prior TTL (300)
这是因为我有“同一记录集内的记录有不同的 TTL,这是不允许的”
如果不允许,那么逐条记录设置 TTL 有什么意义呢?
谢谢
答案1
答案2
BIND 允许您为各个记录设置与区域默认 TTL 不同的明确 TTL,但您不能为具有相同名称的同一类型记录设置不同的 TTL。
你可以这样做:
$TTL 39600
@ 300 IN A 192.0.2.100
你不可以做这个:
$TTL 39600
@ 300 IN A 192.0.2.100
@ IN A 192.0.2.101
为什么?因为这会导致某些记录从缓存中超时,而其他记录则被遗漏,从而为您的用户提供错误的 DNS 查询答案。例如,当您有两个同类型同名的记录时,BIND 将以循环方式回答,在两个 IP 地址之间平衡负载。在上面的例子中,203.0.113.100 将在 5 分钟后超时,而另一个记录将被缓存 11 小时。解析器不会重新查询具有较短 TTL 的记录,因为据它所知,它有该 A 记录查询的答案。
以下是 TXT 记录示例:
$TTL 39600
@ IN TXT "My Google verification code"
@ 300 IN TXT "My SPF record"
@ 300 IN TXT "My DKIM record"
@ 300 IN TXT "My DMARC record"
如果允许上述示例,解析器将在查询后缓存所有 3 条 TXT 记录,但我的 SPF、DKIM 和 DMARC 记录将在 5 分钟后消失。使用此解析器的任何邮件服务器都无法看到这些记录,并且我的邮件投递可能会出现问题。