포트 포워딩, NAT, IP Masquerade…
이들은 내부(사설) 주소를 외부(공인) 주소로 바꾸어준다는 개념 또는 기능들 입니다. 다만 얼핏보면 다 똑같은 개념들을 왜 굳이 다른 용어로 설명하는 건가 싶기도 합니다.
(실제로 검색해보면 적지않은 곳에서 개념을 혼용해서 씁니다)
하지만 알아보면 각각은 분명하게 다른 개념들입니다.
NAT
NAT(Network Address Translation)은 패킷의 IP header에 있는 주소를 수정하여 기존 IP 주소에서 다른 IP 주소로 Mapping 하는 기법의 총칭입니다. NAT는 NAT table이라는 테이블로 변환해야 할 주소들을 관리하고 있습니다.
NAT는 사설 주소 → 공인 주소 로의 변환이 제일 일반적이지만, 변환에 대한 다른 제약은 없기 때문에 사설 → 사설, 공인 → 공인 등으로의 변환도 가능합니다.
NAT의 장점은 여러 사설 IP 주소를 하나의 공인 IP 주소로 Mapping 함으로써 각 호스트마다 공인 IP 주소를 할당할 필요가 없다는 것입니다. 따라서 공인 IP 주소를 절약할 수 있습니다.
또한 IP 주소 변환을 통해서 내부 사설망을 보호하고, 경우에 따라서는 호스트의 부하를 분산 시킬수 있는 로드 밸런싱이 가능합니다.
하지만 패킷을 변환시키고 그 과정에서 체크섬도 다시 계산하기 때문에 복잡성을 증가시켜서 네트워크 성능에 영향을 줄 수 있고, FTP, SIP 등의 프로토콜에서는 사용할 수 없습니다.
NAT 연결 방법에 따른 분류
Basic NAT
주소와 주소가 1:1로 Mapping 되는 방식으로, 내부 네트워크에 있는 호스트가 외부 네트워크에 있는 또 다른 호스트에 연결할려고 할 때 처럼, 연결되지 않는 두 개의 네트워크를 상호 연결 하는 데 사용됩니다.
1:N NAT
하나의 주소에 여러 주소를 할당하여 1:N으로 Mapping 되는 방식입니다. 제일 흔히 쓰이는 방식으로 공유기같이 내부 네트워크에 있는 여러 호스트들에 하나의 외부 네트워크 IP를 할당하는 것이 그 예 입니다.
Dynamic NAT
내부 네트워크 IP 그룹과 외부 네트워크 IP 그룹끼리 매칭시켜 Mapping 되는 방식으로, N:M NAT라고도 합니다. 외부 네트워크 IP가 적을 때 사용되며, 1:1 방식이 아니기 때문에 일반적으로 주소 Mapping이 고정적이지 않습니다. 따라서 먼저 외부에서 내부로는 접근할 수 없고, 내부에서 외부로의 통신만 가능합니다.
NAT의 문제점
1:1로 Mapping되는 Basic NAT에서는 문제가 없지만, 여러 내부 IP가 하나의 외부 IP로 Mapping되는 경우에는 외부에서 내부로 데이터를 받을 때 문제가 생깁니다.
가령, 내부 호스트 A,B가 하나의 외부 IP로 Mapping 되어있다고 합시다. 이 두 호스트가 동시에 외부 호스트 C와 통신을 하려고 한다면, 외부 호스트 C는 하나의 외부 IP로 두 개의 패킷을 받는 셈이 되기 때문에 내부 호스트 A,B를 구분할 수 없습니다.
따라서 외부 호스트 C는 각 패킷에 대해서 어디에 답신을 보내야 할 지 모르는 상태 @가 됩니다.
NAPT
NAPT(Network Address Port Translation)은 NAT에 포트 정보를 추가한 개념으로, 각각의 내부 호스트에 독립적인 포트 번호를 부여하여 하나의 외부 IP 주소로 전송해도 포트 번호로 호스트를 구별할 수 있게 도와줍니다.
좀 더 자세히 말하자면, (내부 ip:내부 port = 외부 ip:외부 port) 형식의 정보들을 테이블로 관리하여 내부 호스트에서 외부 네트워크로 통신하고자 하면 테이블에서 해당되는 호스트의 정보를 찾아서 패킷을 그에 맞게 변환시켜 줍니다.
기본적으로는 Dynamic NAT처럼 포트가 유동적으로 할당되며, 따라서 외부에서 내부로는 접근 할 수 없습니다.
Port Forwarding
포트 포워딩은 이 개념에서 포트를 고정하여 외부에서 내부로 접속이 가능하게끔 도와주는 개념입니다. 포트를 고정하기 때문에 현재 사용하고 있는 포트에 대해서는 사용할 수 없으며, (내부 ip:내부 port = 외부 ip:외부 port) 형식의 Mapping 정보가 필요합니다.
IP 주소 수정에 따른 NAT 분류
Source NAT
패킷의 출발지(Source) IP 주소를 변경하는 것으로, 출발지의 IP 주소를 숨기기 때문에 IP 위장, 즉, IP Masquerading이라고도 합니다.
LInux의 IP Masquerade가 이것을 구현한 것이고, 공유기 등에서 거의 필수적으로 존재하는 기능입니다.
Destination NAT
패킷의 목적지(Destination) IP 주소를 변경하는 것으로, 변경하는 주요 목적은 데이터 부하를 분산시키기거나 내부 네트워크를 보호하기 위해서입니다.
주로 방화벽이나 로드 밸런서에 이 기능을 포함하고 있습니다.
출처
nat
ip masquerade
혹시 잘못된 부분이 있다면 댓글로 지적 부탁드립니다!