在我的网络上,我的边缘路由器(一个安装了所有最新更新的 Windows 2003 R2 服务器路由器)会丢弃数据包,但仅限于特定情况下。我已经排除故障并将其隔离到我能做到的最简单的配置。不涉及 NAT。只有完全公开的 IP 地址。也没有运行防火墙,所有防火墙都已禁用。任何地方的任何接口上都没有数据包过滤器。
我有一台 Windows XP 虚拟机和我的边缘路由器(Windows 2003 r2 服务器,也是一台虚拟机),运行在 Windows 2008 x64 r2 系统上(运行虚拟服务器 2005,因为我还没有 Intel-VT 兼容芯片)。
边缘路由器可以正常访问任何外部 http 站点,没有任何问题。但是 Windows XP 计算机只能访问某些站点。这些站点可以访问:www.google.com www.txstate.edu www.workintexas.com www.thedailywtf.com。这些站点不能访问:www.yahoo.com www.utexas.edu en.wikipedia.org slashdot.org www.bing.com。
我已经通过从 XP 机器连接 net-cat 并发送 GET /\r\nHost: \r\n\r\n 消除了所有出现 DNS 问题的可能性,并且该连接也复制了该问题。
网络设置:我的静态分配的 IP 块:xxx168/29
DSL 调制解调器 -----PPPoE 连接---- xxx169[EdgeRouter] [EdgeRouter]xxx170 -----虚拟以太网----- xxx174 [Test2]
Test2 的默认网关是 xxx170,test2 可以 ping 任何有效、可访问的公共 IP 地址,不会丢失任何数据包。如果我直接从 test2(XP 机箱)通过 PPPoE 连接,一切都会正常...
我已经筋疲力尽了,我不知道这是什么原因造成的。
答案1
我解决了我的问题。事实证明,它并不局限于 HTTP,但它在 HTTP 上表现得最为明显。该问题与 PPPoE 导致的 MTU 下降及其对 TCP MSS 的影响有关。内部端点和外部主机协商的 MSS 没有考虑到网络可用的 MTU 减少,因此会超过它,导致数据包丢失。
我通过在 OpenBSD 路由器上设置清理 PF 规则来限制 MSS 来解决此问题。