我有一个开发 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。我有一种感觉,当它处于不良状态时也会失败,并且更容易排除故障。