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。這是運行該特定作業系統的唯一客戶端系統,因此這可能是導致問題的一個因素。

即使在本機上使用該系統上的網頁瀏覽器來查詢它們不起作用的服務。請求只是等待一段時間,然後逾時:ERR_CONNECTION_TIMED_OUT。然而,對位址 127.0.0.1 (localhost) 處的相同連接埠的相同請求會立即運作 - 證明服務實際上正在執行。當目標服務未運作或我們尋址錯誤的連接埠時,失敗的模式是不同的。在這種情況下,我們會快速得到「拒絕連線」失敗: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

相關內容