Windows 2008 Server 上的死網關檢測
我們最近為 stackoverflow.com 實現了 HAProxy。我們決定使用 TProxy 來維護客戶端連接的源地址,這樣我們的日誌和其他依賴於客戶端 IP 地址的 IIS 模組就不需要修改。因此,數據包以欺騙方式到達,就好像它們來自外部網際網路 IP 地址一樣,而實際上它們來自我們本地網路上的本地 192.168.xx HAProxy IP。
我們的兩個 Web 伺服器都有兩個 NIC——一個在公共網際網路上具有靜態 IP、DNS 和預設網關的可路由 B 類地址,另一個配置了指向 HAProxy 專用 IP 的預設網關的私有不可路由 C 類地址。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 或無法連接到公共網際網路上的任何其他伺服器。
我們懷疑死網關檢測錯誤地檢測到公共網關上的中斷,並將所有流量切換到此時沒有 DNS 訪問但無法驗證這一點的私有網關。
- 有沒有辦法知道死網關檢測是否正在執行,甚至是 Windows 2008 伺服器中的一個選項?
- 如果是這樣,有沒有辦法在 Windows 2008 伺服器中禁用死網關檢測?
- 如果不是,是否還有其他原因導致我們無法解析 DNS 或在短時間內無法連接?
我們無法得出關於為什麼我們無法控制死網關檢測行為的結論性結果。
我們沒有花費大量時間來解決這個問題,而是選擇讓我們的 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
現在只有一個預設網關可以消除我們的問題,因為不再使用死預設網關檢測。
那些死網關檢測 DWORD 在 Windows Server 2008 上毫無用處。它們存在的唯一原因是出於兼容性原因。TCP/IP 驅動程序和 Windows 路由器組件不再查找這些值。
我懷疑這個功能被引入了自動調整,它在 Windows Vista 中首次亮相。嘗試在提升的命令提示符下執行以下命令(並重新啟動):
netsh int tcp 設置全域 autotuninglevel=disabled
更新(添加於 2009 年 9 月 13 日 @7:58PM EST)
如果這不起作用,我們將需要更多的診斷輸出。使用 NetConnection 或 LAN 方案啟動(循環)跟踪,並讓它繼續執行,直到出現問題。
netsh 跟踪啟動方案=NetConnection maxSize=512
(範例:啟動 NetConnection 跟踪場景,最大跟踪日誌大小為 512MB)
您可以在Network Monitor 3.3中打開生成的跟踪,只需確保安裝了最新的解析器。