我想找出能给我 DNS 回复的递归 DNS 服务器的地址。比如tracepath example.com
查找我的请求被转发到哪个 DNS 服务器的 IP 地址。我找到了,dig +trace example.com
但它更多的是关于这个递归 DNS 服务器所采用的 DNS 解析路径。
我知道resolvectl status
systemd 的解析会显示我实际使用的 DNS 服务器,而不是 127.0.0.53:53。据我所知,这将我引向我的路由器,该路由器的 DNS 服务器也指向局域网中的另一个路由器或实际的 ISP DNS 服务器,当我使用 dig/nslookup 时,该服务器会给我答案。
通常的方法是查看调制解调器连接统计信息,查找为我提供 isp dhcp 服务器的 dns ip。但我正在寻找一种更好的方法,即简单的命令行工具。
经过一番搜索,我偶然发现了https://www.dnsleaktest.com这实际上就是我正在寻找的功能。但我并不关心我的 ISP 是否会代理请求,我只想知道如何在不依赖某些网站 API 的情况下获取递归 DNS 服务器的 IP。
答案1
我只想知道如何获取递归 DNS 服务器的 IP
如果您询问哪个 DNS 服务器对该请求有准确的答案,那么就无法找到。
有一个很好的答案http://serverfault.com这也解释了为什么:
我想知道到底哪个服务器有答案。这可能吗?
这是无法实现的。你不会发现具体的被咨询的权威服务器在 DNS 回复的有效负载中的任何地方都有名称。存在 CHAOS 查询,其目的是识别特定的递归服务器回复您,但没有等价的东西来提取递归者从中获取数据的确切权威服务器的名称。
Phillip 链接的 StackOverflow 问答提供了有关如何识别
NS
递归 DNS 响应的授权部分中存在的记录列表的说明。不过,这是服务器的完整列表,而不是具体的服务器。即使这些信息足以满足您的使用,DNS 标准仍将这些信息视为可选信息,并且为了减少内部来源的反射攻击的有效载荷大小,在递归响应中看到这些信息的情况越来越少。如果您知道区域的名称,则可以
NS
通过显式请求来请求完整的记录列表。这需要知道您位于区域的顶点;对example.com
NS 记录的请求将返回所需的响应,但www.example.com
除非委托给另一组服务器,否则不会返回www
。在这种情况下,您别无选择,只能反复向后工作,直到发现区域的顶点。长话短说,没有可靠的短路径(即单一查询)来获取有关全部来自递归服务器的上游权限,并且不了解响应查询的特定权威服务器的方法,而无需控制权威服务器并在每个服务器上创建唯一数据。(如果这样做,请为此目的创建一个唯一的区域,以便它不会干扰您更敏感的生产区域传输)
来源:找出哪个 DNS 服务器回答了你的查询,回答者安德鲁·B