DevOps/WSL2

WSL2 포트 포워딩 방법

yscho03 2022. 5. 30. 09:43
728x90
반응형

포트 포워딩 (Port Forwarding)

WSL2에서 포트를 오픈해도 Windows 호스트 또는 외부에서 접근이 불가하여 Port를 포워딩해주어야 한다.

1. PS1 스크립트 작성

forwarding.ps1 적당한 이름으로 스크립트를 작성한다. 오픈할 포트를 $ports에 넣어주면 된다.

예) $ports=@(8000, 8888);

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=@(8888);
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";

2. 관리자 권한으로 실행

다음과 같이 권한 오류가 발생하는 것을 볼 수 있다. Script 권한을 확인 후에 부여하도록 한다.

PS D:\> .\forwarding.ps1
.\forwarding.ps1 : 이 시스템에서 스크립트를 실행할 수 없으므로 D:\forwarding.ps1 파일을 로드할 수 없습니다. 자세한 내용
은 about_Execution_Policies(https://go.microsoft.com/fwlink/?LinkID=135170)를 참조하십시오.
위치 줄:1 문자:1
+ .\forwarding.ps1
+ ~~~~~~~~~~~~~~~~
    + CategoryInfo          : 보안 오류: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

3. Sciprt 권한 부여

Sciprt 권한을 확인해보자

PS C:\> Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine       Undefined

다음과 같이 실행하여 권한을 부여한다.

PS D:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

실행 규칙 변경
실행 정책은 신뢰하지 않는 스크립트로부터 사용자를 보호합니다. 실행 정책을 변경하면 about_Execution_Policies 도움말
항목(https://go.microsoft.com/fwlink/?LinkID=135170)에 설명된 보안 위험에 노출될 수 있습니다. 실행 정책을
변경하시겠습니까?
[Y] 예(Y)  [A] 모두 예(A)  [N] 아니요(N)  [L] 모두 아니요(L)  [S] 일시 중단(S)  [?] 도움말 (기본값은 "N"): y
PS D:\> Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser    RemoteSigned
 LocalMachine       Undefined

4. 재실행

아래와 같이 포워딩이 된 것을 확인할 수 있다.

PS D:\> .\forwarding.ps1



ipv4 수신 대기:             ipv4에 연결:

주소            포트        주소            포트
--------------- ----------  --------------- ----------
*               8888        172.25.67.211   8888
728x90
반응형