본문 바로가기

CS Fundamentals/네트워크

[네트워크] NAT(Network Address Translation)

1. NAT란?

  • NAT(Network Address Translation)는 주소 변환 기술로, IPv4의 공인 IP 부족 문제를 완화하기 위해 제안되었습니다.
  • 이 기술을 통해 내부망(intranet)에서는 사설 IP를 자유롭게 지정할 수 있으며, 같은 IP 대역을 여러 조직에서 중복해 사용할 수도 있습니다.
  • 다만, 사설 IP는 인터넷에서 직접 통신할 수 없기 때문에, 공용 네트워크에 접근할 때는 반드시 라우터에서 사설 IP를 공인 IP로 변환해야 합니다.
  • 이러한 방식은 공인 IP의 사용량을 줄여 비용 절감 효과까지 제공합니다.

2. NAT의 필요성

  1. IPv4 주소 절약 – 수많은 내부 호스트가 하나(혹은 몇 개)의 공인 IP로 인터넷 사용 가능
  2. 보안 강화 – 외부에서 내부 네트워크 구조/IP 직접 노출 차단
  3. 네트워크 관리 단순화 – 내부망은 사설 IP만 사용, ISP 변경 시에도 내부 주소 체계 변경 불필요

 

3. NAT의 동작 원리

  • 내부 호스트가 인터넷으로 패킷을 보낼 때, NAT 장비가 출발지 주소(사설 IP)공인 IP 로 변환.
  • NAT 테이블에 변환 정보를 기록해둔 후, 외부에서 응답이 돌아오면 다시 원래 주소로 변환하여 내부 호스트에게 전달.
SNAT : sourceNAT 출발지 주소 변환 
사설망 사용자들이 공인망 으로 네트워킹 하기위한 방법
대부분의 NAT 
연결의 시작이 private network 

DNAT : destinationNAT 목적지 주소 변환 
공인망의 사용자들이 사설망의 컴퓨터에 접속 

MASQUERADE , NAT overload 
주로 IP 주소가 1개인경우 인터페이스 지정을 통해서
동일한 1개의 IP 주소로 주소 변환후-포트주소로 연결을 구분한다 (NAT-PAT)

Cisco 

StaticNAT : SNAT + DNAT , Public->private , Private->public , 양방향 NAT , 1:1NAT

DynamicNAT : SNAT , 정해진것이 아니라 주소풀에서 그때 사용하지 않는 IP 주소로 변환 
 주소풀의 IP주소 갯수가 중요!!! 

P.A.T : MASQUERADE , NAT overload 

 

 

구성도

NAT 종류 

 

큰 범위 세부 분류 Key 변환 단위 별칭/비고
NAT Static NAT / Dynamic NAT IP Address Static=1:1 고정 매핑
NAPT NAT-PAT (Port Address Translation) Port(포트 단위) PAT, IP Masquerading

※ NAPT=PAT 은 사실상 동의어입니다. 여러 내부 호스트가 하나의 공인 IP + 서로 다른 포트를 공유합니다.

 

 

 

Static NAT(정적 NAT) 

1) 정의

  • 내부 사설 IP ↔ 공인 IP1:1로 영구 매핑하는 방식.
  • 매핑이 고정이므로 양방향 통신(외부→내부, 내부→외부) 이 모두 자연스럽습니다.

2) 대표 사례

  • 내부 서버를 외부에 공개(웹/메일/게임 서버 등)
  • 외부 서비스의 IP 화이트리스트에 우리 서버 IP를 등록해야 할 때
  • 고정 출구 IP가 필요한 업무(파트너 사전 허용, 라이선스 검증 등)
  • 서로 다른 조직/망 간 주소 중첩 해결(정책/두 번 NAT와 병행)

3) 동작 방식(개념도)

 

[Internal Host] 192.168.1.10
        │  (Source NAT: 192.168.1.10 → 203.0.113.10)
        ▼
   [NAT/Firewall]  ───── Internet ───── ▶ 외부 서버

외부에서 203.0.113.10 으로 들어오면
(Destination NAT: 203.0.113.10 → 192.168.1.10) 으로 내부 전달

 

  • NAT 테이블에는 고정 매핑(192.168.1.10 ⇄ 203.0.113.10)이 존재.
  • 장비는 외부 인터페이스에서 공인 IP(203.0.113.10) 에 대해 ARP 응답을 해야 함.

4) Static NAT vs 포트 포워딩(Static PAT)

  • Static NAT(1:1): IP 전체를 매핑 → 모든 포트/프로토콜이 동일 호스트로 전달
  • Static PAT(포트 포워딩): 특정 포트만 매핑 (예: 203.0.113.10:80 → 192.168.1.20:80)

5) 장단점

장점

  • 외부 접근이 쉽고 예측 가능(고정 공인 IP)
  • IP 화이트리스트, 고정 회선 요건에 적합
  • 애플리케이션 호환성 우수 (포트 변환 불필요)

단점

  • 공인 IP 1개를 1대에 사용 → 주소/비용 부담
  • NAT 자체는 보안 아님 → 방화벽 정책/ACL 따로 필요
  • FTP/SIP 같은 임베디드 IP 프로토콜은 ALG/추가 설정 필요

6) 구성 예시

(a) Cisco IOS (라우터/방화벽)

! 내부/외부 인터페이스 지정
interface Gig0/0
 ip address 192.168.1.1 255.255.255.0
 ip nat inside
!
interface Gig0/1
 ip address 203.0.113.1 255.255.255.0
 ip nat outside

! 1:1 정적 매핑
ip nat inside source static 192.168.1.10 203.0.113.10

! (옵션) 특정 포트만 포워딩하는 Static PAT 예시
ip nat inside source static tcp 192.168.1.20 80 203.0.113.10 80

추기: 외부에서 들어오는 트래픽을 허용하려면 ACL/보안정책도 함께 열어야 합니다.

(b) Linux (iptables)

# 1:1 정적 DNAT (외부→내부)
iptables -t nat -A PREROUTING  -d 203.0.113.10 -j DNAT --to-destination 192.168.1.10

# 1:1 정적 SNAT (내부→외부)
iptables -t nat -A POSTROUTING -s 192.168.1.10 -j SNAT --to-source 203.0.113.10

# (옵션) 포트 포워딩 예시: 80/TCP만 내부 192.168.1.20:80으로
iptables -t nat -A PREROUTING  -p tcp -d 203.0.113.10 --dport 80 -j DNAT --to-destination 192.168.1.20:80

 

 

 

 

Dynamic NAT (동적 NAT)

1) 정의

  • Dynamic NAT 는 내부 사설 IP ↔ 외부 공인 IP를 고정된 매핑이 아닌, 풀(pool)에서 동적으로 할당하는 방식입니다.
  • NAT 장비(라우터/방화벽)는 NAT 변환이 필요한 패킷을 받으면, 사용 가능한 공인 IP를 NAT Pool에서 찾아 매핑합니다.

👉 즉, 내부 장비 수가 n이고, 공인 IP가 m개라면, 동시에 통신 가능한 장비 수는 m개로 제한됩니다

 

2) 특징

  • 1:1 매핑은 Static NAT과 같지만, 누가 어떤 IP를 받을지는 동적으로 결정.
  • 내부에서 동시에 통신 가능한 호스트 수는 공인 IP Pool의 크기에 따라 달라짐.
  • 사설망 내부 장비들이 공용 네트워크(public network)에 접근할 수 있게 해주지만,
    공인 IP 풀 크기 이상은 동시에 연결 불가.

3) 동작 방식

  1. 내부 사설 IP(예: 192.168.0.10)가 인터넷 통신 요청 → NAT 라우터로 전달
  2. NAT 장비는 NAT Pool에서 사용 가능한 공인 IP를 임시로 할당
  3. NAT 테이블에 변환 정보 등록
  4. 응답 패킷 수신 시 NAT 테이블을 참조하여 내부로 전달
  5. 세션 종료 시 NAT 매핑 삭제

4) Cisco IOS 구성 예시

 
! ================================
! Dynamic NAT 구성 예시 (Cisco IOS)
! ================================

! (1) 기존에 설정된 Static NAT 규칙 삭제
no ip nat inside source static 192.168.0.101 100.100.100.3
no ip nat inside source static 192.168.0.100 100.100.100.2

! (2) NAT 방향 지정
! 내부망 인터페이스 = NAT inside
interface f0/0
 ip address 192.168.0.1 255.255.255.0
 ip nat inside

! 외부망 인터페이스 = NAT outside
interface f4/0
 ip address 100.100.100.1 255.0.0.0
 ip nat outside

! (3) 내부 네트워크 범위 지정 (ACL 사용)
! 192.168.0.0/24 네트워크를 NAT 적용 대상으로 허용
access-list 1 permit 192.168.0.0 0.0.0.255

! (4) 변환할 공인 IP Pool 정의
! 사용할 수 있는 공인 IP 범위: 100.100.100.1 ~ 100.100.100.5
ip nat pool DynamicNAT 100.100.100.1 100.100.100.5 netmask 255.0.0.0

! (5) NAT 정책 적용
! ACL 1에 해당하는 내부 사설 IP를 DynamicNAT Pool의 공인 IP로 변환
ip nat inside source list 1 pool DynamicNAT

 

 

 

Static NAT vs Dynamic NAT

구분  Static NAT  Dynamic NAT
매핑 방식 내부 ↔ 외부 1:1 고정 내부 ↔ 외부 1:1 동적 할당
공인 IP 필요 내부 장비 수만큼 동시에 연결할 장비 수만큼
외부 접근 항상 동일 IP로 접근 가능 할당 시점마다 IP 달라짐
활용 사례 서버 공개, 고정 출구 IP 필요 일반 사용자 인터넷 접속

 

 

 

NAT-Port Address Translation (PAT, NAT Overload)

  • 일반 Dynamic NAT사설 IP 개수만큼 공인 IP가 필요
  • 이를 해결하기 위해 PAT 사용 → 하나의 공인 IP로 여러 사설 IP 통신 지원
  • 구분 방법: 포트 번호를 함께 변환하여 식별

구조:
사설 IP 주소(n) → 공인 IP 주소(1)
즉, 다수의 내부 호스트가 동시에 하나의 공인 IP를 공유 가능

default route
506-Router(config)#ip route 0.0.0.0 0.0.0.0 100.100.100.200

in/out 결정
506-Router(config)#int f0/0(192.168.0.1)
506-Router(config-if)#ip nat inside 

506-Router(config)#int f4/0(100.100.100.1)
506-Router(config-if)#ip nat outside 

ACL 생성 
506-Router(config)#access-list 1 permit 192.168.0.0 0.0.0.255

ACL -> NAT할 공인IP주소 interface  (outside interface)
506-Router(config)#ip nat inside source list 1 interface f4/0 overload




웹서비스 사용후 NAT 테이블 정보 
192.168.0.100] http://8.8.8.8

NAT 테이블 정보 
ethernet|ip|tcp|http -> tcp 안에 port 정보가 있음 

사설 
src port 1025 ,dst port no 80
------------------------------
src ip addr 192.168.0.100, dst ip addr  8.8.8.8

NAT 에서 주소변환 
공인
src port 1025 , dst port no 80
-----------------------------------------------------
src ip addr 100.100.100.1(192.168.0.100), dst ip addr  8.8.8.8


506-Router#sh ip nat translations 
Pro  Inside global     Inside local       Outside local      Outside global
tcp 100.100.100.1:1025 192.168.0.100:1025 8.8.8.8:80         8.8.8.8:80


웹서버에서 돌아올때
src port 80 , dst port 1025 
------------------------------
src ip addr 8.8.8.8 , dst ip addr  100.100.100.1 


ICMP 인 경우 NAT 테이블 정보 
ethernet|ip|icmp

사설 주소 동시 통신 시작후 체크 - 공인IP주소가 1개니까 !!!! -> Port번호로 구분
(icmp 는 포트번호가 없기 때문에 별도의 값을 사용하다)

506-Router#sh ip nat translations 
Pro  Inside global      Inside local       Outside local      Outside global
icmp 100.100.100.1:1024 192.168.0.102:1    8.8.8.8:1          8.8.8.8:1024
icmp 100.100.100.1:1025 192.168.0.102:2    8.8.8.8:2          8.8.8.8:1025
icmp 100.100.100.1:1026 192.168.0.102:3    8.8.8.8:3          8.8.8.8:1026
icmp 100.100.100.1:1027 192.168.0.102:4    8.8.8.8:4          8.8.8.8:1027
icmp 100.100.100.1:10   192.168.0.100:10   8.8.8.8:10         8.8.8.8:10
icmp 100.100.100.1:11   192.168.0.100:11   8.8.8.8:11         8.8.8.8:11
icmp 100.100.100.1:12   192.168.0.100:12   8.8.8.8:12         8.8.8.8:12
icmp 100.100.100.1:1    192.168.0.101:1    8.8.8.8:1          8.8.8.8:1
icmp 100.100.100.1:2    192.168.0.101:2    8.8.8.8:2          8.8.8.8:2
icmp 100.100.100.1:3    192.168.0.101:3    8.8.8.8:3          8.8.8.8:3
icmp 100.100.100.1:4    192.168.0.101:4    8.8.8.8:4          8.8.8.8:4
icmp 100.100.100.1:9    192.168.0.100:9    8.8.8.8:9          8.8.8.8:9