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.

 

 

 

반응형

윈도우 하위 리눅스 시스템 게스트VM에 원격접속이 가능한 날이 왔네요. 여기에서는 WSL2에 게스트VM으로 칼리리눅스(Kali Linux)가 설치된 상태에서 xrdp 원격접속이 가능하도록 설정해보겠습니다. WSL2 설치 방법 / 리눅스 설치방법 / 윈도우용 터미널 설치 방법은 아래 링크를 참고해주시기 바랍니다.

  ※ 윈도우(Windows) 10에 Linux용 Windows 하위 시스템(WSL) 설치
  ※ 윈도우(Windows) 10 터미널 설치 및 설정

 

◎ 요구사항
 > Windows 10 또는 11 최신 업데이트 설치 및 WSL2 설치
 > Kali Linux 게스트VM 설치 및 WSL2 적용

◎ Update apt

sudo apt update && sudo apt -y upgrade

 > 패키지 목록을 최신으로 갱신하고 갱신된 최신 패키지들을 설치합니다.

◎ 기 설치된 xrdp 삭제

sudo apt-get purge xrdp

 > 기 설치된 xrdp 패키지와 환경설정 모두를 삭제합니다.


◎ xfce 설치

sudo apt-get install -y xfce4 xfce4-goodies

 > xfce4는 Xfce 경량 데스크탑 환경을 제공하는 메타 패키지입니다.
 > xfc4-goodies는 Xfce 4.x 시리즈의 일부로 포함되지 않은 플러그인, 독립 실행형 애플리케이션 및 아트워크 세트를 제공하는 또 다른 메타 패키지입니다.

◎ xrdp 설치

sudo apt-get install xrdp

 > 원격데스크톱을 설치합니다.


◎ 원격 포트 변경(3389 to 3390)

sudo cp /etc/xrdp/xrdp.ini.original /etc/xrdp/xrdp.ini
sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/max_bpp=32/#max_bpp=32\nmax_bpp=128/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/xserverbpp=24/#xserverbpp=24\nxserverbpp=128/g' /etc/xrdp/xrdp.ini

 > 포트 및 해상도를 변경합니다.

◎ RDP 네트워크 구성 변경(IPv6 to IPv4)

sudo nano /etc/xrdp/xrdp.ini

 > 'port=3390' 를 'port=tcp://:3390' 로 변경합니다.
 > 설정을 변경하지 않으면 IPv6로 네트워크 서비스가 동작해서 원격접속이 불가합니다.


◎ xrdp 설정 변경

sudo nano /etc/xrdp/startwm.sh

 > 다음 두 줄을 주석 처리합니다.

test -x /etc/X11/Xsession && exec /etc/X11/Xsession
exec /bin/sh /etc/X11/Xsession

 > 각 줄의 시작 부분에 "#"을 추가합니다.

# test -x /etc/X11/Xsession && exec /etc/X11/Xsession
# exec /bin/sh /etc/X11/Xsession

 > 마지막 줄에 다음 2줄을 추가합니다.

test -x /usr/bin/startxfce4 && exec /usr/bin/startxfce4
exec /bin/sh /usr/bin/startxfce4

 

◎ 서비스 등록 및 해제

sudo systemctl enable dbus
sudo /etc/init.d/dbus start
sudo /etc/init.d/xrdp start

 > systemd 에 dbus service를 등록합니다.
 > dbus : Linux용으로 개발된 IPC(Inter-Process Communication) 및 RPC(Remote Procedure Calling) 메커니즘입니다.
 > dbus 및 xrdp를 실행합니다.

◎ xrdp 상태확인 (선택)

sudo /etc/init.d/xrdp status

 > xrdp 서비스가 정상적으로 동작하는지 상태를 확인합니다.

◎ 서비스포트 확인

# netstat -ptan | grep xrdp
tcp        0      0 0.0.0.0:3390            0.0.0.0:*               LISTEN      2279/xrdp
tcp6       0      0 ::1:3350                :::*                    LISTEN      2274/xrdp-sesman

 > 리눅스 게스트VM에서 서비스포트를 확인합니다.

C:\> netstat -an | findstr "3390"
TCP    127.0.0.1:3390         0.0.0.0:0              LISTENING

 > 윈도우에서 서비스포트를 확인합니다.

◎ xrdp 데몬 자동실행 추가

sudo nano ~/.bashrc

 > 하단에 sudo /etc/init.d/xrdp start 추가합니다.

◎ 윈도우에서 리눅스 게스트VM 원격서비스 접속 

 > mstsc를 실행하고 localhost :3390 를 입력합니다.
 > 원격 데스크톱 연결 화면에서 username와 password를 입력하고 윈도우에서 리눅스를 즐기세요~

반응형

+ Recent posts