WSL2 네트워크 완전 정복: vEthernet 인터페이스와 172.18.176.1 이해하기
들어가며
고객사로부터 문의가 들어왔는데, 호스트 위변조와 경고와 관련한 문의. 내가 제공하는 서비스 솔루션과 상관은 없었으나, 가상화 서비스를 이용하기에 궁금해서 찾아봄. 결과적으론 WSL2를 쓰는 윈도우 환경에서 발생할 수 있는 문제.
WSL2를 쓰다 보면 Windows 쪽에 vEthernet (WSL)
같은 가상 네트워크 인터페이스가 자동으로 생성되는데, 이때 할당되는 IP(예: 172.18.176.1
)가 과연 무슨 역할을 하는지 궁금할 때가 많다. 개발 환경에서 내부 통신부터 테스트용 네트워크 구성까지 알아두면 유용하니, 한 번 정리해보자.
1. WSL2 네트워크 구조 개요
- WSL1: Windows 네트워크 스택 위에서 리눅스가 “프로세스”로 동작
- WSL2: Windows 안에 경량화된 VM(가상 머신) 생성 → 완전한 리눅스 커널 구동
- Windows 호스트 ↔ WSL2 게스트(리눅스 VM) 간 가상 네트워크 인터페이스(
vEthernet
)를 통해 통신 - 외부 인터넷으로 나갈 때는 Windows 쪽 NAT를 타고 나감
- Windows 호스트 ↔ WSL2 게스트(리눅스 VM) 간 가상 네트워크 인터페이스(
[WSL2 VM] ←→ vEthernet (172.18.x.x) ←→ [Windows 호스트 네트워크] ←→ 인터넷
2. vEthernet 인터페이스 생성 원리
- WSL2를 처음 설치하거나 실행하면
- Windows 내 Hyper-V가 경량 VM을 띄우고
- Windows 쪽에 “vEthernet (WSL)”이란 이름의 가상 NIC를 만든 뒤
- 호스트(Windows)와 게스트(WSL2 VM) 사이를 가교(bridge)처럼 연결
이 가상 NIC 덕분에 Windows와 리눅스 간 로컬 통신이 가능한 것. 별도의 네트워크 케이블 없이도 내부망이 구성되는 셈이다.
3. 172.18.176.1 할당 이유와 역할
- 172.16.0.0 ~ 172.31.255.255: RFC1918이 지정한 사설 IP 대역
- WSL2 디폴트 서브넷: 보통
/20
대역(255.255.240.0) 내에서 임의로 할당 172.18.176.1
은 Windows 호스트 쪽 게이트웨이 역할- WSL2 VM의 기본 게이트웨이로 설정되어,
- 패킷을 외부(Windows 네트워크)로 내보내거나 받을 때 중계점이 됨
# Windows CMD에서 확인 예시 C:\> ipconfig Ethernet adapter vEthernet (WSL): Link-local IPv6 Address . . . : fe80::a4e3:8910:362b:bc20%28 IPv4 Address. . . . . . . . . : 172.18.176.1 Subnet Mask . . . . . . . . . : 255.255.240.0 Default Gateway . . . . . . . :
4. Link-local IPv6 주소와 활용
fe80::…
형태 주소는 링크-로컬 IPv6- 동일 네트워크(여기서는
vEthernet
) 내에서만 통신 - 라우터 거치지 않고 직접 패킷 전달
- 동일 네트워크(여기서는
- WSL2 ↔ Windows 간 IPv6 통신도 이 주소로 이뤄짐
- 특별히 건드릴 필요 없이 자동 관리되니 참고만 하면 됨
5. 서브넷 마스크(255.255.240.0) 해석
- 255.255.240.0 =
/20
→ 호스트 주소 4094개 (2^(32–20) – 2
) - 네트워크 범위 예시:
네트워크 ID: 172.18.176.0 브로드캐스트: 172.18.191.255 사용 가능 호스트: 172.18.176.1 ~ 172.18.191.254
- WSL2가 여러 VM을 띄우거나 Docker 컨테이너 네트워크를 만들 때, 이 범위 내에서 IP를 중복 없이 할당
6. 주요 명령어로 확인하는 법
- Windows 측 (CMD / PowerShell)
ipconfig /all
- WSL2 측 (리눅스 쉘)
ip addr show eth0 # 또는 ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.18.176.2 netmask 255.255.240.0 broadcast 172.18.191.255 inet6 fe80::xxxx:xxxx:xxxx:xxxx prefixlen 64 scopeid 0x20<link>
7. 실제 예시와 활용 팁
- 테스트 서버 지정
hosts 파일에172.18.176.2 my-local-test
추가 → WSL2 VM 내부 웹 서비스에http://my-local-test
로 바로 접속 - 방화벽/포트 포워딩
Windows 방화벽에서vEthernet (WSL)
대상으로 특정 포트 개방 → WSL2 서비스 외부에서 호출 가능 - Docker 네트워크 연동
Docker 컨테이너도 WSL2 내부 네트워크에 합류 → 컨테이너 간 통신 최적화
마치며
WSL2의 vEthernet
과 172.18.176.1
은 “윈도우 ↔ 리눅스”를 이어 주는 내부 네트워크 백본이다. 사설 IP, 서브넷 마스크, 링크-로컬 IPv6 개념을 이해하면, 테스트 환경 구축은 물론 Docker·VM 네트워크 디버깅도 한결 쉬워진다. 다음에 WSL2 네트워크를 만날 때는, 이 글을 참고해 차근차근 파헤쳐 보길!