네트워크 포트 전달을 구성할 수 있습니다. 타사 도구를 사용하지 않고 모든 Windows 버전에서 포트 전달 규칙을 사용하면 들어오는 TCP 연결(IPv4 또는 IPv6)을 로컬 TCP 포트에서 다른 포트 번호로 리디렉션하거나 원격 컴퓨터의 포트로 리디렉션할 수 있습니다. 또한 Windows가 특정 TCP 포트에서 수신 대기하는 서비스를 가질 필요는 없습니다. Windows 포트 포워딩은 방화벽을 우회하거나 외부 네트워크(NAT/PAT)에서 내부 호스트 또는 서비스를 숨기는 데 가장 일반적으로 사용됩니다.
Linux 세계에서 포트 포워딩은 iptables 또는 firewalld를 사용하여 아주 간단하게 구성됩니다. . Windows Server 시스템에서 RRAS(라우팅 및 원격 액세스 서비스)는 일반적으로 포트 리디렉션을 구성하는 데 사용됩니다. 그러나 모든 Windows 버전에서 잘 작동하는 포트 전달을 구성하는 더 쉬운 방법이 있습니다.
Netsh Portproxy를 사용하여 Windows 10에서 포트 전달을 구성하는 방법
Portproxy를 사용하여 Windows에서 포트 전달을 구성할 수 있습니다. Netsh 모드 명령. 명령 구문은 다음과 같습니다.
netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport
어디서
- 수신 주소 – 들어오는 연결을 수신 대기하는 로컬 IP 주소입니다(하나의 인터페이스에 여러 NIC 또는 여러 IP 주소가 있는 경우 유용).
- 수신 포트 – 로컬 수신 TCP 포트 번호(연결 대기 중)
- 연결 주소 – 들어오는 연결을 리디렉션하려는 로컬 또는 원격 IP 주소(또는 DNS 이름)입니다.
- 연결 포트 –
listenport
에서 연결되는 TCP 포트입니다. 로 전달됩니다.
netsh interface portproxy add
사용 v4tov6
/v6tov4
/v6tov6
옵션을 사용하여 IPv4 및 IPv6 주소 간에 포트 전달 규칙을 생성할 수 있습니다. 우리의 작업이 3340과 같은 비표준 포트에서 응답하도록 RDP 서비스를 만드는 것이라고 가정해 보겠습니다(포트는 원격 데스크톱 서비스 설정에서 변경할 수 있지만 RDP를 사용하여 포트 전송). 이렇게 하려면 들어오는 트래픽을 TCP 포트 3340에서 다른 로컬 포트인 3389(기본 RDP 포트 번호)로 리디렉션해야 합니다.
listenport에 지정한 로컬 포트 번호는 다른 서비스나 프로세스에서 수신(사용)되어서는 안 됩니다. 포트 번호가 사용되지 않았는지 확인하십시오.
netstat -na|find "3340"
또는 PowerShell cmdlet Test-NetConnection을 사용하여 포트가 로컬에서 수신 대기하지 않는지 확인할 수 있습니다.
Test-NetConnection -ComputerName localhost -Port 3340
Windows 10에서 포트 전달 규칙을 생성하려면 관리자로 명령 프롬프트를 실행하고 다음 명령을 실행하십시오.
netsh interface portproxy add v4tov4 listenport=3340 listenaddress=10.1.1.110 connectport=3389 connectaddress=10.1.1.110
여기서 10.10.1.110 – 이 컴퓨터의 현재 IP 주소입니다.
이제 netstat 도구를 사용하여 Windows가 현재 로컬 포트 3340에서 수신 대기 중인지 확인합니다.
netstat -ano | findstr :3340
참고 . 이 명령이 아무것도 반환하지 않고 netsh 인터페이스 portproxy를 통한 포트 전달이 작동하지 않으면 iphlpsvc (IP Helper) 서비스가 컴퓨터에서 실행 중입니다.
포트 전달 규칙이 생성된 네트워크 인터페이스에서 IPv6 지원을 활성화해야 합니다.
이는 포트 포워딩의 올바른 작동을 위한 전제 조건입니다. IP 도우미 서비스가 없고 IPv6 지원이 활성화되어 있지 않으면 포트 리디렉션이 작동하지 않습니다.
Windows Server 2003/XP에서 포트 포워딩이 작동하도록 하려면 IPEnableRouter를 추가로 설정해야 합니다. 매개변수를 1로 레지스트리 키 HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters.
PID를 사용하여 지정된 포트에서 어떤 프로세스가 수신 대기하는지 확인할 수 있습니다(이 예에서 PID는 636임).
tasklist | findstr 636
RDP 클라이언트를 사용하여 원격 컴퓨터에서 이 포트에 연결해 보겠습니다. 포트 3340은 RDP 포트 번호로 지정해야 합니다. RDP 서버 주소 다음의 콜론 뒤에 지정됩니다. 예:10.10.1.110:3340
RDP 연결이 성공적으로 설정되어야 합니다.
들어오는 TCP 연결을 원격 컴퓨터로 전달하려면 다음 명령을 사용하십시오.
netsh interface portproxy add v4tov4 listenport=3389 listenaddress=0.0.0.0 connectport=3389 connectaddress=192.168.100.101
이 규칙은 이 컴퓨터에서 IP 주소가 192.168.1.100인 원격 호스트로 들어오는 모든 RDP 트래픽(로컬 TCP 포트 3389에서)을 리디렉션합니다.
또한 Windows SSH 터널을 사용하여 로컬 포트를 원격 서버로 전달할 수 있습니다.Windows에서 포트 전달 규칙 관리
중요 . 방화벽(바이러스 백신 소프트웨어에 자주 포함되는 Microsoft Windows Defender 방화벽 또는 타사 방화벽)이 새 포트로 들어오는 연결을 허용하는지 확인합니다. 다음 명령을 사용하여 Windows Defender 방화벽에 새 허용 규칙을 추가할 수 있습니다.
netsh advfirewall firewall add rule name=”forwarded_RDPport_3340” protocol=TCP dir=in localip=10.1.1.110 localport=3340 action=allow
또는 New-NetFirewallRule PowerShell cmdlet 사용:New-NetFirewallRule -DisplayName "forwarder_RDP_3340" -Direction Inbound -Protocol TCP –LocalPort 3340 -Action Allow
Windows Defender 방화벽 그래픽 인터페이스를 통해 포트 3340에 대한 들어오는 방화벽 규칙을 만들 때 프로그램을 연결할 필요가 없습니다. 이 포트는 네트워크 드라이버만 수신합니다.
원하는 수의 Windows 포트 전달 규칙을 만들 수 있습니다. 모든 netsh 인터페이스 포트 프록시 규칙은 영구적이며 Windows를 다시 시작한 후 시스템에 저장됩니다.
또한 Windows Server 2012 R2에서 서버 재부팅 후 포트 포워딩 규칙이 재설정되는 경우가 있었습니다. 이 경우 네트워크 인터페이스에 주기적인 연결 끊김이 있는지, OS 부팅 시 IP 주소가 변경되는지 확인해야 합니다(동적 DHCP 대신 고정 IP를 사용하는 것이 좋습니다). 해결 방법으로 시스템 시작 시 실행되는 netsh 인터페이스 포트 프록시 규칙을 사용하여 Windows 작업 스케줄러에 배치 스크립트를 추가해야 했습니다.Windows에서 모든 활성 TCP 포트 전달 규칙 목록을 표시하려면 다음 명령을 실행하십시오.
netsh interface portproxy show all
우리의 경우 로컬 포트 3340에서 3389로의 전달 규칙은 하나뿐입니다.
Listen on ipv4: Connect to ipv4: Address Port Address Port --------------- ---------- --------------- ---------- 10.1.1.110 3340 10.1.1.110 3389
팁 . 다음과 같이 portproxy에서 포트 전달 설정을 나열할 수도 있습니다.
netsh interface portproxy dump
#======================== # Port Proxy configuration #======================== pushd interface portproxy reset add v4tov4 listenport=3340 connectaddress=10.1.1.110 connectport=3389 popd # End of Port Proxy configuration
특정 포트 전달 규칙을 제거하려면:
netsh interface portproxy delete v4tov4 listenport=3340 listenaddress=10.1.1.110
기존 매핑 규칙을 모두 제거하고 포트 전달 규칙 테이블을 완전히 지우려면:
netsh interface portproxy reset
connectaddress
로 사용할 수 없습니다. .
RRAS 및 NAT 역할이 설치된 Windows Server를 사용하여 UDP 트래픽에 대한 포트 전달을 구성할 수 있습니다. 그래픽 스냅인(rrasmgmt.msc
)을 사용하여 서버 인터페이스 간의 포트 전달을 구성할 수 있습니다. ) 또는 다음 명령으로:
netsh routing ip nat add portmapping Ethernet1 udp 0.0.0.0 53 192.168.100.100 53
또 다른 포트 프록시 기능은 원격 네트워크 서비스가 로컬에서 실행되는 것처럼 보이게 할 수 있는 기회입니다.
예를 들어, 로컬 포트 5555에서 IP 주소가 157.166.226.25(CNN 웹사이트)인 원격 HTTP 서버로 연결을 리디렉션해 보겠습니다.
netsh interface portproxy add v4tov4 listenport=5555 connectport=80 connectaddress= 157.166.226.25 protocol=tcp
이제 브라우저에서 https://localhost:5555/로 이동하면 CNN 시작 페이지가 열립니다. 따라서 브라우저가 로컬 컴퓨터에 액세스하고 있음에도 불구하고 외부 웹 서버에서 페이지를 엽니다.
포트 전달 규칙을 사용하여 물리적 NIC의 외부 IP 주소에서 동일한 호스트에서 실행되는 가상 머신의 포트로 포트를 전달할 수도 있습니다. Hyper-V에서는 가상 스위치 수준에서 포트 전달을 구성할 수 있습니다(아래 참조).
Windows는 TCP 포트 범위를 전달할 수 없습니다. 여러 포트를 전달해야 하는 경우 여러 포트 프록시 전달 규칙을 수동으로 만들어야 합니다. 가장 쉬운 방법은 netsh interface portproxy add
목록을 생성하는 것입니다. 메모장에서 다른 포트 번호로 명령을 실행한 다음 실행을 위해 명령 프롬프트에 붙여넣습니다.
Hyper-V 서버의 포트 포워딩
컴퓨터에서 Hyper-V 역할을 사용하는 경우(Windows 10과 Windows Server 모두에 설치하거나 무료 Hyper-V 서버로 설치할 수 있음) PowerShell을 사용하여 DNAT 포트 전달 규칙을 구성할 수 있습니다. Hyper-V 호스트가 수신하는 모든 https 트래픽을 호스트에서 실행 중인 가상 머신의 IP 주소로 리디렉션한다고 가정합니다. 이렇게 하려면 Hyper-V StaticMapping 명령을 사용하십시오.
먼저 NAT가 있는 가상 스위치를 생성해야 합니다.
New-VMSwitch -Name "HTTPS-NAT" -SwitchType NAT -NATSubnetAddress 192.168.100.0/24
그런 다음 필요한 VM을 지정된 vswitch에 연결하고 이 Hyper-V 가상 스위치를 통해 연결된 모든 가상 머신에 대해 주소 변환 규칙을 활성화해야 합니다.
New-NetNat -Name HTTPS-NAT -InternalIPInterfaceAddressPrefix 192.168.100.0/24
Add-NetNatStaticMapping -ExternalIPAddress "0.0.0.0/24" -ExternalPort 443 -Protocol TCP -InternalIPAddress "192.168.100.77" -InternalPort 443 -NatName HTTPS-NAT
이러한 PowerShell 명령을 실행한 후 Hyper-V 호스트의 포트 443으로 들어오는 모든 HTTPS 트래픽은 가상 머신의 개인 IP 주소로 전달됩니다.