좋습니다. 이번에는 **NAT (Network Address Translation)**에 대해 실무 관점에서 상세히 정리해드리겠습니다. 단순한 개념부터 종류, 동작 방식, 실무 예시까지 포함합니다.
🌐 NAT (Network Address Translation) 완전 정리
✅ NAT란?
NAT는 내부 네트워크의 사설 IP 주소를 외부와 통신하기 위해 공인 IP로 변환해주는 기술입니다.
- 주로 라우터, 방화벽, VPN 게이트웨이 등에 적용
- IPv4 주소 부족 문제 해결에 핵심 역할
- **OSI 3계층(Network Layer)**에서 동작 (IP 기반)
🧠 NAT의 핵심 목적
-
사설 네트워크 보호 (보안)
내부 IP는 외부에 공개되지 않음 -
IPv4 공인 IP 절약
공인 IP 하나로 여러 기기 사용 가능 -
네트워크 분리 및 경로 제어
🔢 사설 IP 주소 대역 (RFC1918)
| 클래스 | IP 범위 |
|---|---|
| A | 10.0.0.0 ~ 10.255.255.255 |
| B | 172.16.0.0 ~ 172.31.255.255 |
| C | 192.168.0.0 ~ 192.168.255.255 |
🧩 NAT의 동작 방식
예시:
[내부 PC: 192.168.0.10] ──→ [라우터: NAT 수행, 공인 IP 203.0.113.5] ──→ [인터넷]
- 내부 IP는 사설이므로 인터넷에 직접 통신 불가
- NAT 장치가 출발지 IP를
203.0.113.5로 바꿔서 전송 - 응답이 오면 다시 내부 IP로 역변환
🧭 NAT의 종류
1. SNAT (Source NAT)
-
출발지 IP 변경
-
주로 내부 → 외부로 나갈 때 사용
-
리눅스 iptables 예:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
2. DNAT (Destination NAT)
-
목적지 IP 변경
-
외부에서 들어올 때 내부 서버로 라우팅
-
포트포워딩도 DNAT의 일종
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.0.100:80
3. MASQUERADE
- SNAT의 변형으로, 공인 IP가 동적으로 바뀔 경우 유용
- 서버 재부팅이나 DHCP 환경에서도 안전
4. PAT (Port Address Translation)
-
여러 내부 IP가 하나의 공인 IP를 포트 번호로 구분하여 공유
-
흔히 우리가 쓰는 “NAT”는 실제로 PAT임
- 예:
203.0.113.5:40001→192.168.0.10:80
- 예:
🏠 실생활 예시
📶 가정용 공유기
- 내부: 192.168.0.0/24
- 외부: ISP에서 받은 공인 IP (예: 203.x.x.x)
- NAT가 자동으로 내부 → 외부로 IP 변환
🌐 클라우드 (AWS, GCP 등)
- NAT Gateway를 통해 프라이빗 서브넷의 인스턴스들이 인터넷 접속
- 외부에서는 해당 인스턴스에 직접 접근 불가
🐳 Docker
- 기본적으로 bridge 네트워크는 NAT를 통해 외부 통신
- 외부에서 컨테이너 접근하려면 포트포워딩 필요
🔐 NAT의 보안적 이점
- 내부 네트워크를 비공개화
- 외부에서 직접 접근 어려움
- 방화벽과 함께 쓰면 강력한 보안 경계 생성
❗ 주의할 점
- NAT는 세션 유지 상태이므로, 연결 수가 많으면 성능 병목 가능
- VoIP, P2P, 게임은 NAT traversal 기법 필요 (예: STUN, TURN)
- 이중 NAT(Double NAT)은 VPN, 원격접속 시 문제 발생 가능
✅ 결론
NAT는 네트워크 주소 변환 기술로서, 사설 IP 환경과 공인 인터넷을 연결하는 중추 역할을 합니다.
실무에서는 iptables, iptables-nat, router 설정, VPN, Docker 등 다양한 곳에서 NAT가 작동 중입니다.
원한다면 다음엔 iptables로 SNAT/DNAT 구성 실습이나, Docker와 NAT의 관계도 이어서 정리해줄게요.