본문 바로가기

IT인생_스크랩/Network

NAT 란

출처 Welcome to myworld!! | 호기심
원문 http://blog.naver.com/changjaeho/120008095774




Network Address Translation (NAT)

 

앞에 NAT에 관해서 올린자료가 있으나

맛배기만 보여준것 같습니다

이번장에서 확실하게 그리고 자세하게 나와있습니다

학습하시는데 참고하세요

 

TCP/IP 통한 통신망이 세계로 확산되면서 IP주 소의 부족이 심각한 문제가 되고 있다. IANA(Internet Assigned Numbers Authority) address 최대한 활용하기 위한 많은 해결책들이 제시되고 있으며 중의 하나가 NAT이 다. NAT 대해 자세히 알아 보도록 하자.

 

개요

 

Internet intranet 급속한 확산에 의해  IP주소가 세계적으로 유일하게 할당되는 것은 불가능해 지고 있다. 글의 내용은 intranet 주소를 모두 renumbering 필요 없이 intranet internet 일부가 되게하는 방법에 대해 설명하고 있다.

 

Host system 세가지의 범주로 구분이 가능하다.

-          Intrahost systems

-          Intra-/interhost systems

-          Interhost systems

 

Intrahost system들은 단지 intranet 영역 안에서만 서로 엑세스 하는 호스트를 말한다. 따라서 다른 intranet주소나 internet주소를 엑세스 필요가 없다. 이러한 호스트들은 intranet 벗어나지 않는 범위에서 정해진 주소 정책을 따를 있다. Intra-/interhost systems intranet안에서 우선적으로 통신하지만 경우에 따라서 다른 intranet이나 internet으로의 통신이 필요한 호스트를 말한다. 이들은 보통의 경우에는 intranet안에서의 정해진 주소 정책을 따르지만 외부와 통신할 경우 특별한 라우팅 정책이 필요하다. 끝 으로 interhost system 다른 intranet이나 internet으로 제한 없이 엑세스 있는 호스트를 말한다.  이러한 호스트들은 모두 제한된 주소 정책을 따라야 한다.

이러한 host systems 분류를 기반으로 IANA intranet 주소 정책을 내어 놓았다. 공인 주소(public address) 영역에서 개의 주소 블록이 사설 주소(private address) 위해 할당된 것이다.

 

Address Class Range                                Network Address Range

                                A                                                        10.0.0.0–10.255.255.255

                                B                                                        172.16.0.0–172.31.255.255

                                C                                                        192.168.0.0–192.168.255.255

<Table 1> IANA에서 정의하고 있는 non-internet routable address

<Tabel 1> 있는 이러한 주소들은 사설 네트워크를 위해 정의된 것이므로 인터넷 전체로 라우팅 없으며 따라서 ISP들 은 이러한 주소 블록이 인터넷으로 라우팅 되는 것을 막아야 한다. 이러한 주소의 차단이 intranet hostsystem에는 문제가 되지 않지만 intranet-/internet hostsystem이나 internet hostsystem 경우에는 인터넷으로 라우팅 되어야 하기 떄문에 구현하기가 매우 어려워 진다. 때문에 대부분의 intranet 설계에 있어서 이러한 hostsystem들은 별도의 라우팅 정책을 사용하고 있다.

유일하지 않은 이러한 사설 주소를 인터넷으로 라우팅할 있게 하는 라우팅 정책중 하나가 바로 NAT(Network  Address Translation)이다. 또한 NAT IANA주소를 절약하는데 아주 유용하게 이용될 있는데 인터넷으로 라우팅할 없는 사설 주소를 유일한 인터넷 주소로 전환하여 라우팅이 가능하게 한다. 따라서 IANA 등록되지 않은 사설 주소를 이용하여 IANA 등록된 공인 주소로 엑세스하는 것이 가능하게 된다.

NAT에서는 사설 주소를 ‘inside address’ 정의하는데 속해 있는 사설 주소 내에서 라우팅 있는 주소를 말한다. NAT 의해 사설 주소를 가진 packet들은 ‘outside address’ 정의된 공인 주소로 전환되어 공인 주소로 라우팅할 있게 된다.

NAT 주소의 전환이라는 기능 자체만을 가지고도 유용하게 쓰일 있지만 주어진 주소를 최대한 활용할 있다는 점에서 네트워크 관리자에게 많은 기회를 있다.

NAT cisco 라우터의 IOS Release 11.2버전에서 기능을 모두 지원하고 다음의 hardware platform에서 동작한다.

 

-          Cisco 1000 series

-          Cisco 1600 series

-          Cisco 2500 series

-          Cisco 3600 series

-          Cisco 4000 series

-          AS5200

-          RSP 7000 series

-          Cisco 7200 series

-          Cisco 7500 series

-          Cisco 770 series (700 Cisco IOS Release 4.0)

(* 필자의 확인에 의하면 Cisco 2500 series에서는 12.0이상에서만 지원한다.)

 

 

NAT 정의

 

NAT 대한 가장 기본적인 정의는 public outside address private inside address 사이에서 border router로서의 역할을 한다는 것이다. 이러한 border router로서의 역할은 inside address outside address 서로 전환되는 동작을 말한다. 따라서 inside address outside에서 outside address 보이게 되고 반대로 outside address inside에서 inside address 보이게
. <그림 1>에서와 같이 NAT configuration inside/outside boundary router에서 설정된다

 


 

<그림 1> NAT boundary router 의한 intranet주소의 전환

 

NAT 인터페이스의 종류에 구애받지 않고 inside outside 연결하는 어느 곳에서 든지 설정이 가능하다. <그림 1>에서 inside 호스트들은 사설 주소인 10.0.0.0주소를 사용하고 있고 NAT 사설 주소를 NAT pool 정의된 outside주소로 전환한다. 따 라서 inside 있는 호스트들은 outside 있는 다른 호스트와 통신이 가능하게 된다. outside 주소 pool NAT라우터의 outside 인터페이스의 네트워크 주소의 일부가 되고 unique addressing public scheme 따라야 하므로 1:1 주소 전환만이 가능하게 된다.(PAT 경우를 제외)

 

NAT 라우팅

 

NAT 구현될 내부의 inside 주소가 outside 라우팅 되어서는 않된다. 하지만 반대의 경우는 필요하다. 모 든 outside 주소는 inside 라우팅 되어야 한다. (만약 inside 주소가 outside 라우팅 되면 동일한 다른 주소와 충돌이 발생할 것이고 반대로 outside 주소가 inside 라우팅 되지 못하면 inside 호스트들은 outside 통신할 없게 된다.)

이러한 문제를 해결하기 위하여 distrubution list 이용하게 된다. Outside 주소를 모두 inside 허용하면서 inside 주소를 밖으로 나가지 못하게 block 시킨다.  예는 다음과 같다.

 

router eigrp n

   network “outside network address”

   distribute-list 3 out

   distribute-list 3 in

   no auto-summary

# access-list 3 to deny inside network addresses

access-list 3 deny 192.168.0.0 0.0.255.255

access-list 3 permit any

 

NAT 동작 원리

 

NAT 1:1 주소 매핑을 수행하기 때문에 NAT라 우터로 들어온 inside->outside 패킷(또는 반대)만이 주소 전환의 대상이 된다. 간단히 설명하자면 IP 헤더 부분을 체크하여 NAT 테이블에 의해 해당 주소로 바꾼다음 checksum 다시 계산하여 IP 헤더를 바꾸는 방법으로 동작한다. Application layer에서 까지 NAT 주소 전환이 반영이 되려면 NAT IP 주소의 참조내용을 담고 있는 application 데이터 부분을 새로운 주소로 변환해야 한다.

 

NAT FTP

 

FTP에 서는 PORT PASV라는 명령어가 IP주소를 참조하는 내용을 담고 있다.(ASCII 형태로 저장됨) NAT 라우터는 FTP 제어 스트림를 감시하다가 이런 명령어가 있으면 주소 부분을 전환된 주소로 바꾸어 준다. 이러한 작업에 의해 패킷의 크기가 변할 있고 패킷의 오류 여부를 알기 위한 TCP checksum 다시 계산되어야 한다.

 

NAT ICMP

 

Internet Control Message Protocol(ICMP) 패킷도 역시 데이터 필드에 sender IP 헤더를 포함하고 있기 때문에 NAT 의해 전환되어야 한다. 따라서 포함된 IP checksum 다시 계산되어야 하고 값에 의해 ICMP checksum역 시 다시 계산 되어야 한다. ICMP패킷을 포함하고 있는 IP 패킷도 수정되어야 한다. NAT 의해 수정되어야 하는 ICMP 패킷의 종류는 다음과 같다.

-          destination unreachable (type 3)

-          source quench (type 4)

-          redirect (type 5)

-          time exceeded (type 11)

-          parameter problem (type 12)

 

NAT SNMP

 

도메인 이름이 아닌 실제 주소를 포함하고 있는 SNMP(Simple Network Management Protocol)패킷도 NAT 의해 수정되어야 한다.

 

NAT SMTP

 

SMTP(Simple Mail Transfer Protocol)역시 IP주소를 포함하고 있을 있으므로 필요에 따라 NAT 의해 수정되어야 한다.

 

위의 경우와 같이 NAT 단순히 IP 헤더만을 수정하는 것이 아니라 IP주 소가 참조되는 모든 데이터를 수정해야 한다. 따라서 모든 데이터 스트림을 읽어야 하므로 라우터의 performance 많은 영향을 미친다. 하 지만 NAT 있는 이익을 고려할 어느정도의 performance 감소는 받아들여 있을 것이다.

 

NAT 암호화(Encryption)

 

IP 패 킷의 데이터 부분이 암호화 되어 있는 경우 NAT 주소 전환을 수행하는 것은 불가능하다. 따라서 이러한 system들의 경우는 NAT 대상에서 제외하기 위한 별도의 환경 설정을 주어야 한다. (access-list등을 활용)

 

NAT 보안(Security)

 

유감스럽게도 NAT 적용될 있는 보안 옵션의 수를 제한하게 된다. 앞에서도 설명 했듯이 NAT 엑세스 해야 하는 영역(IP헤더, TCP checksum, 밖의 주소 참조 부분 ) 암호화에서 제외시켜야 한다.

 

NAT 장점과 단점

 

<장점>

NAT 가장 확실한 장점이라면 private address 이용하여 public address 통신이 가능하게 된다는 것이다. 이 러한 장점은 public address 수를 절약할 있다는 점에서 비용의 절감도 가능하게 한다.

네트워크 관리자에게는 관리에 있어서 매우 유연한 장점을 준다. 가령 개의 회사가 합병되었을 경우 모든 주소 체계를 새로 설계해야 하는 부담을 줄여 준다. 또한 multiple pool/backup pool/load-sharing/load-balancing pool 등에 의해 좀더 유연한 인터넷 연결을 가능하게 한다.

 

<단점>

가장 중요한 단점이라면 end-to-end간의 추적(IP trace)어려워 진다는 것이다. 여러 개의 NAT라우터에 의해 multiple NAT 적용 되었을 경우 경로 추적이 더욱 어려워 지는데 이러한 단점은 반면 헤커가 대상 경로를 추적하기 어렵게 만듦으로써 보안성 있는 연결을 하게 된다고 수도 있다. 또한 NAT 라우터를 거치는 모든 패킷을 scan하므로 switching path delay 커지게 된다. NAT IP주소를 이용하는 application 동작하지 못하게 수도 있는데 이러한 경우 static NAT 이용하여 해결이 가능한 경우도 있다.

 

NAT 기능

 

NAT Cisco IOS software 기능이며 NAT 자체의 부가적 기능을 가지고 있다. NAT static NAT dynamic NAT 모두 가능하다.

Static NAT inside<->outside간의 1:1주소 매핑을 매번 동일한 주소로 수행하도록 하는 것이다. 따라서 NAT 테이블 에는 inside IP주소 마다 개씩의 outside IP주소를 할당하여야 한다. Dynamic NAT inside address pool 부터 outside address pool 또는 반대로 IP주 소를 동적으로 할당하여 전환하는 방법이다.  NAT 테이블에 정의되어 있는 패킷이 NAT라 우터의 inbound interface 도달하게 되면 outbound 위해 정의된 address pool에서 하나의 주소를 동적으로 할당 받아 주소로 전환 되어 통신을 하게 된다.  만약 하나의 주소 전환이 이루어 지면 NAT 테이블이 전부 지워지거나(clear명령에 의해) 정의된 주소 매핑 시간이 경과할 까지 유효하게 된다. Overloading 이용하면 UDP 또는 TCP패캣의 source port 전환하여 공인 IP주소를 절약할 있다. 여러 개의 inside local address 동일한 outside global address 전환되어야 경우 inside address 대하여 outside address UDP/TCP포트 번호를 다르게 부여함으로써 inside address 자신에게 부여된 outside address 구별할 있도록 하는 것으로 PAT(Port Address Translation)라고 불리기도 한다.

 

NAT 동작

 

NAT 아래와 같은 다양한 기능으로 이용된다.

-          NAT of inside local addresses

-          NAT with PAT of global addressing

-          NAT handling of overlapping networks

-          NAT support for TCP load distribution

 

Inside local 주소의 NAT

 

<그림 2> 호스트B 호스트 A간의 데이터의 흐름을 보여주고 있다. 먼저 호스트B 목적지 주소(172.69.2.1) 가지고 있는 패킷을 intranet으로 보낸다.(A1) Intranet 라우팅에 의해 패킷은 NAT라 우터의 E1 인터페이스(10.1.1.1) 도달하게 된다. (A2) NAT 라우터 는 패킷이 주소 전환 테이블과 대응되는 access list match되기 때문에 주소 전환을 요청하게 된다.(A3)  NAT라우터는 먼저 패킷이 source또는 destination에서 번째 패킷인지를 확인하기 위하여 자신의 NAT 테이블을 확인한다. 만 약 패킷이 이전에 전환된 주소와 같은 주소라면 NAT테 이블을 참조하여 전환된 주소로 수정하고 이전에 전환된 적이 없는 주소를 가진 첫번째 패킷일 경우 아래의 가지 방법 하나를 이용하여 새로운 주소로 전환한다.

 

-          NAT pool 에서 하나의 주소를 선택하여 근원지 주소(10.2.2.1) 목적지 A 가기 위한 주소(10.2.2.1) 전환한다.

-          미리 정의된 주소(정적 할당에 의해) 전환한다.

 

Dynamic NAT 경우에는 사용하지 않는 주소들 중에서 숫자가 낮은 주소를 먼저 할당한다. 새 로 할당된 주소는 다음의 이어지는 패킷들을 위하여 NAT테 이블에 등록되며 라우팅 테이블과 라우팅 알고리즘에 의해 next hop 결정된다. NAT 과정이 일어나고 후에 라우터는 새로 만들어진 패킷을 어느 인터페이스로 보낼지 결정하고 A5 같이 결정된 인터페이스를 통하여 패킷을 전송한다. 목적지 A 인터넷 라우팅을 통하여 B 보낸 패킷을 받게 되며 B 주소가 171.69.89.1(10.2.2.1 NAT 의해 전환된 주소)이라고 생각하게 된다. B 보낸 패킷에 대한 응답으로 A 자신이 알고 있는 B 주소인 171.69.89.1 목적지 주소로 하는 패킷을 전송한다. 인 터넷 라우팅에 의해 171.69.89.1 목적지로 하는 패킷은 NAT라우터의 E0 인 터페이스에 도달하게 되고 NAT라우터는 NAT 테이블을 참조하여 패킷의 주소를 다시 원래의 주소인 10.2.2.1 전환하여 E1으 로 패킷을 전송하고 결국 B A 보낸 패킷을 받을 있게 된다.

 

 

 

 

 

 

 

 

 


 

<그림 2> NAT of Inside Local Address

 

NAT PAT( Port Address Translation) 의한 Global Addressing

 

<그림 3> 호스트A B 그리고 호스트C D간의 IP 패킷의 흐름을 보여준다. 이전의 예와 다른 점은 NAT 위해 사용될 있는 공인 주소가 (171.69.89.1)밖에 없다는 점이다. 따라서 inside 주소의 수가 outside주소의 보다 많게 된다. TCP UDP connection 위한 NAT PAT(Port Address Translation)기능을 이용하 면 이러한 많은 수의 inside주소가 적은 수의 outside주소로 overload 있다. 하지만 client server 유일한 주소를 가져야 하는 application 경우에는 PAT 이용될 없다. 호스트 A B, C D간의 PAT 가능한 경우 NAT 유일한 IP주소가 아닌 unique socket(socket = IP address : port) 이용하여 매핑하므로 IP주소를 절약할 있다. <그림 3> 의하면 호스 트B 171.69.89.1:1024 이용하여 호스트A 연결을 설정할 있고 호스트C 171.69.89.1:1723 이용하여 호스트B 연결을 맺고 있다.

 


       

<그림 3> NAT PAT( Port Address Translation) 의한 Global Addressing

 

NAT overload기능이 enable되면 NAT IP주소의 유일성을 확인하는 대신에 포트 번호의 유일성을 확인하기 때문에 같은 IP주소를 이용하여 포트 번호만 다르게 하여 여러 개의 호스트가 NAT주소 매핑에 참여하는 것이 가능하게 된다.

 

중복 네트워크에 대한 NAT

 

<그림 4> inside network outside network 대하여 중복(overlap)되었을 경우의 NAT 테이블의 내용을 보여준다. 171.69.3.0 네트워크가 NAT 테이블의 양쪽에 모두 존재 하고 있는 것이 보일 것이다. 이 러한 경우는 사설 네트워크의 설계시 IANA에서 권장하는 사설 네트워크 주소를 이용하지 않을 경우 발생할 있다.  따라서 인터넷에 존재하는 주소와 같은 네트워크 주소가 사설 네트워크에도 존재하게 된다.

<그림 4>에서 호스트B 호스트D 통신을 시도할 경우 먼저 DNS서버를 통하여 대상의 IP주 소를 획득하게 된다. NAT라우터는 DNS lookup reply패킷을 가로채서 NAT 테이블에 따라 전환된 주소로 다시 설정하는 기능을 수행한다.  NAT테이블의 처음 항목(10.2.2.1->171.69.89.2) DNS request 의해 생성된 것이다. 주소 매핑은 inside to outside NAT pool 의해 생성된 것이다. DNS reply 패킷이 돌아올 NAT라우터는 전환된 주소인 171.69.89.2 원래의 주소인 10.2.2.1 전환하면서 outside 중복된 네트워크 주소를 위한 하나의 주소 전환(171.69.3.1->10.4.4.1) 하게 되는데 이것은 outside to inside NAT pool 의해 이루어 지게 된다. 따라서 호스트B DNS 부터 중복되지 않은 호스트A 주소인 10.4.4.1 얻게 되고 주소를 이용하여 통신이 가능하게 된다.

호스트F 호스트E 경우처럼 같은 주소를 가지고 있는 경우에는 어떻게 될까? 만약 호스트E DNS 이용하지 않고 물리적인 주소를 이용하여 F 통신하려고 하면 통신이 불가능할 것이다.(자 신의 주소와 같기 때문에) 따 라서 호스트B DNS 이용해야만 호스트F 통신이 가능하게 된다.

 


  

<그림 4> 중복 네트워크에 대한 NAT

 

NAT 의한 TCP Load Distribution

 

<그림 5>에서는 자원을 나누어 가지고 있는 여러 대의 inside 호스트들이 하나의 가상 주소를 이용하는 경우를 보여 주고 있다. 가령 호스트 B, G, H 그들과 통신하는 다른 호스트에서는 동일한 주소를 가진 하나의 호스트로 인식될 것이다. 따 라서 호스트A 공유된 자원을 엑세스하기 위해서는 위의 개의 호스트 어느 곳에만 연결되면 된다. 이러한 경우 주소를 절약하기 위해 NAT 하나의 유일한 주소를 갖는 가상 호스트를 설정하여 end user round-robin 의해 개의 호스트 하나에 접속하게 한다. Inside IP주소가 하나의 outside IP주소인 171.69.89.1 매핑 되고 IP주소가 10.2.2.254 가상 호스트가 미리 정의된다. 호스트A IP주소가 171.69.89.1 가상 호스트를 향하여 패킷을 전송한다. NAT 라우터는 NAT테이블에 호스트A에서 가상 호스트로의 주소 전환 엔트리가 존재 하는지를 확인한 없을 경우 다음의 실제 호스트인 10.2.2.1 (round-robin 의해) 새로운 주소 매핑을 생성할 것이다. 따 라서 호스트A 호스트B 통하여 공유 자원을 엑세스 하는 것이 가능하게 된다.

 

<그림 5> NAT 의한 TCP Load Distribution

 

NAT 라우터에 의해 먼저 가상 호스트 주소인 171.69.89.1 10.2.2.254 전환되고 후에 10.2.2.254 다시 실제 호스트의 IP주 소로 round-robin방식으로 전환하며 이것에 의해 load distribution 가능하게 된다.

 

NAT 환경 설정

 

Static NAT Configuration

 

<그림 6>에서와 같이 IP주소 10.1.1.4 호스트가 하나의 공인 주소로 전환되어야 하고 그것이 변하지 않는 경우 다음과 같은 명령을 이용하여 static NAT 설정할 있다.

 

Router(config)# ip nat inside source static “inside IP address” “outside IP address”

 

Dynamic NAT Configuration

 

Inside network 나머지 호스트들은 outside 자원을 엑세스할 경우에만 공인 주소가 필요하다면 외부로 패킷이 전송될 매번 같은 주소로 전환될 필요는 없다. 이러한 경우에는 dynamic NAT 유용하다. 먼 저 inside호스트들에게 부여할 있는 NAT pool 정의 되어야 한다. 과정을 위해 아래와 같은 명령을 사용한다.

 

Router(config)# ip nat pool “pool name” “start outside IP address” “finish outside IP address” netmask “network mask”

 

다음의 과정은 어떤 inside 호스트가 NAT적용을 받을 것인지를 결정하기 위한 access-list 작성한다.

 

Router(config)# access-list “unique access list number” permit “inside IP network address” “inside IP network mask”

또는

Router(config)# access-list “unique access list number” deny “inside IP network address” “inside IP network mask”

 

마지막으로 NAT pool access list 서로 연결 시킨다.

 

Router(config)# ip nat inside source list “unique access list number” pool “pool name”

 

Inside local 주소의 NAT

 


  


<그림 6> Inside local 주소의 NAT

Static and Dynamic NAT interface Configuration

 

이제 해야 일은 NAT 참여할 인터페이스를 결정하고 해당 인터페이스에 NAT enable시키는 일이다. 다음의 명령을 이용한다.

 

Router(config)# ip nat inside

그리고

Router(config)# ip nat outside

 

개의 인터페이스만이 outside 설정될 있다는 사실을 명심하자. 하 지만 inside로는 여러 개의 인터페이스가 동시에 설정될 있다. 또한 static dynamic모두 중복된 IP주소(inside outside) 존재할 경우 문제가 된다.  Static dynamic 모두 존재 하는 IP주소가 있다면 first-come, first-served 원칙에 따라 작동한다. 만 약 IP주소가 dynamic으로 먼저 할당되었고 IP주소를 static하게 사용하도록 설정 되어 있는 호스트가 static 매핑을 요구할 경우 주소 전환은 실패하게 된다.

NAT매핑은 지정된 값에 의해 일정 기간 동안만 유효하게 된다.(<그림 6> 참고) 시간 값에 의해 NAT라우터는 정해진 시간 동안은 매핑된 주소들에 대하여 새로운 주소 전환을 설정하지 않고 NAT테이블의 값을 참조하여 기능을 수행하게 된다. NAT 매핑이 정해진 시간을 초과하여 expire되었을 경우 dynamic NAT 경우는 매핑은 NAT테이블에서 삭제되며 주소는 pool 반환되어 다른 호스트가 NAT 요구할 경우 사용될 있게 된다. 이러한 timeout값은 다음의 명령을 이용하여 설정할 있다.

 

Router(config) # ip nat translation timeout “time out value in seconds”

 


     

<Table 2>에는 NAT 위한 time out parameter들을 정의하고 있다.

 

Keyword                                                   Meaning

                                   dns-timeout                                                      Specify timeout for NAT DNS flows

                                   finrst-timeout                                                   Specify timeout for NAT TCP flows

after a FIN or RST

                                   icmp-timeout                                                    Specify timeout for NAT ICMP flows

                                   max-entries                                                      Specify maximum number of NAT entries

                                   syn-timeout                                                     23

                                   tcp-timeout                                                      Specify timeout for NAT TCP flows

                                   timeout                                          Specify timeout for dynamic NAT translations

                                   udp-timeout                                                      Specify timeout for NAT UDP flows

 


<Table 2> NAT Translation Parameters

 

NAT PAT( Port Address Translation) 의한 Global Addressing

 

<그림 7> NAT 라우터의 내부에 있는 사설 네트워크가 NAT 통해서 공인 네트워크(인터넷)으로 통신하는 예를 보여주고 있다. 사설 네트워크는 IANA에서 정의한 사설 네트워크 주소(RFC 1918) 이용하고 있다.  예에서는 공인 네트워크를 위한 공인된 주소의 NAT pool 밖에 존재하지 않는 반면 내부의 사설 네트워크에는 라우터를 제하고도 6개 의 NAT 필요로 하는 호스트가 존재하는 것을 있다. 일곱번째의 호스트는 static NAT 정의되어 있고 따라서 항상 동일한 공인 주소를 이용하여 매핑되도록 정의되어 있다. 예를 <그림 6> 예와 비교해 보면 아래와 같은 dynamic 명령어 개를 제외하고는 동일한 내용인 것을 있다.

 

Router(config)# ip nat inside source list “unique access list number” pool “pool name” overload

 


 

<그림 7> NAT PAT(Port Address Translation) 의한 Global Addressing

 


  


명령어의 마지막에 붙여진 “overload” PAT기능을 enable시키기 위한 것이다. 기능에 의해 많은 수의 내부 호스트 들이 동일한 공인 주소에 대하여 포트 번호를 다르게 맵핑하는 방법으로 many-to-one dynamic mapping 가능하게 된다. 이러한 매핑에 의한 NAT테이블의 내용은 <Table 3>에서 보여주고 있다.

예는 NAT라우터의 E1 인터페이스와 10.1.1.0네트워크에 있는 대의 호스트에서 외부의 172.69.89.94 주소로 ping 명령을 수행한 경우이다.  테이블에서 보면 ICMP패킷을 위해 매번 새로운 포트 번호가 부여 되었다. Outside Local Outside Global 값은 같은데 이것은 외부에서 내부로 들어오는 패킷은 주소 전환이 되지 않기 때문이다.

 

Pro                            Inside Global          Inside Local            Outside Local        Outside global

icmp                            171.69.89.25:14            10.1.1.5:4                     171.69.89.94:4              171.69.89.94:14

icmp                            171.69.89.25:13            10.1.1.5:3                     171.69.89.94:3              171.69.89.94:13

icmp                            171.69.89.25:12            10.1.1.5:2                     171.69.89.94:2              171.69.89.94:12

icmp                            171.69.89.25:11             10.1.1.5:1                     171.69.89.94:1              171.69.89.94:11

icmp                            171.69.89.25:10            10.1.1.5:0                     171.69.89.94:0              171.69.89.94:10

icmp                            171.69.89.25:9              10.1.1.6:4                     171.69.89.94:4              171.69.89.94:9

icmp                            171.69.89.25:8              10.1.1.6:3                     171.69.89.94:3              171.69.89.94:8

icmp                            171.69.89.25:7              10.1.1.6:2                     171.69.89.94:2              171.69.89.94:7

icmp                            171.69.89.25:6              10.1.1.6:1                     171.69.89.94:1              171.69.89.94:6

icmp                            171.69.89.25:5              10.1.1.6:0                     171.69.8 9.94:0             171.69.89.94:5

icmp                            171.69.89.25:4              10.1.1.1:4                     171.69.89.94:4              171.69.89.94:4

icmp                            171.69.89.25:3              10.1.1.1:3                     171.69.89.94:3              171.69.89.94:3

icmp                            171.69.89.25:2              10.1.1.1:2                     171.69.89.94:2              171.69.89.94:2

icmp                            171.69.89.25:1              10.1.1.1:1                     171.69.89.94:1              171.69.89.94:1

                                                             10.1.1.1:0                     171.69.89.94:0              171.69.89.94:1

 


<Table 3> Router#show ip nat trans

 

중복 네트워크에 대한 NAT

 

<그림 8> 예에서 내부에 있는 사설 네트워크는 IANA에서 정의한 사설 주소를 이용하고 있다. 여기에서 NAT라우터는 개의 주소 pool(net-0 net-1) 가지고 있다. 번쨰 pool inside-to-outside NAT 위한 것인데 outside 공인 주소인 171.69.89.2 ~ 171.69.89.254 범위로 하고 있고 번째 pool outside-to-inside 위한 것으로 inside 사설 주소인 10.255.1.1 ~ 10.255.1.254 범위로 하고 있다.

 


 


이전의 예와 비교해 번째 NAT pool 아래와 같이 정의된 이외에는 모두 같은 내용인 것을 있다.

 


Router(config)# ip nat pool “pool name” “start inside IP address” “finish inside IP address” netmask “network mask”

 

명령에 의해 사용되지 않는 사설 주소가 외부의 네트워크를 위하여 할당되고 아래와 같은 access-list 정의에 의해 외부에서 net-1 이용해서 주소 전환이 이루어 네트워크 주소를 지정할 있게 된다.

 

Router(config)# ip nat outside source list “unique access list number” pool “pool name”

 

이러한 access-list inside interface outside interface 동일하게 적용될 있는데 NAT 대상이 되는 주소 영역은 같기 때문이다.(IANA에서 정의하는 사설 주소 영역)

 

Pro         Inside Global          Inside Local            Outside Local         Outside Global

icmp         171.69.89.2                                    10.1.0.1                       171.69.88.94                 171.69.88.94

            171.69.89.3                                    172.16.2.2                    10.255.1.1                    171.16.2.2

            171.69.89.2                                    10.1.0.1                                                     

                                                                          10.255.1.1                    171.16.2.2

<Table 4> Router# sho ip trans

 

<Table 4>에서는 10.1.0.1에서 171.69.88.94로의 ping명령을 수행한 경우를 보여주고 있다.

 10.1.0.1이라는 주소는 171.69.89.2 전환 되었고 외부의 모든 호스트들은 10.1.0.1주소를 가진 호스트의 실제 주소를 171.69.88.94 인식하게 것이다. 다 음에 172.16.2.2이라는 내부의 호스트가 외부의 172.16.2.2라는 주소의 호스트와 통신을 하려고 하는 경우를 생각할 있는데 호스트는 실제로 같은 주소를 가지고 있다. 먼저 내부의 호스트는 171.69.89.3이라는 주소로 전환된다. 그 리고 내부의 호스트는 먼저 DNS lookup 하게 되는데 NAT라우터에 의해 돌아오는 DNS reply 값에 있는 동일한 주소는 net-1 pool 정의된 주소중 하나의 주소로 전환되어 내부로 전달되며 따라서 내부의 호스트는 주소의 충돌 없이 외부의 동일한 주소를 갖는 호스트와 통신이 가능하게 된다. 만약 내부의 호스트가 DNS lookup 하지 않고 실제의 IP주 소를 이용하여 통신을 시도한다거나 호스트가 domain name역시 같을 경우는 서로 통신하는 것이 불가능하게 된다.

 

NAT 이용한 TCP Load Distrubution

 

<그림 9> NAT라우터에 의한 TCP load sharing 예를 보여 주고 있다.  내부의 사설 네트워크는 IANA에서 정의하고 있는 사설 네트워크 주소를 사용하고 있다. 예에서 IP pool  net-0, net-1, net-2 개로 정의되어 있는 것을 있다. 처음의 것은 inside-to-outside NAT 위한 pool이고 번째는 outside-to-inside NAT 위한 pool이다. 그리고 세번째 pool 192.168.2.0네트워크에 있는 개의 호스트의 load sharing 위한 것이다. 개의 호스트들은 각기 다른 호스트를 mirror하여 서로의 자원을 공유하고 있다.

이전의 예와 몇가지 다른 명령어들이 있는 것을 있다.

 

Router(config)# ip nat pool “pool name” “start inside IP address” “finish inside IP address” netmask “network mask” type rotary

 

명령에 의해 192.168.2.0네트 워크에 있는 실제 호스트를 위한 pool name net-2 정의되고 범위로는 실제 호스트의 주소가 속해있는 범위(가상의 주소가 아닌) 설정된다. 그 리고 마지막에는 “type rotary”라는 명령어가 추가되어 실제 호스트들의 round-robin load sharing 설정한다.

다음의 새로운 access-list 실제로 존재하지 않는 가상 호스트로 접근할 있는 대상을 정의하기 위해 필요하다.

 

Router(config)# access-list “unique access list number” permit “virtual host IP address” “virtual hosts IP network mask”

 


 

 
 

따라서 access-list 번호는 2번이고 정의된 가상 호스트의 주소는 192.168.2.254 / 255.255.255.255 된다. 다음에는 새로운 pool 이용하여 실제 호스트를 가상의 호스트로 정의하기 위한 다음의 명령이 필요하다.

 

Router(config)# ip nat inside destination list “unique access list number” pool “pool name”

 

앞의 예에서는 access-list 2번에 pool net-2 설정하였다. 외부의 호스트가 192.168.2.254 통신을 하려고 시도할 경우 NAT라우터는 round-robin방식을 이용하여 개의 호스트 하나를 192.168.2.254라는 주소로 매핑하여 연결을 설정할 것이다.

 

NAT Monitoring Debugging

 

NAT라우터에 NAT 특정 기능이 설정되면 NAT라우터의 정상 동작을 유지하기 위하여 NAT테 이블을 확인하고 reset 있는 방법이 필요하다. 또 한 troubleshooting시에 NAT 동작에 필요한 정보를 얻기 위한 명령어가 필요한데 다음과 같다.

 

Router# show ip nat statistical

그리고

Router# show ip nat translations

 

명령어들은 <그림 10> 같은 내용을 보여 준다. Statistical monitor NAT 관련된 여러

 


 

<그림 10> NAT Table Monitoring

 


 

가지 다양한 정보들을 제공한다. 그리고 Translation monitor 현재 매핑되고 있는 NAT테이블의 내용을 보여준다.

 

Clear NAT Table Feature

 

NAT 상태 정보를 초기화 하기 위해서는 다음 의 명령을 이용한다.

 

Router# clear ip nat statistics

 

같은 방법으로 NAT테이블의 내용을 삭제 하는 것도 가능하다.

 

Router# clear ip nat translations *

 

명령에 의해 NAT테이블의 모 든 내용이 삭제된다. 특정한 내용만 을 지우고 싶을 때는 다음의 명령들을 이용한다.

 

Router# clear ip nat translations inside “local-ip” “global-ip”

Router# clear ip nat translations outside “local-ip” “global-ip”

Router# clear ip nat translations inside “local-ip” “global-ip” outside “local-ip” “global-ip”

Router# clear ip nat translations udp “local-ip” “global-ip”

Router# clear ip nat translations tcp “local-ip” “global-ip”

 

결론

 

Network Address Translation(NAT) IP주소의 부족 문제와 복잡한 네트워크 환경에서의 라우팅 문제를 해결해 있는 매우 유용한 방법이다. 기업 네트워크에서는 공인 어드레스 를 절약할 수도 있고 또한 기업 전체의 주소를 변경 하지 않고도 ISP vendor 변경할 수도 있다. 또한 load sharing 같은 부가적인 기능을 제공하므로 네트워킹의 많 은 문제들에 대한 적절한 해결책이 있다.

 

<참 고 자료>

 

Cisco Systems, Inc. “Network Address Translation(NAT)” by Clark Milner(cmilner@cisco.com)