[wsl] 서버 외부 접속하기

bluejoy·2023년 10월 16일

증상

wsl을 사용해 서버를 개발하고 있었다. 윈도우에서 localhost로는 접속이 잘되지만, 외부 ip로는 접속이 안되는 버그가 발생했다.
분명 포트포워딩도 잘 열어주고, 방화벽도 열어줬는데 외부 ip로는 접속이 안됐다.

원인

wsl에서는 자체적으로 네트워크 어댑터를 가지기에 외부에서는 접속이 안된다. 위 사진을 보면 172.19.154.67이라는 주소를 가지는 것을 볼 수 있다. 이 주소는 매번 바뀌기에 단순 매핑으로는 매번 다시 해줘야한다.

기존에 localhost로 접속이 되는 이유는 wsl에서 자체적으로 프록싱을 통해 연결해주는 것 같다.
인터넷에 다양한 해결법이 떠돌고 있는데, 2023-09월 자로 추가된 새로운 기능을 활용하면 간단하게 해결 가능하다.

networkMode=mirrored

https://devblogs.microsoft.com/commandline/windows-subsystem-for-linux-september-2023-update/

이는 WSL의 기존 NAT 네트워킹 아키텍처를 "미러링"이라는 완전히 새로운 네트워킹 모드로 완전히 개편한 것입니다. 이 모드의 목표는 Windows에 있는 네트워크 인터페이스를 Linux에 미러링하여 새로운 네트워킹 기능을 추가하고 호환성을 향상시키는 것입니다.

이 모드를 활성화하면 현재 얻을 수 있는 이점은 다음과 같습니다.

  • IPv6 지원
  • localhost 주소를 사용하여 Linux 내에서 Windows 서버에 연결127.0.0.1
  • LAN(근거리 통신망)에서 직접 WSL에 연결
  • VPN에 대한 향상된 네트워킹 호환성
  • 멀티캐스트 지원

이 놀라운 모드를 사용하면 복잡한 설정이나 스크립트 없이 wsl에서 간단하게 서버를 외부로 열 수 있다.

윈도우 미리보기 모드

이 모드는 윈도우 미리보기 모드에서만 적용이 가능하다.
https://learn.microsoft.com/ko-kr/windows-insider/flighting#switching-between-channels
글을 참조하여

다음과 같이 베타 채널로 바꾸고, 업데이트를 적용하자.

.wslconfig 작성

https://learn.microsoft.com/en-us/windows/wsl/wsl-config
위 문서를 참조하여 C:\Users\${name}\.wslconfig의 내용을 다음과 같이 바꾸자.

[experimental]
networkingMode=mirrored

wsl 업데이트

wsl --update

나는 업데이트를 하기 전까지는 적용이 안됐다. 혹시 모르니 최신 버전으로 업데이트 해주자.

wsl 종료 후 재접속

wsl --shutdown
wsl
ifconfig

종료 후 재접속하고 아이피 주소를 확인해보면 윈도우와 똑같은 주소를 가지는 것을 확인할 수 있다. 공유기를 사용하기에 내부 ip를 가진다.
이제 외부 주소로 접속 시 제대로된 응답이 보인다.

profile
개발자 지망생입니다.

2개의 댓글

comment-user-thumbnail
2024년 6월 1일

안녕하세요, 블로그 글 도움 많이 되었습니다. 한가지 여쭙고 싶은게 있는데 혹시 mirrored 설정 시 윈도우에서 WSL 서버로 접근이 잘 되시나요? 외부에서 접근은 잘 되는데 반대로 localhost나 127.0.0.1 혹은 내부 IP로도 WSL에 실행 중인 서버로 접근이 안됩니다 ㅜㅜ

1개의 답글