hello

WSL2에서 포트 포워딩 자동화하기 (PowerShell 스크립트로 간단하게 해결)

WSL2(Windows Subsystem for Linux 2)를 사용할 때 자주 부딪히는 문제가 있다.
바로 WSL2 내부 서버에 외부에서 접근할 수 없다는 점이다.

WSL2는 가상 네트워크 인터페이스를 통해 동작하기 때문에
리눅스에서 localhost로 열어둔 포트가
Windows나 외부에서 그대로 접근되지 않는다.

이를 해결하기 위해서는 portproxy 기능을 활용한 포트 포워딩 설정이 필요하다.
하지만 문제는…

WSL2의 IP는 재부팅할 때마다 바뀐다!

즉, 매번 netsh로 수동 등록해야 한다는 것…

그래서 이런 번거로움을 없애기 위해 아래와 같은
자동 포트 포워딩 PowerShell 스크립트를 만들어 두면 매우 편리하다.


🧾 PowerShell 스크립트

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=@(8080, 3306);

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

📝 스크립트 동작 설명

1. 관리자 권한 자동 상승

PowerShell에서 netsh 명령은 관리자 권한이 필요하다.
스크립트는 이 권한이 없으면 자동으로 관리자 권한으로 재실행한다.

Start-Process powershell -Verb runAs

덕분에 오른쪽 클릭 → “관리자 권한으로 실행”을 하지 않아도 된다.


2. WSL2 내부 IP 자동 추출

WSL2의 eth0(기본 네트워크 인터페이스)에서 IP를 가져온다.

$remoteport = bash.exe -c "ifconfig eth0 | grep 'inet '"

그리고 정규식을 이용해 IPv4 주소만 추출한다.

WSL2는 재부팅하거나 WSL 서비스를 재시작할 때마다
IP가 달라지므로 이 과정이 중요하다.


3. 포워딩할 포트 목록 정의

$ports=@(8080, 3306);

예:

  • 8080 → 웹 서버
  • 3306 → MySQL

여기에 원하는 포트를 자유롭게 추가할 수 있다.


4. 기존 portproxy 초기화

netsh interface portproxy reset

WSL2 IP가 바뀔 때마다 계속 추가되면 충돌할 수 있으므로
초기화 후 새롭게 설정한다.


5. Windows → WSL2 포트 포워딩 규칙 설정

netsh interface portproxy add v4tov4 listenport=8080 connectport=8080 connectaddress=WSL_IP

이 작업을 지정한 포트 목록만큼 반복한다.

  • Windows: localhost:8080
  • 실제 연결 대상: WSL_IP:8080

이렇게 연결이 이뤄지므로 WSL 내부에서 실행 중인 서비스를
Windows 브라우저나 툴에서 아무 문제 없이 사용할 수 있다.


6. 포워딩 규칙 확인

마지막에 현재 portproxy 설정을 출력한다.

netsh interface portproxy show v4tov4

🚀 사용 방법

  1. PowerShell 파일로 저장
    예: wsl-port-forward.ps1
  2. 관리자 권한이 자동으로 적용되고
    WSL2의 현재 IP에 맞게 포트 포워딩이 자동 구성된다.

PowerShell에서 실행

./wsl-port-forward.ps1

🎉 마무리

WSL2에서 개발할 때 포트 포워딩 문제는 거의 필수적으로 마주친다.
이 스크립트를 사용하면 매번 IP를 확인하고 netsh로 설정할 필요 없이
클릭 한 번 / 실행 한 번으로 자동 설정이 가능해진다.

특히 다음 상황에 매우 유용하다:

  • WSL에서 웹 개발(React, Node, Django, Spring 등)
  • DB(MySQL, MariaDB, PostgreSQL)를 Windows 툴에서 접속해야 할 때
  • 서버를 여러 개 띄워 테스트하는 환경
  • 재부팅 시마다 바뀌는 WSL2 IP 때문에 번거로웠던 경험

Read more

TCP 공부하기

TCP(전송 제어 프로토콜) 개요 TCP는 불안정한 네트워크 환경에서도 신뢰성 있고 순서가 보장된 데이터 전송을 가능하게 하는 핵심 인터넷 프로토콜이다. IP가 호스트 간 패킷 전달만을 담당한다면, TCP는 포트 기반 프로세스 간 통신, 오류 복구, 재전송, 순서 제어를 제공한다. 흐름 제어와 혼잡 제어를 통해 TCP는 수신 버퍼와 네트워크 대역폭의 고갈을 방지한다.

By JHL

우리가 알던 고전적 소프트웨어 엔지니어링은 죽었다

Product Engineering 시대와 AI 개발 패러다임 변화 1. 패러다임 변화: 코드 작성의 목적이 달라졌다 1972년 Dennis Ritchie가 C 언어를 발표한 이후, 소프트웨어 산업은 오랫동안 다음 요소에 집중해 왔다. * 코드 효율성 (시간·공간 복잡도) * 코드 길이 및 생산성 * 가독성과 유지보수성 그러나 AI 시대가 시작되면서 기존 패러다임이 근본적으로 변하고 있음. John Carmack은

By JHL

GitLab에서 제작한 GitOps 초보자 가이드

소개 소프트웨어 애플리케이션의 복잡도가 증가함에 따라 인프라에 대한 요구도도 함께 증가하고 있습니다. 인프라 팀은 다양한 서비스를 빠르고 안정적으로 제공해야 하지만, 인프라 구축은 여전히 수동 프로세스에 의존하는 경우가 많습니다. 이 문제를 해결하기 위한 핵심 접근 방식이 인프라 자동화이며, 그중 하나가 GitOps입니다. 1. 인프라 자동화의 필요성 * 애플리케이션 개발은 CI/CD로 자동화되었지만 인프라

By JHL