Windows Server 上的微服务 HTTP 端口连接失败

Windows Server 上的微服务 HTTP 端口连接失败

我们用 Go 和 Delphi 编写了几个 Windows 微服务,它们响应 11000-12000 范围内特定端口上的 HTTP 请求。它们旨在在客户端的域或私有网络内部运行(即不在互联网上)。

它们在所有上运行完美但一个我们 50 多个客户端系统,操作系统范围从 Windows 7/10/11 到 Windows Server 2008R2/2012/2016/2019。这些服务的安装过程都会在 Windows 防火墙中设置规则,以接受对每个服务 exe 的请求。

它们无法工作的一个客户端系统运行的是 Windows Server 2016 Essentials。这是唯一运行该特定操作系统的客户端系统,因此这可能是问题的一个因素。

即使在该系统上本地使用 Web 浏览器查询服务,它们也无法工作。请求只需等待一段时间,然后超时:ERR_CONNECTION_TIMED_OUT。但是,对地址 127.0.0.1(本地主机)的相同端口的相同请求会立即起作用 - 证明服务确实正在运行。当目标服务未运行或我们寻址错误的端口时,失败模式会有所不同。在这种情况下,我们会快速收到“拒绝连接”故障:ERR_CONNECTION_REFUSED

系统上没有安装任何第三方防病毒或防火墙产品,仅使用 Windows Defender 和普通的 Windows 防火墙。我们尝试了所有能想到的方法来对付 Windows 防火墙,包括彻底关闭它。但我们尝试的所有方法都没有任何效果。

我们尝试使用许多备用端口号,但直到达到 49000 范围及以上时才取得成功,但除非完全不可避免,否则我们真的不想更改我们的正常端口号范围。

我们花了很多时间试图找到解决方案,但毫无收获。我们真心希望有聪明人能提供一些想法,找到问题的根源。

答案1

正如@HelpingHand 在对原始问题的评论中所指出的,问题出在 Windows DirectAccess。

客户端未使用 DirectAccess,但 Windows Server Essentials 已预先配置为分配 6001-47000 之间的所有端口。PowerShell 命令证实了这一点

Get-NetNatTransitionConfiguration

结果如下:

InstanceName        : DirectAccess
PolicyStore         : PersistentStore
State               : Enabled
TcpMappingTimeout   : 7200
InboundInterface    :
OutboundInterface   : {Ethernet}
PrefixMapping       : {fd3b:4e13:1a52:7777::/96,0.0.0.0/0}
IPv4AddressPortPool : {192.168.1.10,6001-47000}

InstanceName        : DirectAccess
PolicyStore         : ActiveStore
State               : Enabled
TcpMappingTimeout   : 7200
InboundInterface    :
OutboundInterface   : {Ethernet}
PrefixMapping       : {fd3b:4e13:1a52:7777::/96,0.0.0.0/0}
IPv4AddressPortPool : {192.168.1.10,6001-47000}

我运行了 PowerShell 命令

Set-NetNatTransitionConfiguration –IPv4AddressPortPool @("192.168.1.10, 6001-10950", "192.168.1.10, 12050-47000")

它改变了 DirectAccess 的端口分配,为我们的服务留出了所需的空间,然后端口立即开始工作。我甚至不需要重新启动任何东西。

感谢您的帮助@HelpingHand

相关内容