반응형
NAT (Network Address Translation)
#한 쪽 네트워크의 IP주소가 다른 네트워크로 넘어갈 때, 주소가 변환되어 넘어가는 것
사용 예시
- 내부의 네트워크에는 비공인 IP주소를 사용하고 외부 인터넷으로 나가는 경우만 공인 IP주소를 사용하고자 하는 경우
- 기존에 사용하던 ISP에서 새로운 ISP로 바꾸면서 내부 전체의 IP를 바꾸지 않고 기존의 IP 주소를 그대로 사용하고자 하는 경우
- 2개의 인트라넷을 서로 합하려다 보니 두 네트워크의 IP가 서로 겹치는 경우
- TCP 부하 분배(Load-Balancing)가 필요한 경우
*Inside Local : 내부 네트워크에서 사용하는 비공인 주소
*Inside Global : 외부로 나갈 때, 변환되어 나가는 주소
- 10.1.1.1 Host와 Host B의 통신에서 10.1.1.1은 라우터 A를 거쳐 NAT Table을 거치게 되면 주소가 172.16.217.1로 변환됨과 동시에 NAT Table에 저장된다.
- Host B는 172.16.217.1로부터 온 메시지를 받고 다시 목적지가 172.16.217.1인 곳으로 메시지를 보낸다.
- Host B의 메시지를 받은 라우터 A는 목적지 주소가 172.16.217.1인 것을 보고 NAT Table을 참조해서 메시지를 10.1.1.1에게 전달한다.
예제
R1(config)# int fa0/0
R1(config-if)# ip addr 10.1.1.254 255.0.0.0
R1(config-if)# no shutdown
R1(config-if)# exit
R1(config)# int se0/0
R1(config-if)# ip addr 192.168.1.1 255.255.255.0
R1(config-if)# no shutdown
R1(config-if)# exit
R1(config)# router rip
R1(config-router)# version 2
R1(config-router)# network 10.0.0.0
R1(config-router)# network 192.168.1.0
R1(config-router)# no auto-summary
R1(config-router)# exit
R1(config)# ip nat pool ccie 192.168.1.3 192.168.1.254 netmask 255.255.255.0
R1(config)# ip nat inside source list 1 pool ccie
R1(config)# ip nat inside source static 10.1.1.2 192.168.1.100
R1(config)# access-list 1 permit 10.0.0.0 0.255.255.255
R1(config)# int fa0/0
R1(config-if)# ip nat inside
R1(config-if)# exit
R1(config)# int se0/0
R1(config-if)# ip nat outside
- ip nat pool ccie 192.168.1.3 192.168.1.254 netmask 255.255.255.0
- 외부로 나갈 때 사용할 Inside global IP주소의 pool
- 'ccie'라는 이름을 가진 192.168.1.3~192.168.1.254 범위의 pool
- ip nat inside source list 1 pool ccie
- 1번 access-list 적용
- Inside로 정의한 인터페이스에서 오는 패킷의 source 주소(출발지 주소)를 보고 그 주소가 Access-List 1번에 정의한 source 주소에 해당하면 그것을 지정한 pool(ccie)에 있는 주소로 바꿔주겠다.
- Outside로 정의한 인터페이스에서 들어오는 패킷의 목적지 주소를 보고 그것이 pool(ccie)에 속한 주소이면 그것을 다시 Private 주소로 바꿔주겠다.
- ip nat inside source static 10.1.1.2 192.168.1.100
- 고정 주소 지정 (10.1.1.2는 무조건 192.168.1.100로 변환)
- access-list 1 permit 10.0.0.0 0.255.255.255
- 10.0.0.0 0.255.255.255 네트워크만 허용하고 나머지는 모두 Deny
R2(config)# int fa0/0
R2(config-if)# ip addr 172.20.7.254 255.255.0.0
R2(config-if)# no shutdown
R2(config-if)# exit
R2(config)# int se0/0
R2(config-if)# ip addr 192.168.1.2 255.255.255.0
R2(config-if)# no shutdown
R2(config-if)# exit
R2(config)# router rip
R2(config-router)# version 2
R2(config-router)# network 172.20.0.0
R2(config-router)# network 192.168.1.0
R2(config-router)# no auto-summary
R2(config-router)# exit
관련 명령어
R1# debug ip nat
NAT: s=10.1.1.1 → 192.168.1.3, d=172.20.7.1 [1]
NAT*: s=172.20.7.1, d=192.168.1.3 → 10.1.1.1 [5]
NAT: s=10.1.1.1 → 192.168.1.3, d=172.20.7.1 [2]
NAT*: s=172.20.7.1, d=192.168.1.3 → 10.1.1.1 [6]
NAT: s=10.1.1.1 → 192.168.1.3, d=172.20.7.1 [3]
NAT*: s=172.20.7.1, d=192.168.1.3 → 10.1.1.1 [7]
NAT: s=10.1.1.1 → 192.168.1.3, d=172.20.7.1 [4]
NAT*: s=172.20.7.1, d=192.168.1.3 → 10.1.1.1 [8]
R1# show ip nat translations
pro Inside global Inside local outside local outside global
icmp 192.168.1.3:1 10.1.1.1:1 172.20.7.1:1 172.20.7.1:1
icmp 192.168.1.3:2 10.1.1.1:2 172.20.7.1:2 172.20.7.1:2
icmp 192.168.1.3:3 10.1.1.1:3 172.20.7.1:3 172.20.7.1:3
icmp 192.168.1.3:4 10.1.1.1:4 172.20.7.1:4 172.20.7.1:4
-- 192.168.1.100 10.1.1.2 --- ---
잠시후...
NAT: expiring 192.168.1.3(10.1.1.1) icmp 1(1)
NAT: expiring 192.168.1.3(10.1.1.1) icmp 2(2)
NAT: expiring 192.168.1.3(10.1.1.1) icmp 3(3)
NAT: expiring 192.168.1.3(10.1.1.1) icmp 4(4)
R1# show ip nat translations
pro Inside global Inside local outside local outside global
-- 192.168.1.100 10.1.1.2 --- ---
R1# undebug all
R1# show ip nat statistics
Total translations: 1 (1 static, 0 dynamic, 0 extended)
Outside Interfaces: serial0/0
Inside Interfaces: FastEthernet0/0
Hits: 4 Misses: 4
Expired translations: 4
Dynamic mappings:
-- Inside source
access-list 1 pool ccie refcount 4
pool ccie: netmask 255.255.255.0
start 192.168.1.3 end 192.168.1.254
type generic, total address 252, allocated 0(0%), misses 0
- Debug 명령을 준 후 10.1.1.1 Host에서 172.20.7.1 Host로 ping을 보내면 위와 같은 Log가 출력된다.
- [ ]은 ICMP 순서이다.
반응형