WSL2 고정 IP 할당하기(Static IP)

WSL2를 사용하면서 불편했던점은 재부팅할떄마다 IP가 변경된다는 점 입니다.
그래서 구글링하다가 깃에 괜찮은 글이 있어서 가져왔습니다.

방법은 2가지가있는데 첫번째같은경우 host를 지정해서 사용하는것, 두번째는 host pc ip에 포트포워딩하는것 입니다.
여기서는 후자의방법으로 진행하였습니다.

WSL 2가 도입되면서 Microsoft는 시스템 아키텍처를 변경했습니다.
변경 사항에는 기본 브리지 네트워크 어댑터에서 Hyper-V 가상 네트워크 어댑터로의 변경이 포함됩니다.

임시 해결책은 WSL 2 서비스의 TCP 포트를 호스트 OS에 전달하는 것입니다.
WSL 2 시스템의 가상 어댑터는 재부팅 중에 IP 주소를 변경하므로 한 번 실행 솔루션을 구현하기가 어렵습니다.
참고로, Windows 방화벽은 리디렉션 된 포트를 차단합니다.

해결 방법

https://github.com/microsoft/WSL/issues/4150#issuecomment-504209723

다음을 수행하는 스크립트를 사용하는 것입니다.

  1. WSL 2 머신의 IP 주소 가져 오기
  2. 이전 포트 전달 규칙 제거
  3. 포트 전달 규칙 추가
  4. 이전에 추가 한 방화벽 규칙 제거
  5. 새로운 방화벽 규칙 추가

구성

스크립트는 가장 높은 권한으로 로그인시 실행되어야하며 Powershell은 외부 소스를 실행할 수 있어야합니다.

PowerShell 구성

Power Shell이 ​​외부 스크립트를 실행하도록 설정하고 관리 권한으로 power shell에서 아래 명령을 실행하십시오.

스크립트 내용
아래 에서 Ports 부분만 원하는 포트를 넣어주면 됩니다.

$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";
}

저는 portainer의 9000번을 넣어서 만들어보겠습니다.

파워쉘 실행하기

저같은경우 위 내용을 wsl2_port.ps1 파일명으로 바탕화면에 저장했습니다.
[PowerShell] 이 시스템에서 스크립트를 실행할 수 없으므로 파일을 로드할 수 없습니다. 해결방법
스크립트 실행이 안되면 위 글을 참고바랍니다.

관리자 권한으로 PowerShell 실행후 저장한 파일을 실행시켜줍니다.
위에 나오는 에러는 기본 방화벽에 정책이 없어서 그런거니까 무시해주면됩니다.|
2번째 실행부터는 나오지 않습니다.

적용 확인하기

기존 WSL2의 ip로 접속해야했던 portainer를 지금 노트북의 wifi ip로 접속해보겠습니다.

host ip로 접근
localhost로 접근

정상 작동이 확인됩니다.

뭐.. 매번 실행시켜주기 귀찮으면 작업 스케쥴러에 등록해서 사용하시면 됩니다.

WSL2 관련 글 모음

 

————————————————–

사이트 리뉴얼중입니다~

서버(Linux, ESXi), NAS(헤놀로지, ESXi 및 IT관련 정보, 기타 등등을 공유하는 커뮤니티 SVRFORUM을 새로 만들었습니다.
많은 가입(?) 부탁드립니다~
https://svrforum.com

이전글들은 모두 상단 메뉴의 Blog 글 모음에있습니다!

4 thoughts on “WSL2 고정 IP 할당하기(Static IP)”

  1. 혹시 위에 지시되로 하니까.
    우분투를 껐다가 다시 켜도 IP가 유지되는 것까지는 확인했는데
    호스트 윈도우 자체를 껐다가 다시 우분투로 들어가보면 IP가 변경되는 것 같습니다.
    정상적으로 설명해주신되로 다 진행하면
    우분트를 WSL2 기반으로 껐다가 다시 켜는 것 뿐만아니라
    호스트 윈도우를 껐다가 다시 켜도 IP가 유지되어야 하는건지요?

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

홈서버 IT 커뮤니티 SVRFORUM
Link