윈도우10에서 WSL2로 포트포워딩하는 방법
WSL2에서 실행 중인 서비스에 외부 클라이언트가 접근할 수 있도록 설정하기
WSL2(Windows Subsystem for Linux 2)를 사용하면 윈도우 환경에서 리눅스를 간편하게 사용할 수 있습니다. 하지만 WSL2는 가상화된 네트워크 환경을 사용하기 때문에, WSL2 내부에서 실행 중인 서비스(예: 웹 서버)에 외부 클라이언트가 직접 접근하기 어려울 수 있습니다. 이를 해결하기 위해 포트포워딩을 설정하면 외부 클라이언트가 WSL2의 서비스를 접근할 수 있습니다.
포트포워딩 설정 방법
WSL2에서 실행 중인 서비스를 외부에서 접근할 수 있도록 포트포워딩을 설정하려면, 윈도우의 netsh 명령어를 사용해야 합니다. 다음 단계에 따라 설정할 수 있습니다.
WSL2 IP 확인
먼저, WSL2의 IP 주소를 확인해야 합니다. WSL2 터미널을 열고 아래 명령어를 입력합니다.
$ ip addr show eth0
출력된 결과에서 inet 항목에 나오는 IP 주소를 확인하고 메모해 둡니다. 이 IP는 WSL2에서 실행 중인 서비스가 사용하는 주소입니다. 저의 경우 172.23.214.32입니다.
netsh 명령어로 포트포워딩 설정
윈도우의 명령 프롬프트(cmd) 또는 PowerShell을 관리자 권한으로 실행합니다.
아래 명령어를 입력하여 포트포워딩을 설정합니다. 예를 들어, WSL2의 포트 80에서 실행 중인 웹 서버에 외부 클라이언트가 윈도우의 포트 8080을 통해 접근하도록 설정하려면 다음과 같이 입력합니다.
> netsh interface portproxy add v4tov4 listenport=8888 listenaddress=0.0.0.0 connectport=8888 connectaddress=<WSL2_IP>
<WSL2_IP> 부분에는 앞서 확인한 WSL2의 IP 주소를 입력합니다.
방화벽 규칙 추가
추가한 포트에 대해 방화벽 규칙을 설정해야 외부 클라이언트의 접근이 가능합니다. PowerShell에서 아래 명령어를 입력합니다.
> New-NetFirewallRule -DisplayName "WSL2 Port Forwarding 8888" -Direction Inbound -LocalPort 8888 -Protocol TCP -Action Allow
이렇게 하면 포트 8888에 대한 외부 접속이 허용되어, 외부 클라이언트가 WSL2에서 실행 중인 서비스에 접근할 수 있습니다.
"방화벽 및 네트워크 보호 > 고급 설정 > 인바운드 규칙"에 추가된 것을 확인할 수 있습니다.
우측에 "새 규칙..."을 눌러서 방화벽 규칙을 추가해 줄 수도 있습니다.
포트포워딩 상태 확인 방법
설정한 포트포워딩의 상태를 확인하려면, 다음 방법을 사용할 수 있습니다.
netsh를 사용하여 포트포워딩 상태 확인
명령 프롬프트 또는 PowerShell에서 아래 명령어를 입력합니다.
> netsh interface portproxy show all
이 명령어를 통해 현재 설정된 모든 포트포워딩 목록을 확인할 수 있습니다. 여기서 설정한 포트포워딩이 제대로 작동하는지 확인하세요.
포트포워딩 삭제
만약 설정한 포트포워딩을 삭제하고 싶다면, 다음 명령어를 사용합니다.
> netsh interface portproxy delete v4tov4 listenport=8888 listenaddress=0.0.0.0
이렇게 하면 포트 8888에 대한 포트포워딩 설정이 삭제됩니다.
마무리
이제 WSL2에서 실행 중인 서비스를 외부 클라이언트가 접근할 수 있도록 윈도우10에서 포트포워딩을 설정하는 방법을 알게 되었습니다. 이러한 설정을 통해 WSL2 환경에서 실행 중인 웹 서버, 데이터베이스 서버 등 다양한 서비스를 외부에서 쉽게 접근하고 테스트할 수 있습니다.