port forwarding WSL2

TL;DR

netsh interface portproxy add v4tov4 listenport=<listenport> listenaddress=0.0.0.0 connectport=<connectport> connectaddress=$(wsl -d <distro-name> hostname -I)

ssh into WSL2 & vs-code์™€ ๋‹ค๋ฅธ์ ์ด๋ผ๊ณ  ๋งํ•œ๋‹ค๋ฉด Power Shell ๊ด€๋ฆฌ์ž ๋ชจ๋“œ์—์„œ netsh ๋ช…๋ น์–ด๋ฅผ ์ง์ ‘ ์ณ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. SSH์˜ ๊ฒฝ์šฐ 22๋ฒˆ ํฌํŠธ๋ฅผ ์—ด์–ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ, ์œˆ๋„์šฐ์—์„œ 22๋ฒˆ ํฌํŠธ๋ฅผ ์—ด์–ด์ฃผ๋ฉด VSCode์—์„œ ์•Œ์•„์„œ ํฌํŠธ ํฌ์›Œ๋”ฉ์„ ํ•ด ์ฃผ๋Š” ๊ฒƒ ๊ฐ™์•˜๋‹ค.

์•„๋ž˜ ์Šคํฌ๋ฆฝํŠธ์— ๋”ฐ๋ฅด๋ฉด, ํฌํŠธ๋ฅผ ์ถ”๊ฐ€ํ• ๋•Œ๋งˆ๋‹ค ๋ณต์žกํ•˜๊ฒŒ ์ € ๊ธด ๋ช…๋ น์–ด๋ฅผ ์น  ํ•„์š” ์—†์ด 1. WSL ip์ฃผ์†Œ๋ฅผ ์•Œ์•„๋‚ด๊ณ , 2. $ports์— ์ ํžŒ ํฌํŠธ๋ฒˆํ˜ธ๋“ค์„ 3. ์œ„๋„์šฐ ๋ฐฉํ™”๋ฒฝ์— WSL2 Firewall Unlock์ด๋ž€ ์ด๋ฆ„์œผ๋กœ ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™์— ์ถ”๊ฐ€ํ•œ๋‹ค.

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

Try

week06 {swjungle}{proxy-lab}์‹ค์Šต์„ ํ•˜๋ ค๋Š”๋ฐ ์ž„์˜์˜ ํฌํŠธ๋ฅผ ํ•˜๋‚˜ ์—ด์–ด์„œ ๊ทธ์ชฝ์œผ๋กœ ๋“ค์–ด๊ฐ€๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ๋‹ค

  1. ๊ณต์œ ๊ธฐ ์„ค์ •์— ํฌํŠธํฌ์›Œ๋”ฉ์„ ์„ค์ •ํ•ด ์ฃผ์—ˆ๋‹ค. ์ด์ œ ๋„๋ฉ”์ธ ๋„ค์ž„ ๋’ค์— ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด ์ž๋™์œผ๋กœ ๋‚ด ์ปดํ“จํ„ฐ๋กœ ๋ฆฌ๋””๋ ‰์…˜ ๋œ๋‹ค.
  2. ์ปดํ“จํ„ฐ ์•ˆ์—์„œ ๊ตฌ์ฒด์ ์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฐพ์•„๊ฐ€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ms ๊ณต์‹๋ฌธ์„œ ๋ฅผ ์ฐธ์กฐํ•ด WSL์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋‚ด๋ถ€ IP๋กœ ํฌ์›Œ๋”ฉ์„ ํ•ด ์ฃผ์—ˆ๋‹ค. โ†’ ์—ฌ๊ธฐ์—์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ์˜€์Œ
  3. tiny web server๋ฅผ ์‚ฌ์ „์— ํฌ์›Œ๋”ฉํ•œ ํฌํŠธ๋กœ ์‹คํ–‰์‹œ์ผฐ๊ณ , ๋จผ์ € RDP๋กœ ์—ฐ๊ฒฐํ•ด ๋“ค์–ด๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ localhost:portnum์œผ๋กœ ์ณ์„œ ๋“ค์–ด๊ฐ€๋‹ˆ ์„ฑ๊ณต์ ์œผ๋กœ ํ™”๋ฉด์ด ์ถœ๋ ฅ๋๋‹ค.
  4. ์ด์ œ ์›๊ฒฉ์ง€(๋Œ€์ „)์—์„œ ๋ณธ๊ฐ€ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ํฌํŠธ๋ฅผ ํ•จ๊ป˜ ๋„ฃ์–ด์ฃผ์—ˆ๋Š”๋ฐ... connection timeout์ด ๋‚˜์™”๊ณ , ํ„ฐ๋ฏธ๋„์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋œจ์ง€ ์•Š์•˜๋‹ค.

Catch

๋ณด๋‹ˆ๊นŒ, ๋‚ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” WSL ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•œ ๊ฐœ๊ฐ€ ์•„๋‹ˆ์—ˆ๋˜ ๊ฒƒ์ด๋‹ค. ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋˜๊ฑด ์ตœ๊ทผ์— ๊ณผ์ œ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž์ถ”๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ ํ•˜๋‚˜ ์„ค์น˜ํ•œ Ubuntu-22.04์˜€๊ณ , MS ๊ณต์‹๋ฌธ์„œ๊ฐ€ ์•ˆ๋‚ดํ•ด์ค€ ๋ช…๋ น์–ด wsl hostname -i์˜ ๊ฒฐ๊ณผ๊ฐ’๊ณผ Ubuntu-22.04์— ํ• ๋‹น๋œ IP์˜ ๊ฐ’์ด ์„œ๋กœ ๋‹ฌ๋ผ ์—‰๋šฑํ•œ ๊ณณ์œผ๋กœ ํฌ์›Œ๋”ฉ์„ ํ•ด์ค€ ๊ฒƒ์ด์—ˆ๋‹ค.

PS>wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu-22.04           Running         2
  docker-desktop         Stopped         2
  Ubuntu                 Stopped         2
  docker-desktop-data    Stopped         2

๊ทธ๋ž˜์„œ Stack Exchange ๋Œ€ํ™”๋ฅผ ์ฐธ์กฐํ•ด ๊ตฌ์ฒด์ ์ธ wsl ๋””์ŠคํŠธ๋กœ๋ฅผ ๋ช…์‹œํ•œ IP ์ฃผ์†Œ๋ฅผ ๋‹ฌ๋ผ๊ณ  ํ•˜๋‹ˆ ๊ทธ์ œ์„œ์•ผ ์ œ๋Œ€๋กœ ๋œ ๊ฐ’์ด ๋‚˜์™”๊ณ , ์‹ค์ œ๋กœ wsl ์•ˆ์—์„œ ip addr show | grep eth0์œผ๋กœ ๋‚˜์˜จ ์ฃผ์†Œ๊ฐ’๊ณผ ์ผ์น˜ํ–ˆ๋‹ค.

Easy Way

๊ทธ๋ƒฅ VScode์—์„œ Port๋ฅผ ์—ด์–ด๋ฒ„๋ฆฌ๋‹ˆ๊นŒ localhost์—์„œ ๊ทธ๋ƒฅ ์—ด๋ฆฌ๋„ค... ๐Ÿ’ฆ

์Šคํฌ๋ฆฐ์ƒท 2023-09-18 ์˜ค์ „ 12.37.28.png