티스토리 뷰

os/Linux

Occuring timeout when use apt or curl or wget on WSL2

jacobbaek Jacob_baek 2020. 11. 29. 10:36

WSL2 환경에서 ping을 통한 외부 네트워크 연결은 되어지나 apt 명령을 통한 패키지 다운로드나 업데이트 등이 이루어지지 않는 현상이 있어 이에 대한 분석한 결과를 정리해보고자 한다. (참고로 apt 명령외에도 wget이나 curl을 통한 데이터 가져오기 또한 정상작동하지 않았다.)

분석별과

windows(즉, host)가 가지고 있는 network interface는 다음과 같다.

PS Microsoft.PowerShell.Core\FileSystem::\\wsl$\Ubuntu-20.04\home\jacob> ipconfig

Windows IP 구성

이더넷 어댑터 이더넷 2:

   연결별 DNS 접미사. . . . :
   링크-로컬 IPv6 주소 . . . . : fe80::85ef:1e3:7c31:32b3%11
   IPv4 주소 . . . . . . . . . : 10.10.10.100
   서브넷 마스크 . . . . . . . : 255.255.255.0
   기본 게이트웨이 . . . . . . : 10.10.10.1

이더넷 어댑터 vEthernet (Default Switch):

   연결별 DNS 접미사. . . . :
   링크-로컬 IPv6 주소 . . . . : fe80::35a0:3cc2:41d9:1090%18
   IPv4 주소 . . . . . . . . . : 192.168.16.1
   서브넷 마스크 . . . . . . . : 255.255.240.0
   기본 게이트웨이 . . . . . . :

이더넷 어댑터 vEthernet (WSL):

   연결별 DNS 접미사. . . . :
   링크-로컬 IPv6 주소 . . . . : fe80::ec78:a852:1f79:8aec%41
   IPv4 주소 . . . . . . . . . : 172.28.128.1
   서브넷 마스크 . . . . . . . : 255.255.240.0
   기본 게이트웨이 . . . . . . :

위 설정과 맞물려 WSL 네트워크 환경이 어떻게 변화되는지 확인해보자.

WSL1 환경

먼저 WSL1 환경을 확인해보자.

PS Microsoft.PowerShell.Core\FileSystem::\\wsl$\Ubuntu-20.04\home\jacob> wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu-20.04           Running         1
  docker-desktop-data    Stopped         2

실제 WSL1에서의 interface 정보이다.

jacob@jacobbaek-laptop:~$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.10.10.100  netmask 255.255.255.0  broadcast 10.10.10.255
        inet6 fe80::85ef:1e3:7c31:32b3  prefixlen 64  scopeid 0xfd<compat,link,site,host>
        ether a4:bb:6d:d5:a4:f7  (Ethernet)
        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

eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.16.1  netmask 255.255.240.0  broadcast 192.168.31.255
        inet6 fe80::35a0:3cc2:41d9:1090  prefixlen 64  scopeid 0xfd<compat,link,site,host>
        ether 00:15:5d:c0:4f:61  (Ethernet)
        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

eth3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.28.128.1  netmask 255.255.240.0  broadcast 172.28.143.255
        inet6 fe80::ec78:a852:1f79:8aec  prefixlen 64  scopeid 0xfd<compat,link,site,host>
        ether 00:15:5d:d5:3d:e8  (Ethernet)
        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

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 1500
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0xfe<compat,link,site,host>
        loop  (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

간단히 정리하자면 WSL1은 기존 host와 동일한 네트워크 인터페이스를 사용한다.

WSL2 환경

그렇다면 WSL2는 어떤지 확인해보자.

PS Microsoft.PowerShell.Core\FileSystem::\\wsl$\Ubuntu-20.04\home\jacob> wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu-20.04           Running         2
  docker-desktop-data    Running         2
  docker-desktop         Running         2

실제 WSL2로 연결하여 네트워크 인터페이스를 확인해보면 다음과 같이 WSL interface만이 존재한다.

jacob@jacobbaek-laptop:~$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.28.128.144  netmask 255.255.240.0  broadcast 172.28.143.255
        inet6 fe80::215:5dff:fecb:47ae  prefixlen 64  scopeid 0x20<link>
        ether 00:15:5d:cb:47:ae  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5  bytes 426 (426.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

최종 분석

다시 정리하자면 아래와 같다.

WSL1의 경우 기존 windows의 host 환경을 그대로 사용하는 반면에 WSL2의 경우 WSL 전용 네트워크로 변환하여 사용하는 방식이라 이로 인해 방화벽과 같은 설정에 따른 연결에 제한이 생길수 있다.

**하여 WSL2의 경우 방화벽에 의한 차단이 발생될수 있고 추가로 WSL network에 대한 허용rule을 추가해 해주어야 한다.

참고로 localhost 공유방식(host공유)에 대한 지원이 이루어질거란 이야기가 있었다.
다만 작성된 시간이 2019년인데 아직인거를 보면 ..

참고사이트

댓글
댓글쓰기 폼