본문 바로가기

설치&설정 관련

wsl2를 이용시 localhost:port로 접근 오류

wsl2를 이용시 localhost:port로 접근 해결방법

오늘 갑자기 node로 띄운 후 접근이 안되었습니다.

해결 방법을 찾아보았는데 WSL2, 외부 네트워크와 연결하기를 보고 따라 해보니 잘되었습니다.
내용 자체는 외부와 연결이지만, 저의 경우 내부와의 접근도 안되어 시도 하였습니다.

먼저 아래의 내용을 가진 wsl2-networks.ps1을 생성합니다.

$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]

#All the ports you want to forward separated by coma
$ports=@(80,443,10000,3000,5000);


#[Static ip]
#You can change the addr to your ip config to listen to a specific address
$addr='0.0.0.0';
$ports_a = $ports -join ",";


#Remove Firewall Exception Rules
iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' ";

#adding Exception Rules for inbound and outbound Rules
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Outbound -LocalPort $ports_a -Action Allow -Protocol TCP";
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Inbound -LocalPort $ports_a -Action Allow -Protocol TCP";

for( $i = 0; $i -lt $ports.length; $i++ ){
  $port = $ports[$i];
  iex "netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$addr";
  iex "netsh interface portproxy add v4tov4 listenport=$port listenaddress=$addr connectport=$port connectaddress=$remoteport";
}

위의 스크립트에서 port는 80,443,10000,3000,5000를 얼여 두었는데요 포트를 변경하려면 다음 라인(14)을 수정하면 됩니다.

#All the ports you want to forward separated by coma
$ports=@(80,443,10000,3000,5000);

해당 파일을 시작 스크립트로 추가 하면 됩니다.

추가를 하기 위해서는 먼저 batch 파일(.bat)을 생서하고 바로가기를 추가로 생성합니다.
생성한 바로가기 파일의 속성에서 고급을 버튼을 눌러서 관리자 권한으로 실행을 체크 합니다.

이후 해당 파일을 시작 디렉토리에 추가합니다. 참고

시작 스크립트 등록 방법은 Win+R 키를 눌러 실행 창에 shell:startup 을 입력 후 엔터를 누릅니다.
해당 디렉토리에 파일을 넣으면 됩니다.

만약 메뉴얼로 진행할 경우 다음 명령어를 관리자 모드로 실행한 CMD에서 실행하세요.

PowerShell.exe -ExecutionPolicy Bypass -File .\wsl2-forward-server.ps1

처음 powershell을 실행하면 파일이 없다는 오류가 발생하지만, 동작 됩니다.

첫 실행 오류

Remove-NetFireWallRule : 'WSL 2 Firewall Unlock'과(와) 같은 'DisplayName' 속성을 가진 MSFT_NetFirewallRule 개체가 없습
니다. 속성 값을 검증하고 다시 시도하십시오.
위치 줄:1 문자:1
+ Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (WSL 2 Firewall Unlock:String) [Remove-NetFirewallRule], CimJobException
    + FullyQualifiedErrorId : CmdletizationQuery_NotFound_DisplayName,Remove-NetFirewallRule



Name                  : {1c1f5350-1d56-4715-ae96-79bf9cb4bf84}
DisplayName           : WSL 2 Firewall Unlock
Description           :
DisplayGroup          :
Group                 :
Enabled               : True
Profile               : Any
Platform              : {}
Direction             : Outbound
Action                : Allow
EdgeTraversalPolicy   : Block
LooseSourceMapping    : False
LocalOnlyMapping      : False
Owner                 :
PrimaryStatus         : OK
Status                : 저장소에서 규칙을 구문 분석했습니다. (65536)
EnforcementStatus     : NotApplicable
PolicyStoreSource     : PersistentStore
PolicyStoreSourceType : Local

Name                  : {b6435941-bbbb-4754-8b5c-0a0526592ecf}
DisplayName           : WSL 2 Firewall Unlock
Description           :
DisplayGroup          :
Group                 :
Enabled               : True
Profile               : Any
Platform              : {}
Direction             : Inbound
Action                : Allow
EdgeTraversalPolicy   : Block
LooseSourceMapping    : False
LocalOnlyMapping      : False
Owner                 :
PrimaryStatus         : OK
Status                : 저장소에서 규칙을 구문 분석했습니다. (65536)
EnforcementStatus     : NotApplicable
PolicyStoreSource     : PersistentStore
PolicyStoreSourceType : Local

지정된 파일을 찾을 수 없습니다.



지정된 파일을 찾을 수 없습니다.



지정된 파일을 찾을 수 없습니다.



지정된 파일을 찾을 수 없습니다.



지정된 파일을 찾을 수 없습니다.

두번째 실행시

Name                  : {57c6491d-13f9-4d76-944f-7efd5624efd8}
DisplayName           : WSL 2 Firewall Unlock
Description           :
DisplayGroup          :
Group                 :
Enabled               : True
Profile               : Any
Platform              : {}
Direction             : Outbound
Action                : Allow
EdgeTraversalPolicy   : Block
LooseSourceMapping    : False
LocalOnlyMapping      : False
Owner                 :
PrimaryStatus         : OK
Status                : 저장소에서 규칙을 구문 분석했습니다. (65536)
EnforcementStatus     : NotApplicable
PolicyStoreSource     : PersistentStore
PolicyStoreSourceType : Local

Name                  : {982f1982-0a78-42ad-b2c6-eb8a54302847}
DisplayName           : WSL 2 Firewall Unlock
Description           :
DisplayGroup          :
Group                 :
Enabled               : True
Profile               : Any
Platform              : {}
Direction             : Inbound
Action                : Allow
EdgeTraversalPolicy   : Block
LooseSourceMapping    : False
LocalOnlyMapping      : False
Owner                 :
PrimaryStatus         : OK
Status                : 저장소에서 규칙을 구문 분석했습니다. (65536)
EnforcementStatus     : NotApplicable
PolicyStoreSource     : PersistentStore
PolicyStoreSourceType : Local

참고 자료