본문 바로가기

네트워크

네트워크 기초 - NAT (Network Address Translation)

1. NAT

사설IP를 공인IP로 바꾸는 기술입니다.

이제 아시다시피, 공인IP는 엄청나게 모자랍니다. KT와 같은 ISP에서도 B클래스는 한손에 꼽을 정도로 적게 보유하고 있고, C클래스도 보유중인게 몇개 안된다고 알고 있습니다.

 

이 부족한 IP를 어떻게 써야 최대로 효율을 뽑아먹을수 있을까요? 사설IP를 사용했었죠?

왼쪽의 192.168.1.2가 68.1.31.1의 웹사이트에 들어가고 싶다고 생각해보겠습니다.

 

192.168.1.2는 다음과 같이 자신의 IP주소와 목적지의 IP주소, 웹사이트 엑세스 요청을 포함하는 패키지를 만들어서 보내게 됩니다.

//아래 표는 간단하게 요약한 것으로 사실 더 복잡하고 구체화되어있습니다.//

Source ip address Destination ip address Requests
192.168.1.2 68.1.31.1 요청

 

그런데 68.1.31.1은 웹사이트를 192.168.1.2에게 보내줄 수 없습니다. 192.168.1.2와 같은 사설IP가 어디있는지도 모르고, 사설IP를 사용하는 모든 대상에게 데이터를 보낼수는 없으니까요.

비유하자면 다짜고짜 지나가던 사람한테 홍길동에게 편지를 전해달라는 것과 같겠습니다. 홍길동이 어딨는데??? 홍길동이 많은데??? 어떤 홍길동???? 이런 상태인거죠.

Source ip address Destination ip address Responses
68.1.31.1 192.168.1.2(??????????) 응답

결과적으로 192.168.1.2는 응답을 받지못해 웹사이트에 접속하지 못하겠네요. 

 

다시 처음으로 돌아옵니다. NAT 라우터는 여기서 한가지 기능을 추가로 수행하게 됩니다.

192.168.1.2가 다시한번 패키지를 만들어 전송하면 NAT 라우터는 이 패키지에서 수신IP를 자신의 공인IP 주소로 바꾼 다음에, 192.168.1.2가 68.1.31.1로 접속하려 했다는것을 기억하고, (테이블 생성) 전달하게됩니다.

Source ip address Destination ip address Requests
192.168.1.2 -> 101.89.101.12 68.1.31.1 요청

 

- NAT 라우터가 보관하는 테이블

NAT Table
Private ip address Source ip address Destination ip address
192.168.1.2 101.89.101.12 68.1.31.1

 

다시 68.1.31.1은 웹사이트를 101.89.101.12로 보내면, 라우터는 테이블을 바탕으로 데이터를 192.168.1.2에게 보내줄 수 있게 되는것입니다.

Source ip address Destination ip address Responses
68.1.31.1 101.89.101.12 응답

 

 

종류

1. Static NAT (1:1)

공인 IP와 사설 IP가 1:1 매칭이 됩니다. 이 경우에는 IP주소의 절약 효과는 없습니다.

이 경우는 주로 사설IP 주소를 사용하는 서버가 여러가지 역할을 수행할 때 포트포워딩[각주:1]을 목적으로 사용합니다.

 

2. Dynamic NAT (1:N, N:N)

공인IP보다 사설IP의 갯수가 더 많을때 사용됩니다.

공인IP가 하나일 경우는 위에서 설명드린 방식과 동일하게 동작합니다.

공인IP가 여러개지만 호스트가 더 많을 경우에는 Global address Pool이라는 곳에 담겨있는 공인IP를 필요에 따라 사설 IP가 사용하고, 사용이 끝나면 반환하는 형식으로 동작합니다.

 

이 경우, 내부망과 외부망이 명확히 분리되면서 보안의 효과까지 기대할 수 있게 됩니다. 

따라서 내부망과 외부망 사이에 방화벽(Firewall)을 운영하여 외부 공격으로부터 내부를 지킬 수 있게 됩니다. NAT장비는 따라서 라우터일수도 있고, 방화벽 형태일수도 있습니다.

 

 

2. PAT (Port Address Translation), NPAT

위의 내용을 보고 천재라면 한가지 허점을 발견했을 수 있겠습니다.

192.168.1.1

192.168.1.2

192.168.1.3

세명이 각기 다른 서버에 접속한다면 문제될것이 없겠습니다.

NAT 라우터가 68.1.31.1에 접속한건 192.168.1.3이다.

8.8.8.8에 접속한건 192.168.1.2이다. 이런식으로 테이블을 보고 구분을 할 수 있을테니까요.

 

하지만 세명이 모두 같은 서버에 접속한다면 라우터는 받은 패킷을 테이블을 보고도 누구에게 전달해야할지 모르게 됩니다.

Source ip address Destination ip address Responses
68.1.31.1 101.89.101.12 (?) 응답
68.1.31.1 101.89.101.12 (?) 응답
68.1.31.1 101.89.101.12 (?) 응답
NAT Table
Private ip address Source ip address Destination ip address
192.168.1.1 101.89.101.12 68.1.31.1
192.168.1.2 101.89.101.12 68.1.31.1
192.168.1.3 101.89.101.12 68.1.31.1

 

그래서 추가적으로 IP 뒤에 포트번호까지 붙여 이 대상들을 구분하는것이 PAT입니다.

 

다시 이 그림과 표를 확인하며 PAT의 동작방식을 알아보겠습니다.

192.168.1.2:1253 은 라우터를 통해 패키지를 보내고

NAT 라우터는 Source ip address를 IP주소:포트 형태로 변경합니다. (101.89.101.12:8801)

호스트는 이제 응답을 101.89.101.12:8801로 보내게 됩니다.

NAT 라우터는 8801 포트에서 응답을 수신하면 192.168.1.2:1253 으로 전달할 곳을 확실하게 알 수 있게 됩니다.

 

이해를 돕기위해 이미지를 한장 더 가져왔습니다.

1. HTTP 요청이 80번 포트로 NAT 라우터에 도착합니다.

2. 라우터는 테이블을 확인하고 80번 포트로 온 패킷을 192.168.100.2:7575 로 전달합니다.

3. 정상적인 통신 가능.

 

 

3. 패킷 방향에 따른 NAT 종류 구분

1. SNAT (Source Network Address Translation)

내부에서 외부로 나가는 패킷의 출발지 IP주소를 변경하는 것. Source NAT, SNAT, IP 마스커레이드라고 함.

대표적으로 가정용 공유기 정도의 장비를 떠올리면 될 것 같습니다.

 

2. DNAT (Destination Network Address Translation)

외부에서 내부로 들어오는 패킷에 있는 목적지 IP주소를 변경하여 내부에 도달할 수 있게 하는 것.

대표적으로 방화벽, 로드밸런서의 장비가 있습니다.

 

3. Twice-NAT

출발지, 목적지 모두 주소가 바뀌는 방식으로 서로 다른 두 지점간에 연결을 위한 중간 네트워크 허브 구조를 이용할때 사용합니다.

 

4. 헤어핀 또는 NAT Loopback

접속하려는 목적지가 자기 자신일 경우에, 데이터를 내부에서 바로 전환해 주는 기술입니다.

DNS 웹 서버의 경우에 사용됩니다.


  1. 특정 포트(Port)를 포워딩(Forwarding) 해주는 작업. 외부 포트와 내부IP/포트를 묶어서 매핑하는 것. [본문으로]