📚 네트워크 · 패킷 분석 › 04. 네트워크 장비 실습 — 176편
이전 글: 175. Routing 경로 분석 · 다음 글: 177. PAT

1. 개념

사설·공인 IP의 구분, SNAT·DNAT의 차이, conntrack으로 변환 흔적을 읽는 방법은 49. 사설 IP · 공인 IP와 NAT — 로그의 IP가 서로 다른 이유에서 다뤘습니다. 이 글은 장비에서 NAT를 어떻게 설정하고, 장비가 어떤 순서로 처리하는가를 다룹니다. 포트까지 바꾸는 PAT는 177. PAT, 방화벽 정책과 결합된 NAT는 186. Firewall NAT 정책에서 이어집니다.

Cisco 계열 장비는 NAT를 설정할 때 인터페이스를 inside(내부)와 outside(외부)로 먼저 지정하고, 주소를 네 가지 관점으로 부릅니다.

용어의미예
Inside Local내부 호스트의 실제(사설) 주소10.20.0.10
Inside Global외부에서 보이는 내부 호스트 주소(변환 후)203.0.113.10
Outside Local내부에서 보이는 외부 호스트 주소198.51.100.20 (보통 Global과 같음)
Outside Global외부 호스트의 실제 주소198.51.100.20

"Local = 내부 쪽에서 본 주소, Global = 외부 쪽에서 본 주소"로 기억하면 show ip nat translations 출력을 읽기 쉽습니다.


2. 동작 원리

NAT가 라우팅 전인지 후인지는 장비 설정과 로그 해석 모두에 중요합니다.

[Cisco IOS 계열]
 inside → outside : 라우팅 판단 → NAT(출발지 변환) → 송신
 outside → inside : NAT(목적지 역변환) → 라우팅 판단 → 송신

[Linux netfilter]
 수신 → PREROUTING(DNAT) → 라우팅 판단 → FORWARD(필터) → POSTROUTING(SNAT) → 송신

Linux 기준으로 보면 결과가 분명합니다.

  • DNAT는 라우팅 전에 일어나므로, 라우터는 바뀐 목적지(내부 서버) 를 기준으로 경로를 찾습니다.
  • SNAT는 라우팅·필터 후에 일어나므로, FORWARD 체인의 필터 규칙은 변환 전 사설 출발지를 기준으로 작성합니다.

변환이 적용되는 조건과 방식에 따라 NAT를 나눌 수 있습니다.

방식매핑주요 용도Cisco IOS 명령 형태
Static NAT사설 1개 ↔ 공인 1개 고정외부에 공개하는 서버ip nat inside source static <local> <global>
Dynamic NAT사설 여러 개 → 공인 풀에서 순서대로공인 주소가 여러 개일 때ip nat inside source list <ACL> pool <풀이름>
PAT (Overload)사설 여러 개 → 공인 1개 + 포트일반 인터넷 사용... overload (177. PAT)

Dynamic NAT에서 풀의 공인 주소가 모두 사용 중이면 새 연결은 변환되지 못해 통신이 실패합니다.


3. 주요 특징

  • 변환 대상은 ACL로 지정합니다. ip nat inside source list 1 ...의 ACL 1은 "변환할 출발지"를 고르는 용도이며, 트래픽을 막는 필터가 아닙니다(178. ACL).
  • Static NAT는 양방향입니다. 외부에서 Inside Global 주소로 들어오는 연결도 내부 서버로 전달되므로, 반드시 방화벽·ACL 정책과 함께 써야 합니다.
  • 변환 테이블은 휘발성입니다. show ip nat translations나 conntrack -L은 현재 상태만 보여 주며, 과거 추적에는 NAT 로그를 따로 남겨야 합니다.
  • NAT는 보안 기능이 아닙니다. 외부에서 먼저 연결을 시작하기 어렵게 만드는 부수 효과가 있을 뿐, 허용·차단 판단은 방화벽 정책이 합니다.

4. 예시

실습 예시 — GNS3 등의 Cisco IOS 계열 경계 라우터 설정입니다. Gi0/0이 외부(203.0.113.2/28), Gi0/1이 내부 서버망(10.20.0.1/24)이며 값은 예시(값은 환경마다 다름)입니다.

interface GigabitEthernet0/0
 ip address 203.0.113.2 255.255.255.240
 ip nat outside
interface GigabitEthernet0/1
 ip address 10.20.0.1 255.255.255.0
 ip nat inside

! Static NAT: 웹 서버 공개
ip nat inside source static 10.20.0.10 203.0.113.10

! Dynamic NAT: 서버망 나머지 → 공인 풀
access-list 10 permit 10.20.0.0 0.0.0.255
ip nat pool PUB-POOL 203.0.113.11 203.0.113.14 netmask 255.255.255.240
ip nat inside source list 10 pool PUB-POOL

확인 명령과 출력 형식 예시입니다.

R1# show ip nat translations
Pro Inside global      Inside local       Outside local      Outside global
--- 203.0.113.10       10.20.0.10         ---                ---
tcp 203.0.113.11:51000 10.20.0.21:51000   198.51.100.20:443  198.51.100.20:443

R1# show ip nat statistics      ! 활성 변환 수, inside/outside 인터페이스, 풀 사용량

---만 있는 첫 줄은 Static NAT의 고정 매핑이고, 두 번째 줄은 실제 연결에 대한 변환 항목입니다.

실습 예시 — Linux 게이트웨이 VM에서 nftables로 같은 동작을 구성합니다(Rocky/Ubuntu 공통, ip_forward=1 가정, ens33이 외부). 재부팅하면 사라지는 런타임 설정입니다.

sudo nft add table ip nat
sudo nft 'add chain ip nat prerouting { type nat hook prerouting priority -100 ; }'
sudo nft 'add chain ip nat postrouting { type nat hook postrouting priority 100 ; }'

# Static NAT (양방향 1:1)
sudo nft add rule ip nat prerouting iifname "ens33" ip daddr 203.0.113.10 dnat to 10.20.0.10
sudo nft add rule ip nat postrouting oifname "ens33" ip saddr 10.20.0.10 snat to 203.0.113.10

sudo nft list table ip nat

Rocky에서 firewalld를 쓰는 경우에는 nft 명령을 직접 섞기보다 firewalld의 masquerade·rich rule로 구성하는 것이 관리상 안전합니다. 추가한 공인 IP(203.0.113.10)가 외부 인터페이스에 보조 주소로 설정되어 있거나 상위 장비가 이 주소를 게이트웨이로 보내 주어야 실제로 도달합니다.

📷 [실습 화면 삽입 위치] 외부 역할 VM에서 203.0.113.10:80에 접속한 뒤 게이트웨이의 sudo conntrack -L -d 203.0.113.10 결과로 original/reply 튜플이 변환된 모습을 표시한 화면


5. 보안 관점

  • Static NAT는 서버를 외부에 노출합니다. 매핑 하나가 그 서버의 모든 포트를 외부에 여는 효과가 있으므로, 필요한 포트만 허용하는 정책이 반드시 따라와야 합니다.
  • NAT 규칙과 방화벽 규칙이 서로 다른 주소를 기준으로 한다는 점(변환 전/후)을 이해하지 못하면 정책이 의도와 다르게 적용됩니다.
  • 변환 테이블이 가득 차거나 Dynamic NAT 풀이 소진되면 정상 사용자의 통신이 실패합니다. 대량 연결을 만드는 스캔·Flood는 NAT 자원 소진으로도 나타납니다.
  • 사용하지 않는 Static NAT 매핑은 잊힌 노출 경로가 되기 쉬우므로 정기 점검 대상입니다.

6. SOC 관점

흔적확인할 수 있는 것
NAT 로그 (Cisco 계열은 ip nat log translations syslog 설정 시 %IPNAT-6-CREATED 등, 버전마다 다름)변환 생성·삭제 시각과 전후 주소
방화벽 세션 로그의 변환 전·후 필드공인 IP ↔ 내부 호스트 대응
show ip nat statistics, conntrack 수변환 자원 사용량

관제자가 확인할 질문

  • 외부 로그의 공인 IP가 Static 매핑 주소인가, 풀·PAT 주소인가? Static이면 서버 하나로 바로 특정됩니다.
  • 이 NAT 매핑은 어느 방화벽 정책과 짝을 이루는가?
  • 사건 시각의 변환 기록이 남아 있는가(보관 기간 확인)?

오탐 주의: 같은 공인 IP에서 여러 내부 호스트의 트래픽이 섞여 보이는 것은 NAT의 정상 동작입니다. 역추적 절차는 49. 사설 IP · 공인 IP와 NAT — 로그의 IP가 서로 다른 이유, 방화벽 NAT 로그 분석은 268. Firewall NAT에서 다룹니다.


7. 핵심 정리

  • Cisco 계열 NAT는 인터페이스를 inside/outside로 지정하고, 주소를 Inside/Outside × Local/Global로 구분합니다.
  • Static NAT는 1:1 양방향, Dynamic NAT는 공인 풀에서 할당하며 풀이 소진되면 변환이 실패합니다.
  • Linux에서 DNAT는 라우팅 전(PREROUTING), SNAT는 라우팅·필터 후(POSTROUTING)에 적용됩니다.
  • NAT의 ACL은 변환 대상 선택용이며, 허용·차단은 방화벽 정책이 담당합니다.
  • 변환 테이블은 휘발성이므로 NAT 로그를 남겨야 공인 IP → 내부 호스트 역추적이 가능합니다.
profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글