- 공유 링크 만들기
- X
- 이메일
- 기타 앱
이 글의 목적은 Windows 11 환경에서 원격 데스크톱 연결이 되지 않을 때 포트 3389 상태를 체계적으로 확인하고, 방화벽 규칙과 서비스, 그룹 정책, 라우터 포트포워딩 및 공인망 제약까지 현장에서 바로 적용 가능한 절차로 해결하도록 돕는 것이다.
문제 진단 개요: 증상에서 원인으로 빠르게 매핑하다
연결 실패 화면이나 지연, 인증 오류 메시지는 원인 범위를 좁히는 단서가 된다. 아래 표를 통해 증상과 고빈도 원인을 1차 매핑한 뒤 포트 3389 중심의 심층 점검을 수행한다.
| 주요 증상 | 가능 원인 | 즉시 확인 포인트 |
|---|---|---|
| 연결 시간 초과 | 포트 3389 미청취, 방화벽 차단, 라우터 포워딩 누락, ISP CGNAT | 로컬 청취 상태, 인바운드 규칙, WAN 포트포워딩, 공인 IP 가시성 |
| 인증 전 단계에서 끊김 | RDP 서비스 비활성, UDP 차단, TLS/CredSSP 호환 문제 | TermService 상태, UDP 3389 허용, 이벤트 로그 |
| 암호 입력 후 즉시 종료 | NLA 정책 불일치, 권한 부여 부족 | NLA 설정, Remote Desktop Users 그룹, 보안 정책 권한 |
| 사내는 연결됨·외부는 실패 | 라우터 NAT/포워딩 누락, CGNAT, 이중 NAT | WAN 공인 IP 존재, 3389 TCP/UDP 포워딩, VPN 대안 |
| 간헐적 끊김·화면 지연 | UDP 손실, 대역폭 부족, 과도한 DPI/보안장비 검사 | UDP→TCP 강제, QoS/우선순위, 중간장비 설정 |
1단계: 로컬에서 포트 3389 청취 상태를 사실 확인하다
대상 PC에서 포트 3389가 LISTEN 상태인지 확인한다. PowerShell에서 다음 명령을 권장한다.
# 1) RDP 기본 포트 3389 청취 확인 Get-NetTCPConnection -LocalPort 3389 -State Listen
2) Test-NetConnection로 로컬 포트 개방 검증
Test-NetConnection -ComputerName localhost -Port 3389
3) 누가 포트를 점유하는지 PID 단서
netstat -ano | findstr :3389
PID 소유 프로세스 식별
tasklist /fi "pid eq "
LISTEN 항목이 없으면 서비스 또는 설정 문제이며, 다른 프로세스가 3389를 점유한다면 충돌이다. 충돌 시 해당 프로세스를 중지하거나 RDP 포트를 변경해야 한다.
2단계: RDP 기능·서비스·정책을 정확히 활성화하다
2-1. 시스템 설정
- 설정 > 시스템 > 원격 데스크톱에서 원격 데스크톱을 켜기로 전환한다.
- PC 이름을 기록하고 네트워크 프로필이 개인 또는 도메인인지 확인한다.
- 고급 설정에서 네트워크 수준 인증(NLA) 사용 여부를 정책과 클라이언트 버전에 맞춰 결정한다.
2-2. 서비스 상태
services.msc에서 아래 서비스를 확인한다.
- Remote Desktop Services(TermService) = 실행·자동
- Remote Desktop Services UserMode Port Redirector = 실행·수동 또는 자동
# PowerShell로 서비스 점검·시작 Get-Service TermService Start-Service TermService Set-Service TermService -StartupType Automatic 2-3. 그룹 정책 핵심 스위치
gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > Remote Desktop Services > Remote Desktop Session Host > Connections에서 아래를 확인한다.
- Allow users to connect remotely using Remote Desktop Services = 사용
- Limit number of connections = 필요 시 최대 동시 연결 수 조정
- Select RDP transport protocols = UDP 불안정 환경에서는 TCP만으로 강제
보안 설정은 Security 노드에서 암호화 수준과 NLA 요구 사항을 검토한다.
3단계: Windows 방화벽에서 3389 허용 규칙을 재점검하다
기본 구성은 규칙 그룹으로 제공되므로 그룹 단위 활성화가 가장 빠르다.
# 규칙 그룹으로 원격 데스크톱 허용 netsh advfirewall firewall set rule group="remote desktop" new enable=Yes
세부 규칙 확인 (TCP/UDP)
Get-NetFirewallRule -DisplayGroup "Remote Desktop" | Format-Table -Auto
필요한 경우 TCP/UDP 3389 수동 허용
New-NetFirewallRule -DisplayName "RDP TCP 3389 In" -Direction Inbound -Protocol TCP -LocalPort 3389 -Action Allow
New-NetFirewallRule -DisplayName "RDP UDP 3389 In" -Direction Inbound -Protocol UDP -LocalPort 3389 -Action Allow
4단계: 원격에서 포트 3389 가시성을 검증하다
클라이언트 PC에서 대상 호스트의 포트를 테스트한다. 이름 해석이 불안정하면 IP로 직접 검증한다.
# 원격 포트 3389 테스트 Test-NetConnection -ComputerName <대상IP또는FQDN> -Port 3389
RDP 표준 포트 상수 사용
Test-NetConnection -ComputerName <대상> -CommonTCPPort RDP
ICMP가 차단돼도 TCP 포트 테스트는 가능하다
TCP 연결이 실패하면 네트워크 경로 또는 방화벽·NAT 설정 문제가 높다. UDP만 실패하면 성능은 저하되나 TCP로는 접속 가능할 수 있다.
5단계: 라우터 포트포워딩과 공인망 제약을 해결하다
5-1. 표준 포트포워딩
- 대상 PC의 내부 IP를 고정 또는 DHCP 예약으로 고정한다.
- 라우터에서 TCP 3389과 UDP 3389를 대상 PC 내부 IP로 포워딩한다.
- 이중 NAT 환경이면 상위 장비에도 동일 포워딩을 구성한다.
5-2. 공인 IP 부재·CGNAT
공인 IP가 회선에 부여되지 않거나 CGNAT 환경이면 포트포워딩이 작동하지 않는다. 이 경우 아래 대안을 사용한다.
- 기업 VPN 또는 사이트 간 터널을 구성한다.
- 클라우드 중계형 보안 원격액세스 솔루션을 도입한다.
- ISP에 공인 IP 옵션을 신청한다.
6단계: 포트 충돌 또는 포트 변경 전략을 적용하다
다른 서비스가 3389를 점유하면 RDP가 청취하지 못한다. 충돌 시 포트 변경이 필요하다.
# 현재 포트 확인 reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber
포트 변경 예: 53389
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 53389 /f
방화벽 규칙 추가
New-NetFirewallRule -DisplayName "RDP TCP 53389 In" -Direction Inbound -Protocol TCP -LocalPort 53389 -Action Allow
New-NetFirewallRule -DisplayName "RDP UDP 53389 In" -Direction Inbound -Protocol UDP -LocalPort 53389 -Action Allow
7단계: 사용자 권한과 NLA 불일치를 정정하다
- 대상 계정을 로컬 Remote Desktop Users 그룹에 추가한다.
- secpol.msc > 로컬 정책 > 사용자 권한 할당에서 Allow log on through Remote Desktop Services에 대상 계정 또는 그룹이 포함되는지 확인한다.
- NLA를 사용하는 경우 클라이언트가 현대적 인증을 지원해야 하며, 도메인·신뢰 관계가 정상이어야 한다.
8단계: 이벤트 로그로 근본 원인을 증명하다
연결 전·후 단계의 오류는 이벤트 로그에 기록된다.
# 원격 연결 관련 핵심 로그 구독 예시 # RemoteConnectionManager / RDP-CoreTS / Security 관련 채널 wevtutil qe Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational /c:30 /f:text /rd:true wevtutil qe Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational /c:30 /f:text /rd:true
PowerShell로 최근 200건 필터
Get-WinEvent -LogName "Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational" -MaxEvents 200 | Format-List
Get-WinEvent -LogName "Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational" -MaxEvents 200 | Format-List
인증 실패, 암호화 불일치, 라이선스 한도, 세션 제한 등의 오류 코드를 확인하고 해당 정책을 수정한다.
9단계: 네트워크 경로와 DPI·보안장비 변수를 배제하다
중간 구간에서 3389/TCP 또는 3389/UDP를 차단하는 경우가 있다. 사내 방화벽·IPS·프록시·제로트러스트 게이트웨이의 정책을 점검한다. 외부 회선에서는 ISP 레벨 차단 여부도 고려한다.
# TCP 경로 지연·손실 대략 확인 Test-NetConnection -ComputerName <대상> -Port 3389 -InformationLevel Detailed
MTU 이슈가 의심되면 Path MTU를 점검하고 VPN 터널 MTU도 함께 조정
10단계: 보안 최적화와 운영 수칙을 정립하다
- 인터넷에 직접 3389를 노출하지 않는다. VPN·ZTNA·RD 게이트웨이 경유 접속을 표준으로 한다.
- 강력한 암호 정책과 계정 잠금 정책을 설정한다.
- 필요 시 특정 국가·IP 대역만 허용하는 방화벽 스코프를 사용한다.
- 정기적으로 이벤트 로그를 검토하고 실패 패턴을 탐지한다.
- 백업 접속 경로를 마련한다. 예: 관리용 VPN 계정, OOBM, 콘솔 접속
현장 체크리스트: 15분 내 복구 루틴
- 대상 PC에서 Get-NetTCPConnection과 Test-NetConnection localhost:3389로 청취 확인을 한다.
- TermService 실행·자동 설정을 확인한다.
- netsh advfirewall로 원격 데스크톱 규칙 그룹을 활성화한다.
- 클라이언트에서 Test-NetConnection 대상:3389를 실행한다.
- 외부 접속이면 라우터 TCP/UDP 3389 포워딩과 공인 IP 유무를 확인한다.
- NLA 불일치 시 정책을 일시 조정하고 접속 후 보안 기준으로 재설정한다.
- 이벤트 로그에서 최근 오류 코드를 확인해 정책·인증·암호화 문제를 종결한다.
구성 예제: 스크립트로 초기화 자동화
# RDP 활성화, 방화벽 허용, 서비스 보장 스크립트 예시 (관리자 PowerShell) # 1) RDP 기능 켜기 (레지스트리) Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections" -Value 0
2) 방화벽 규칙 활성화
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
3) 서비스 기동
Set-Service TermService -StartupType Automatic
Start-Service TermService
4) 청취 확인
Test-NetConnection -ComputerName localhost -CommonTCPPort RDP
자주 혼동되는 포인트 정리
| 항목 | 정답 | 근거/메모 |
|---|---|---|
| UDP 3389 필요 여부 | 권장 | 성능·체감 품질에 유리하나 필수는 아니다. 차단 시 TCP만으로도 접속 가능하다. |
| 포트 변경의 보안 효과 | 제한적 | 가시성 감소 효과뿐이다. VPN·인증 강화를 우선한다. |
| 내부 테스트 실패 | 설정 문제 | 라우터 이전 단계에서 실패하므로 서비스·방화벽·정책을 재점검한다. |
| 같은 LAN에서 공인 IP로 테스트 | 신뢰 불가 | NAT 루프백 미지원 라우터에서는 실패한다. |
| Windows 11 Home 원격 호스트 | 불가 | 클라이언트로는 가능하나 호스트는 불가하다. |
고급 진단: TLS·CredSSP·암호화 불일치
낡은 클라이언트나 강화된 서버 정책이 혼합되면 초기 보안 교환에서 끊긴다. 임시 진단으로 암호화·전송 정책을 완화해 연결을 확인하고, 원인 확인 후 즉시 원복한다.
# TCP만 사용하도록 강제 (정책 적용 후 gpupdate /force 또는 재부팅) # gpedit.msc - Connections - Select RDP transport protocols = Use only TCP
레거시 호환을 잠시 허용했다면 접속 확인 후 즉시 보안 수준을 되돌린다
운영 체크 매트릭스: 역할별 점검 책임
| 역할 | 점검 항목 | 빈도 |
|---|---|---|
| 시스템 관리자 | RDP 서비스·정책·패치 현행화 | 월 1회 |
| 네트워크 관리자 | NAT/포워딩·보안장비 정책·로그 | 월 1회 |
| 보안 관리자 | 공격 시도 로그·계정 잠금·MFA 적용 | 주 1회 |
FAQ
3389가 LISTEN인데 외부에서만 실패한다. 무엇을 보나?
라우터 포트포워딩, 상위 장비 이중 NAT, 공인 IP 존재 여부, ISP CGNAT 환경을 순서대로 확인한다. 같은 내부망에서는 공인 IP 테스트가 실패할 수 있으므로 외부 네트워크에서 검증해야 한다.
NLA를 끄면 연결되는데 켜면 실패한다. 왜 그런가?
클라이언트가 최신 CredSSP·TLS를 지원하지 않거나 도메인 신뢰 문제일 가능성이 높다. 최신 RDP 클라이언트로 재시도하고 인증서·시간 동기화를 확인한 뒤 NLA를 유지하는 구성을 권장한다.
보안을 해치지 않으면서 외부에서 접속하는 가장 안전한 방법은 무엇인가?
인터넷에 직접 3389를 노출하지 않고 VPN 또는 ZTNA를 경유하는 방법이 표준이다. 방화벽에서 접근 가능한 발신지 IP를 엄격히 제한하고 계정 잠금 정책 및 MFA를 적용한다.
포트를 3389에서 다른 번호로 바꾸면 스캐닝을 피할 수 있나?
무차별 스캔 노이즈는 줄어들지만 보안 강화 효과는 제한적이다. 포트 변경보다 VPN 경유·강력 인증·로그 모니터링이 우선이다.
Windows 11 Home에서 호스트가 꼭 필요하다. 대안은 무엇인가?
Pro 에디션 업그레이드 또는 상용 원격 솔루션을 검토한다. 비공식 패치나 우회 방법은 보안·법적 리스크로 인해 권장하지 않는다.