为什么 dig 失败但 tcpdump 显示响应?

为什么 dig 失败但 tcpdump 显示响应?

我遇到过这样一种情况,当通过 UDP 查询 DNS 时,我的 dig 命令因超时错误而失败,但当我使用 tcpdump 检查数据包时,它显示了有效的响应。

我有一个可以正常工作的服务器进行比较,并且似乎在故障主机上发送了一个额外的数据包。

我的 dig 命令和来自好主机(名称和 IP 地址已被更改以保护无辜者)的输出是:

[root@client1 ~]# dig +short @192.168.0.5 myhost.fqdn.com A
192.168.0.10

tcpdump 命令及其输出为:

[root@client1 ~]# tcpdump -i eth0 -nn src 192.168.0.5 or dst 192.168.0.5
13:16:58.656802 IP 192.168.0.2.19554 > 192.168.0.5.53: 58262+ [1au] A? myhost.fqdn.com. (59)
13:16:58.658654 IP 192.168.0.5.53 > 192.168.0.2.19554: 58262* 1/0/1 A 192.168.0.10 (75)

在坏主机上我得到了这个:

[root@client2 ~]# dig +short @192.168.0.5 myhost.fqdn.com A
;; connection timed out; no servers could be reached

tcpdump 显示以下内容:

[root@client2 ~]# tcpdump -i eth0 -nn src 192.168.0.5 or dst 192.168.0.5
15:35:54.000079 IP 192.168.0.2.26944 > 192.168.0.5.53: 44036+ [1au] A? myhost.fqdn.com. (59)
15:35:54.001738 IP 192.168.0.5.53 > 192.168.0.2.26944: 44036* 1/0/1 A 192.168.0.10 (75)
15:35:54.001771 IP 192.168.0.2 > 192.168.0.5: ICMP 192.168.0.2 udp port 26944 unreachable, length 111

客户端是 Oracle Linux,DNS 服务器是 Windows AD 2016,有一个硬件防火墙显示 TCP 和 UDP 流量都被允许通过端口 53,并且 Windows 防火墙日志也显示数据包被接受。

我不知道为什么这会失败(特别是当从 tcpdump 看起来好像服务器实际上正在用记录做出响应时。

任何见解都将不胜感激。

相关内容