icon

안동민 개발노트

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
nat_iptables.sh
# 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 -20

NAT의 한계

문제설명영향
엔드투엔드 깨짐외부에서 내부로 직접 접속 불가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_debug.sh
# 현재 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 포트 간 프레임 전달
무선 APWi-Fi 제공
방화벽외부 → 내부 원치 않는 연결 차단

개발자가 로컬에서 서버를 실행하고 외부에서 접속하려 할 때, 포트 포워딩 설정이 필요한 이유가 바로 NAT 때문입니다. 요즘은 ngrok이나 Cloudflare Tunnel을 사용하면 포트 포워딩 없이도 외부에서 로컬 서버에 접근할 수 있습니다.

다음 절에서는 IPv4의 주소 고갈 문제와 그 근본적 해결책인 IPv6를 살펴보겠습니다.

목차