WSL2에서 Ubuntu 등을 설치하면 기본적으로는 내부 프라이빗 네트워크망을 사용한다. 즉, 아이피 대역이 아예 다른 서브네트웍 망을 생성하여 사용한다는 얘기.
따라서 ipconfig를 이용하여 할당된 IP를 확인해보면,
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.24.175.35 netmask 255.255.240.0 broadcast 172.24.175.255
inet6 fe80::215:5dff:fea8:1061 prefixlen 64 scopeid 0x20<link>
ether 00:15:5d:a8:10:61 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7 bytes 586 (586.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
와 같이 172.24.175.35 등으로 할당된다.
여러가지 이유로 윈도우에서 접속되어 있는 외부네트웍을 접속하고, 또 외부에서 WSL2 안의 시스템에 접속하고 싶을 때가 있는데, 이때는 WSL2의 Bridge 기능을 사용하면 된다.
먼저 Hyper-V 매니저를 설치하고, 실행한다. Windows 추가 기능 관리자를 사용하여 설치할 수 있다.
설치하고, 재부팅을 완료한 이후에, Hyper-V 매니저를 실행하면, 다음과 같이 보일텐데…
메뉴의 Action > Virtual Switch Manager를 실행한다.
이제 New virtual network switch를 클릭고, 외부 네트웍에 브릿지 해야 하므로 External를 선택한 후, Create Virtual Switch를 클릭한다.
이름은 적당히 입력하고 (나중에 사용해야 하므로 적당히…), Connection Type에서 External Network를 선택하고, 현재 외부망에 연결되어 있는 네트웍카드를 선택한다. (예시의 경우엔, 현재 노트북을 이용하여 무선랜으로 외부망에 접속중이므로, 무선랜카드를 선택하였음.)
Apply를 눌러 적용한다.
자, 이제 현재 사용자의 홈디렉토리에 .wslconfig 파일을 생성하고, 다음과 같이 입력한 후, 저장한다.
[WSL2]
networkingMode = bridged
vmSwitch = New Virtual Switch
vmSwitch의 이름은 아까 전 단계에서 생성했던 Virtual Network Switch 이름을 입력하면 된다.
PowerShell를 관리자 권한으로 실행하여 다음과 같이 WSL2를 아예 종료한다.
PS C:\WINDOWS\system32> .\wsl.exe --shutdown
이제 WSL2를 다시 실행한 다음, ifconfig를 실행해 보면,
~$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.100.193 netmask 255.255.255.0 broadcast 192.168.100.255
ether 5c:bb:f6:9e:ee:fa txqueuelen 1000 (Ethernet)
RX packets 2 bytes 684 (684.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2 bytes 684 (684.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
정상적으로 외부 네트웍망의 아이피를 할당받았음을 알 수 있다.
끝!