如果不允许在同一个记录集中设置不同的 TTL,为什么 bind 允许通过记录设置 TTL

如果不允许在同一个记录集中设置不同的 TTL,为什么 bind 允许通过记录设置 TTL

如果不允许在同一个记录集内设置不同的 TTL,为什么 bind 允许通过记录设置 TTL?

如果我使用以下命令设置区域 ttl:

$TTL 39600

然后使用以下命令设置记录 TTL:

@        300     IN      A       1.1.1.1

我的日志中收到警告:

TTL set to prior TTL (300)

这是因为我有“同一记录集内的记录有不同的 TTL,这是不允许的”

如果不允许,那么逐条记录设置 TTL 有什么意义呢?

谢谢

答案1

文件格式指定为RFC1034以及部分RFC1035。它非常古老(1987 年),并且没有专门为 BIND 或根据当前功能进行定义。这里没有什么大智慧;它只是按照惯例。

我相信,该格式还设计用于缓存之类的用途,尽管在实践中这种用法一定非常罕见。在记录缓存中,TTL 经常不同,并且缓存包含来自许多不同域的记录。

答案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 分钟后消失。使用此解析器的任何邮件服务器都无法看到这些记录,并且我的邮件投递可能会出现问题。

相关内容