... 到响应它的 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 遍历有两种模型。
- 根提示和区域委派
- 有条件转发和全局转发
第一个是公共互联网的运作方式。这很容易追踪。您可以使用
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 解析器名称服务器运行。
- 如果它具有该查询的缓存的、未过期的结果,它将把它作为答复发送。
- 如果没有,它将查找哪些名称服务器对特定域具有权威性,并从中检索结果。它将以递归方式运行查找,解析它找到的任何 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