为什么 IIS 不允许通过 NLB 建立来自外部 IP 的 TCP 连接

为什么 IIS 不允许通过 NLB 建立来自外部 IP 的 TCP 连接

我有一个开发 Web 服务器环境,由 2 个配置了 NLB(多播模式)的 Windows 2012 VM 组成。它们每个都使用一个网络适配器,并分配了 2 个 IP:共享 NLB IP 和它们的非共享个人 IP。我们的使用模式是在其中一台 VM 不在活动 NLB 池中时运行构建和部署。构建完成后,将新更新的服务器重新添加到池中,并删除另一台服务器。这样我们就可以保持持续的正常运行时间。

我的问题是在两台服务器中的一台上,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 并再试一次...

答案1

我们的一位服务器管理员发现了这个问题:问题虚拟机的网络适配器设置中缺少正确的默认网关 IP 地址。这似乎解释了为什么本地请求没有问题,但来自外部 IP 的请求却被丢弃了。

供将来参考,在这种情况下,一个好的测试是检查虚拟机是否可以启动到外部 IP 的出站连接,例如启动 Web 浏览器并访问 google.com。我觉得在状态不佳时,这也会失败,并且更容易排除故障。

相关内容