4장 : IP 주소와 서브넷
NAT와 DHCP
지금까지 IP 주소와 서브넷을 배우면서, 공인 IP와 사설 IP가 구분된다는 것을 알았습니다. 그런데 한 가지 의문이 남습니다. 사설 IP는 인터넷에서 라우팅되지 않는다고 했는데, 그렇다면 192.168.x.x 주소를 가진 내 노트북은 어떻게 구글에 접속하는 걸까요?
이 질문에 대한 답이 NAT(Network Address Translation)입니다.
NAT의 동작 원리
NAT 동작 과정 (PAT)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
내부 네트워크 공유기(NAT) 인터넷
공인 IP: 203.0.113.1
PC-A (192.168.1.10:50000) Google
PC-B (192.168.1.11:50001) (142.250.x.x)
PC-C (192.168.1.12:50002)
1. PC-A → Google 요청
출발: 192.168.1.10:50000
도착: 142.250.196.110:443
2. 공유기 NAT 변환 (SNAT)
출발: 203.0.113.1:40001 ← 변환!
도착: 142.250.196.110:443
NAT 테이블:
┌─────────────────────┬───────────────────┐
│ 내부 │ 외부 │
├─────────────────────┼───────────────────┤
│ 192.168.1.10:50000 │ 203.0.113.1:40001 │
│ 192.168.1.11:50001 │ 203.0.113.1:40002 │
│ 192.168.1.12:50002 │ 203.0.113.1:40003 │
└─────────────────────┴───────────────────┘
3. Google → 응답
출발: 142.250.196.110:443
도착: 203.0.113.1:40001
4. 공유기 NAT 역변환
출발: 142.250.196.110:443
도착: 192.168.1.10:50000 ← 복원!NAT의 종류
| 종류 | 변환 대상 | 방향 | 사용 사례 |
|---|---|---|---|
| SNAT (Source NAT) | 출발지 IP | 내부→외부 | 인터넷 접속 |
| DNAT (Destination NAT) | 목적지 IP | 외부→내부 | 포트 포워딩, 서버 외부 공개 |
| PAT (Port Address Translation) | 출발지 IP + 포트 | 내부→외부 | 가정/기업 (N:1 NAT) |
| 1:1 NAT | 고정 매핑 | 양방향 | DMZ 서버, AWS Elastic IP |
PAT(NAPT라고도 함)가 실무에서 가장 많이 사용됩니다. 하나의 공인 IP로 포트 번호를 구분하여 수천 개의 동시 연결을 처리합니다. 가정의 공유기가 수행하는 NAT가 바로 PAT입니다.
포트 포워딩 (DNAT)
포트 포워딩 구성
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
외부 사용자 → 203.0.113.1:80 → 공유기(DNAT) → 192.168.1.50:80
외부 사용자 → 203.0.113.1:22 → 공유기(DNAT) → 192.168.1.51:22
외부 사용자 → 203.0.113.1:3000 → 공유기(DNAT) → 192.168.1.52:3000# Linux에서 NAT 설정 (iptables)
# SNAT: 내부 → 외부 (마스커레이드)
sudo iptables -t nat -A POSTROUTING \
-s 192.168.1.0/24 -o eth0 -j MASQUERADE
# DNAT: 외부 80 → 내부 웹서버
sudo iptables -t nat -A PREROUTING \
-i eth0 -p tcp --dport 80 \
-j DNAT --to-destination 192.168.1.50:80
# NAT 테이블 확인
sudo iptables -t nat -L -n -v
# 현재 NAT 세션 확인
sudo conntrack -L | head -20NAT의 한계
| 문제 | 설명 | 영향 |
|---|---|---|
| 엔드투엔드 깨짐 | 외부에서 내부로 직접 접속 불가 | P2P, WebRTC에 영향 |
| NAT 테이블 한계 | 포트 수 ~65,535개 제한 | 대규모 동시 연결 시 고갈 |
| 프로토콜 호환성 | IP가 페이로드에 포함된 프로토콜 | FTP active 모드, SIP 등 |
| 상태 유지 | NAT 테이블 = 상태 저장 | 장애 시 세션 끊김 |
이런 한계를 우회하기 위해 STUN/TURN 서버(WebRTC), UPnP(자동 포트 포워딩), NAT-T(IPsec VPN) 등의 기술이 사용됩니다.
DHCP 동작 흐름
컴퓨터를 네트워크에 연결하면 자동으로 IP 주소가 할당되는 것이 당연하게 느껴지지만, 사실 이 뒤에는 DHCP(Dynamic Host Configuration Protocol)라는 프로토콜이 동작하고 있습니다.
DHCP DORA 과정 (UDP 67/68)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Client (IP 없음) DHCP Server
│ │
1. │── Discover ──────────→ │ (브로드캐스트)
│ src: 0.0.0.0:68 │ "DHCP 서버 있나요?"
│ dst: 255.255.255.255:67│
│ │
2. │ ←──────────── Offer ───│ (유니캐스트/브로드캐스트)
│ "192.168.1.100 쓸래?" │ 임대 시간: 24시간
│ │
3. │── Request ───────────→ │ (브로드캐스트)
│ "네, 그 주소 쓸게요" │ 서버 ID 포함
│ │
4. │ ←───────── Acknowledge │ (유니캐스트)
│ "확인! 설정 정보 같이 │ IP, 마스크, 게이트웨이,
│ 보내요" │ DNS, 임대시간
│ │
│ 사용 중... │
│ │
5. │── Renew (50% 경과) ───→ │ 임대 갱신 시도
│ ←─────────── ACK ──────│DHCP가 할당하는 정보
| 정보 | 예시 | 용도 |
|---|---|---|
| IP 주소 | 192.168.1.100 | 장치의 네트워크 주소 |
| 서브넷 마스크 | 255.255.255.0 | 같은 네트워크 범위 결정 |
| 기본 게이트웨이 | 192.168.1.1 | 외부 네트워크로의 출구 |
| DNS 서버 | 8.8.8.8, 1.1.1.1 | 도메인 이름 해석 |
| 임대 시간 | 86400초 (24시간) | 주소 사용 가능 시간 |
| NTP 서버 | time.google.com | 시간 동기화 (옵션) |
# 현재 DHCP 임대 정보 확인 (Linux)
cat /var/lib/dhcp/dhclient.leases
# DHCP 임대 갱신
sudo dhclient -r eth0 # 임대 해제
sudo dhclient eth0 # 새로 요청
# Windows
ipconfig /release
ipconfig /renew
ipconfig /all # DHCP 서버 주소 확인
# DHCP 서버가 할당한 정보 확인
nmcli connection show "이더넷" | grep -i dhcp공유기의 복합 기능
가정용 공유기 = 6가지 장치의 결합
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
인터넷 ─── [WAN 포트]
│
┌────┴────┐
│ 라우터 │ ← L3: 내부 ↔ 외부 패킷 중계
│ NAT │ ← 사설↔공인 IP 변환
│ 방화벽 │ ← 외부 침입 차단
│ DHCP │ ← IP 자동 할당
└────┬────┘
│
┌─────────┼───────┐
[LAN1] [LAN2] [LAN3] ← L2 스위치
│
[무선 AP] ← Wi-Fi 제공| 기능 | 설명 |
|---|---|
| 라우터 | 내부 ↔ 외부 패킷 중계 |
| NAT | 사설 IP ↔ 공인 IP 변환 |
| DHCP 서버 | 연결 기기에 IP 자동 할당 |
| L2 스위치 | 유선 LAN 포트 간 프레임 전달 |
| 무선 AP | Wi-Fi 제공 |
| 방화벽 | 외부 → 내부 원치 않는 연결 차단 |
개발자가 로컬에서 서버를 실행하고 외부에서 접속하려 할 때, 포트 포워딩 설정이 필요한 이유가 바로 NAT 때문입니다. 요즘은 ngrok이나 Cloudflare Tunnel을 사용하면 포트 포워딩 없이도 외부에서 로컬 서버에 접근할 수 있습니다.
다음 절에서는 IPv4의 주소 고갈 문제와 그 근본적 해결책인 IPv6를 살펴보겠습니다.