728x90
반응형
SMALL
개발 환경에서 로컬 VM(Virtual Machine)에서 실행 중인 웹 서비스(예: Flask, Spring 등)에 다른 내부망 PC에서도 접근해야 할 때가 있습니다.
이때 netsh interface portproxy 명령어를 이용한 포트 포워딩 설정을 통해, 내 PC IP를 통해 VM 서비스에 우회 접속할 수 있습니다!
📌 1. 네트워크 구조 이해하기
가정한 상황은 다음과 같습니다:
- VM의 IP: 192.168.30.100
- 내 컴퓨터의 IP: 192.168.21.47
- VM에서 서비스는 5000번 포트에서 실행 중 (예: http://192.168.30.100:5000)
- 목적: 다른 PC에서 http://192.168.21.47:5000으로 접속 시 VM의 서비스로 연결
이때 직접적으로 192.168.30.100:5000에 접근할 수 없는 경우, 내 컴퓨터가 게이트웨이 역할을 하도록 포트 포워딩을 설정해줄 수 있습니다.
📘 2. Windows netsh interface portproxy란?
Windows의 netsh interface portproxy는 포트 레벨에서 TCP 트래픽을 프록시(우회)할 수 있도록 해주는 기능입니다.
이를 통해 로컬에 도달한 요청을 지정된 IP와 포트로 자동 전달할 수 있습니다.
✔ 주요 용도:
- 내부망 간 IP 격리가 있을 때 브릿지 역할
- Hyper-V, VirtualBox, VMware 등 로컬 가상 머신의 포트를 외부에서 접근 가능하게 할 때
- 방화벽, NAT 환경 우회
🛠 3. 포트 포워딩 설정 방법
✅ ① 관리자 권한으로 CMD 실행
먼저, cmd.exe를 관리자 권한으로 실행해야 합니다.
(※ netsh는 시스템 네트워크 설정을 수정하므로 권한 필요)
✅ ② 포트포워딩 등록
netsh interface portproxy add v4tov4 listenport=5000 listenaddress=192.168.21.47 connectport=5000 connectaddress=192.168.30.100
항목 | 설명 |
listenport | 요청을 받을 포트 (즉, 내 컴퓨터에서 열어줄 포트) |
listenaddress | 요청을 받을 IP (내 컴퓨터의 IP) |
connectport | 실제 연결할 포트 (VM에서 서비스가 열려있는 포트) |
connectaddress | 실제 연결할 IP (VM의 IP 주소) |
💡 예시 흐름:
내부망 사용자 → 192.168.21.47:5000 → (portproxy) → 192.168.30.100:5000 (VM)
🔎 4. 설정 확인 / 삭제 방법
✅ 포트포워딩 목록 확인
netsh interface portproxy show v4tov4
출력 예시
Listen on ipv4: Connect to ipv4:
Address Port Address Port
--------------- ---------- --------------- ----------
192.168.21.47 5000 192.168.30.100 5000
❌ 포트포워딩 삭제
netsh interface portproxy delete v4tov4 listenport=5000 listenaddress=192.168.21.47
⚠️ 5. 주의사항
- Windows 방화벽 설정 확인
- 5000번 포트가 방화벽에서 허용되어 있어야 함
- Inbound Rule에 예외 추가 필요 (TCP 5000)
- 라우팅만 제공, NAT 기능은 없음
- 이 포트포워딩은 단순 포트 중계 기능일 뿐, IP 변경이나 NAT 변환은 하지 않음
- 서비스는 반드시 VM에서 외부 접근 허용 상태여야 함
- VM 내 서비스는 0.0.0.0 또는 해당 VM IP 기준으로 바인딩되어야 함
# Flask 예시
app.run(host='0.0.0.0', port=5000)
🔁 요약
- netsh interface portproxy로 포트를 중계할 수 있다.
- VM IP는 직접 접근할 수 없을 경우, 내 PC IP를 통해 접근할 수 있도록 브릿지 역할을 수행한다.
- 방화벽 설정과 VM 내 서비스 바인딩 확인도 반드시 필요하다.
참조
728x90
반응형
LIST
'개발지식' 카테고리의 다른 글
Kotlin 기본 함수(예시 코드) (7) | 2025.08.12 |
---|---|
Kotlin 기본 문법(예시 코드) (5) | 2025.08.11 |
(JPA) mappedBy 완벽 이해! (8) | 2025.07.26 |
(JPA) 연관관계 매핑 (4) | 2025.07.25 |
(JPA) 영속성 컨텍스트 (4) | 2025.07.23 |