WSL2 게스트VM에서 SSH나 HTTPS같은 특정 서비스 포트를 오픈하더라도 로컬이나 외부에서 접속이 불가하기 때문에 게스트VM에서 오픈한 포트에 접속하기 위해서는 윈도우에서 포트포워딩(portproxy) 설정을 해줘야합니다. 아래는 포트번호를 입력받아 포트포워딩을 설정해주는 배치(batch)파일입니다. 패치파일은 관리자모드에서 실행하면됩니다.

[메뉴구성]
1. 현재 포트포워딩 설정보기
2. 포트포워딩 설정하기
3. 포트포워딩 삭제하기

[코드설명]
> 2번, 3번 메뉴의 경우 원하는 포트를 지정할 수 있는데, 한개만 입력해도 되고 콤마(,) 구분자로 다수의 포트 입력이 가능합니다.
> 재부팅 되더라도 입력한 설정은 유지되나 게스트VM IP가 변경된다면 다시 설정해줘야 됩니다.

[배치파일]

@echo off

SETLOCAL EnableExtensions

:menu
echo 1. portproxy show
echo 2. portproxy add
echo 3. portproxy del
set /p choice=choice 1 or 2 or 3:
if %choice%==1 goto subcode1
if %choice%==2 goto subcode2
if %choice%==3 goto subcode3
echo Invalid input. Please enter 1 or 2 or 3.
goto menu

:subcode1
netsh interface portproxy show v4tov4
goto end

:subcode2
cd /d C:\
set hostip=
for /f "tokens=2 delims= " %%a in ('bash.exe -c "ifconfig eth0 | grep 'inet '"') do set hostip=%%a
set found=no

echo %hostip% | findstr /r /c:"^[ ]*[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*[ ]*$" > nul && set found=yes

if "%found%"=="yes" (
    set hostip=%hostip:~0%
) else (
    echo The Script Exited, the ip address of WSL 2 cannot be found
    exit /b 1
)

set /p ports=Enter port number to use(multiple ports you want to forward separated by comma):
set "addr=127.0.0.1"
set "output="
for /f "tokens=1 delims= " %%a in ('netsh interface portproxy show v4tov4 ^| findstr "ipv4"') do set output=%%a

if not "%output%"=="" (

for %%i in (%ports%) do (
    netsh interface portproxy delete v4tov4 listenport=%%i listenaddress=%addr%
    netsh interface portproxy add v4tov4 listenport=%%i listenaddress=%addr% connectport=%%i connectaddress=%hostip%
)
echo "delete & add suceessfully"
netsh interface portproxy show v4tov4
) else (

for %%i in (%ports%) do (
    netsh interface portproxy add v4tov4 listenport=%%i listenaddress=%addr% connectport=%%i connectaddress=%hostip%
)
echo "add suceessfully"
netsh interface portproxy show v4tov4
)

exit /b 0
goto end

:subcode3

set /p ports=Enter port number to use:
for %%i in (%ports%) do (
    netsh interface portproxy delete v4tov4 listenport=%%i listenaddress=127.0.0.1
)
netsh interface portproxy show v4tov4
goto end

:end
echo done.

 

 

 

+ Recent posts