Windows 更新错误 80072ee2 由 Linux 路由器引起,可能是 mtu 问题?

Windows 更新错误 80072ee2 由 Linux 路由器引起,可能是 mtu 问题?

几天以来,我网络上的 Windows 7 工作站一直无法连接到 Windows 更新。它们收到了臭名昭著的错误 80072ee2。它们连接到一个简单的 SOHO 交换机。该交换机连接到充当路由器的 Debian Wheezy 盒。路由器连接到电缆调制解调器。配置至少六个月没有改变,到目前为止一直正常工作。在调试过程中,我发现了以下解决方法:

  1. 如果我将其中一个受影响的工作站直接连接到电缆调制解调器,问题就消失。

  2. 如果我将其中一个受影响的工作站上的 MTU 从 1500 降低到 1492,问题就会消失。

这让我相信 Linux 路由器在某种程度上导致了这个问题。我运行了 wireshark 并在它尝试联系 Windows 更新时获得了客户端流量的转储。您可以在这里找到它:

http://fernoflogic.com/~rob/mtu1500.pcapng

奇怪的事情从数据包编号 70 开始。这是我的路由器发送的 ICMP 类型 3 代码 4“需要分片”消息。它声称下一跳 MTU 是 1500,这应该是正确的。它抱怨的数据包是编号 69。据称它的长度为 2960 字节。据我所知,PMTUD 应该可以解决这个问题。发生了几次重新传输,但客户端不断收到 ICMP 3:4,最终连接被断开。我曾尝试禁用“大型发送卸载”(英特尔对 TSO 的称呼),但这没有帮助。我确实有上述可用的解决方法,但我想了解为什么会发生这种情况,并在可能的情况下找到适当的解决方案。我怀疑这是我这边的硬件或配置问题。我为测试设置的客户端是 Windows 7 SP 1 的全新安装,没有任何自定义。我该怎么做,我应该寻找什么?谢谢!

答案1

回答我自己的问题:关闭 Linux 路由器内部接口上的“通用接收卸载”解决了我的问题。作为参考,这是使用ethtool -k eth1 gro off并可以保留在多个位置的,包括 /etc/network/interfaces 或 /etc/rc.local,具体取决于您的 Linux 风格。GRO 目前似乎遇到了一些问题:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=754294

相关内容