WSL2에서 포트 포워딩 자동화하기 (PowerShell 스크립트로 간단하게 해결)
WSL2(Windows Subsystem for Linux 2)를 사용할 때 자주 부딪히는 문제가 있다.
바로 WSL2 내부 서버에 외부에서 접근할 수 없다는 점이다.
WSL2는 가상 네트워크 인터페이스를 통해 동작하기 때문에
리눅스에서 localhost로 열어둔 포트가
Windows나 외부에서 그대로 접근되지 않는다.
이를 해결하기 위해서는 portproxy 기능을 활용한 포트 포워딩 설정이 필요하다.
하지만 문제는…
WSL2의 IP는 재부팅할 때마다 바뀐다!
즉, 매번 netsh로 수동 등록해야 한다는 것…
그래서 이런 번거로움을 없애기 위해 아래와 같은
자동 포트 포워딩 PowerShell 스크립트를 만들어 두면 매우 편리하다.
🧾 PowerShell 스크립트
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
$arguments = "& '" + $myinvocation.mycommand.definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
Break
}
$remoteport = bash.exe -c "ifconfig eth0 | grep 'inet '"
$found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';
if( $found ){
$remoteport = $matches[0];
} else{
echo "The Script Exited, the ip address of WSL 2 cannot be found";
exit;
}
$ports=@(8080, 3306);
iex "netsh interface portproxy reset";
for( $i = 0; $i -lt $ports.length; $i++ ){
$port = $ports[$i];
iex "netsh interface portproxy add v4tov4 listenport=$port connectport=$port connectaddress=$remoteport";
}
iex "netsh interface portproxy show v4tov4";
📝 스크립트 동작 설명
1. 관리자 권한 자동 상승
PowerShell에서 netsh 명령은 관리자 권한이 필요하다.
스크립트는 이 권한이 없으면 자동으로 관리자 권한으로 재실행한다.
Start-Process powershell -Verb runAs
덕분에 오른쪽 클릭 → “관리자 권한으로 실행”을 하지 않아도 된다.
2. WSL2 내부 IP 자동 추출
WSL2의 eth0(기본 네트워크 인터페이스)에서 IP를 가져온다.
$remoteport = bash.exe -c "ifconfig eth0 | grep 'inet '"
그리고 정규식을 이용해 IPv4 주소만 추출한다.
WSL2는 재부팅하거나 WSL 서비스를 재시작할 때마다
IP가 달라지므로 이 과정이 중요하다.
3. 포워딩할 포트 목록 정의
$ports=@(8080, 3306);
예:
- 8080 → 웹 서버
- 3306 → MySQL
여기에 원하는 포트를 자유롭게 추가할 수 있다.
4. 기존 portproxy 초기화
netsh interface portproxy reset
WSL2 IP가 바뀔 때마다 계속 추가되면 충돌할 수 있으므로
초기화 후 새롭게 설정한다.
5. Windows → WSL2 포트 포워딩 규칙 설정
netsh interface portproxy add v4tov4 listenport=8080 connectport=8080 connectaddress=WSL_IP
이 작업을 지정한 포트 목록만큼 반복한다.
- Windows:
localhost:8080 - 실제 연결 대상:
WSL_IP:8080
이렇게 연결이 이뤄지므로 WSL 내부에서 실행 중인 서비스를
Windows 브라우저나 툴에서 아무 문제 없이 사용할 수 있다.
6. 포워딩 규칙 확인
마지막에 현재 portproxy 설정을 출력한다.
netsh interface portproxy show v4tov4
🚀 사용 방법
- PowerShell 파일로 저장
예:wsl-port-forward.ps1 - 관리자 권한이 자동으로 적용되고
WSL2의 현재 IP에 맞게 포트 포워딩이 자동 구성된다.
PowerShell에서 실행
./wsl-port-forward.ps1
🎉 마무리
WSL2에서 개발할 때 포트 포워딩 문제는 거의 필수적으로 마주친다.
이 스크립트를 사용하면 매번 IP를 확인하고 netsh로 설정할 필요 없이
클릭 한 번 / 실행 한 번으로 자동 설정이 가능해진다.
특히 다음 상황에 매우 유용하다:
- WSL에서 웹 개발(React, Node, Django, Spring 등)
- DB(MySQL, MariaDB, PostgreSQL)를 Windows 툴에서 접속해야 할 때
- 서버를 여러 개 띄워 테스트하는 환경
- 재부팅 시마다 바뀌는 WSL2 IP 때문에 번거로웠던 경험