앞에 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
<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
after
a FIN or RST
<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의 값은 같은데 이것은 외부에서 내부로 들어오는 패킷은 주소 전환이 되지 않기 때문이다.
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:5
10.1.1.6:0
171.69.8 9.94:0 171.69.89.94:5
icmp 171.69.89.25:2
10.1.1.1:2
171.69.89.94:2 171.69.89.94:2
<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
<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)
'IT인생_스크랩 > Network' 카테고리의 다른 글
show 명령어 정리 - CISCO (0) | 2010.06.24 |
---|---|
Cisco Switch Password Reset (0) | 2010.06.24 |
ip account와 cache flow를 이용한 라우터에서의 패킷 (0) | 2010.06.24 |
이더리얼 강좌 2 (0) | 2010.06.24 |
이더리얼을 활용한 패킷분석 1.탄생배경과 특징 (0) | 2010.06.24 |