Ubuntu 14.04 LTS 丢弃一些 DNS 回复并显示“DNS 目标无法访问/端口无法访问”消息

Ubuntu 14.04 LTS 丢弃一些 DNS 回复并显示“DNS 目标无法访问/端口无法访问”消息

在对我的两个 Ubuntu 14.04 LTS 进行 wireshark 测试时,我注意到一些非常奇怪的事情,我无法弄清楚:Ubuntu 似乎随机地丢弃了一些传入的 DNS 回复。这种情况在 IPv4 和 IPv6 中都会发生,使用 ip(6)tables -P INPUT ACCEPT / ip(6)tables -P OUTPUT ACCEPT。以下是 Wireshark 记录(经过混淆):

Internet 控制消息协议/类型:3(目标不可达)/代码:3(端口不可达)Internet 协议版本 4,源:208.67.222.222(208.67.222.222),目标:192.168.1.140(192.168.1.140)用户数据报协议,源端口:域(53),目标端口:26305(26305)

ICMPv6 / 类型:目标不可达 (1) / 代码:4 (端口不可达) Internet 协议版本 6,源:2620:0:ccc::2 (2620:0:ccc::2),目标:2001:db8:0:2::200 (2001:db8:0:2::200) 用户数据报协议,源端口:域 (53),目标端口:60285 (60285)

这种情况随机发生,在进行大型 DNS 基准测试时,只有少数回复丢失。当然,在不进行基准测试时也会发生这种情况。在两个不同的、全新安装且运行良好的 Ubuntu 14.04 LTS 安装上,情况都一样。

我研究了网络,找到了一些提示(与 dnsmasq/Ubuntu 处理 DNS 请求的新方法/127.0.0.1 本地名称服务器相关),但没有什么能让我摆脱那些令人讨厌的 DNS 回复丢失。

关于此事有什么线索吗?

答案1

这种情况可能发生在外部名称服务器对某个查询的响应非常迟的时候,该查询是由您机器上的某个进程在放弃并退出后发送的。这会关闭套接字并释放 DNS 解析器用于等待回复的临时端口。这种情况并不罕见,但应该很少发生,正如您所看到的。

答案2

有时 dnsmasq 会并行查询其所有名称服务器。它在首次启动时执行此操作,如果一段时间内没有流量,则查看哪个名称服务器最适合使用。在负载下,它很少这样做。每当 dnsmasq 执行并行查询时,第二个回复(如果有)将到达关闭的端口,从而创建 ICMP 不可达端口消息。

更多信息请访问https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=580064

相关内容