▶기본 용어 정리
1. identity NAT - 원래 주소를 동일한 주소로 매핑
2. NAT exemption - 특정 통신을 NAT 대상에 제외
3. No NAT, NAT bypass - 주소 변환을 하지 않는 처리를 통칭하는 표현
결론적으로 주소 변환이 되지 않는다는 결과는 같으나, 약간의 차이가 있다.
▶배경
업무를 하다 보면 거대한 사설망 안에, 나의 사설망이 SNAT(보통 PAT)로 끼어들어 가는 경우가 있다.
※나의 사설망 안에도 서버와 네트워크 대역이 꽤 있어서 작은 규모가 아니었다. 여러 회사의 장비가 들어간다.
거대한 사설망에서 내 사설망으로 접근하려면 경계 라우터에서 포트포워딩을 걸어주면 그만이지만,
포트포워딩만으로는 해결되지 않는 경우가 있었다.
▶문제 발생 및 분석
내 case의 경우, 내 사설망 안의 웹서버가 문제였는데, 내 사설망 안의 웹서버가 192.168.1.3:443이라고 하면,
거대한 사설망의 PC(클라이언트)가 192.168.1.3:443으로 접근하고 싶었다.
그래서 포트포워딩으로 내 라우터의 바깥쪽 IP 예를들어 10.11.12.13:443로 연결하면, 내 방화벽(라우터)에서 포트포워딩으로 192.168.1.3:443을 걸어주었다.
통신이 되긴 했다.
그러나, 웹서버 favicon 같은 건 로드가 됐는데, 로그인창이 제대로 뜨지 않았다.
웹 개발자 도구로 로드되지 않는 부분을 찾았고, 동작을 살펴보니 302 redirect로 사설 ip(192.168.1.3)를 던져주는 것이 원인이었다.
외부 클라이언트는 192.168.1.3을 찾을 수 없었기 때문에 문제가 되었다.
이러한 문제가 생각보다 자주 일어날 수 있다.
애초에 서버 접속을 하는 방법에서 DNAT를 고려하지 않고 개발된 경우가 다수일 것이라,
갑자기 서버 자신의 IP로 리다이렉트를 던진다거나, TLS 인증서 검증에서 문제가 발생할 수 있다.
나의 경우 처럼 타사 웹서버라 서버 코드를 바꿀 수 없는 상황이라면, NAT 없이 라우팅해야 정상적인 웹이 표시될 수 있다.
Source NAT(보통 PAT일 것이다.)가 걸려 있는 상황이라면, 내부 → 외부로는 문제없이 통신이 될 것이다.
하지만, 외부에서 시작하여 내부 서버로 들어올 때는 identity NAT (NAT exemption, no NAT, bypass NAT도 같은 효과)를 해야만 했다.
※ 처음 용어 정리에서 봤듯이 identity NAT는 사실 동일한 주소로 매핑하는 것이라 no NAT와는 살짝 다르긴 하다. 하지만 효과는 동일하다.
※ 이제 SNAT가 아니기 때문에 중복 IP가 없는지, 그리고 라우팅 테이블이 꼬일 경우는 없는지를 신경 써야 했다.
GNS3 - C7200을 사용하여 identity NAT를 구현하는 방법에 대해 알아보자.
결론부터 말하면, 2가지 방법이 있는데, 조건이 아주 복잡하지 않다면 대부분 1번 방법을 사용할 것이다.
1. SNAT를 걸 때부터 access-list를 사용해서 외부의 특정 IP랑은 SNAT 사용하지 않기.
→ NAT룰에서 제외이기 때문에 정확히는 No NAT, NAT bypass, NAT exemption가 맞긴 하다.
(1-2). 특정 내부 IP는 static NAT를 사용하여 SNAT 전체 제외 (인터넷이 안되어도 되는 경우)
→ 이것이 확실한 identity NAT이다. 하지만 어렵지 않아서 제외했다. 그냥 SNAT로 내부 IP와 외부 IP를 같게 찍으면 된다.
2. route-map을 사용한 Policy-based NAT
→ 딱 봐도 세밀한 조정이 되겠지만 귀찮아 보인다. 출력 인터페이스에 다음 홉 등을 조건으로 걸 수 있다고 한다.
1번 방법을 해보자!
=실습=

초기 아래와 같이 설정했다.
!R1 first config
conf t
int f0/0
ip add 203.1.1.1 255.255.255.0
no sh
ip nat outside
int e2/0
ip add 192.168.1.1 255.255.255.0
no sh
ip nat inside
exit
ip route 204.1.1.0 255.255.255.0 203.1.1.2
access-list 1 permit 192.168.1.0 0.0.0.255
ip dhcp pool MYDHCP
network 192.168.1.0 255.255.255.0
default-router 192.168.1.1
exit
ip nat inside source list 1 interface f0/0 overload
exit
!R2
conf t
int f0/0
ip add 203.1.1.2 255.255.255.0
no sh
int e2/0
ip add 204.1.1.2 255.255.255.0
no sh
exit
ip route 192.168.1.0 255.255.255.0 203.1.1.1
end
!R3
conf t
int e2/0
ip add 204.1.1.3 255.255.255.0
no sh
exit
ip route 203.1.1.0 255.255.255.0 204.1.1.2
ip route 192.168.1.0 255.255.255.0 204.1.1.2
end
R1의 dhcp는 편하게 하려고 설정 했는데 안해도 상관없다.
DHCP를 쓴다면 PC에서 ip dhcp를 입력하여 ip를 받으면 되고,
DHCP를 안쓴다면, PC에서 ip 192.168.1.3 255.255.255.0 192.168.1.1 로 잡아주면 된다.
그리고 R2와 R3에서 패킷을 확인해본다.
case1. PC1(192.168.1.3) → R3(204.1.1.13) ping보내보기 당연히 잘 될 것이다.

case2. R3(204.1.1.13) → PC1(192.168.1.3) ping보내보기

핑이 성공한 것 처럼 !!!!를 띄우지만 사실은 실패한 것이다. no response found!를 보면 확인이 된다.
목적지가 192.168.1.3인 icmp인데 돌아온 것은
출발지가 203.1.1.1인 icmp가 돌아왔기 때문에 실패한 것이다.
그렇다면 아래와 같이 확장 ACL을 기반으로 identity NAT를 구현해보자.
!R1 second config
conf t
no ip nat inside source list 1 interface f0/0 overload
no access-list 1
access-list 101 deny ip host 192.168.1.3 host 204.1.1.3
access-list 101 permit ip 192.168.1.0 0.0.0.255 any
ip nat inside source list 101 interface f0/0 overload
end
다시 R3에서 PC1으로 ping 보내보기

이제 정상적으로 ICMP가 왕복된다.
그렇다면 PC1에서 R3로 핑을보내면?

SNAT가 걸리지 않는다.
그렇다면 PC1에서 R2(203.1.1.2)로 핑을 보내어, SNAT가 잘 걸리는지 확인한다.

SNAT가 잘 걸린다.
이렇게 ACL를 사용하여 identity NAT(no NAT, bypass NAT)를 구현해 보았다.
기본적으로
Static NAT룰은 양방향이라는 것
Dynamic NAT룰은 단방향 시작 + stateful이라는 것을 이해하고 있어야 한다.
그 후, identity NAT를 이해하고 필요한 경우를 알고, 구현까지 가능하다면 Good!
끝.
| 무료 IP 스캐너 포터블 ARP 스캐너 다운로드 freestyle v1.1 (0) | 2026.08.23 |
|---|---|
| 윈도우에서 IP 2개 사용하기 (망혼용) 실습 (0) | 2025.05.08 |
| [네트워크] Static Routing 설정 실습 (0) | 2025.05.02 |
| [네트워크] VLAN, inter VLAN 개념 및 구현, 실습, 연습 (1) | 2025.04.15 |
| [네트워크] 학습을 위한 GNS3(2.2.53) 설치, 스위치, 라우터 추가 (2) | 2025.04.13 |