80, 443 포트 방화벽 설정이후 wslip로 연결하는 방법

윈도우에서 80과 443 포트를 방화벽으로 허용한 후, WSL 내부 서비스(예: 웹 서버)에 호스트 IP로 연결하려면 포트 포워딩 설정이 필요합니다. WSL2는 별도 네트워크를 사용하므로 netsh 명령어로 윈도우에서 WSL IP로 트래픽을 전달해야 합니다.24hours-beginner.tistory+1

IP 주소 확인

먼저 PowerShell(관리자)에서 윈도우 IP를 ipconfig로 확인하고, WSL 터미널에서 ip addr show eth0 또는 hostname -I로 WSL IP(예: 172.x.x.x)를 확인하세요.

방화벽 규칙 추가

PowerShell(관리자 권한)에서 다음 명령어를 실행해 80, 443 포트 인바운드 허용:

New-NetFirewallRule -DisplayName "Allow 80-443 WSL" -Direction Inbound -LocalPort 80,443 -Protocol TCP -Action Allow

이 규칙은 TCP 인바운드 트래픽을 허용하며, 필요 시 Outbound도 추가하세요.velog+1

포트 포워딩 설정

PowerShell(관리자)에서 WSL IP(예: 172.20.0.1)를 사용해 명령어 실행:

netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=80 connectaddress=<WSL_IP>
netsh interface portproxy add v4tov4 listenport=443 listenaddress=0.0.0.0 connectport=443 connectaddress=<WSL_IP>

설정 확인: netsh interface portproxy show v4tov4.junho85+1

연결 테스트

WSL에서 서버(예: nginx on 80)를 실행한 후, 다른 기기 브라우저에서 윈도우_IP:80 또는 윈도우_IP:443으로 접근하세요.

다음은 안될 떄, 추가로 확인 절차

windows에서 ipconfig로 IP확인(WanIP, LanIP)

WSL에서 IP확인
ip addr show eth0
$ hostname -I

먼저 확인할 것

아래 두 가지가 가장 흔한 실패 원인입니다.

  • WSL 안의 웹 서버가 127.0.0.1에만 바인딩되어 있으면 portproxy로 못 들어옵니다. 반드시 0.0.0.0:800.0.0.0:443처럼 바인딩되어야 합니다.gwangtori+1
  • Windows 방화벽 규칙은 열었더라도, Hyper-V/WSL 방화벽 규칙이 따로 막을 수 있습니다. Microsoft 문서도 WSL용 Hyper-V 방화벽 규칙을 별도로 다룹니다.learn.microsoft

방법 1: Windows Hosts 파일 수정 (가장 추천)

스마트폰(외부망)에서 접속이 된다는 것은 포트 포워딩, 윈도우 방화벽, 그리고 WSL 내부의 Nginx 설정이 모두 완벽하게 작동하고 있다는 뜻입니다. 이제 전 세계 어디서든 사용자님의 서버에 접속할 수 있는 상태가 되었습니다.

로컬 컴퓨터에서 자신의 공인 IP(220.68.77.33)로 접속이 안 되는 현상은 **’NAT Loopback’ 또는 ‘Hairpinning’**이라고 불리는 네트워크 기술적 특성 때문입니다. 윈도우 시스템이 자기 자신에게 할당된 외부 IP로 나갔다가 다시 들어오는 패킷을 정상적으로 처리하지 못하는 경우가 많습니다.

로컬 컴퓨터에서만 220.68.77.33을 127.0.0.1로 인식하게 만들어 루프백 문제를 우회합니다.

  1. 메모장을 관리자 권한으로 엽니다.
  2. C:\Windows\System32\drivers\etc\hosts 파일을 엽니다.
  3. 맨 아래에 다음 내용을 추가하고 저장합니다:
    text
    127.0.0.1 220.68.77.33
  4. 이제 브라우저에서 http://220.68.77.33을 입력하면 즉시 로컬 서버(WSL)로 연결됩니다.

WSL IP로 연결 다른 방법

외부 IP로 연결이 안 되는 문제는 WSL 2의 기본 네트워크 모드(NAT)와 netsh portproxy의 불안정성 때문일 가능성이 큽니다. 특히 현재 WSL 내부에서 443 포트가 리스닝 상태가 아니며, 윈도우 호스트와 WSL 간의 방화벽 차단으로 인해 프록시가 정상 작동하지 않고 있습니다.

이를 해결하기 위해 가장 현대적이고 확실한 방법인 **미러드 네트워크 모드(Mirrored Networking Mode)**로 전환하는 계획을 세웠습니다. 이 모드에서는 별도의 포트 포워딩 설정 없이 WSL의 서비스를 호스트 IP에서 직접 접근할 수 있습니다.

주요 제안 사항:

1. Mirrored Mode 활성화.wslconfig 설정을 통해 WSL이 호스트의 IP를 직접 공유하도록 변경합니다. [NEW] .wslconfig
Enable mirrored networking in the user’s home directory. Location: C:\Users\User\.wslconfig (or equivalent %USERPROFILE%\.wslconfig)

ini
[wsl2]
networkingMode=mirrored

      2. 기존 설정 초기화: 혼선을 방지하기 위해 netsh interface portproxy 설정을 삭제합니다.

      powershell
      netsh interface portproxy reset

      3. WSL 재시작: 설정을 적용하기 위해 wsl --shutdown을 실행합니다.

      Run wsl --shutdown to apply the new networking configuration.

      이후

      관리자 권한으로 PowerShell 또는 명령 프롬프트를 열고 다음 명령어를 실행해 주세요:

      powershell# 기존 포트 포워딩 규칙 삭제 (관리자 권한 필수)
      netsh interface portproxy reset

      그 후, WSL로 돌아가서 Nginx를 다시 시작하면 포트 80으로 외부 접속이 가능해집니다:

      bash
      sudo service nginx restart
      error: Content is protected !!