NAT의 종류 - advanced

지난번 글(link)에서 NAT의 종류에 대해서 살펴봤습니다. 이번에는 좀 더 프로그래머에 친숙하게 규칙이 있는 구분을 해보도록 하겠습니다.

규칙에는 크게 Mapping과 Filtering이 있습니다.

  • Mapping은 outbound 패킷을 처리하는 과정으로, NAT 내부의 endpoint에서 출발하여 NAT 외부의 endpoint로 패킷에 전달되는 과정을 처리하는 부분입니다.
  • Filtering은 inbound 패킷을 처리하는 과정으로, NAT 외부의 endpoint에서 출발하여 NAT 내부의 endpoint로 패킷이 전달되는 과정을 처리하는 부분입니다.

설명에 필요한 용어들을 정의하겠습니다.

  • 내부 주소 : NAT 내부의 endpoint의 주소입니다. 보통 공유기 내부의 주소인 192.x.x.x 등을 의미합니다.
  • 내부 포트 : 마찬가지로 NAT 내부의 endpoint의 포트입니다.
  • 외부 주소 : NAT 내부의 endpoint가 NAT를 거쳐서 변환된 주소입니다. 보통 공유기에 할당된 공인 아이피를 의미합니다.
  • 외부 포트 : 마찬가지로 NAT 내부의 endpoint가 NAT를 거쳐서 변환된 포트를 의미합니다.

그리고 설명에 표기되는 예제 주소는 [ip address]:[port]로 표시하도록 하겠습니다.

각각의 과정들에 대해서 자세히 살펴보겠습니다.

Mapping

NAT가 mapping하는 규칙은 크게 3가지로 구분 됩니다.

  • Endpoint-Independent Mapping
  • Address-Dependent Mapping
  • Address and Port-Dependent Mapping

Endpoint-Independent Mapping

여기서 Endpoint는 NAT 외부에 있는 목적지를 의미합니다. 즉, 목적지에 무관한 mapping 규칙을 말합니다.

내부 주소 NAT 변환 주소 목적지 주소
1.1.1.1:5000 2.2.2.2:1000 5.5.5.5:80
1.1.1.1:5000 2.2.2.2:1000 5.5.5.5:8080
1.1.1.1:5000 2.2.2.2:1000 6.6.6.6:80
1.1.1.1:5000 2.2.2.2:1000 6.6.6.6:8080
1.1.1.1:6000 2.2.2.2:2000 5.5.5.5:80

내부 주소가 1.1.1.1:5000일 경우에는 어디로 내보내더라도 모두 2.2.2.2:1000으로 mapping합니다.

Address-Dependent Mapping

여기서 Address는 NAT 외부에 있는 목적지 주소를 의미합니다. 즉, 목적지 주소에 따라서 mapping하는 규칙을 말합니다.

내부 주소 NAT 변환 주소 목적지 주소
1.1.1.1:5000 2.2.2.2:1000 5.5.5.5:80
1.1.1.1:5000 2.2.2.2:1000 5.5.5.5:8080
1.1.1.1:5000 2.2.2.2:1100 6.6.6.6:80
1.1.1.1:5000 2.2.2.2:1100 6.6.6.6:8080
1.1.1.1:6000 2.2.2.2:2000 5.5.5.5:80

목적지 주소가 5.5.5.5일 경우에만 내부 주소가 1.1.1.1:5000는 목적지 포트와 무관하게 2.2.2.2:1000으로 mapping하고, 목적지 주소가 달라지면 다른 port를 mapping합니다.

Address and Port-Dependent Mapping

여기서 AddressPort는 NAT 외부에 있는 목적지 주소 및 포트를 의미합니다. 즉, 목적지의 주소와 포트에 따라서 mapping하는 규칙을 말합니다.

내부 주소 NAT 변환 주소 목적지 주소
1.1.1.1:5000 2.2.2.2:1000 5.5.5.5:80
1.1.1.1:5000 2.2.2.2:1100 5.5.5.5:8080
1.1.1.1:5000 2.2.2.2:1200 6.6.6.6:80
1.1.1.1:5000 2.2.2.2:1300 6.6.6.6:8080
1.1.1.1:6000 2.2.2.2:2000 5.5.5.5:80

목적지 주소가 5.5.5.5이고, 목적지 포트가 80일 경우에만 1.1.1.1:5000을 2.2.2.2:1000으로 mapping하고, 목적지 주소 혹은 목적지 포트가 달라지면 다른 port를 mapping합니다.

Filtering

Mapping과 마찬가지로 NAT가 filtering하는 규칙은 크게 3가지로 구분 됩니다. Filtering 규칙은 mapping 규칙과 매우 유사하므로 이해하기 쉽습니다.

  • Endpoint-Independent Filtering
  • Address-Dependent Filtering
  • Address and Port-Dependent Filtering

먼저 내부 주소 1.1.1.1:5000에서 NAT 외부에 있는 서버 5.5.5.5:80으로 request를 보냈을 때, NAT가 2.2.2.2:1000으로 mapping했다고 가정합니다.

Mapping에서와는 다르게 출발지 주소는 NAT 외부에 있는 서버의 주소이고, 목적지 주소는 NAT의 외부 주소 및 포트를 의미합니다. NAT 변환 주소는 NAT가 inbound 패킷에 대해서 내부의 endpoint로 전달하기 위해서 변환된 주소입니다.

Endpoint-Independent Filtering

여기서 Endpoint는 NAT 외부에 있는 목적지를 의미합니다. 즉, 목적지에 무관한 filtering 규칙을 말합니다.

출발지 주소 목적지 주소 NAT 변환 주소
5.5.5.5:80 2.2.2.2:1000 1.1.1.1:5000
5.5.5.5:8080 2.2.2.2:1000 1.1.1.1:5000
6.6.6.6:80 2.2.2.2:1000 1.1.1.1:5000
6.6.6.6:8080 2.2.2.2:1000 1.1.1.1:5000

출발지의 주소, 포트와 무관하게 최초에 mapping된 2.2.2.2:1000으로 들어온 패킷은 1.1.1.1:5000으로 filtering합니다.

Address-Dependent Filtering

여기서 Address는 NAT 외부에 있는 목적지 주소를 의미합니다. 즉, 목적지 주소에 따라서 filtering 규칙을 말합니다.

출발지 주소 목적지 주소 NAT 변환 주소
5.5.5.5:80 2.2.2.2:1000 1.1.1.1:5000
5.5.5.5:8080 2.2.2.2:1000 1.1.1.1:5000
6.6.6.6:80 2.2.2.2:1000 X
6.6.6.6:8080 2.2.2.2:1000 X

최초 mapping됐을 때 서버의 주소인 5.5.5.5에서 2.2.2.2:1000으로 들어온 패킷만 1.1.1.1:5000으로 filtering합니다.

Address and Port-Dependent Filtering

여기서 AddressPort는 NAT 외부에 있는 목적지 주소 및 포트를 의미합니다. 즉, 목적지의 주소와 포트에 따라서 filtering 하는 규칙을 말합니다.

출발지 주소 목적지 주소 NAT 변환 주소
5.5.5.5:80 2.2.2.2:1000 1.1.1.1:5000
5.5.5.5:8080 2.2.2.2:1000 X
6.6.6.6:80 2.2.2.2:1000 X
6.6.6.6:8080 2.2.2.2:1000 X

최초 mapping됐을 때 서버 주소 및 포트인 5.5.5.5:80에서 2.2.2.2:1000으로 들어온 패킷은 1.1.1.1:5000으로 filtering합니다.

Full Cone, Restricted Cone, Port Restricted Cone, Symmetric

지난 글에서 다루었던 NAT 종류와 이번에 다루었던 NAT 규칙을 정리하면 아래의 표와 같이 됩니다.

Endpoint-Independent Mapping Address-Dependent Mapping Address and Port-Dependent Mapping
Endpoint-Independent Filtering Full Cone
Address-Dependent Filtering Restricted Cone
Address and Port-Dependent Filtering Port Restricted Cone Symmetric