Windows 2008 Server 上的死网关检测

Geo*_*gas 9 networking windows-server-2008 tcpip haproxy

我们最近为 stackoverflow.com 实施了 HAProxy。我们决定使用 TProxy 来维护客户端连接的源地址,因此我们的日志和其他依赖于客户端 IP 地址的 IIS 模块不需要修改。因此,数据包以欺骗方式到达,就好像它们来自外部 Internet IP 地址一样,而实际上它们来自我们本地网络上的本地 192.168.xx HAProxy IP。

我们的两个 Web 服务器都有两个 NIC - 一个公共互联网上的可路由 B 类地址,具有静态 IP、DNS 和默认网关,另一个私有不可路由的 C 类地址配置了指向 HAProxy 专用 IP 的默认网关。HAProxy 有两个接口——一个公共接口和一个私有接口,负责在接口之间透明地路由数据包并将流量引导到适当的 Web 服务器。

以太网适配器 Internet:

   描述 。. . . . . . . . . . : 网卡#1
   DHCP 启用。. . . . . . . . . . : 不
   自动配置已启用。. . . : 是的
   IPv4 地址。. . . . . . . . . . : 69.59.196.217 (首选)
   子网掩码 。. . . . . . . . . . : 255.255.255.240
   默认网关 。. . . . . . . . : 69.59.196.209
   DNS 服务器。. . . . . . . . . . : 208.67.222.222
                                       208.67.220.220
   基于 Tcpip 的 NetBIOS。. . . . . . . : 启用

以太网适配器私有本地:

   描述 。. . . . . . . . . . : 网卡#2
   DHCP 启用。. . . . . . . . . . : 不
   自动配置已启用。. . . : 是的
   IPv4 地址。. . . . . . . . . . :192.168.0.2(首选)
   子网掩码 。. . . . . . . . . . : 255.255.255.0
   默认网关 。. . . . . . . . : 192.168.0.50
   基于 Tcpip 的 NetBIOS。. . . . . . . : 启用

我们在每个 Web 服务器上禁用了自动度量,并为可路由的公共类 B 分配了 10 的度量,为我们的私有接口分配了 20 的度量。

我们还设置了这两个注册表项:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"DeadGWDetectDefault"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"EnableDeadGWDetect"=dword:00000000
Run Code Online (Sandbox Code Playgroud)

大约每天两次,我们会看到其中一台 Web 服务器无法联系 DNS 或与公共互联网上的任何其他服务器建立连接的问题。

我们怀疑死网关检测错误地检测到公共网关上的中断,并将所有流量切换到此时没有 DNS 访问权限但无法验证这一点的私有网关。

  1. 有没有办法知道死网关检测是否正在运行,甚至是 Windows 2008 服务器中的一个选项?

  2. 如果是这样,有没有办法在 Windows 2008 服务器中禁用死网关检测?

  3. 如果不是,是否还有其他原因导致我们在短时间内无法解析 DNS 或无法连接?

Raf*_*era 5

那些死网关检测 DWORD 在 Windows Server 2008 上是无用的。它们存在的唯一原因是出于兼容性原因。TCP/IP 驱动程序和 Windows 路由器组件不再查找这些值。

我怀疑此功能已集成到 Windows Vista 中首次亮相的 Auto-Tuning 中。尝试在提升的命令提示符下执行以下操作(并重新启动):

netsh int tcp set global autotuninglevel=disabled


更新(美国东部时间 2009 年 9 月 13 日下午 7:58 添加

如果这不起作用,我们将需要更多诊断输出。使用 NetConnection 或 LAN 方案启动(循环)跟踪并让它继续运行,直到出现问题。

netsh 跟踪开始场景=NetConnection maxSize=512

(示例:启动 NetConnection 跟踪方案,最大跟踪日志大小为 512MB)

您可以在网络监视器 3.3 中打开生成的跟踪,只需确保安装最新的解析器


Geo*_*gas 5

关于为什么我们无法控制死网关检测的行为,我们无法得出结论性的结果。

我们没有花费大量时间来解决这个问题,而是选择让我们的 HAProxy 实例将流量路由到网关出站,并将两个 Web 服务器的默认网关设置为 haproxy 的 IP 并删除内部网关地址。

  [ soweb1 ] 69.59.196.220, GW=69.59.196.211 [haproxy]
       |
       +---- [haproxy] 69.59.196.211, GW 69.59.196.209
       |
    [ gw ] 69.59.196.209
Run Code Online (Sandbox Code Playgroud)

现在只有一个默认网关可以解决我们的问题,因为不再使用死默认网关检测。