NAT (Network Address Translation)

여러분들이 사용하는 인터넷에는 고유의 주소가 있습니다. 우리는 이 주소를 IP 주소라 합니다. IP 주소는 유동적이고, PC마다 다르게 주어지며 우리는 이 IP 주소를 이용해 목적지를 찾고, 근원지를 갖게 됩니다.


네트워크가 발달된 지 어느 덧 몇 십년의 세월이 지났습니다. 과거에만 했어도 인터넷을 사용했던 사람들은 그다지 많지 않아 IP 주소의 고갈이라는 주제가 굉장히 낯설었습니다. 하지만 지금은 집집마다 PC를 한 대 이상 가지고 있고, 더 나아가 모바일 기기의 등장으로 IP를 필요로 하는 기기들은 점점 많아지기 시작했습니다.


이제는 Smartphone, Tablet PC, Laptop, Desktop 할 것없이 모두가 네트워크로 이루어지는 기기들 떄문에 IP 주소들은 점점 모잘라가고 있고, 그에 대비하여 새로운 IP 주소 대책인 IPv6의 기술이 등장하기도 했지만 아직까지 IPv6로 완전히 정착되지 못하는 현상이 발생하고 있습니다.


이러한 IP 주소의 고갈 문제를 해결을 위해 IPv6가 나오기 이전, IPv4에서 완화 시키려고 했던 방법이 있는데, 이를 우리는 NAT(Network Address Translation)이라 합니다.


NAT 기술은 우리가 접하는 네트워크라면, 어디든지 볼 수 있는 기술로, 흔히 여러분들이 구입하시고 사용하시는 유무선 공유기도 이 기술을 사용합니다. 이 기술은 내부 네트워크의 사설 IP를 외부로 나갈 떄 공인 IP로 바꾸어 나가는 기술을 말합니다.


옛날에는 가정에 두 대의 PC가 있으면 회선 1개 당 그 회선료를 부과하여 요금을 내야 했습니다. 하지만 공유기 내의 NAT 기술의 등장으로 1개의 회선으로 여러 개의 디바이스가 인터넷을 사용할 수 있어 지금은 회선료를 배로 부과해서 쓰지 않고 있지요.


본론으로 넘어가서, NAT 기술은 자신이 현재 임대하고 있는 1 회선을 이용해 여러 디바이스들이 임대 받은 한 개의 IP로 인터넷을 할 수 있도록 해줍니다. 위의 사진은 공인 IP를 임대 받은 하나의 회선으로 3대의 PC가 사용하고 있는 모습을 보여주고 있습니다.


예를 들어서 COM1 PC가 DAUMKAKAO 홈페이지에 접속하려고 합니다. COM1 PC의 IP 주소는 192.168.1.150 번입니다. 이 떄, 다음카카오에서는 COM1 PC를 210.158.63.128 번으로 인식합니다. 여기서 192.168.1.150 번 IP를 사설 IP, 210.158.63.128 번 IP를 공인 IP라 합니다.


반대로, 다음카카오에서 COM1 PC로 패킷을 전송할 때는, eth0 번의 IP인 210.158.63.128 번의 IP로 보내어, 데이터링크 층에서 해당 IP를 사용하고 있는 MAC 주소를 NAT 테이블에서 찾아내어 보냅니다.


여기까지가 NAT를 이용한 패킷 전송의 기본이었습니다.



NAT CHAIN

NAT에는 2개의 체인을 가지고 있습니다. 네트워크는 두 가지의 역할을 합니다. 바로, 발신과 수신인데요. 여기서 다루는 두 개의 체인도 여기에 속하는 것도 발신과 수신에 관련이 있습니다. 이에 따라 NAT CHAIN은 SNAT(Source NAT)와 DNAT(Destination NAT)로 나눕니다.


NAT CHAIN을 이해하려면, 위에 있는 그림을 정확하게 이해하셔야 합니다. 우리가 NAT CHAIN을 사용하는 이유는 DAUMKAKAO가 목적지인 COM1로 패킷을 정확하게 전달하기 위해 ROUTER에서 외부의 공인 IP를 내부의 사설 IP로 포워딩 해주기 위한 유일한 체인이기 때문입니다. 


NAT 체인에는 다음 두 가지로 나눕니다.


SNAT(Source NAT)

IP Packet에는 Header라고 하는 공간이 있는데, 이 부분에 Source IP(근원지 IP)와 Destination IP(목적지 IP)가 기재되어 있습니다. 라우터는 해당 헤더를 보고 목적지가 어디인지를 판단합니다. 여기서 목적지는 공인IP일 것이고, NAT 테이블에서 라우터는 어느 목적지로 가는 것인지를 판단합니다. SNAT는 해당 패킷의 목적지가 어느 사설 IP를 가리키는지의 역할을 합니다. 위에 있는 사진으로 예를 들자면, COM1 PC 192.168.1.150이 211.110.65.19에게 패킷을 전달해야 합니다. 하지만 COM1의 사설 IP가 그대로 보내지게 된다면, 엉뚱한 곳으로 통신을 하게 될 것입니다. 왜냐면, 해당 네트워크 구역에는 211.110.65.19에 해당하는 IP가 존재하지 않기 때문이죠. 그래서 SNAT를 이용하여 라우터가 지니고 있는 공인 IP로 변환하여 보내줍니다. 


DNAT(Destination NAT)

DNAT는 SNAT와 반대로 생각하시면 쉽습니다. DAUMKAKAO 서버 211.110.65.19가 COM1에게 받은 패킷에 대한 ACK를 보내려고 합니다. COM1에게 받았을 때, Source IP가 ROUTER의 공인 IP인 210.158.63.128이므로, DAUMKAKAO 서버에서도 ACK를 해당 IP로 보낼 것입니다. 하지만 공인 IP로 보내게 되면, 한 가지 갈림길이 생깁니다. 해당 라우터에 연결된 어떤 COM에 보내려는 것인지 알 수가 없습니다. DNAT는 라우터에서 받은 Destination IP address를 내부 네트워크의 IP로 포워딩 해주는 역할을 합니다.

comments powered by Disqus

Tistory Comments 0