私たちは、11000 ~ 12000 の範囲の特定のポートで HTTP 要求に応答する Windows マイクロサービスをいくつか (Go と Delphi で) 作成しました。これらは、クライアントのドメインまたはプライベート ネットワーク内で内部的に実行されるように設計されています (つまり、インターネット上ではありません)。
すべて完璧に動作しますしかし、1つ当社の 50 を超えるクライアント システムは、Windows 7/10/11 から Windows Server 2008R2/2012/2016/2019 までの OS で稼働しています。これらの各サービスのインストール プロセスでは、Windows ファイアウォールにルールを設定し、各サービス exe への要求を受け入れます。
動作しないクライアント システムは、Windows Server 2016 Essentials を実行しています。この特定の OS を実行しているクライアント システムはこれだけなので、これが問題の要因である可能性があります。
そのシステムでローカルに Web ブラウザを使用してサービスを照会しても、サービスは機能しません。リクエストはしばらく待機してからタイムアウトします: ERR_CONNECTION_TIMED_OUT。ただし、アドレス 127.0.0.1 (localhost) の同じポートへの同じリクエストは即座に機能し、サービスが実際に実行されていることを証明します。対象のサービスが実行されていない場合、または間違ったポートを指定した場合の失敗モードは異なります。その場合は、すぐに「接続拒否」エラーが発生します: ERR_CONNECTION_REFUSED
システムにはサードパーティのウイルス対策製品やファイアウォール製品はインストールされておらず、通常の Windows ファイアウォールで Windows Defender のみを使用しています。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