1. NAT 개념 NAT(Network Address Translation) 란내부네트워크에서외부로나가는패킷들의주소를외부네트워크주소로변환하고또한, 그패킷에대한응답패킷의목적지주소를다시패킷이발송된내부네트워크주소로변환하여주는기능입니다. 일반적으로 NAT 기능을사용하게되면네트워크외부로나가거나들어오는각요구들이모두주소변환과정을거치기때문에보안을확실하게하는데도움이됩니다. 또한요청들을제한하거나인증하는등의추가적인보안을제공할수있습니다. 내부네트워크에서필요한만큼의공인 IP 주소가없는경우에도모든 PC등에서외부네트워크 ( 인터넷 ) 에접속이가능하도록하여줍니다. 2. 각 NAT 별개념정리 < Static NAT > ( 외부 IP Address) : ( 내부 IP Address) 1 : 1 ( 외부 <-> 내부 ) 내부 IP 주소하나에외부 IP 주소하나를할당하는 1:1 방식의주소변환입니다. < Dynamic NAT > ( 외부 IP Address) : ( 내부 IP Address) m : n ( 단, m > n 인경우가일반적 ) ( 내부 -> 외부 ) Dynamic NAT는주로외부 IP 보다내부네트워크의실제 Host 수가적을경우, 또는모든내부 IP 주소를일일이외부용 IP 주소로고정적으로할당할필요가없을경우에사용합니다. 입력된외부네트워크사용을위한 IP 주소들은 Pool 방식으로설정됩니다. 또한, 하나의실재하는내부 IP 주소에, Pool에있는하나의외부네트워크 IP 주소가한번할당
되면해당내부 IP 주소로부터발생하는모든 Session들은이미할당된외부용 IP 주소를통해통신합니다. 만약, 이러한방식으로 Pool에할당된외부 IP 주소가모두사용되고있을때, 다른내부 IP 주소가추가할당을요청하지만, 이미외부용 IP Pool에는더이상할당해줄수있는외부용 IP가없기때문에외부로의접근이불가능합니다. 이러한경우에도외부로의접근이가능하도록하려면 PAT 기능을설정해야합니다. PAT 기능이활성화되어있다면자동으로 PAT방식으로외부에접속할수있도록하여줍니다. < PAT > ( 외부 IP Address) : ( 내부 IP Address) h : n ( 일반적으로 h < n, 내부의 IP 주소가같은외부주소 IP로변환, Port를바꾸어가면서변환.) ( 내부 -> 외부 ) PAT는하나또는하나이상의외부용 IP 주소를여러개의내부 IP 주소들이공유할경우에사용되며, 이같은경우같은외부용 IP 주소로변환이되지만 Port를바꾸어가면서변환하여주는방식입니다. Static NAT나 Dynamic NAT로변환하도록설정되지않은내부 IP 주소들, 또는 Dynamic NAT에설정은되어있으나외부용 IP 주소 Pool이고갈되어더이상할당받을수없는주소들은 PAT 변환적용을받습니다. NXG 제품군에서제공되는 PAT는 PAT Pool을이용한 PAT 적용방식과 Masking 값을이용한 Source별적용방식이있습니다. PAT Pool을이용한 PAT 적용방식 : 외부용 IP 주소를한개이상등록한후내부 IP가 Static NAT나 Dynamic NAT의적용을받지못했을때등록해놓은외부용 IP 주소의임의 Port 번호를사용하여서주소변환을수행합니다. 이때처음선택된외부용 IP주소의 Port 번호가모두사용중인경우 (NXG 제품군은빈 Port를찾기위해 20번 Retry를수행합니다.) 등록된다른외부용 IP 주소를상대로동일한동작을다시수행합니다. Masking 값을이용한 Source 별 PAT 적용방식 : PAT Pool 을이용한 PAT
적용을 Mask 값을달리하여복수개등록함으로써내부의서로다른여러개 의네트워크마다서로다른 PAT Pool 을이용한주소변환을수행할수있습 니다. < LSNAT > ( 외부 IP Address) : ( 내부 IP Address) 1 : n ( 내부 <- 외부 ) LSNAT(Load Sharing NAT) 는 Distributed NAT라고도하는데, 하나의외부 IP주소를복수개의내부 IP 주소에대응시켜, 외부망에서해당 IP 주소를목적지로하는모든세션을할당된각내부의 IP 주소로분산변환합니다. 이방식은하나의 IP 주소에많은요청이들어올겨우그부하를분산하여수행속도가저하되지않게하는것이주요목적입니다. 3. 테스트환경구성도 <Static NAT 테스트환경 >
<Dynamic NAT 테스트환경 > <PAT 테스트환경 >
<LSNAT 테스트환경 > 4. 테스트환경구성 기본적인테스트환경을구성할때에는 3. 테스트환경구성도 를참고하시면됩니 다. 만약 NAT 에대해서잘모르신다면운영자매뉴얼등의문서를참고하십시오. 5. NAT 테스트시에알아야할점. 다음의명령어들은 NXG 에콘솔접속후상태확인을할때사용합니다. 이외에도다양 한명령어형식이있습니다. 이를확인하려면 nat 만입력하시면사용하실수있는명 령어형식이나타납니다. Dynamic NAT 의환경설정을확인하는명령어 i. nat show dynamic
<nat show dynamic 의실행예 > PAT 에관련하여서환경설정을확인하는명령어 i. nat show pat ( 현재 PAT 설정확인 ) ii. nat show inuse-pat ( 현재사용하고있는 PAT 의포트번호및정보확인 명령 )
iii. nat show pat-except ( 현재설정된 PAT 제외리스트를확인하는명령 ) tcpdump 명령어정리 옵션들
-a : Network & Broadcast 주소들을이름들로바꾼다. -c Number : 제시된수의패킷을받은후종료한다. -d : comile된 packet-matching code를사람이읽을수있도록바꾸어표준출력으로출력하고, 종료한다. -dd : packet-matching code를 C program의일부로출력한다. -ddd : packet-matching code를숫자로출력한다. -e : 출력되는각각의행에대해서 link-level 헤더를출력한다. -f : 외부의 internet address를가급적심볼로출력한다 (Sun의 yp server와의사용은가급적피하자 ). -F file : filter 표현의입력으로파일을받아들인다. 커맨드라인에주어진추가의표현들은모두무시된다. -i device : 어느인터페이스를경유하는패킷들을잡을지지정한다. 지저되지않으면시스템의인터페이스리스트를뒤져서가장낮은번호를가진인터페이스를선택한다 ( 이때 loopback은제외된다 ). -l : 표준출력으로나가는데이터들을 line buffering한다. 다른프로그램에서 tcpdump로부터데이터를받고자할때, 유용하다. -n : 모든주소들을번역하지않는다 (port,host address 등등 ) -N : 호스트이름을출력할때, 도메인을찍지않는다. -O : packet-matching code optimizer를실행하지않는다. 이옵션은 optimizer에있는버그를찾을때나쓰인다. -p : 인터페이스를 promiscuous mode로두지않는다. -q : 프로토콜에대한정보를덜출력한다. 따라서출력되는라인이좀더짧아진다. -r file : 패킷들을 '-w' 옵션으로만들어진파일로부터읽어들인다. 파일에 "-" 가사용되면표준입력을통해서받아들인다. -s length: 패킷들로부터추출하는샘플을 default값인 68Byte외의값으로설정할때사용한다 (SunOS의 NIT에서는최소가 96Byte이다 ). 68Byte는 IP,ICMP, TCP, UDP등에적절한값이지만 Name Server나 NFS 패킷들의경우에는프로토콜의정보들을 Truncation할우려가있다. 이옵션을수정할때는신중해야만한다. 이유는샘플사이즈를크게잡으면곧패킷하나하나를처리하는데시간이더걸릴뿐만아니라패킷버퍼의사이즈도자연히작아지게되어손실되는패킷들이발생할수있기때문이다. 또, 작게잡으면그만큼의정보를잃게되는것이다. 따라서가급적캡춰하고자하는프로토콜의헤더사이즈에가깝게잡아주어야한다. -T type : 조건식에의해선택된패킷들을명시된형식으로표시한다. type에는다음과같은것들이올수있다. rpc(remote Procedure Call), rtp(real-time Applications protocol), rtcp(real-time Application control protocal), vat(visual
Audio Tool), wb(distributed White Board) -S : TCP sequence번호를상대적인번호가아닌절대적인번호로출력한다. -t : 출력되는각각의라인에시간을출력하지않는다. -tt : 출력되는각각의라인에형식이없는시간들을출력한다. -v : 좀더많은정보들을출력한다. -vv : '-v' 보다좀더많은정보들을출력한다. -w : 캡춰한패킷들을분석해서출력하는대신에그대로파일에저장한다. -x : 각각의패킷을헥사코드로출력한다. 조건식 (expression) 옵션의제일마지막인조건식은어떤패킷들을출력할지를선택하는데쓰인다. 조건식이주어지지않는다면모든패킷들이그대상이될것이다. 일단주어지면, 아무리패킷들이많아도조건식에부합하는패킷만을출력한다. 조건식들은하나또는몇개의 primitive 들로구성되어있다. primitive 들은보통하나혹은몇개의 qualifier 들다음에오는하나의값으로이루어진다. Qualifier 들은모두 3 종류이며다음과같다. type : 주어진값의종류가무엇인지를나타낸다. 가능한 type들은 'host', 'net', 'port' 가있다. type이없는값들은 type을 host라가정한다. dir : id로부터의어떤특정한전송방향을나타낸다. 가능한방향은 'src', 'dst', 'src or dst', 'src and dst' 이다. 만약방향이정해지지않았다면, src or dst라가정한다. "For `null' link layers (i.e. point to point protocols such as slip) the inb ound and out bound qualifiers can be used to specify a desired direction." proto : 매칭을특정프로토콜에한해서수행한다. 가능한프로토콜들은 ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp, udp이다. 만약프로토콜이명시되지않았다면, 해당하는값의 type에관련된모든프로토콜들이그대상이된다. 이밖에도위의패턴을따르지않는 Primitive 들이존재한다 (gateway, broadcst, less, greater, 산술식 ). 좀더정교한조건식들을사용하려면, 'and(&&)', 'or( )', 'not(!)' 들을사용하여여러 primitive 들을연결하면된다. 같은표현들은생략될수있다. 사용가능한 Primitive 들
dst host HOST packet의 IP destination 항목이 HOST일때참이된다. src host HOST packet의 IP source 항목이 HOST일때참이된다. host HOST IP source, IP destination 항목중어느하나라도 HOST이면참이다. ether dst ehost ethernet destination 주소가 ehost일때참이다. ether src ehost ethernet source 주소가 ehost일때참이다. ether host ehost ethernet source, destination 항목들중어느하나라도 ehost이면참이다. gateway host 패킷이 host를게이트웨이로사용하면참이다. 이말의의미는 ethernet sour ce나 destination 항목은 host이지만, IP source와 destination은 host가아닐때를말한다. dst net NET 패킷의 IP destination 주소가 NET의 network number를가지고있을때참이다. src net NET 패킷의 IP source 주소가 NET의 network number를가지고있을때참이다. net NET 패킷의 IP source 주소혹은 destination 주소가 NET의 network number를가지고있을때참이다. net netmask mask IP 어드레스가지정된 netmask를통해서 net과매칭되면참이다. net net/len IP 어드레스가 netmask와 len 비트만큼매치되면참이다. dst port PORT 패킷이 ip/tcp, ip/udp 프로토콜의패킷이고 destination port의값이 PORT일때참이다. port는 /etc/services에명시된이름일수도있고그냥숫자일수도있다. 만약이름이사용됐다면 port 번호와프로토콜이같이체크될것이다. 만약숫자나불확실한이름이사용됐을경우에는 port 번호만이체크될것이다. src port PORT 패킷의 source port의값으로 PORT를가지면참이다. port PORT 패킷의 source, destination port 중에하나라도 PORT이면참이다.
less length 패킷이 length보다짧거나같으면참이다.(len <= length) greater length 패킷이 length보다짧거나같으면참이다.(len >= length) ip proto protocol 패킷이지정된종류의프로토콜의 ip패킷이면참이다. Protocol은 icmp, igrp, udp, nd, tcp 중의하나혹은몇개가될수있다. 주의할점은 tcp, udp, icmp들은 ' ' 로 escape되어야한다. ehter broadcast 패킷이 ethernet broadcast 패킷이라면참이다. ehter는생략가능하다. ip broadcast 패킷이 IP broadcast 패킷이라면참이다. ether multicast 패킷이 IP multicast 패킷이라면참이다. ether proto protocol 패킷이 ether type의 protocol이라면참이다. protocol은 ip, arp, rarp 중에하나혹은몇개가될수있다. ip proto protocol에서와마찬가지로 ip, arp, rarp는 escape 되어야한다. decnet src host 만약 DECNET의 source address가 host이면참이다. 이어드레스는 '10.123' 이나 DECNET의 host name일수있다. DECNET host name은 DECNET에서돌아가도록설정된 Ultrix 시스템에서만사용가능하다. decnet dst host DECNET destination address가 host이면참이다. decnet host HOST DECNET source, destination address중의하나라도 HOST이면참이다. ip, arp, rarp, decnet ether proto [ip arp rarp decnet] 의약어 lat, moprc, mopdl ether proto [lat moprc mopdl] 의약어 tcp, udp, icmp ip proto [tcp udp icmp] 의약어 expr relop expr o EXPR proto [expr:size] 의형식을띤다. proto, expr, size에올수있는것들은다음과같다.
proto : ether, fddi, ip, arp, rarp, tcp, udp, icmp expr : indicate Byte offset of packet of proto size : optional. indicate the size of bytes in field of interest default is one, and can be two or four o RELOP!=, =, <=, >=, etc. 이조건식을사용하기위해서는먼저해당하는 Protocol(proto) 의헤더에관련된것들을자세히알아야만한다. proto에는대상이될프로토콜을지정한다. expr에는프로토콜헤더의처음부터의 Byte Offset을지정하는식이들어가게된다. Size는 Option이며지정이안되어있을경우에는자동으로 1byte를지칭한다. 따라서이조건식을사용하게되면헤더에포함된정보를 Bitmask를사용하여직접원하는패킷인지를가려낼수있기때문에, 보다정밀한사용이가능하게된다. 또한 tcpdump를사용할때알아야할점으로는 tcpdump 결과를보면항상 NAT 처리이후의주소가보이는데그이유는 tcpdump process가 NAT process 이후에서동작하기때문입니다. 즉 Packet이나갈때는변환된 NAT 주소로보이지만들어올때는원래 IP로보입니다. PING 명령어를사용하여서테스트시에외부인터넷망으로 Ping 명령을보내는것과 N 테스트하는 NXG의외부망에연결된 PC( 단, 외부인터넷망의서버가아닌 ) 로보내는것을병행해야한다. 그이유는우리회사의네트워크망앞쪽에도방화벽이설치되어있기때문에그영향을받을수가있다는것을고려해야하기때문이다. 6.