Windows 2008 忽略免费 ARP 请求

Windows 2008 忽略免费 ARP 请求

我们最近在路由器故障转移后发现了一个问题,我们的 Windows 2008 盒子在故障恢复后没有开始与主路由器通信。

当我们进行一些挖掘时,他们仍然有来自辅助路由器的 ARP 条目。根据TechNet 博客这是设计使然:

首先,Windows Vista 或 Windows Server 2008 将不更新如果收到 ARP 广播,则邻居缓存除非它是接收方广播 ARP 请求的一部分。这意味着,当在装有 Windows Vista 和 Widows Server 2008 的网络上发送免费 ARP 时,如果存在 IP 地址冲突,这些系统将不会使用不正确的信息更新其缓存。

其次,似乎只有当计算机无法再与当前缓存中的计算机通信时,Windows 邻居缓存 (arp-cache) 才会更新。它不会偶尔发出 ARP 请求以确保缓存不会过时。虽然这在初始故障转移期间不是问题,但在故障恢复期间,当两个框都处于活动状态时,这会导致 Windows 继续与辅助框通信。

有什么办法可以强制 Windows 2008 接受免费 ARP 请求?

答案1

经过测试后似乎修补程序 2582281修复了该问题。您可以使用他们的修补程序请求页面

我使用未打补丁的 Windows 2008 R2 对此进行了测试arping。我向同一网络 L2 段内的一台机器添加了辅助 IP 64.34.119.80。然后我从不同的机器网络(sudo arping -U 64.34.119.80 -I bond0 -c1)。之后,我在看到它在 wireshark 中收到 arp 后,从 windows 框中 ping 64.34.119.80。然后我应用了修补程序并重复了测试。

此外,似乎 arping 命令不需要使用单播 MAC 地址而是广播 MAC,因为这是我的测试中忽略的唯一类型的 GARP。

补丁前:

在此处输入图片描述

在此 wireshark 捕获中,GARP 请求后的 ping 是不是发送到 GARP 所来自的 MAC 目的地,因此您可以看到 GARP 被忽略。

补丁之后:

在此处输入图片描述

在本次测试中,修补之后,GARP 请求似乎得到了满足,因为 ping 命令被发送到 GARP 所来自的 MAC 地址。

因此从这些测试来看,修补程序 2582281 似乎解决了 GARP 广播被忽略的问题。

答案2

刚才研究我自己的 TCPIP 问题时,我偶然发现了这个非常有趣的 Hotfix:

http://support.microsoft.com/kb/2582281

原因:

出现此问题的原因是应用程序服务器的 TCP/IP 堆栈错误地忽略了不必要的地址解析协议 (ARP) 请求。

这听起来很像您遇到的问题。而且这也是一个全新的修补程序,发布于 2011 年 7 月 22 日,所以您第一次遇到它时它还不存在。

答案3

尝试netsh interface ipv4 set interface x basereachable=y其中 x 是接口索引,y 是您想要的 ARP 超时(以毫秒为单位)。请记住从具有管理员权限的命令提示符执行此操作!

答案4

先决条件
1. WinPCAP 4.0.1(4.1.2 版本不起作用)
- http://www.winpcap.org/archive/4.0.1-WinPcap.exe(Windows 版本)
2. Wireshark 1.6.7
3. 由于 arping 限制,网络接口上禁用 IPv6
4. arping
- http://mathieu.carbou.free.fr/pub/arping/2.06/arping.zip(Windows 二进制)

执行
1. 获取接口名称
- “E:\Program Files\Wireshark\tshark.exe” -D
- 来自 Wireshark 接口详细信息
2. 执行 arping,发送 ARP Gratuitous 请求
- arping.exe -A -i \Device\NPF_{4399F778-AF25-4B6D-AFFB-A1F2C7DFA667} 10.20.30.50 -c 3 -S 10.20.30.50
其中 10.20.30.50 是您想要向网络(路由器)公布的 ip 地址

相关内容