-
WSL2에 서버 프로세스를 올리고, 외부에서 접속하고자 할 때가 있습니다.
기존에 host의 경우에는 router - host 사이의 포트포워딩만 해주면 되었었는 데, WSL은 router - wsl로 바로 포트포워딩이 안되더라구요.
WSL의 구조를 생각해보면, router에 직접 연결이 되어있는 것이 아니라 host의 subnet에 연결되어있고, host를 통해서 다시 router로 연결되기 때문입니다.
그래서 WSL - 외부 로 통신하려면 결국 포트 포워딩을 두번 해줘야 하는 거지요...
WSL - Host간에 포트 포워딩을 해줘야 하고,
Host - Router간에 포트 포워딩을 해줘야 합니다.
Host - Router는 Router의 ip에 들어가서 관리자 페이지 들어가보면 있는 데
WSL - host는 어떻게 하는 지 모르겠어서 구글링을 해봤습니다.
아래 스크립트에서 $ports 부분을 저는 @(1337)로 하였는 데 @(1,2,3,7) 이런식으로 포워딩하고자 하는 포트들 번호를 적어두고 .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 = @(1337); 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";
'Study > Tips' 카테고리의 다른 글
가상머신 스냅샷을 까먹지 말자... (0) 2021.10.07 MIPS Assembly (0) 2021.10.07 VMWare Bridge Mode 설정하는 법 (0) 2021.09.28 Fastest "rm -rf /" (빠르게 파일 시스템 삭제하는 법) (2) 2021.03.31 awesomeopensource (0) 2021.03.10 댓글