如何确定 DNS 请求在 TCP 堆栈中失败的位置?

Rei*_*ien 2 ubuntu dns virtualbox

我在这里描述了网络设置:

为什么这条静态路由没有生效?

目前,我可以 ping 我的 DNS 服务器,但所有 DNS 请求都失败:

~$ ping 130.35.249.52
PING 130.35.249.52 (130.35.249.52) 56(84) bytes of data.
64 bytes from 130.35.249.52: icmp_seq=1 ttl=57 time=105 ms
64 bytes from 130.35.249.52: icmp_seq=2 ttl=57 time=111 ms
^C
--- 130.35.249.52 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 105.604/108.388/111.172/2.784 ms

~$ nslookup oracle.com 130.35.249.52
;; connection timed out; no servers could be reached
Run Code Online (Sandbox Code Playgroud)

我想不出有什么好的理由,因为 Ubuntu(据我所知)没有运行防火墙。然而,Ubuntu 是虚拟化的,所以我希望它的 VirtualBox 主机的设置方式没有问题。

sam*_*iam 5

首先,DNS主要是UDP服务,而不是TCP服务。DNS 在 UDP 端口 53 上;确保 UDP 端口为 DNS 服务器计算机上的传入连接打开。此外,DNS 可以选择使用 TCP,它使用 TCP 端口 53,但是虽然 DNS 可以在没有 TCP 的情况下正常工作,但如果没有 UDP,它就无法工作。

其次,使用dig而不是nslookup调试 DNS 问题要好得多。例如:dig @130.35.249.52 oracle.com 如果您没有 dig,请使用yum install bind-tools(RHEL/Oracle/CentOS 6) 或适用于您的 Linux 发行版的等效命令获取它。

确实,我看到您的防火墙允许 TCP 端口 53 通过;dig -t @130.35.249.52 oracle.com工作,但dig @130.35.249.52 oracle.com不起作用,因为 UDP 仍然被阻止。