Windows 2008 Server上的死网关检测


9

我们最近为stackoverflow.com实现了HAProxy。我们决定使用TProxy来维护客户端连接的源地址,因此依赖于客户端IP地址的日志和其他IIS模块将不需要修改。因此,实际上是来自本地网络上的本地192.168.xx HAProxy IP,这些数据包仿佛来自外部Internet IP地址一样被欺骗。

我们的两个Web服务器都有两个NIC-一个在公共Internet上具有静态IP,DNS和默认网关的可路由B类地址,以及一个配置有默认网关的私有不可路由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

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

我们怀疑无效网关检测错误地检测到公共网关上的中断,并且正在将所有流量切换到此时没有DNS访问但无法进行验证的专用网关。

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

  2. 如果是这样,是否可以在Windows 2008 Server中禁用死网关检测?

  3. 如果不能,是否有其他原因导致我们失去解析DNS或短时间连接的能力?


1
尽管有时会对此设置感到不满意(请参阅blogs.technet.com/timmcmic/archive/2009/04/26/…),但它对我们来说效果非常好-从HAProxy到我们的IIS站点的所有流量似乎仍然来自原始IP地址。这样可以节省大量时间,因为我们必须(查找方法)将IIS及其众多插件配置为使用HTTP_X_FORWARDED_FOR标头。
Jarrod Dixon

1
为什么在192.168.0.2接口上配置了网关?您可以配置一个空的默认网关(实际上,这是Windows在具有两个接口时提示您执行的操作)。
波特曼2009年

@Portman-因为我们的Web框看到的流量与原始客户端IP完好无损,因此不会将响应发送到我们的网络-这就是为什么我们必须拥有通往HAProxy框的默认网关的原因。
Jarrod Dixon

@Jarrod-该配置似乎可疑。如果要在该Web服务器上运行非平衡网站该怎么办?响应将通过HAProxy路由吗?您将如何处理远程桌面之类的内容?我意识到这并不能解决问题,但这似乎就像是“您做错了”,这是daivdsmalley(礼貌地)说的。
波特曼2009年

4
@ Jeff / Geoff / Jarrod-我讨厌表述显而易见,但是你们都是软件开发人员,为什么不雇用一个专家来解决这一问题呢?弄脏您的双手非常好,但是这里存在明显的知识鸿沟,这正在间歇地影响业务,并且您显然已经花费了很多宝贵的时间而不利用开发的核心技能。相信我,让某人进行修复,然后在发挥作用后动动脑筋。地狱,即使是虚拟主机提供商,当关键任务/服务受到影响时,我们也需要吸引人们来弥合这些差距。
Kev

Answers:


5

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

我怀疑此功能已集成到Windows Vista中首次启用的自动调整中。尝试在提升权限的命令提示符下执行以下命令(然后重新启动):

netsh int tcp set global autotuninglevel =禁用


更新(2009年9月13日,美国东部标准时间晚上7:58添加

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

netsh跟踪启动方案= NetConnection maxSize = 512

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

您可以在Network Monitor 3.3中打开结果跟踪,只需确保安装了最新的解析器即可


好主意,但似乎也没有用..刚刚经历了5分钟的传出流量中断-神秘地修复了它自己。
杰夫·阿特伍德

@Jeff:嗯,我们需要更多数据队长!请参阅上面的编辑。
拉斐尔·里维拉

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

现在只有一个默认网关可以消除我们的问题,因为不再使用无效的默认网关检测。


4

我会问为什么您甚至需要将默认网关更改为HAproxy。通常,除非您将默认网关指向一个高可用性的N + 1设置,否则在发生某些问题时,网关IP可以将其故障转移到另一台路由器/机器,因此,您根本不应该更改默认网关。如果您的HAproxy机器发生故障,并且您没有任何带外访问,则Web服务器将断开Internet连接。

我相信您可能这样做的原因是因为您在设置中使用了Tproxy来使客户端IP地址显示在日志中,而不是代理服务器的IP中,所以我建议您这样做

  1. 将“ option forwardfor ...”添加到您的HAproxy配置中
  2. 安装x-for-for-ISAPI筛选器
  3. 从设置中删除tproxy
  4. 通过直接连接Internet将默认网关更改回您之前使用的同一网关

我没有Windows机器可以对此进行测试,但是我相信它应该能够达到预期的效果,而不会造成不希望的连接丢失。


我只是发现您对有关此设置的原始问题的评论。但是,如果您的服务器失去了互联网连接,我会怀疑“它对我们来说
很棒”

3
另外,您可以查看更强大的解决方案,例如ldirectord + heartbeat,它仅在内核级别重定向流量,因为这样根本不涉及代理。我广泛使用此设置,效果很好。linuxvirtualserver.org/docs/ha/heartbeat_ldirectord.html
davidsmalley

我们已经研究过使用x-forwarded-for标头和IIS过滤器来更改日志,但是我们不知道其他(可选)IIS模块在其操作中如何(或是否)使用标头。
Jarrod Dixon

感谢您的linuxvirtualserver.org/HighAvailability.html链接-那里的信息真棒!我对这些主题一无所知(这就是为什么我不是所有设置这些的人!),但我正在尝试尽快学习。也许我们可以使用heartbeat + ldirectord,类似于linuxvirtualserver.org/docs/ha/ultramonkey.html与我们最喜欢的HAProxy一起使用的方法。
Jarrod Dixon

-1

当涉及到互联网访问(通常)时,默认网关仅应用于表示通往Internet的路径。如果定义了多个默认网关,则OS路由器无法决定要使用哪个默认网关,并且如果一个默认网关指向一个cul-de-sac(例如,多段LAN),则在那里转发给Internet的数据包就是不会做到的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.