为什么要在 DNS 中发送权威域名服务器?

Ahm*_*Was 11 domain-name-system dns-hosting wireshark dns-server dns-zone

出于好奇,我正在检查 Wireshark DNS 数据包。我可以看到有来自主机的 DNS 查询,然后是来自 DNS 服务器的 DNS 响应。一切都和预期的一样。

但是,如果进一步检查查询,可以看到服务器还发送了 NS(权威名称服务器)。我的问题是:为什么?

作为主机,我只关心IP。这是 DNS 的要点,将名称解析为 IP 地址

为什么,作为主持人,我需要 NS 信息?

HBr*_*ijn 15

传统上,名称服务器不会向查询发送简短响应,而是发送符合RFC 1034 - 1035 的完整响应,其中包括包含指向权威名称服务器的资源记录的授权部分。

原因可能是由于 DNS 的分布式和委托性质,当时在响应中包含“真实来源”似乎是个好主意。

编辑:顺便说一句:发送权限部分符合 RFC,但不是所有查询响应的强制性要求。

在 BIND 中,可以使用minimal-responses yes | no;指令调整此行为,其中默认值是no并且查询响应的权威和附加部分将始终完全填充。
默认情况下,其他名称服务器 CloudFlare、AWS Route 53、Infoblocks 和其他可能已经总是发送如此少的响应。Google 的公共解析器将在可用时返回一个 Authority 部分,即 Cloudflare。


认为包含权威部分和实际查询响应的传统起源于现在已经过时的RFC882第 15-16 页的(伪)代码中

If the name server is not authoritative, the code copies 
the RRs for a closer name server into the response.  

The last section of the code copies all relevant RRs into the response.
Run Code Online (Sandbox Code Playgroud)

  • @LightnessRacesinOrbit 对我来说,答案是不言而喻的:DNS 服务器不只是告诉我 example.com 是 abcd;它告诉我是谁这么说的。这在认识论上是合理的,因为当我实际上只知道某些第三方断言这是事实时,我无法准确地告诉您我知道某事是事实。我发现当人们将传闻作为观察或他们的结论作为主要证据等时,更难解决问题。陈述 X 是真的和告诉我 Y 说这是真的之间的区别是巨大的。 (3认同)
  • @LightnessRacesinOrbit RFC 并不总是包含设计动机。为了澄清“当时这似乎是一个好主意” - 我*认为*一个原因是,即使当前的 RFC 没有强制要求在(伪)代码来自现已过时的 [RFC882](https://tools.ietf.org/html/rfc882) 第 15-16 页 *"...将名称服务器靠近响应。代码的最后一部分将所有相关的 RR 复制到响应中..."* (2认同)

Bar*_*mar 5

服务器不知道请求是来自最终客户端,还是来自另一个名称服务器的递归请求。如果它是另一个名称服务器,它可以缓存权威部分并在将来直接查询这些名称服务器。

我相信这是协议中的最初理由,但它具有安全隐患。响应可以包括一个列出虚假名称服务器的授权部分,这已被用于缓存中毒攻击。因此,名称服务器通常不会缓存 NS 记录,除非它们是您查询的域的子域的委托记录。