WSL 외부 IP 연결문제 해결 방법

  • 127.0.0.1:80을 점유한 wslrelay.exe 입니다. → 이건 WSL의 자동 localhost 포워딩 기능입니다. WSL에서 80/tcp가 열려 있으면 Windows의 localhost:80을 자동으로 WSL로 중계해 줍니다. → 즉, localhost:80은 wslrelay가 맡고 있고, 우리가 따로 portproxy 만들 필요가 없습니다.

A) 로컬(이 PC)에서만 http://localhost 로 쓰고 싶다

  1. 그냥 테스트만 해보세요: C:\Windows\System32\curl.exe http://127.0.0.1
    • 정상 HTML이 나오면 입니다. (wslrelay가 잘 중계 중)
    • 혹시 안 나오면 한번 재기동: wsl --shutdown Restart-Service LxssManager wsl C:\Windows\System32\curl.exe http://127.0.0.1
    이미 curl http://127.0.0.1:8080 은 정상이고, wslrelay가 80을 잡고 있으므로 http://127.0.0.1 도 이제 정상일 가능성이 높습니다.

B) 같은 LAN의 다른 기기에서도 접속하고 싶다 (예: 휴대폰/다른 PC)

wslrelay가 127.0.0.1:80을 사용 중이라서, 0.0.0.0:80 로 또 바인딩하면 충돌납니다.
대신 Windows의 LAN IP로만 portproxy를 만들어 주세요.

  1. Windows의 LAN IP 확인: $lanIp = (Get-NetIPAddress -AddressFamily IPv4 ` | Where-Object { $_.InterfaceAlias -notmatch 'Loopback|WSL|vEthernet' -and $_.IPAddress -notlike '169.254.*' } ` | Sort-Object -Property SkipAsSource ` | Select-Object -First 1 -ExpandProperty IPAddress) Write-Host "LAN IP = $lanIp"
  2. 해당 LAN IP:80 → WSL:80 포워딩 생성(127.0.0.1:80은 wslrelay가 계속 담당): $wslIp = "172.26.10.217" # 현재 WSL IP netsh interface portproxy add v4tov4 listenaddress=$lanIp listenport=80 connectaddress=$wslIp connectport=80
  3. 방화벽 규칙 추가(그 LAN IP로만 80 허용): New-NetFirewallRule -DisplayName "WSL Apache 80 (LAN only)" ` -Direction Inbound -Action Allow -Protocol TCP -LocalPort 80 -LocalAddress $lanIp

→ 이제 같은 네트워크의 다른 기기에서 http://<Windows_LAN_IP> 로 접속 가능해집니다.
(내부에서 공인 IP로 테스트하면 NAT 루프백 미지원 공유기에서는 실패할 수 있으니, 반드시 LAN IP로 테스트하세요.)


C) 외부 인터넷에서도 접속하고 싶다

  • 공유기에서 외부 80 → (Windows LAN IP):80 으로 포트포워딩 설정
  • ISP가 80 인바운드 차단 시, 외부 8080 → 내부 80 으로 매핑하고 http://공인IP:8080 사용

참고(유지보수)

  • WSL 쪽 80 허용 규칙은 재시작 시 사라질 수 있습니다. 영구 적용하려면: sudo apt install -y iptables-persistent sudo netfilter-persistent save
  • WSL IP는 재부팅/재시작 시 바뀔 수 있습니다. 바뀌면 위 portproxy의 connectaddress 를 새 IP로 갱신해야 합니다.

WSL2를 설치하는 방법

가장 간단하게 WSL2를 설치하는 방법.

1. 자동 설치 (가장 간단한 방법)

대부분의 경우 이 명령 한 줄이면 WSL2와 기본 Ubuntu 배포판이 설치되고 설정됩니다.

  1. 관리자 권한으로 PowerShell 또는 명령 프롬프트 열기:
    • 시작 메뉴에서 ‘powershell’ 또는 ‘cmd’를 검색하고, 마우스 오른쪽 버튼을 클릭해서 “관리자 권한으로 실행”을 선택해주세요.
  2. 설치 명령 실행:
    • 다음 명령어를 입력하고 엔터를 누르세요.wsl --install
    • 이 명령어는 필요한 가상 머신 플랫폼 구성 요소를 활성화하고, Linux 커널 패키지를 다운로드 및 설치하며, WSL2를 기본값으로 설정하고, Ubuntu 배포판을 설치합니다. 
  3. 시스템 재부팅:
    • 설치가 완료되면 시스템을 재부팅해야 합니다.
  4. 사용자 이름 및 비밀번호 설정:
    • 재부팅 후 Ubuntu가 자동으로 실행되면, 사용자 이름과 비밀번호를 설정하라는 메시지가 나타날 거예요. 여기에 원하는 정보를 입력하면 됩니다.

2. 수동 설치 (필요한 경우)

wsl --install 명령어가 제대로 작동하지 않거나, 특정 구성 요소를 직접 제어하고 싶을 때 수동으로 설치할 수도 있어요.

2.1. WSL 활성화

먼저 WSL을 활성화해야 해요. PowerShell을 이용하는 방법이 간단하다고 하네요. 

  1. 관리자 권한으로 PowerShell 열기:
    • wsl --install 할 때처럼 관리자 권한으로 PowerShell을 열어주세요.
  2. WSL 활성화 명령어 실행:
    • 다음 두 명령어를 순서대로 입력하고 엔터를 눌러 WSL 및 가상 머신 플랫폼 기능을 활성화합니다.dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  3. 시스템 재부팅:
    • 두 명령어를 실행한 후 컴퓨터를 재부팅해주세요.

2.2. Linux 커널 업데이트 패키지 설치

WSL2를 사용하려면 최신 Linux 커널 업데이트 패키지가 필요해요.

  1. 패키지 다운로드:
    • 마이크로소프트 공식 웹사이트에서 “WSL2 Linux 커널 업데이트 패키지”를 다운로드하고 설치해주세요. (보통 .msi 파일이에요)

2.3. WSL2를 기본 버전으로 설정

새로 설치하는 모든 Linux 배포판이 WSL2 모드로 실행되도록 기본 버전을 설정해줍니다.

  1. 관리자 권한으로 PowerShell 열기:
    • 다시 관리자 권한으로 PowerShell을 열어주세요.
  2. WSL2 기본 설정 명령어 실행:
    • 다음 명령어를 입력하고 엔터를 누릅니다.wsl --set-default-version 2

2.4. Linux 배포판 설치

이제 마이크로소프트 스토어에서 원하는 Linux 배포판(예: Ubuntu)을 설치하면 돼요.

  1. Microsoft Store 열기:
    • 시작 메뉴에서 ‘Microsoft Store’를 검색해서 엽니다.
  2. Linux 배포판 검색 및 설치:
    • 검색창에 ‘Ubuntu’를 입력하고 원하는 버전(예: Ubuntu 22.04 LTS)을 선택하여 “설치” 버튼을 클릭합니다.
  3. 사용자 이름 및 비밀번호 설정:
    • 설치가 완료된 Ubuntu 앱을 실행하면, 사용자 이름과 비밀번호를 설정하라는 메시지가 나타납니다.

마지막으로 확인하기

  • WSL 상태 확인: PowerShell에서 wsl -l -v 명령어를 입력하면 설치된 리눅스 배포판과 어떤 버전(WSL1 또는 WSL2)으로 실행 중인지 확인할 수 있어요.

윈도우즈 WSL Ubuntu 디렉토리 접근하기 (일반적인 방법)

이 방법은 윈도우 파일 탐색기에서 직접 WSL 리눅스 파일 시스템에 접근하는 방식이에요.
  • 파일 탐색기 사용하기 (가장 쉽고 추천하는 방법이에요!)
    1. 윈도우 **파일 탐색기(File Explorer)**를 열어주세요.
    2. 파일 탐색기의 주소 표시줄에 \\wsl$ 라고 입력한 후 엔터키를 눌러주세요. 
      • \\wsl.localhost라고 입력해도 같아요!
    3. 그러면 윈도우 파일 탐색기에 설치된 WSL 리눅스 배포판들이 목록으로 보일 거예요 (예: UbuntuUbuntu-20.04Debian 등).
    4. 여기서 **Ubuntu (또는 설치하신 우분투 버전)**를 클릭하면, 윈도우에서 우분투의 모든 파일과 폴더에 접근할 수 있습니다. 마치 윈도우의 일반 드라이브처럼 파일들을 복사하거나 수정할 수 있어요. 
  • Visual Studio Code 사용하기 (개발하시는 분들께 유용해요!)
    • 만약 VS Code를 사용하고 계시다면, VS Code에서 우분투 파일을 열어 작업하다가 해당 파일을 윈도우 탐색기로 열 수 있는 기능이 있어요. 우분투 환경에서 파일을 오른쪽 클릭한 후 “탐색기에서 열기” 같은 옵션을 선택하면 윈도우 탐색기가 해당 디렉토리로 열립니다. 
  • 명령 프롬프트/PowerShell에서 wsl explorer 명령 사용하기
    • 윈도우의 명령 프롬프트나 PowerShell을 열고, 다음 명령어를 입력하면 현재 WSL 리눅스의 홈 디렉토리가 윈도우 파일 탐색기로 열립니다.wsl explorer .
    • 만약 특정 WSL 디렉토리를 열고 싶다면, 해당 경로에서 wsl explorer .를 실행하면 됩니다.

2. WSL Ubuntu에서 윈도우즈 디렉토리에 접근하기

반대로, WSL 우분투 터미널 안에서 윈도우즈에 있는 파일들에 접근할 수도 있어요.

  • /mnt 디렉토리 이용하기
    1. WSL 우분투 터미널을 열어주세요.
    2. cd /mnt 명령어를 입력하여 /mnt 디렉토리로 이동합니다.
    3. 이곳에 보시면 cd 등의 폴더가 보일 거예요. 이 폴더들이 바로 윈도우즈의 각 드라이브(C:, D: 등)를 나타냅니다.
    4. 예를 들어, 윈도우즈의 C 드라이브에 접근하려면 cd /mnt/c 라고 입력하면 됩니다. 그 안의 파일들은 ls 명령어로 확인할 수 있어요. 
error: Content is protected !!