• WSL2 포트 포워딩

    2021. 9. 30.

    by. ugonfor

    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

    댓글