반응형
MS의 업데이트로 WSL2 내부에서 실행한 프로세스를 Host windows에서 localhost로 접속이 가능하게끔 되었다.
하지만 해당 프로세스를 아예 외부에서 접속하고자 할 때에는 Host의 ip로 접속이 불가능하다.
이를 위해 포트 포워딩 작업을 해 줘야 하는데, 이를 수행해주는 스크립트를 구글링 속 해외 한 귀인으로부터 얻을 수 있었다. (https://dev.to/vishnumohanrk/wsl-port-forwarding-2e22)
1. 아래 스크립트를 작성해서 OOO.ps1 이름으로 저장한다.
ex) C:\ports_wsl.ps1
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 {
Write-Output "The Script Exited, the ip address of WSL 2 cannot be found";
exit;
}
$ports = @(3000, 3001, 5000, 5500, 19000, 19002, 19006);
Invoke-Expression "netsh interface portproxy reset";
for ( $i = 0; $i -lt $ports.length; $i++ ) {
$port = $ports[$i];
Invoke-Expression "netsh interface portproxy add v4tov4 listenport=$port connectport=$port connectaddress=$remoteport";
}
Invoke-Expression "netsh interface portproxy show v4tov4";
2. $ports = @(3000, 3001, 5000, 5500, 19000, 19002, 19006); 부분을 수정해 포워딩을 원하는 포트를 추가 혹은 제거한다.
3. Windows PowerShell을 관리자 권한으로 실행한다.
4. 해당 스크립트를 실행한다.
※ 이 시스템에서 스크립트를 실행할 수 없으므로 C:\ports_wsl.ps1 파일을 로드할 수 없습니다. 자세한 내용은 about_Executio n_Policies(https://go.microsoft.com/fwlink/?LinkID=135170)를 참조하십시오. 와 같은 오류 발생시 다음 게시글 참고 : (www.leafcats.com/317)
반응형