[Daily morning study] NAT와 포트 포워딩

#daily morning study

Image


NAT(Network Address Translation)란?

NAT는 IP 패킷의 헤더에 있는 출발지 또는 목적지 IP 주소를 변환하는 기술이다. 주로 사설 IP 주소를 공인 IP 주소로 바꿔주거나 그 반대 방향으로 변환하는 데 쓴다.

NAT가 필요한 이유:

  1. IPv4 주소 고갈 — 전 세계 공인 IP는 약 43억 개뿐이다. NAT 덕분에 하나의 공인 IP를 수십, 수백 대의 내부 장치가 공유할 수 있다.
  2. 보안 — 내부 네트워크 구조가 외부에 직접 노출되지 않아 기본적인 방화벽 역할을 한다.

NAT 동작 방식

집 공유기를 예로 들면 이렇다.

내부 장치 (192.168.0.10:5000)
       ↓  출발지 IP/포트 교체
공유기 NAT (공인 IP 203.0.113.1:54321)
       ↓
인터넷 서버 (93.184.216.34:80)

공유기는 NAT 변환 테이블을 유지한다.

내부 IP:포트공인 IP:포트목적지 IP:포트
192.168.0.10:5000203.0.113.1:5432193.184.216.34:80
192.168.0.11:6000203.0.113.1:5432293.184.216.34:443

응답 패킷이 돌아오면 공인 IP:포트를 보고 원래 내부 장치에게 전달한다.


NAT 종류

1. Static NAT (정적 NAT)

공인 IP와 사설 IP를 1:1로 고정 매핑한다. 내부 서버를 외부에 직접 노출시킬 때 쓴다.

203.0.113.1 ←→ 192.168.0.10 (항상 고정)

2. Dynamic NAT (동적 NAT)

공인 IP 풀(pool)에서 가용한 주소를 동적으로 할당한다. 사용이 끝나면 다시 풀로 반납한다. 공인 IP가 여러 개지만 내부 장치 수보다 적을 때 사용한다.

3. PAT / NAPT (포트 주소 변환, IP 마스커레이딩)

실제로 가장 널리 쓰이는 방식이다. 하나의 공인 IP에 포트 번호를 달리해 여러 내부 장치를 동시에 연결한다. 가정용 공유기가 정확히 이 방식으로 동작한다.

192.168.0.10:5000  →  203.0.113.1:54321
192.168.0.11:5000  →  203.0.113.1:54322  (같은 포트도 공인 측 포트로 구분)
192.168.0.12:5000  →  203.0.113.1:54323

포트 포워딩(Port Forwarding)

포트 포워딩은 외부에서 들어오는 특정 포트 요청을 내부 서버의 특정 IP:포트로 전달하는 설정이다. DNAT(Destination NAT)의 일종이다.

외부 클라이언트
  → 203.0.113.1:8080 요청
공유기/방화벽 (포트 포워딩 규칙 적용)
  → 192.168.0.100:80 으로 전달

활용 사례

  • 집에서 운영하는 웹 서버, 게임 서버 외부 접근
  • SSH 접속 포트 변경 노출 (외부 22222 → 내부 22)
  • NAS, IP 카메라 원격 접근

iptables로 포트 포워딩 설정하기 (Linux)

# 외부 8080 포트를 내부 192.168.0.100:80으로 포워딩
iptables -t nat -A PREROUTING -p tcp --dport 8080 \
  -j DNAT --to-destination 192.168.0.100:80

# NAT 마스커레이딩 활성화 (SNAT)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# IP 포워딩 커널 설정 활성화
echo 1 > /proc/sys/net/ipv4/ip_forward

NAT의 한계

P2P 통신 문제

NAT 뒤에 있는 두 장치가 서로 직접 통신하려면 어렵다. 둘 다 사설 IP만 가지고 있어서 상대방에게 직접 패킷을 보낼 방법이 없기 때문이다. 화상통화, 온라인 게임, WebRTC 등이 이 문제를 겪는다.

NAT Traversal

P2P 통신 문제를 해결하는 기법들이다.

STUN(Session Traversal Utilities for NAT)

  • 클라이언트가 공개 서버에 요청을 보내 자신의 공인 IP:포트를 파악한다.
  • 두 클라이언트가 공인 IP:포트를 교환한 뒤 직접 연결을 시도한다.
  • Full Cone NAT처럼 개방적인 NAT 유형에서는 잘 동작하지만, Symmetric NAT에서는 실패한다.

TURN(Traversal Using Relays around NAT)

  • 중계 서버가 두 클라이언트 사이의 트래픽을 대신 전달한다.
  • STUN이 실패할 때의 폴백 방법이다. 대역폭과 지연이 늘어난다.

ICE(Interactive Connectivity Establishment)

  • STUN과 TURN을 조합해 최선의 연결 경로를 찾는 프레임워크다.
  • WebRTC가 내부적으로 ICE를 사용한다.

정리

개념핵심 역할
Static NAT공인 IP ↔ 사설 IP 1:1 고정 매핑
Dynamic NATIP 풀에서 동적 매핑
PAT / NAPT하나의 공인 IP + 포트 번호로 다대일 매핑 (가장 일반적)
포트 포워딩외부 요청을 특정 내부 서버로 전달 (DNAT)
STUNNAT 뒤 클라이언트가 자신의 공인 주소를 알아내는 프로토콜
TURNP2P 불가 시 중계 서버를 경유하는 방법

NAT는 IPv4 주소 부족이라는 현실적인 문제를 해결하기 위해 보편화된 기술이다. 덕분에 수십억 대의 장치가 인터넷에 연결될 수 있었지만, P2P 통신 복잡성이라는 부작용도 가져왔다. IPv6가 보급되면 NAT 없이도 모든 장치에 고유 공인 IP를 부여할 수 있어 이 문제가 근본적으로 해소된다.