헬창 개발자

WSL 환경 localhost는 통신이 되지만, Host IP는 통신이 안되는 현상 본문

공부방

WSL 환경 localhost는 통신이 되지만, Host IP는 통신이 안되는 현상

찬배 2024. 12. 18. 10:44
윈도우(Host) <-/-> WSL <--> Docker

 

위와 같은 환경으로 웹 서버를 열어 통신을 하려고 서버를 열었지만, localhost:8888은 통신이 되지만, 내 아이피:8888은 통신이 안되는 현상을 겪었다.

 

도커 브릿지 문제인가 확인을 했지만 이상이 없었고 Docker IP:8888, WSL IP:8888 도 접속이 가능했다. 나중에 패킷을 분석해보니 윈도우(Host) <-> WSL 이 통신이 안되고 있었다. 그러다가 포트를 8000번으로 바꿔서 통신이 되는걸 보고.. 아하 포트 포워딩을 안해줬구나 하고 깨달았다.

 

그래서 이 글은 윈도우 powershell 환경에서 wsl로 포트 포워딩을 하는 방법을 알려주는 글 이다.


먼저 호스트에서 포트 포워딩 상태를 확인 해 보자

netsh interface portproxy show all

 

 

위 명령어를 입력하면 IPv4 수신 대기(0.0.0.0)와 특정 IPv4 주소(Host IP)에서 각각의 포트를 통해 연결 가능 상태를 나타낸다. 8888 포트는 없어서 당연히 통신이 안된거다.

0.0.0.0 의미

  • 0.0.0.0은 모든 네트워크 인터페이스에서 들어오는 요청을 수신 대기한다는 뜻입니다.

172.22.75.150 의미

  • 이는 특정 네트워크 인터페이스(WSL 등에서 사용 중인 프라이빗 IP)에서 연결 가능 상태를 나타냅니다.

이제 통신이 안되었던 8888 포트를 추가 해주자.

 

netsh (PowerShell에서 실행)

netsh interface portproxy add v4tov4 listenport=<윈도우_포트> connectaddress=<WSL_IP> connectport=<WSL_포트>
  • listenport: Windows에서 대기할 포트
  • connectaddress: WSL의 IP 주소 (localhost 또는 WSL 내부 IP)
  • connectport: WSL에서 연결할 포트

WSL에서 8888 포트로 실행 중인 웹 애플리케이션에 Windows의 8888 포트를 포워딩하는 경우

netsh interface portproxy add v4tov4 listenport=8888 connectaddress=172.22.75.150 connectport=8888


이제 docker compose를 다시 해서 이미지를 띄우면 정상적으로 Host IP:8888 에서 접근이 가능하다.

참고로 방화벽은 기본적으로 해제해야 한다.

Comments