WSL 내부에서 실행 중인 애플리케이션을 외부로 노출 시키는 방법


1. WSL 2 터미널에서 ip addr 명령어를 실행하여 WSL2의 인스턴스 IP주소를 확인한다.

ex) ip addr의 출력이 아래와 같을 경우
1: lo: <loopback,up,lower_up> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000</loopback,up,lower_up>
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <broadcast,multicast,up,lower_up> mtu 1500 qdisc mq state UP group default qlen 1000</broadcast,multicast,up,lower_up>
link/ether 00:15:5d:6f:1d:3b brd ff:ff:ff:ff:ff:ff
inet xxx.xxx.xxx.xxx/20 brd 172.19.239.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::215:5dff:fe6f:1d3b/64 scope link
valid_lft forever preferred_lft forever

eth0의 inet 키워드 옆에  xxx.xxx.xxx.xxx가 인스턴스 IP이다.


2. WSL 2 인스턴스의 IP,PORT를 Windows로 포워딩한다.

windwos의 powerShell에서 아래의 명령어를 실행하여 포워딩해주도록 한다.

이 때, listenaddress=0.0.0.0 은 모든 가능한 IP 주소에서 들어오는 연결을 수신하겠다는 의미이다.

 

netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=8080 connectaddress=xxx.xxx.xxx.xxx

netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=xxx.xxx.xxx.xxx

 

따라서 위 2개의 명령어를 실행하면 windows에서 8080 포트와 22번 포트에서 모든 IP를 수신받아서

xxx.xxx.xxx.xxx주소를 가진 wsl 내부의 8080번과 22번 포트에 각각 포워딩해주도록 설정하는 것이다.