Windows
為什麼 IIS 不允許通過 NLB 從外部 IP 進行 TCP 連接
我有一個開發 Web 伺服器環境,其中包含 2 個配置有 NLB(多播模式)的 Windows 2012 VM。它們每個都使用一個分配有 2 個 IP 的網路適配器:共享 NLB IP 和它們的非共享單獨 IP。我們的使用模式是在其中一個 VM 處於活動 NLB 池之外時執行建構和部署。建構完成後,將新更新的伺服器添加回池中,並刪除另一台。這樣我們就可以保持恆定的正常執行時間。
我的問題是,**在 2 台伺服器中的 1 台上,IIS 不允許通過 NLB 從我們網路外部的 IP 地址進行連接。**因此,如果該伺服器是 NLB 池中唯一活動的伺服器,則內部 PC 可以連接,但我們網路外部的主機無法連接。他們得到一個超時。我可以看到使用 Wireshark 的 TCP SYN,並且沒有任何 ACK 被發回。如果我將 NLB 配置翻轉到另一台伺服器,它允許內部和外部 IP 連接。我從我控制的外部主機驗證了這一點:我嘗試了使用 NLB IP 的 HTTP 請求並得到了相同的結果。
我檢查過的事情:
- 據我所知,兩台伺服器上的 NLB 和 IIS 配置/綁定是相同的。
- IIS 中沒有 IP 過濾規則。
- Windows 防火牆已關閉。
- 我嘗試切換到單播 NLB 模式,但這破壞了一切。
- 我嘗試將 NLB 主機優先級更改為 4 和 3 而不是 1 和 2,但沒有效果。
- 我還通過在埠 80 上通過 IP 地址的簡單請求來重現問題,從而從等式中消除了主機標頭和 SSL。
如何解決 IIS 未從外部 IP 確認 SYN 的問題?它可以記錄這種事情嗎?
如果我無法解決為什麼 IIS 不允許伺服器 2 上的連接,我唯一的辦法就是從頭開始重建整個 VM 並重試…
我們的一位伺服器管理員發現了問題:問題 VM 在其網路適配器設置中缺少正確的預設網關 IP 地址。這似乎可以解釋為什麼本地請求正常但來自外部 IP 的請求被丟棄。
為了將來參考,在這種情況下的一個很好的測試是檢查 VM 是否可以啟動到外部 IP 的出站連接,例如啟動 Web 瀏覽器並訪問 google.com。我有一種感覺,當它處於不良狀態時也會失敗,並且更容易排除故障。