![Solaris 不在 ARP 表中记录 MAC 地址](https://linux22.com/image/561438/Solaris%20%E4%B8%8D%E5%9C%A8%20ARP%20%E8%A1%A8%E4%B8%AD%E8%AE%B0%E5%BD%95%20MAC%20%E5%9C%B0%E5%9D%80.png)
我注意到 Solaris 9 服务器不断向我们的 DNS 服务器拥有的 IP 地址发送 ARP 请求。
DNS 服务器会用其 MAC 地址进行应答,但 Solaris 9 不会在 ARP 表中记录该地址。您可以从 DNS 服务器顺利地 ping DNS 服务器,但对于发出的每个数据包,它都需要一次又一次地请求 MAC 地址。
以下是监听的输出:
10.0.0.12 -> (broadcast) ARP C Who is 10.0.0.4, 10.0.0.4 ?
10.0.0.4 -> 10.0.0.12 ARP R 10.0.0.4, 10.0.0.4 is 0:14:4f:ac:cf:2e
10.0.0.12 -> (broadcast) ARP C Who is 10.0.0.4, 10.0.0.4 ?
10.0.0.4 -> 10.0.0.12 ARP R 10.0.0.4, 10.0.0.4 is 0:14:4f:ac:cf:2e
10.0.0.12 -> (broadcast) ARP C Who is 10.0.0.4, 10.0.0.4 ?
10.0.0.4 -> 10.0.0.12 ARP R 10.0.0.4, 10.0.0.4 is 0:14:4f:ac:cf:2e
即使它正在应答,10.0.0.4 也从未显示在 ARP 表中,但 ping 始终有效(大概是因为它每次请求时都请求 MAC 地址,因此可以发送 ICMP 数据包)。
我已确认请求中的源 MAC 地址确实来自 Solaris 9 服务器,并且回复也具有来自 DNS 服务器的正确源地址。基本上一切似乎都运行正常,除非... ARP 中毒?
更奇怪的是,10.0.0.0/24 网络中的所有其他 IP 地址都可以正常工作。它们的 MAC 地址缓存在 ARP 表中,但这个没有。
/etc/resolv.conf 中指定为 DNS 服务器的 IP 地址是否有任何特殊之处,导致 ARP 出现这种情况?其他 2 个 DNS 服务器不在同一个子网上,因此我无法测试其他地址是否也会出现这种情况。
# ndd -get /dev/arp arp_cleanup_interval
60000
答案1
事实证明系统缺少一些重要补丁:
- 4157198 arp 和 ip 模块之间的 ARP 缓存不一致
- 4978063 SO_DONTROUTE 选项导致每个帧都产生 ARP 流量
- 4653899 ARP 数据包处理问题