了解 DNS 区域 SOA 记录中的 TTL

了解 DNS 区域 SOA 记录中的 TTL

假设我在 DNS 服务器中为 192.0.2.0/24 网络创建了一个反向区域文件,并且我的 DNS 服务器将成为反向区域 2.0.192.in-addr.arpa 的权威服务器。在这个反向区域文件中,我使用以下参数创建了起始授权记录:

$ dig @localhost -t SOA 2.0.192.in-addr.arpa. +noall +answer
2.0.192.in-addr.arpa. 604800 IN      SOA     primary-DNS-server secondary-DNS-server 2015010600 28800 7200 1209600 86400
$ 

我说的对吗?这个反向区域的 DNS TTL 是 86400 秒?这意味着如果递归(缓存)名称服务器从此区域请求 PTR 记录,那么此递归名称服务器将缓存结果 86400 秒?

答案1

追溯到 1997 年,这应该是多个 SOA 记录解释中的一个正确的解释。:) 那时的情况还比较模糊。

RFC 2308将 SOA 记录的最后一个字段重新归类为消极的缓存间隔,也称为NCACHE字段。RFC2308 §4 最适合于此。它不仅将其重新定义为字段NCACHE,还解释了为什么将默认 TTL 编码到 SOA 记录中从一开始就是错误的。(后者的重点以粗体显示)

4 - SOA 最小字段

SOA 最小字段在过去已被超载,具有三种不同的含义,即区域中所有 RR 的最小 TTL 值、不包含 TTL 值的 RR 的默认 TTL 以及否定响应的 TTL。

尽管是最初定义的含义,但其中的第一个,即区域内所有 RR 的最小 TTL 值,在实践中从未被使用过,因此被弃用。

第二,主区域文件中不包含明确 TTL 的 RR 的默认 TTL 仅与主服务器相关。区域传输后,所有 RR 都有明确的 TTL,因此无法确定记录的 TTL 是明确设置的还是区域传输后从默认值派生的。 如果服务器不要求 RR 明确包含 TTL 值,则它应该提供一种机制,而不是 SOA 记录的 MINIMUM 字段的值,从中获取缺失的 TTL 值。如何做到这一点取决于实现。

主文件格式[RFC 1035 第 5 节]扩展为包含以下指令:

                       $TTL <TTL> [comment]

出现在指令之后且未明确包含 TTL 值的所有资源记录的 TTL 均设置为 $TTL 指令中指定的 TTL。没有明确 TTL 的 SIG 记录从 SIG 记录的“原始 TTL”中获取其 TTL [RFC 2065 第 4.5 节]。

当前含义的剩余部分,即用于否定响应的 TTL,是 SOA 最小字段的新定义含义。

具体来说:

  • SOA 记录的最后一个字段(NCACHE)指定当查询结果为 NXDOMAIN 时远程名称服务器应缓存否定响应的时间。
  • $TTL默认 TTL 由软件配置中的默认值定义,或者由基于文本的区域文件的指令等同的内容定义。
  • 这种实现的结果是,无法通过 DNS 协议查询远程名称服务器来确定区域的默认 TTL。$TTL和系列不是记录,因此您无法查询它们,它们也无法在区域传输中存活。(相反,所有缺失的 TTL 将在区域传输时替换为此值)

正如安迪所说,如果各个记录指定了自己的 TTL,则默认 TTL 就没有意义了。

答案2

差不多。soa 记录本身的 TTL 为 86400 秒,并且取决于服务器端软件,这将是该区域的默认 TTL。

该区域内的单个记录(例如 PTR 或 NS)的 TTL 可以被覆盖。我相信对任何单个 DNS 记录的递归查询都会返回其自己的 TTL,尽管我这样说是基于观察而不是参考文档。

相关内容