작성일 :

왜 사설 IP와 NAT가 필요했는가

IP 주소에서 32비트 IPv4 주소 체계를 살펴보았습니다.

32비트는 약 43억 개의 주소를 제공하는데, 1981년 IPv4가 설계될 당시에는 인터넷에 연결된 컴퓨터가 수백 대에 불과했으므로 이 정도면 충분해 보였습니다.


하지만 1990년대 인터넷이 폭발적으로 성장했습니다.

PC가 보급되고, 웹이 등장하고, 기업과 가정이 인터넷에 연결되기 시작했습니다.

IPv4 주소가 부족해질 것이 명확해졌습니다.


클래스 기반 할당의 비효율

초기 IP 주소는 클래스(Class) 단위로 할당되었습니다.


1
2
3
4
5
6
7
8
9
10
11
클래스 A: 0.0.0.0 ~ 127.255.255.255
          첫 8비트가 네트워크, 나머지 24비트가 호스트
          약 1,677만 개의 호스트 주소

클래스 B: 128.0.0.0 ~ 191.255.255.255
          첫 16비트가 네트워크, 나머지 16비트가 호스트
          약 65,534개의 호스트 주소

클래스 C: 192.0.0.0 ~ 223.255.255.255
          첫 24비트가 네트워크, 나머지 8비트가 호스트
          254개의 호스트 주소


주요 문제는 바로 IP 주소의 낭비였습니다.


1000개의 호스트가 필요한 조직을 생각해봅시다.

클래스 C(254개)는 부족하므로 클래스 B(65,534개)를 할당받아야 합니다.


결과적으로 64,000개 이상의 주소가 낭비됩니다.

이런 낭비가 전 세계적으로 누적되었습니다.


CIDR의 등장

1993년, CIDR(Classless Inter-Domain Routing)이 도입되었습니다.

클래스 구분을 없애고 비트 단위로 네트워크 크기를 지정합니다.


서브넷에서 설명한 것처럼:

1
2
3
192.168.1.0/24  → 256개 주소
192.168.1.0/25  → 128개 주소
192.168.1.0/26  → 64개 주소


CIDR 덕분에 필요한 만큼만 할당할 수 있게 되어 주소 낭비가 크게 줄었습니다.


하지만 근본적인 문제는 해결되지 않았습니다.

43억 개라는 숫자는 여전히 유한하며, 전 세계 인구보다도 적습니다.


사설 IP 주소 대역

1996년, RFC 1918이 사설 IP 주소(Private IP Address)를 정의했습니다.

인터넷에서 사용하지 않기로 약속한 주소 대역입니다.


1
2
3
4
5
6
7
8
10.0.0.0/8      → 10.0.0.0 ~ 10.255.255.255
                  약 1,677만 개

172.16.0.0/12   → 172.16.0.0 ~ 172.31.255.255
                  약 104만 개

192.168.0.0/16  → 192.168.0.0 ~ 192.168.255.255
                  약 65,536개


왜 이 대역들일까요?


이 대역들은 이미 사용되지 않던 주소 블록이었기에, 기존 인터넷과 충돌하지 않으면서도 충분히 큰 공간을 확보할 수 있었습니다.


사설 IP의 핵심 특성:

  • 인터넷 라우터는 이 주소를 라우팅하지 않습니다
  • 같은 사설 주소를 여러 조직에서 중복 사용할 수 있습니다
  • 내부 네트워크에서 자유롭게 사용합니다


전 세계 수백만 개의 가정에서 192.168.1.1을 공유기 주소로 사용합니다.

각각의 네트워크가 인터넷으로 나가지 않으므로 서로 충돌하지 않습니다.


NAT의 기본 개념

사설 IP만으로는 인터넷에 접속할 수 없는데, 인터넷 라우터가 사설 주소를 라우팅하지 않도록 설정되어 있기 때문입니다.


이 문제를 해결하는 기술이 바로 NAT(Network Address Translation)로, 사설 IP를 공인 IP로 변환하는 역할을 합니다.


1
2
3
4
5
내부 네트워크                NAT 장비              인터넷
                                │
192.168.1.10 ─────►           │         ────► 203.0.113.5
(사설 IP)          [주소 변환]            (공인 IP)
                                │


NAT 장비는 패킷의 IP 주소를 변경합니다.

  • 나가는 패킷: 출발지 주소를 사설 → 공인으로 변환
  • 들어오는 패킷: 목적지 주소를 공인 → 사설로 변환


외부에서 보면 모든 내부 장비가 하나의 공인 IP로 보입니다.


NAT 테이블: 변환 기록

NAT는 변환 내역을 NAT 테이블에 기록합니다.

응답 패킷을 올바른 내부 장비로 전달하기 위해서입니다.


1
2
3
4
5
6
7
8
NAT 테이블 예시:
┌──────────────────────┬──────────────────────┬─────────┐
│   내부 주소:포트     │   외부 주소:포트     │  상태   │
├──────────────────────┼──────────────────────┼─────────┤
│ 192.168.1.10:12345   │ 203.0.113.5:40001    │ 활성    │
│ 192.168.1.11:54321   │ 203.0.113.5:40002    │ 활성    │
│ 192.168.1.10:12346   │ 203.0.113.5:40003    │ 활성    │
└──────────────────────┴──────────────────────┴─────────┘


동작 과정:

  1. 192.168.1.10:12345에서 외부로 패킷 전송
  2. NAT가 출발지를 203.0.113.5:40001로 변환
  3. 테이블에 매핑 기록
  4. 외부 서버가 203.0.113.5:40001로 응답
  5. NAT가 테이블을 조회하여 192.168.1.10:12345로 전달


테이블 항목은 일정 시간 동안 유지되다가, TCP 연결이 종료되거나 타임아웃이 지나면 삭제됩니다.


Outbound vs Inbound 흐름

Outbound(내부 → 외부):

1
2
3
4
5
6
7
8
9
10
11
[내부 호스트] ──► [NAT] ──► [인터넷]

1. 내부 호스트가 패킷 전송
   출발지: 192.168.1.10:12345
   목적지: 93.184.216.34:80

2. NAT가 출발지 변환
   출발지: 203.0.113.5:40001
   목적지: 93.184.216.34:80

3. 변환 기록을 테이블에 저장


Inbound(외부 → 내부):

1
2
3
4
5
6
7
8
9
10
11
12
[인터넷] ──► [NAT] ──► [내부 호스트]

1. 응답 패킷 도착
   출발지: 93.184.216.34:80
   목적지: 203.0.113.5:40001

2. NAT가 테이블 조회
   40001 → 192.168.1.10:12345

3. 목적지 변환 후 전달
   출발지: 93.184.216.34:80
   목적지: 192.168.1.10:12345


핵심은 내부에서 먼저 연결을 시작해야 한다는 점입니다. NAT 테이블에 매핑이 없으면 외부에서 들어오는 패킷을 어느 내부 장비로 전달해야 할지 판단할 수 없기 때문입니다.


NAT의 유형

NAT는 변환 방식에 따라 여러 유형으로 나뉩니다.


Static NAT (1:1 NAT)

하나의 사설 IP를 하나의 공인 IP에 고정 매핑합니다.


1
2
192.168.1.10 ←──────────────→ 203.0.113.10
192.168.1.11 ←──────────────→ 203.0.113.11


용도:

  • 내부 서버를 외부에 공개할 때
  • 항상 같은 공인 IP를 사용해야 할 때


단점은 주소 절약 효과가 전혀 없다는 것으로, 공인 IP가 사설 IP 수만큼 필요합니다.


Dynamic NAT (N:M NAT)

사설 IP 풀을 공인 IP 풀에 동적으로 매핑합니다.


1
2
3
4
5
사설 IP 풀                공인 IP 풀
192.168.1.10 ─┐           ┌─ 203.0.113.10
192.168.1.11 ─┼──[동적]──┼─ 203.0.113.11
192.168.1.12 ─┤           ├─ 203.0.113.12
...           ─┘           └─ ...


연결이 필요할 때 공인 IP를 할당하고, 연결이 끝나면 반환하는 방식으로 동작합니다.


단점: 공인 IP가 부족하면 연결이 불가능합니다.


PAT / NAPT (N:1 NAT)

PAT(Port Address Translation) 또는 NAPT(Network Address Port Translation).


가장 널리 사용되는 방식으로, 여러 사설 IP가 하나의 공인 IP를 공유하면서 포트 번호로 각 연결을 구분합니다.


1
2
3
4
5
192.168.1.10:12345 ──► 203.0.113.5:40001
192.168.1.11:54321 ──► 203.0.113.5:40002
192.168.1.12:11111 ──► 203.0.113.5:40003

모두 같은 공인 IP, 다른 포트


포트 번호가 65,535개까지 존재하므로, 하나의 공인 IP로 수만 개의 내부 장비를 지원할 수 있습니다.


NAT와 5-tuple의 관계

소켓과 전송 계층에서 연결은 5-tuple로 식별된다고 했습니다.

1
(프로토콜, 출발지 IP, 출발지 포트, 목적지 IP, 목적지 포트)


NAT는 이 5-tuple을 변환합니다.


1
2
3
4
5
원본 패킷 (내부):
(TCP, 192.168.1.10, 12345, 93.184.216.34, 80)

변환 후 (외부):
(TCP, 203.0.113.5, 40001, 93.184.216.34, 80)


변환 후에도 고유한 5-tuple이 유지되어야 하며, 같은 포트를 두 연결에 할당해서는 안 됩니다.


NAT 테이블은 사실상 연결 추적(Connection Tracking) 테이블로서, 현재 진행 중인 연결을 기록하고 관리하는 역할을 합니다.


NAT의 이점

주소 절약:

  • 하나의 공인 IP로 수천 개의 내부 장비 지원
  • IPv4 고갈을 20년 이상 지연시킴


보안(부수 효과):

  • 내부 네트워크 구조가 외부에 노출되지 않음
  • 외부에서 내부로 직접 연결 불가 (연결 추적이 없으면)


유연성:

  • 내부 주소 체계를 자유롭게 설계
  • ISP를 변경해도 내부 주소 변경 불필요

NAT의 한계

End-to-End 원칙 위반:

인터넷의 원래 설계는 모든 호스트가 직접 통신하는 것이었습니다.

NAT는 이 원칙을 깨뜨립니다.


외부에서 내부로 연결 불가:

따라서 서버를 운영하려면 포트 포워딩 같은 추가 설정이 필요하고, P2P 애플리케이션에도 문제가 됩니다.


프로토콜 호환성:

FTP, SIP, H.323 등 일부 프로토콜은 IP 주소를 페이로드에 포함하기 때문에, NAT가 이를 인식하고 수정해야 합니다. 이를 위해 ALG(Application Layer Gateway)가 필요합니다.


성능:

모든 패킷을 검사하고 변환해야 하므로 대규모 환경에서는 병목이 될 수 있습니다.


NAT는 임시방편이었다

NAT는 IPv4 주소 고갈에 대한 임시 해결책으로 설계되었습니다.

근본적인 해결책은 IPv6입니다.


IPv6는 128비트 주소를 사용합니다.

약 340간(3.4 × 10^38)개의 주소를 제공합니다.

지구의 모든 기기에 고유 주소를 부여하고도 남습니다.


하지만 IPv6 전환은 느립니다.

2020년대에도 전 세계 인터넷 트래픽의 상당 부분이 여전히 IPv4입니다.


NAT는 앞으로도 계속 사용될 것이지만, NAT가 만들어낸 문제들을 이해하는 것이 중요합니다.


Part 2에서는 방화벽의 원리와 상태 추적을 살펴봅니다.

Part 3에서는 NAT 트래버설과 P2P 통신의 어려움을 다룹니다.


관련 글

Tags: IPv4, NAPT, NAT, 네트워크, 방화벽

Categories: ,