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

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

我这里描述了网络设置:

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

目前,我可以 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

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

答案1

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

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

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

相关内容