방법은 크게 세 가지가 있습니다. 가장 쉬운 최신 방법부터 전통적인 방법 순으로 설명해 드리겠습니다.
최신 버전의 WSL(Windows 11 필수)을 사용 중이라면, 포트 포워딩 설정 없이 Windows와 WSL이 네트워크를 공유하도록 설정할 수 있습니다. 이 설정을 하면 별도의 명령어가 필요 없습니다.
[wsl2] networkingMode=mirrored
[wsl2] networkingMode=mirrored
wsl --shutdown
wsl --shutdown
만약 mirrored 모드를 사용할 수 없는 환경이라면, Windows의 netsh 명령어를 사용하여 Windows로 들어온 패킷을 WSL2의 IP로 전달해야 합니다.
주의: WSL2의 IP는 재부팅할 때마다 바뀌므로, 매번 확인이 필요합니다.
Ubuntu 터미널에서 다음 명령어를 입력합니다.
hostname -I
hostname -I
출력된 IP(예: 172.25.144.10)를 복사해둡니다.
Windows에서 PowerShell을 관리자 권한으로 실행한 뒤 아래 명령어를 입력합니다.
# 예: Windows의 8080 포트로 들어오면 WSL의 80 포트로 전달 netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=172.25.144.10
# 예: Windows의 8080 포트로 들어오면 WSL의 80 포트로 전달 netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=172.25.144.10
외부에서 접속할 수 있도록 Windows 방화벽에서 해당 포트를 열어줘야 합니다.
netsh advfirewall firewall add rule name="WSL Port Forwarding" dir=in action=allow protocol=TCP localport=8080
netsh advfirewall firewall add rule name="WSL Port Forwarding" dir=in action=allow protocol=TCP localport=8080
방법 2의 단점은 WSL IP가 바뀔 때마다 매번 명령어를 입력해야 한다는 것입니다. 이를 자동화하는 PowerShell 스크립트를 만들어 사용하면 편합니다.
# 관리자 권한 체크
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Write-Host "이 스크립트는 반드시 관리자 권한으로 실행해야 합니다!" -ForegroundColor Red exit
} # 설정할 포트 번호 (원하는 대로 수정하세요)
$port = 8080 # 1. WSL2 IP 가져오기
$wsl_ip = (wsl hostname -I).Trim().Split(" ")[0] if (-not $wsl_ip) { Write-Host "WSL IP를 찾을 수 없습니다." -ForegroundColor Red exit
} Write-Host "WSL2 IP 발견: $wsl_ip" -ForegroundColor Cyan # 2. 기존 포트포워딩 규칙 삭제 (중복 방지)
netsh interface portproxy delete v4tov4 listenport=$port listenaddress=0.0.0.0 # 3. 새로운 포트포워딩 규칙 추가
netsh interface portproxy add v4tov4 listenport=$port listenaddress=0.0.0.0 connectport=$port connectaddress=$wsl_ip # 4. 방화벽 규칙 추가
netsh advfirewall firewall add rule name="WSL_Auto_Forward_$port" dir=in action=allow protocol=TCP localport=$port Write-Host "설정 완료! Windows:$port -> WSL:$port ($wsl_ip)" -ForegroundColor Green
# 관리자 권한 체크
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Write-Host "이 스크립트는 반드시 관리자 권한으로 실행해야 합니다!" -ForegroundColor Red exit
} # 설정할 포트 번호 (원하는 대로 수정하세요)
$port = 8080 # 1. WSL2 IP 가져오기
$wsl_ip = (wsl hostname -I).Trim().Split(" ")[0] if (-not $wsl_ip) { Write-Host "WSL IP를 찾을 수 없습니다." -ForegroundColor Red exit
} Write-Host "WSL2 IP 발견: $wsl_ip" -ForegroundColor Cyan # 2. 기존 포트포워딩 규칙 삭제 (중복 방지)
netsh interface portproxy delete v4tov4 listenport=$port listenaddress=0.0.0.0 # 3. 새로운 포트포워딩 규칙 추가
netsh interface portproxy add v4tov4 listenport=$port listenaddress=0.0.0.0 connectport=$port connectaddress=$wsl_ip # 4. 방화벽 규칙 추가
netsh advfirewall firewall add rule name="WSL_Auto_Forward_$port" dir=in action=allow protocol=TCP localport=$port Write-Host "설정 완료! Windows:$port -> WSL:$port ($wsl_ip)" -ForegroundColor Green
Comments