Windows Server의 마이크로서비스 HTTP 포트 연결 실패

Windows Server의 마이크로서비스 HTTP 포트 연결 실패

우리는 11000-12000 범위의 특정 포트에 대한 HTTP 요청에 응답하는 여러 Windows 마이크로서비스를 Go 및 Delphi에서 작성했습니다. 이는 클라이언트의 도메인 또는 개인 네트워크(즉, 인터넷이 아닌) 내에서 내부적으로 실행되도록 설계되었습니다.

그들은 모두 완벽하게 실행됩니다하지만 하나Windows 7/10/11부터 Windows Server 2008R2/2012/2016/2019까지의 OS를 사용하는 50개 이상의 클라이언트 시스템 중 하나입니다. 이러한 각 서비스의 설치 프로세스에서는 각 서비스 exe에 대한 요청을 수락하도록 Windows 방화벽에 규칙을 설정합니다.

작동하지 않는 클라이언트 시스템 중 하나는 Windows Server 2016 Essentials를 실행하는 것입니다. 이는 해당 특정 OS를 실행하는 유일한 클라이언트 시스템이므로 문제의 원인이 될 수 있습니다.

해당 시스템의 웹 브라우저를 로컬에서 사용하여 작동하지 않는 서비스를 쿼리하는 경우에도 마찬가지입니다. 요청은 잠시 기다렸다가 시간 초과됩니다: 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 도와주셔서 감사합니다

관련 정보