학습 목표
IPv4 주소 고갈과 RFC 1918 사설 IP가 왜 쓰이는지 설명할 수 있다.
NAT / NAPT가 출발지 IP·포트를 바꿔 여러 내부 호스트가 공인 IP 하나로 나가게 하는 방식을 설명할 수 있다.
NAT의 한계(수신 연결, P2P, end-to-end)를 설명할 수 있다.
IPv6의 128비트 주소·표기·듀얼 스택 전환 배경을 설명할 수 있다.
문제 상황
- 집·회사 PC는
192.168.x.x인데,whatismyip는 전혀 다른 공인 IP다- 사설 주소와 NAT를 모르면 “같은 IP를 전 세계가 쓰나?” 혼란
- 로컬에서 띄운 서버(
localhost:8080)를 외부에서 접속하게 하려면 포트 포워딩이 필요하다- NAT는 기본적으로 아웃바운드 위주 — 인바운드는 규칙 추가
kubectl port-forward·LoadBalancer·Ingress 뒤에도 SNAT/DNAT 개념이 깔려 있다- IPv6는 “언젠가 온다”는데, 실무에서는 여전히 IPv4 + NAT가 대부분이다
- 왜 IPv6가 필요한지, 지금 어떻게 공존하는지 구분이 필요하다
IP·라우팅·ICMP까지 봤다. 주소 부족을 메우는 NAT와 차세대 주소 체계 IPv6다.
1. IPv4 고갈과 사설 IP
IPv4는 32비트 — 이론상 약 43억 주소. 인터넷 호스트·모바일·IoT가 늘면서 공인(global) 주소는 부족해졌다.
| 대응 | 내용 |
|---|---|
| CIDR | 주소 블록 할당·서브넷 효율화 (IP와 라우팅) |
| 사설 IP (RFC 1918) | 조직 내부에서만 쓰는 재사용 가능 블록 |
| NAT | 사설 IP 호스트가 공인 IP로 대신 나가게 함 |

| 대역 | CIDR | 용도 예 |
|---|---|---|
| 10.0.0.0 – 10.255.255.255 | 10.0.0.0/8 |
대형 VPC·캠퍼스 |
| 172.16.0.0 – 172.31.255.255 | 172.16.0.0/12 |
Docker 기본 브리지 등 |
| 192.168.0.0 – 192.168.255.255 | 192.168.0.0/16 |
가정·소규모 LAN |
- 사설 IP는 공인 인터넷에서 라우팅되지 않음 — 중복 사용 OK (집마다
192.168.1.1가능) - 공인 IP는 전역 유일 — ISP·클라우드가 할당
- 사설만 있으면 외부와 통신 불가 → NAT 라우터(게이트웨이) 가 경계
2. NAT와 NAPT
NAT(Network Address Translation) 는 IP 패킷의 주소 필드를 변환한다. 가정·소규모 회선에서 흔한 형태는 NAPT(Network Address Port Translation) — IP + 포트 함께 바꿈. 일상에서는 “NAT”라고 하면 보통 이것.

LAN Host A 192.168.1.10:51432
|
| TCP src 192.168.1.10:51432 dst 93.184.216.34:443
v
NAT Router LAN 192.168.1.1 | WAN 203.0.113.50
| rewrite src → 203.0.113.50:62001
| NAT table: 192.168.1.10:51432 ↔ 203.0.113.50:62001
v
Internet dst still 93.184.216.34:443
|
v reply to 203.0.113.50:62001
NAT Router reverse lookup → forward to 192.168.1.10:51432
| 용어 | 설명 |
|---|---|
| SNAT | 출발지 주소 변환 — LAN → 인터넷 나갈 때 |
| DNAT | 목적지 주소 변환 — 포트 포워딩·로드밸런서 |
| NAPT / PAT | 여러 내부 (IP, port) → 공인 IP의 서로 다른 포트 |
| Translation table | (내부 IP, port, proto) ↔ (공인 IP, port) — 타임아웃 후 삭제 |
- 아웃바운드 — 내부가 먼저 연결 → NAT가 임시 매핑 생성 → 응답은 역변환
- 인바운드(서버 공개) — 라우터에 포트 포워딩 규칙:
WAN:443→192.168.1.20:8443 - Connection tracking — TCP 상태를 보고 역방향만 허용 (stateful NAT)
3. NAT의 한계와 운영 이슈
NAT는 주소 부족을 완화했지만, end-to-end 원칙을 깨뜨린다.
| 이슈 | 설명 |
|---|---|
| 인바운드 연결 | 내부 호스트는 기본적으로 외부에서 직접 접속 불가 — 포트 포워딩·DMZ |
| P2P·WebRTC | 양쪽이 사설 IP면 STUN/TURN, hole punching 등 우회 |
| IP 기반 ACL | 내부는 사설 IP — 공인 IP 기준 방화벽과 불일치 |
| Hairpin NAT | 같은 공인 IP로 내부에서 자기 공인 IP 접속 — 라우터가 루프백 NAT 지원해야 함 |
| CGNAT | ISP가 공인 IP 하나를 여러 가입자가 공유 — 이중 NAT, 포트 포워딩 불가 |
- 로그·추적 — 서버 로그의 클라이언트 IP는 NAT 공인 IP — 실제 내부 호스트는 별도 상관관계 필요
- FTP·SIP·IPsec 등 주소를 페이로드에 넣는 프로토콜 — ALG 필요하거나 깨짐
- Kubernetes —
NodePort/LoadBalancer/Ingress는 클러스터 SNAT/DNAT·kube-proxy와 맞물림
4. IPv6 개요
IPv6는 128비트 주소 — 이론상 거의 무한에 가까운 공간. 주소 고갈·NAT 의존 완화가 목표.

| 항목 | IPv4 | IPv6 |
|---|---|---|
| 길이 | 32비트 | 128비트 |
| 표기 | 192.168.1.10 |
2001:db8:85a3::8a2e:370:7334 |
| 압축 | — | 연속 0 블록을 :: (한 번만) |
| 일반 prefix | 다양 | 종종 /64 (서브넷·인터페이스 ID) |
| ICMP | ICMP | ICMPv6 (Neighbor Discovery 등) |
2001:0db8:85a3:0000:0000:8a2e:0370:7334
→ 2001:db8:85a3::8a2e:370:7334 (:: = 중간 0 생략)
2001:db8:85a3::1/64
network prefix: 2001:db8:85a3 (64 bits)
interface ID: ::1 (하위 64 bits)
- SLAAC — 라우터 광고(RA)로 prefix 받고 자체 interface ID 구성
- DHCPv6 — 주소·옵션 서버 할당 (IPv4 DHCP와 유사 역할)
- NAT66 — 존재하지만 IPv6 설계 철학과는 거리 — 보통 공인 주소 직접 사용
- Unique Local (
fc00::/7) — 사설 IPv6 (RFC 4193), ULA
5. IPv4와 IPv6 공존 (전환)
당장 IPv4를 끊기 어렵다. 병행이 일반적이다.
| 방식 | 설명 |
|---|---|
| Dual stack | 호스트·라우터에 IPv4 + IPv6 동시 — AAAA/A DNS 레코드 |
| Tunneling | IPv6 패킷을 IPv4 안에 실어 전달 (6to4, Teredo — 레거시) |
| Translation | NAT64·DNS64 — IPv6-only 클라이언트가 IPv4 서버 접속 |
Client dual-stack
curl -4 https://example.com → A record → IPv4 path (maybe NAT)
curl -6 https://example.com → AAAA record → IPv6 path (often no NAT)
- Happy Eyeballs — 브라우저가 IPv6·IPv4 동시 시도 후 빠른 쪽 선택
- 클라우드 VPC — IPv6 CIDR 할당·서브넷 dual-stack 옵션 증가
- 운영에서는 방화벽·보안 그룹을 v4/v6 각각 열어야 하는 경우 많음
6. 관측
# 사설 vs 공인 — 로컬 인터페이스
ip -4 addr show
# inet 192.168.1.10/24 (private)
# inet 10.0.0.5/24 (private)
# 기본 게이트웨이 = 보통 NAT 라우터
ip route | grep default
# default via 192.168.1.1 dev wlan0
# IPv6 주소·라우트
ip -6 addr show
ip -6 route show
# 공인 IP 확인 (NAT 이후 WAN 주소)
curl -4 -s ifconfig.me
# IPv6 도달성 (네트워크·DNS가 지원할 때)
ping -6 -c 2 2001:4860:4860::8888 # Google Public DNS IPv6
curl -6 -s -o /dev/null -w "%{http_code}\n" https://ipv6.google.com
# macOS
ifconfig en0 | grep inet
netstat -rn -f inet6 | head
fe80::— link-local (IPv6), 같은 링크에서만::1— IPv6 loopback- NAT 테이블은 보통 root —
conntrack -L(Linux, 모듈별)
7. 정리
- 사설 IP(RFC 1918) — 내부 재사용, 인터넷 미라우팅
- NAT/NAPT — 주소 변환 + 포트 매핑으로 여러 호스트 → 공인 IP
- 인바운드·P2P는 NAT 추가 설정·우회 기술 필요
- IPv6 — 128비트,
::표기, 듀얼 스택으로 v4와 공존 - 장기적으로 NAT 의존 감소가 IPv6의 한 목표 — 현실은 혼합 운영
다음에 다룰 것
- 이더넷과 MAC
- 프레임, ARP, 스위치 vs 허브
해당 내용은 Computer Networking: A Top-Down Approach, 8/E (James Kurose, Keith Ross) 의 내용을 기반으로 합니다.