안 쓰는 노트북 서버로 활용하기
작년에 노트북을 사면서 집에 안 쓰는 노트북이 생겼다. 당근을 할까 고민도 했지만 그 당시에 육아 하느라 정신도 없었고(지금도 그렇다) 노트북에 박혀 있는 그래픽 카드(1050 ? 1060 ? TI)를 혹시나 나중에 쓸 일이 있을까 싶어서 그냥 놔뒀다. 그러다가 얼마전에 발견했는데 그냥 그렇게 놔두느니 서버로 만들어 놓고 쓰면 어떨까 싶어서 만들었다.
서버로 이용하기 위해서 WSL2를 사용했다. 서버로 접속해서 사용할때 windows 보다 Linux가 더 익숙하기도 하고 뭔가 서버로 쓰기엔 리눅스가 편하다.
💻 WSL2 외부 접속을 위한 포트포워딩
서버로 이용하기 위해서 WSL2(Windows Subsystem for Linux) 를 사용했다. 서버로 접속해서 사용할때 windows 보다 Linux가 더 익숙하기도 하고 뭔가 서버로 쓰기엔 리눅스가 편하다. 그래서 리눅스 환경을 로컬 VM처럼 활용한다. 그러면 WSL에 실행된 서버 (ex. SSH, 웹서버) 를 다른 장치에서 접속하고 싶다면, 포트포워딩을 설정해야 한다.
- WSL2 외부 접속 개념 정리
- Windows netsh를 이용한 포트포워딩 방법
- iptables와의 차이점
- 재부팅 시 설정 유지 여부
- 자동화 스크립트 예제
📦 WSL2에서 외부 접속이 어려운 이유?
나는 처음에 WSL은 windows와 동일한 IP를 사용할거라고 생각했다. 생각해보니 OS도 다른데 동일한 환경이라고 IP가 같을거라고 생각한게 에러긴하다. 설정에 따라 달라질 수는 있겠지만 VM의 IP 대역이 완전 다른 IP 대역이었다. Virtual Box로 브릿지 해서 만든 VM과는 조금 다르게 WSL2는 실제로 Windows 호스트와는 다른 내부 네트워크 (vNIC) 를 사용한다. 그래서 WSL에서 띄운 서비스는 기본적으로 외부(같은 집 네트워크 포함)에서 직접 접속할 수 없다.
📌 WSL2의 네트워크 예시:
Windows 호스트 IP | 192.168.30.10 |
WSL 내부 IP | 172.30.176.1 |
외부 PC에서 접속 | ❌ ssh user@172.30.176.1 은 불가 |
해결 방법 | ✅ Windows 포트포워딩 설정 |
⚙️ Windows에서 포트포워딩 하기 (netsh 사용)
예: 외부에서 192.168.30.10:2222 → WSL의 SSH (172.x.x.x:22) 접속
# PowerShell
netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=172.30.176.1
- listenport: 외부에서 접근할 포트
- connectport: WSL에서 실제 서비스가 열려 있는 포트
- connectaddress: WSL의 내부 IP 주소
🧠 netsh는 Windows에서만 사용할 수 있으며, 이 설정은 레지스트리에 저장되어 재부팅 후에도 유지된다.
192.168.30.10는 해당 노트북에 할당한 IP이고 2222번 포트로 접속하면 WSL의 IP 172.x.x.x의 22번 포트로 접속하도록 하는 설정이다.
⚠️ 그런데, WSL2의 IP는 재부팅마다 바뀜!
매 부팅마다 WSL의 내부 IP가 달라지기 때문에, 기존 포트포워딩은 동작하지 않을 수 있다.
따라서 자동으로 갱신하는 스크립트가 필요하다.
🔄 PowerShell 스크립트: 부팅 후 자동 갱신
# PowerShell
$wslIp = wsl hostname -I | ForEach-Object { $_.Split(" ")[0] }
netsh interface portproxy delete v4tov4 listenport=2222 listenaddress=0.0.0.0
netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=$wslIp
🔥 Linux에서는 iptables로 포트포워딩 가능
Linux에서는 iptables를 통해 port를 열어줘야 한다.
#bash
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
하지만 이 설정은 휘발성이기 때문에, 재부팅 시 사라진다.
해결 방법:
- iptables-persistent 패키지 설치:
#bash
sudo apt install iptables-persistent
sudo netfilter-persistent save
- 위의 작업을 하거나 부팅 시 iptables-restore 실행하도록 systemd 유닛을 만들어야 함.
🖼 접속 및 연결 경로
[외부 접속 흐름도]
┌────────────┐ Port 2222 ┌────────────┐ Port 22 ┌────────────┐
│ 외부 PC ├──────────────────────►│ Windows 호스트├────────────────►│ WSL2 │
└────────────┘ └────────────┘ └────────────┘
🧠 마무리 요약
- WSL2는 내부 가상 네트워크를 사용하기 때문에 외부에서 직접 접속이 불가함
- Windows에서는 netsh interface portproxy 로 포트포워딩을 설정할 수 있고 재부팅에도 유지됨
- 단, WSL2의 IP는 바뀌므로 자동화가 필수
- Linux에서는 iptables로 유사한 작업 가능하지만 휘발성 설정이므로 iptables-persistent 등의 도구를 병행해야 함