如何追踪 DNS 查询的路由?

如何追踪 DNS 查询的路由?

... 到响应它的 DNS 服务器?当我使用 Google 提供的公共 DNS 服务器 (8.8.8.8) 时,这是“nslookup”报告的 DNS 服务器 (8.8.8.8),但 www.dnsleaktest.com 网站显示的 IP 号不同,实际上是两个,74.125.189.22 和 74.125.189.23。有没有办法跟踪 DNS 查询从 8.8.8.8 到 74.125.189.22 所采用的路由,包括最终在中间查询的其他 DNS 服务器?我尝试了 nslookup 的调试选项,但调试信息中没有对 74.125.189.22 的引用。

答案1

是的,你可以使用挖掘+追踪但它仅在外部起作用。

我每天都在工作中这样做。我可以告诉你,没有任何工具可以“追踪”企业环境中发生的 DNS 转发路径。

DNS 遍历有两种模型。

  1. 根提示和区域委派
  2. 有条件转发和全局转发

第一个是公共互联网的运作方式。这很容易追踪。您可以使用

dig +trace

第二个是公司内部 DNS 的工作方式。这无法通过命令进行跟踪

当我必须追踪 #2 时,我会手动进行

  • 查看ipconfig /全部识别我的第一跳 DNS 服务器
  • 登录第一跳DNS服务器(linux或者windows)
  • 绘制出特定区域转发规则,以及全球的转发
  • 对于我正在故障排除的域,使用上述规则来确定查询的去向
  • 登录到下一个服务器(在转发路径中)并重复
  • 直到我找到权威域名服务器

答案2

8.8.8.8 不是单个 DNS 服务器,而是一个 DNS 服务器的任播网络,有数百个 DNS 服务器,安装在世界各地。当您使用 Google 的公共 DNS 作为 DNS 时,互联网会将您的 DNS 查询引导到最近的 Google DNS 服务器。此 DNS 服务器将作为通常的 DNS 解析器名称服务器运行。

  1. 如果它具有该查询的缓存的、未过期的结果,它将把它作为答复发送。
  2. 如果没有,它将查找哪些名称服务器对特定域具有权威性,并从中检索结果。它将以递归方式运行查找,解析它找到的任何 CNAME,直到它以实际 IP 或 NXDOMAIN(未找到域)响应。

如果是第二种情况,Google 名称服务器向权威服务器发出的请求将来自数百个 Google 公共 IP 之一,但不会来自任播 IP(8.8.8.8),因为任播地址仅用于定义目的地,而不是源。因此,您在网站中看到的 IP 应该能够通过任何 whois 服务验证它们属于 Google。

答案3

我自己从未使用过它,但看起来 dnsracer 可以满足你的要求。

http://www.mavetju.org/unix/dnstracer.php

我不确定 Windows 上是否有这样的工具,但 Linux Debian 存储库中有一个可用的包。

答案4

如果我理解正确的话,您想要跟踪 DNS 查询从客户端到目标的路径。您可以使用 scapy 的内置 traceroute 功能执行 DNS tracert。

>>> ans,unans=traceroute("8.8.8.8",l4=UDP(sport=RandShort())/DNS(qd=DNSQR(qname="superuser.com")))
Begin emission:
Finished sending 30 packets.
.*........................*.....***
Received 35 packets, got 5 answers, remaining 25 packets
   8.8.8.8:udp53
1  192.168.0.1     11
2  172.20.136.129  11
3  172.16.13.96    11
5  213.94.72.44    11
12 216.239.47.185  11

相关内容