네트워크 주소 변환

네트워크 주소 변환(, 줄여서 NAT)은 트래픽 라우팅 장치를 경유하는 동안 패킷의 IP 헤더에 있는 네트워크 주소 정보를 수정하여 하나의 주소 공간을 다른 주소 공간으로 매핑하는 방법이다. 이 기술은 초기에 네트워크를 이동하거나 업스트림 인터넷 서비스 제공자가 교체되었지만 네트워크의 주소 공간을 라우팅할 수 없을 때 모든 호스트에 새 주소를 할당할 필요성을 우회하기 위해 사용되었다. 이는 IPv4 주소 고갈에 직면하여 전역 주소 공간을 보존하는 데 널리 사용되는 필수 도구이다. NAT 게이트웨이의 인터넷 라우팅 가능한 하나의 IP 주소는 전체 사설망에 사용될 수 있다.

네트워크 주소 변환은 패킷의 IP 주소 정보를 수정하므로, NAT 구현은 다양한 주소 지정 사례에서 특정 동작과 네트워크 트래픽에 미치는 영향이 다를 수 있다. NAT 구현을 포함하는 장비 공급업체는 NAT 동작의 세부 사항을 일반적으로 문서화하지 않는다.

 역사 
인터넷 프로토콜 버전 4 (IPv4)는 32비트 주소를 사용하며, 네트워크에서 약 43억 개의 장치에 고유하게 주소를 지정할 수 있다. 1992년에 이 정도로는 충분하지 않다는 것이 명백해졌다. 1994년 은 NAT를 당시 인터넷 프로토콜이 직면한 두 가지 가장 시급한 문제인 IP 주소 고갈과 라우팅 확장성에 대한 "단기 솔루션"으로 설명한다. 2004년까지 NAT는 널리 퍼지게 되었다.

이 기술은 IP 마스커레이딩으로도 알려졌다. 이는 일반적으로 사설 IP 주소로 구성된 전체 IP 주소 공간을 다른 주소 공간(일반적으로 공용 주소 공간)의 단일 IP 주소 뒤에 숨기는 기술을 의미한다. IPv4 주소 공간을 보존하기 위한 이 기술의 인기로 인해 NAT라는 용어는 사실상 IP 마스커레이딩과 동의어가 되었다.

1996년에는 포트-주소 변환(PAT)이 도입되었으며, 이는 주소 변환에 포트 번호까지 포함하도록 확장했다.

 기본 NAT 
가장 간단한 유형의 NAT는 IP 주소의 일대일 변환을 제공한다(RFC 1631). 은 이러한 유형의 NAT를 기본 NAT 또는 일대일 NAT라고 부른다. 이 유형의 NAT에서는 IP 주소, IP 헤더 체크섬 및 IP 주소를 포함하는 모든 상위 수준 체크섬만 변경된다. 기본 NAT는 호환되지 않는 주소를 가진 두 IP 네트워크를 상호 연결하는 데 사용될 수 있다.

 일대다 NAT 
섬네일|네트워크 주소 매핑

대부분의 네트워크 주소 변환기는 여러 사설 호스트를 하나의 공개 노출 IP 주소에 매핑한다.

일반적인 구성에서 로컬 네트워크는 지정된 사설 IP 주소 서브넷(RFC 1918) 중 하나를 사용한다. 네트워크에는 사설 및 공용 네트워크 모두에 네트워크 인터페이스를 가진 라우터가 있다. 공용 주소는 일반적으로 인터넷 서비스 제공자에 의해 할당된다. 트래픽이 사설 네트워크에서 인터넷으로 전달될 때 NAT는 각 패킷의 소스 주소를 사설 주소에서 라우터의 공용 주소로 변환한다. NAT 기능은 각 활성 연결을 추적한다. 라우터가 인터넷에서 인바운드 트래픽을 수신하면 아웃바운드 단계에서 얻은 연결 추적 데이터를 사용하여 어떤 사설 주소로 응답을 전달해야 하는지 결정한다.

사설망에서 공용망으로 통과하는 패킷은 소스 주소가 수정되고, 공용망에서 사설망으로 되돌아오는 패킷은 목적지 주소가 수정된다. 응답이 변환되는 방식의 모호성을 피하기 위해 패킷에 대한 추가 수정이 필요하다. 인터넷 트래픽의 대부분은 전송 제어 프로토콜 (TCP) 또는 사용자 데이터그램 프로토콜 (UDP)을 사용한다. 이러한 프로토콜의 경우, 포트 번호가 변경되어 반환된 패킷에서 IP 주소(IP 헤더 내)와 포트 번호(전송 계층 헤더 내)의 조합이 해당 사설망 목적지에 명확하게 매핑될 수 있다. RFC 2663은 이러한 유형의 NAT를 네트워크 주소 및 포트 변환 (NAPT)이라는 용어를 사용한다. 다른 이름으로는 포트 주소 변환 (PAT), IP 마스커레이딩, NAT 오버로드, 일대다 NAT 등이 있다. 이것은 가장 일반적인 유형의 NAT이며 일반적인 사용에서 NAT라는 용어와 동의어가 되었다.

이 방법은 초기 발신 전송이 변환 테이블에 필요한 정보를 설정하므로, 대화가 사설망에서 시작될 때만 라우터를 통한 통신을 허용한다. 따라서 사설망 내의 웹 브라우저는 네트워크 외부의 웹사이트를 탐색할 수 있지만, 네트워크 외부의 웹 브라우저는 네트워크 내에 호스팅된 웹사이트를 탐색할 수 없다. TCP 및 UDP를 기반으로 하지 않는 프로토콜은 다른 변환 기술이 필요하다.

일대다 NAT의 주요 이점은 단일 공용 IP 주소를 사용하여 전체 네트워크를 인터넷에 연결할 수 있도록 함으로써 IPv4 주소 고갈을 완화하는 것이다.

 변환 방법  
네트워크 주소 및 포트 변환은 여러 가지 방법으로 구현될 수 있다. IP 주소 정보를 사용하는 일부 애플리케이션은 네트워크 주소 변환기의 외부 주소를 결정해야 할 수도 있다. 이 주소는 외부 네트워크의 통신 피어가 감지하는 주소이다. 또한 사용 중인 매핑 유형을 검사하고 분류해야 할 수도 있다. 예를 들어, 두 클라이언트가 모두 별도의 NAT 게이트웨이 뒤에 있을 때 직접 통신 경로를 설정하려는 경우이다.

이러한 목적으로, RFC 3489는 2003년에 UDP over NATs의 간단한 트래버설 프로토콜(STUN)을 지정했다. 이는 NAT 구현을 풀 콘 NAT, (주소) 제한 콘 NAT, 포트 제한 콘 NAT 또는 대칭 NAT로 분류하고, 장치를 이에 따라 테스트하기 위한 방법론을 제안했다. 그러나 이러한 절차는 많은 장치를 올바르게 평가하기에 부적절하므로 표준 상태에서 폐기되었다. RFC 5389는 2008년에 새로운 방법을 표준화했으며, STUN이라는 약어는 이제 사양의 새로운 제목인 NAT용 세션 트래버설 유틸리티를 나타낸다.

+ NAT 유형 엔드포인트 독립적 NAT, 풀 콘 NAT, 1:1/일대일 NAT, 또는 NAT 1
 내부 주소(iAddr:iPort)가 외부 주소(eAddr:ePort)에 매핑되면, iAddr:iPort에서 오는 모든 패킷은 eAddr:ePort를 통해 전송된다.
 모든 외부 호스트는 eAddr:ePort로 패킷을 전송하여 iAddr:iPort로 패킷을 전송할 수 있다. right|400px 주소 종속 NAT, 제한 콘 NAT, 또는 NAT 2
 내부 주소(iAddr:iPort)가 외부 주소(eAddr:ePort)에 매핑되면, iAddr:iPort에서 오는 모든 패킷은 eAddr:ePort를 통해 전송된다.
 외부 호스트(hAddr:any)는 iAddr:iPort가 이전에 hAddr:any로 패킷을 보낸 경우에만 eAddr:ePort로 패킷을 전송하여 iAddr:iPort로 패킷을 전송할 수 있다. 여기서 "any"는 포트 번호가 중요하지 않음을 의미한다. right|400px 주소 및 포트 종속 NAT, 포트 제한 콘 NAT, 또는 NAT 3
 내부 주소(iAddr:iPort)가 외부 주소(eAddr:ePort)에 매핑되면, iAddr:iPort에서 오는 모든 패킷은 eAddr:ePort를 통해 전송된다.
 외부 호스트(hAddr:hPort)는 iAddr:iPort가 이전에 hAddr:hPort로 패킷을 보낸 경우에만 eAddr:ePort로 패킷을 전송하여 iAddr:iPort로 패킷을 전송할 수 있다.
이는 주소 제한 콘 NAT와 유사하지만, 제한에 포트 번호가 포함된다. right|400px 주소 및 포트 종속 NAT, 대칭 NAT, 또는 NAT 4
 하나의 내부 IP 주소와 목적지 IP 주소 및 포트의 조합은 단일 고유 외부 소스 IP 주소 및 포트에 매핑된다. 동일한 내부 호스트가 동일한 소스 주소와 포트로 다른 목적지에 패킷을 보내더라도 다른 매핑이 사용된다.
 내부 호스트로부터 패킷을 받은 외부 호스트만 패킷을 다시 보낼 수 있다. right|400px

많은 NAT 구현이 여러 유형을 결합하므로, 콘/대칭 용어 대신 특정 개별 NAT 동작을 참조하는 것이 좋다. RFC 4787은 관찰된 동작에 대한 표준화된 용어를 도입하여 혼란을 완화하려고 한다. 위 표의 각 행에서 첫 번째 항목에 대해 RFC는 풀 콘, 제한 콘, 포트 제한 콘 NAT를 엔드포인트 독립적 매핑을 갖는 것으로 특징지으며, 대칭 NAT를 주소 및 포트 종속 매핑을 갖는 것으로 특징짓는다. 위 표의 각 행에서 두 번째 항목에 대해 RFC 4787은 풀 콘 NAT를 엔드포인트 독립적 필터링을 갖는 것으로, 제한 콘 NAT를 주소 종속 필터링을 갖는 것으로, 포트 제한 콘 NAT를 주소 및 포트 종속 필터링을 갖는 것으로, 대칭 NAT를 주소 종속 필터링 또는 주소 및 포트 종속 필터링을 갖는 것으로 분류한다. RFC에 언급된 NAT 동작의 다른 분류에는 포트를 보존하는지 여부, 매핑이 언제 어떻게 새로 고쳐지는지, 외부 매핑이 내부 호스트에 의해 사용될 수 있는지 여부(즉, 헤어피닝 동작), 그리고 이러한 모든 규칙을 적용할 때 NAT가 보이는 결정론의 수준이 포함된다. 특히 대부분의 NAT는 발신 연결을 위한 대칭 NAT와 정적 포트 포워딩을 결합하며, 외부 주소 및 포트로 주소 지정된 수신 패킷은 특정 내부 주소 및 포트로 리디렉션된다.

 NAT 매핑 vs NAT 필터링 

RFC 4787은 NAT 매핑과 NAT 필터링을 구분한다.

RFC의 섹션 4.1은 NAT 매핑을 다루고 외부 IP 주소 및 포트 번호를 내부 IP 주소 및 포트 번호로 변환하는 것을 명시한다. 이는 엔드포인트 독립 매핑, 주소 종속 매핑 및 주소 및 포트 종속 매핑을 정의하며, 이 세 가지 가능한 선택이 NAT의 보안과 관련이 없음을 설명한다. 보안은 필터링 동작에 의해 결정되기 때문이다. 그리고 "NAT는 '엔드포인트 독립 매핑' 동작을 가져야 한다"고 명시한다.

RFC의 섹션 5는 NAT 필터링을 다루고 NAT가 특정 외부 엔드포인트에서 발생하는 패킷을 필터링하는 데 사용하는 기준을 설명한다. 옵션은 엔드포인트 독립 필터링, 주소 종속 필터링 및 주소 및 포트 종속 필터링이다. 최대 애플리케이션 투명성이 요구될 때 엔드포인트 독립 필터링이 권장되며, 더 엄격한 필터링 동작이 가장 중요할 때 주소 종속 필터링이 권장된다.

일부 NAT 장치는 NAT 매핑과 필터링을 동일하게 처리하여 NAT 필터링 방법을 변경하는 구성 옵션이 NAT 매핑 방법도 변경하도록 하므로 RFC 4787을 준수하지 않는다(예: Netgate TNSR).

 NAT 유형 및 NAT 트래버설, TCP를 위한 포트 보존의 역할 
다른 NAT 뒤에 있는 피어들이 통신하려고 할 때 NAT 트래버설 문제가 발생한다. 이 문제를 해결하는 한 가지 방법은 포트 포워딩을 사용하는 것이다. 다른 방법은 다양한 NAT 트래버설 기술을 사용하는 것이다. TCP NAT 트래버설을 위한 가장 인기 있는 기술은 TCP 홀 펀칭이다.

TCP 홀 펀칭은 NAT가 TCP를 위한 포트 보존 설계를 따르도록 요구한다. 주어진 발신 TCP 통신에 대해 NAT의 양쪽에서 동일한 포트 번호가 사용된다. 발신 TCP 연결을 위한 NAT 포트 보존은 TCP NAT 트래버설에 매우 중요하다. 왜냐하면 TCP에서는 한 포트가 한 번에 하나의 통신에만 사용될 수 있기 때문이다. 각 TCP 통신에 대해 별개의 TCP 소켓을 임시 포트에 바인딩하는 프로그램은 TCP에 대한 NAT 포트 예측을 불가능하게 만든다.

반면에 UDP의 경우 NAT는 포트 보존이 필요하지 않다. 실제로 여러 UDP 통신(각각 고유한 통신 엔드포인트)이 동일한 소스 포트에서 발생할 수 있으며, 애플리케이션은 일반적으로 동일한 UDP 소켓을 재사용하여 다른 호스트로 패킷을 보낸다. 이는 각 패킷에 대해 동일한 소스 포트이므로 포트 예측을 간단하게 만든다.

또한, TCP를 위한 NAT의 포트 보존은 P2P 프로토콜이 더 적은 복잡성과 더 적은 지연 시간을 제공할 수 있도록 한다. 애플리케이션 자체가 NAT 포트를 이미 알고 있기 때문에 NAT 포트를 검색하기 위해 제3자(STUN과 같은)를 사용할 필요가 없기 때문이다.

그러나 두 개의 내부 호스트가 동일한 포트 번호를 사용하여 동일한 외부 호스트와 통신하려고 시도하면 NAT는 두 번째 연결에 다른 외부 IP 주소를 사용하려고 시도하거나 포트 보존을 포기하고 포트를 다시 매핑해야 할 수 있다., P2P 네트워크의 클라이언트 약 70%가 어떤 형태의 NAT를 사용했다.

 구현 

 양방향 통신 설정 
섬네일|양방향 NAT에서는 내부 및 외부 영역 모두에서 세션을 설정할 수 있다.
모든 TCP 및 UDP 패킷에는 소스 포트 번호와 목적지 포트 번호가 포함된다. 이러한 각 패킷은 IP 헤더에 소스 IP 주소와 목적지 IP 주소를 포함하는 IP 패킷으로 캡슐화된다. IP 주소/프로토콜/포트 번호의 삼중항은 네트워크 소켓과의 연관성을 정의한다.

웹 서버 및 메일 서버와 같은 공개적으로 액세스 가능한 서비스의 경우 포트 번호가 중요하다. 예를 들어, 포트 443은 소켓을 통해 웹 서버 소프트웨어에 연결하고 포트 465는 메일 서버의 SMTP 데몬에 연결한다. 공개 서버의 IP 주소 또한 중요하며, 우편 주소나 전화번호와 같이 전역적으로 고유하다. 성공적으로 통신하려는 모든 호스트는 IP 주소와 포트 번호를 모두 올바르게 알아야 한다.

RFC 1918에 설명된 사설 IP 주소는 인터넷에 직접 연결되지 않은 사설망에서만 사용할 수 있다. 포트는 해당 호스트에 고유한 통신 엔드포인트이므로 NAT 장치를 통한 연결은 포트와 IP 주소의 결합된 매핑에 의해 유지된다. NAT 내부의 사설 주소는 외부 공용 주소에 매핑된다. 포트 주소 변환(PAT)은 여러 호스트가 동시에 동일한 소스 포트 번호를 사용하여 다른 외부 연결을 설정할 때 발생하는 충돌을 해결한다.

 변환 과정 
NAT를 사용하면 외부 호스트로 전송되는 모든 통신에는 내부 호스트 IP 주소 또는 포트 번호 대신 NAT 장치의 외부 IP 주소 및 포트 정보가 실제로 포함된다. NAT는 내부 호스트의 IP 주소와 포트만 변환하여 사설망에 있는 내부 호스트의 실제 엔드포인트를 숨긴다.

사설(내부) 네트워크의 컴퓨터가 외부 네트워크로 IP 패킷을 전송하면 NAT 장치는 패킷 헤더의 내부 소스 IP 주소를 NAT 장치의 외부 IP 주소로 대체한다. PAT는 연결에 사용 가능한 포트 풀에서 포트 번호를 할당한 다음, 이 포트 번호를 소스 포트 필드에 삽입할 수 있다. 그런 다음 패킷은 외부 네트워크로 전달된다. NAT 장치는 내부 IP 주소, 원래 소스 포트 및 변환된 소스 포트를 포함하는 변환 테이블에 항목을 만든다. 동일한 내부 소스 IP 주소 및 포트 번호에서 오는 후속 패킷은 동일한 외부 소스 IP 주소 및 포트 번호로 변환된다. NAT를 거친 패킷을 수신하는 컴퓨터는 변경된 패킷에 지정된 포트 및 IP 주소로 연결을 설정하며, 제공된 주소가 변환되고 있다는 사실을 알지 못한다.

외부 네트워크에서 패킷을 수신하면 NAT 장치는 패킷 헤더의 목적지 포트를 기반으로 변환 테이블을 검색한다. 일치하는 항목이 발견되면 목적지 IP 주소와 포트 번호가 테이블에서 찾은 값으로 대체되고 패킷은 내부 네트워크로 전달된다. 그렇지 않으면 들어오는 패킷의 목적지 포트 번호가 변환 테이블에서 발견되지 않으면 PAT 장치가 어디로 보내야 할지 모르기 때문에 패킷은 삭제되거나 거부된다.

 애플리케이션 
 라우팅 네트워크 주소 변환은 IP 주소 중첩을 완화하는 데 사용될 수 있다. 주소 중첩은 동일한 IP 주소 공간을 가진 다른 네트워크의 호스트가 동일한 목적지 호스트에 도달하려고 할 때 발생한다. 이는 종종 잘못된 구성이며, 특히 RFC 1918 사설망 주소 지정을 사용할 때 두 네트워크 또는 서브넷의 병합으로 인해 발생할 수 있다. 목적지 호스트는 동일한 네트워크에서 트래픽이 도착하는 것처럼 경험하며, 중간 라우터는 회신 트래픽을 어디로 보내야 할지 결정할 방법이 없다. 해결책은 중첩을 제거하기 위한 재넘버링 또는 네트워크 주소 변환이다.

 로드 밸런싱 클라이언트-서버 애플리케이션에서 로드 밸런서는 각 서버의 작업 부하를 관리하기 위해 클라이언트 요청을 일련의 서버 컴퓨터로 전달한다. 네트워크 주소 변환은 서버 클러스터의 대표 IP 주소를 요청을 처리하는 특정 호스트에 매핑하는 데 사용될 수 있다.

 관련 기술 
IEEE 역주소 및 포트 변환(RAPT 또는 RAT)은 실제 IP 주소가 때때로 변경되는 호스트가 고정된 홈 IP 주소를 통해 서버로 계속 연결될 수 있도록 한다. 시스코 시스템즈의 RAPT 구현은 PAT 또는 NAT 오버로딩이며 여러 사설 IP 주소를 단일 공용 IP 주소에 매핑한다. 각 사설 주소가 포트 번호로 추적되기 때문에 여러 주소를 단일 주소에 매핑할 수 있다. PAT는 변환을 구별하기 위해 내부 전역 IP 주소에 고유한 소스 포트 번호를 사용한다. PAT는 원래 소스 포트를 보존하려고 시도한다. 이 소스 포트가 이미 사용 중인 경우 PAT는 적절한 포트 그룹(0–511, 512–1023 또는 1024–65535)의 시작부터 사용 가능한 첫 번째 포트 번호를 할당한다. 더 이상 사용 가능한 포트가 없고 둘 이상의 외부 IP 주소가 구성된 경우 PAT는 다음 IP 주소로 이동하여 원래 소스 포트를 다시 할당하려고 시도한다. 이 과정은 사용 가능한 포트와 외부 IP 주소가 고갈될 때까지 계속된다.

주소 및 포트 매핑은 주소 및 포트 변환과 IPv4 패킷을 ISP 공급자의 내부 IPv6 네트워크를 통해 터널링하는 것을 결합한 시스코의 제안이다. 사실상, 캐리어급 NAT 및 DS-Lite에 대한 (거의) 무상태 대안으로, IPv4 주소/포트 변환 기능(및 NAT 상태 유지)을 기존 고객 장비 NAT 구현으로 완전히 푸시한다. 따라서 캐리어급 NAT의 NAT444 및 상태 유지 문제점을 피하고, 동시에 매우 적은 추가 복잡성으로 기본 IPv6 배포를 위한 전환 메커니즘을 제공한다.

 문제점 및 한계 
NAT가 활성화된 라우터 뒤에 있는 호스트는 종단 간 연결이 없으며 일부 인터넷 프로토콜에 참여할 수 없다. 외부 네트워크에서 TCP 연결을 시작해야 하거나 UDP를 사용하는 것과 같은 무상태 프로토콜을 사용하는 서비스는 방해받을 수 있다. NAT 라우터가 이러한 프로토콜을 지원하기 위해 특별한 노력을 기울이지 않는 한, 들어오는 패킷은 목적지에 도달할 수 없다. 일부 프로토콜은 참여하는 호스트("수동 모드" FTP 등) 사이에 하나의 NAT 인스턴스를 수용할 수 있으며, 때로는 애플리케이션 계층 게이트웨이의 도움을 받을 수 있지만(NAT의 영향을 받는 애플리케이션 참조), 두 시스템이 모두 NAT에 의해 인터넷과 분리되어 있을 때는 실패한다. NAT를 사용하면 NAT가 IPsec 및 기타 터널링 프로토콜에서 수행하는 무결성 검사를 방해하는 헤더의 값을 수정하기 때문에 IPsec과 같은 터널링 프로토콜도 복잡해진다.

종단 간 연결성은 인터넷의 핵심 원칙 중 하나였으며, 예를 들어 인터넷 아키텍처 위원회에 의해 지지되었다. 현재 인터넷 아키텍처 문서는 NAT가 엔드 투 엔드 원칙의 위반이지만, 신중한 설계에서 NAT가 유효한 역할을 한다고 지적한다. IPv6 NAT 사용에 대해서는 훨씬 더 많은 우려가 있으며, 많은 IPv6 아키텍트들은 IPv6가 NAT의 필요성을 제거하기 위해 고안되었다고 믿는다.

포트만 추적하는 구현은 많은 임베디드 객체가 있는 웹 페이지에 대한 HTTP 요청과 같이 여러 동시 연결을 사용하는 내부 애플리케이션에 의해 빠르게 고갈될 수 있다. 이 문제는 포트 외에 목적지 IP 주소를 추적하여 단일 로컬 포트를 많은 원격 호스트와 공유함으로써 완화될 수 있다. 이 추가 추적은 변환 장치에서 구현 복잡성과 컴퓨팅 리소스를 증가시킨다.

내부 주소가 모두 하나의 공개적으로 접근 가능한 주소 뒤에 가려져 있으므로, 외부 호스트가 특정 내부 호스트로 직접 연결을 시작하는 것은 불가능하다. VOIP, 화상 회의 및 기타 P2P 애플리케이션과 같은 애플리케이션은 작동하려면 NAT 트래버설 기술을 사용해야 한다.

 단편화 및 체크섬 
IP만으로 작동하는 순수 NAT는 ICMP와 같이 IP에 대한 정보를 포함하는 페이로드를 가진 프로토콜을 올바르게 파싱하지 못할 수 있다. 이는 페이로드가 변환 내부 또는 외부의 호스트에 의해 해석되는지 여부에 따라 달라진다. TCP 및 UDP와 같은 기본 프로토콜은 NAT가 네트워크 계층 이상에서 조치를 취하지 않으면 제대로 작동할 수 없다.

IP 패킷은 각 패킷 헤더에 체크섬을 가지고 있으며, 이는 헤더에 대해서만 오류 감지를 제공한다. IP 데이터그램은 단편화될 수 있으며, NAT는 이러한 단편을 재조립하여 상위 수준 체크섬의 정확한 재계산과 각 패킷이 어떤 연결에 속하는지 정확하게 추적할 수 있어야 한다.

TCP 및 UDP는 자체적으로 전송하는 모든 데이터와 TCP 또는 UDP 헤더, 그리고 TCP 또는 UDP 헤더를 전송하는 패킷의 소스 및 목적지 IP 주소를 포함하는 가상 헤더를 포괄하는 체크섬을 가지고 있다. 원래 NAT가 TCP 또는 UDP를 성공적으로 전달하려면 원래 IP 주소가 아닌 변환된 IP 주소를 기반으로 TCP 또는 UDP 헤더 체크섬을 다시 계산하고 해당 체크섬을 단편화된 패킷 세트의 첫 번째 패킷의 TCP 또는 UDP 헤더에 넣어야 한다.

또는 출발지 호스트가 단편화 없이 전송할 수 있는 패킷 크기를 결정하기 위해 경로 MTU 탐색을 수행한 다음 적절한 패킷 헤더 필드에 DF(Don't Fragment) 비트를 설정할 수 있다. 이는 응답하는 호스트가 모든 크기의 패킷을 보낼 수 있으며, NAT에 도달하기 전에 단편화될 수 있으므로 단방향 솔루션일 뿐이다.

 변형 용어 

 DNAT 
목적지 네트워크 주소 변환(DNAT)은 라우팅된 패킷의 목적지 IP 주소를 투명하게 변경하고 모든 회신에 대해 역함수를 수행하는 기술이다. 두 엔드포인트 사이에 위치한 모든 라우터는 패킷의 이러한 변환을 수행할 수 있다.

DNAT는 일반적으로 사설망에 위치한 서비스를 공개적으로 접근 가능한 IP 주소에 게시하는 데 사용된다. 이러한 DNAT 사용은 포트 포워딩 또는 전체 서버에 사용될 때 DMZ라고도 불리며, 이 경우 WAN에 노출되어 방어되지 않은 군사적 비무장 지대 (DMZ)와 유사해진다.

 SNAT 
SNAT라는 용어의 의미는 공급업체마다 다르다.
 소스 NAT는 일반적인 확장이며 목적지 NAT(DNAT)의 반대 개념이다. 이는 일대다 NAT, 즉 공용 서비스로의 발신 연결을 위한 NAT를 설명하는 데 사용된다.
 스테이트풀 NAT는 시스코 시스템즈에서 사용된다.
 정적 NAT는 WatchGuard에서 사용된다.
 보안 NAT는 F5에서 사용된다. 그리고 마이크로소프트에서도 ( ISA 서버와 관련하여) 사용된다.

보안 네트워크 주소 변환(SNAT)은 마이크로소프트의 Internet Security and Acceleration Server의 일부이며 Microsoft Windows Server에 내장된 NAT 드라이버의 확장이다. 이는 FTP, ICMP, H.323, PPTP 프로토콜에 필요한 추가 네트워크 연결에 대한 연결 추적 및 필터링을 제공하며 투명한 HTTP 프록시 서버를 구성하는 기능도 제공한다.

 동적 네트워크 주소 변환 
섬네일|동적 NAT 작동 방식
동적 NAT는 정적 NAT와 마찬가지로 소규모 네트워크에서는 흔하지 않지만 복잡한 네트워크를 가진 대기업에서 발견된다. 정적 NAT가 일대일 내부-공용 정적 IP 주소 매핑을 제공하는 반면, 동적 NAT는 공용 IP 주소 그룹을 사용한다.

 NAT 헤어피닝 
NAT 헤어피닝은 NAT 루프백 또는 NAT 리플렉션으로도 알려져 있으며, 많은 소비자용 라우터에 있는 기능으로, LAN에 있는 컴퓨터가 LAN/라우터의 외부 IP 주소를 통해 LAN에 있는 다른 컴퓨터에 액세스할 수 있도록 한다(라우터에 포트 포워딩이 설정되어 요청을 LAN의 적절한 컴퓨터로 전달). 이 개념은 2008년 에 공식적으로 설명되어 있다.

다음은 예시 네트워크를 설명한다.
 공용 주소: . 이것은 라우터의 WAN 인터페이스 주소이다.
 라우터의 내부 주소: 
 서버 주소: 
 로컬 컴퓨터 주소: 

의 컴퓨터가 로 패킷을 보내면, 이 패킷은 일반적으로 기본 게이트웨이 (라우터)로 라우팅된다. NAT 루프백 기능이 있는 라우터는 이 자체 WAN 인터페이스의 주소임을 감지하고, 해당 인터페이스에서 온 것처럼 패킷을 처리한다. 라우터는 목적지에 대한 DNAT (포트 포워딩) 규칙을 기반으로 해당 패킷의 목적지를 결정한다. 데이터가 포트 80으로 전송되었고 포트 80에 대해 로 지정된 DNAT 규칙이 존재한다면, 해당 주소의 호스트가 패킷을 수신한다.

적용 가능한 DNAT 규칙이 없는 경우 라우터는 패킷을 삭제한다. ICMP Destination Unreachable 회신이 전송될 수 있다. DNAT 규칙이 있었다면 주소 변환은 여전히 유효하다. 라우터는 여전히 패킷의 소스 IP 주소를 다시 작성한다. 로컬 컴퓨터()는 에서 온 것처럼 패킷을 보내지만, 서버()는 에서 온 것처럼 패킷을 수신한다. 서버가 회신할 때, 프로세스는 외부 발신자와 동일하다. 따라서 공용 IP 주소를 통해 LAN 네트워크 내의 호스트 간에 양방향 통신이 가능하다.

 IPv6의 NAT 
네트워크 주소 변환은 IPv6에서 일반적으로 사용되지 않는다. IPv6의 설계 목표 중 하나는 종단 간 네트워크 연결을 복원하는 것이기 때문이다. IPv6의 넓은 주소 공간은 주소를 절약할 필요성을 없애고 모든 장치에 고유한 전역 라우팅 가능한 주소를 부여할 수 있도록 한다. 고유 로컬 주소를 네트워크 프리픽스 변환과 함께 사용하면 NAT와 유사한 결과를 얻을 수 있다.

IPv6의 넓은 주소 공간은 통신사가 제공하는 실제 접두사 길이에 따라 여전히 제한될 수 있다. 전체 홈 네트워크에 대해 권장되는 가장 작은 서브넷인 /64 접두사가 할당되는 것이 드물지 않으며, 모든 장치가 도달 가능한 상태를 유지하기 위해 범위를 수동으로 세분화하는 다양한 기술이 필요하다. 심지어 실제 IPv6-to-IPv6 NAT인 NAT66도 때때로 유용하게 사용될 수 있다. APNIC 블로그는 저자에게 단일 주소(/128)만 제공된 경우를 설명한다.

 NAT의 영향을 받는 애플리케이션 
FTP 및 SIP와 같은 일부 응용 계층 프로토콜은 애플리케이션 데이터 내에서 명시적인 네트워크 주소를 보낸다. 예를 들어, 활성 모드에서의 파일 전송 프로토콜은 제어 트래픽(명령)과 데이터 트래픽(파일 내용)에 대해 별도의 연결을 사용한다. 파일 전송을 요청할 때, 요청하는 호스트는 해당 데이터 연결을 네트워크 계층 및 전송 계층 주소로 식별한다. 요청하는 호스트가 단순 NAT 방화벽 뒤에 있는 경우, IP 주소 또는 TCP 포트 번호의 변환은 서버가 수신하는 정보를 무효화한다. SIP는 일반적으로 음성 인터넷 프로토콜 통화를 제어하며, 동일한 문제로 어려움을 겪는다. SIP 및 관련 세션 기술 프로토콜은 연결을 설정하고 실시간 전송 프로토콜을 통해 음성 스트림을 전송하기 위해 여러 포트를 사용할 수 있다. IP 주소와 포트 번호는 페이로드 데이터에 인코딩되어 있으며 NAT 트래버설 전에 알려져야 한다. STUN과 같은 특별한 기술 없이는 NAT 동작은 예측할 수 없으며 통신이 실패할 수 있다. 애플리케이션 계층 게이트웨이 (ALG) 소프트웨어 또는 하드웨어는 이러한 문제를 해결할 수 있다. NAT 방화벽 장치에서 실행되는 ALG 소프트웨어 모듈은 주소 변환으로 인해 무효화된 모든 페이로드 데이터를 업데이트한다. ALG는 수정해야 하는 상위 계층 프로토콜을 이해해야 하므로, 이 문제가 있는 각 프로토콜은 별도의 ALG를 필요로 한다. 예를 들어, 많은 리눅스 시스템에는 ALG를 구현하는 연결 추적기라는 커널 모듈이 있다. 그러나 ALG는 프로토콜 데이터가 암호화된 경우에는 작동할 수 없다.

이 문제에 대한 또 다른 해결책은 STUN 또는 상호 연결 확립 (ICE)과 같은 프로토콜을 사용하거나 세션 구분 컨트롤러에서 독점적인 접근 방식을 사용하는 NAT 트래버설 기술을 사용하는 것이다. NAT 트래버설은 TCP 및 UDP 기반 애플리케이션 모두에서 가능하지만, UDP 기반 기술이 더 간단하고 널리 이해되며 레거시 NAT와 더 호환된다. 어느 경우든 상위 수준 프로토콜은 NAT 트래버설을 염두에 두고 설계되어야 하며, 대칭 NAT 또는 기타 제대로 작동하지 않는 레거시 NAT에서는 안정적으로 작동하지 않는다.

다른 가능성으로는 PCP, NAT-PMP 또는 인터넷 게이트웨이 장치 프로토콜이 있지만, 이들은 NAT 장치가 해당 프로토콜을 구현해야 한다.

그러나 대부분의 클라이언트-서버 프로토콜(FTP가 주요 예외)은 계층 3 연락처 정보를 보내지 않으며 NAT에 의한 특별한 처리가 필요하지 않다. 사실, NAT 합병증을 피하는 것은 오늘날 새로운 상위 계층 프로토콜을 설계할 때 거의 필수 요구 사항이다.

NAT는 IPsec 암호화가 적용되는 경우와 SIP 폰과 같은 여러 장치가 NAT 뒤에 위치하는 경우에도 문제를 일으킬 수 있다. IPsec으로 신호를 암호화하는 전화기는 암호화된 패킷 내에 포트 정보를 캡슐화하므로 NAT 장치가 포트에 액세스하고 변환할 수 없다. 이러한 경우 NAT 장치는 단순 NAT 작업으로 되돌아간다. 이는 NAT로 돌아오는 모든 트래픽이 하나의 클라이언트에 매핑되어 NAT 뒤의 여러 클라이언트에 대한 서비스가 실패하는 원인이 된다. 이 문제에 대한 몇 가지 해결책이 있다. 하나는 TLS를 사용하는 것이다. TLS는 계층 4에서 작동하며 포트 번호를 가리지 않는다. 다른 하나는 IPsec을 UDP 내에 캡슐화하는 것이다. 후자는 TISPAN이 보안 NAT 트래버설을 달성하기 위해 선택한 해결책이거나 "IPsec Passthru" 지원이 있는 NAT이다. 다른 하나는 세션 구분 컨트롤러를 사용하여 NAT를 트래버스하는 것이다.

상호 연결 확립 (ICE)은 ALG 지원에 의존하지 않는 NAT 트래버설 기술이다.

댄 카민스키가 2008년 7월 8일에 발표한 DNS 프로토콜 취약점은 NAT 포트 매핑에 간접적으로 영향을 받는다. DNS 캐시 포이즈닝을 피하기 위해 NAT를 구현하는 방화벽 뒤의 DNS 서버에서 나가는 DNS 요청의 UDP 소스 포트 번호를 변환하지 않는 것이 매우 바람직하다. DNS 취약점에 대한 권장 해결책은 모든 캐싱 DNS 서버가 무작위 UDP 소스 포트를 사용하도록 하는 것이다. NAT 기능이 UDP 소스 포트를 무작위화하지 않으면 DNS 서버는 취약해진다.

 NAT 소프트웨어의 예 
 인터넷 연결 공유 (ICS): Windows 데스크톱 운영 체제에 포함된 NAT 및 DHCP 구현
 IPFilter: (오픈솔라리스, FreeBSD 및 NetBSD에 포함되어 있으며, 많은 다른 유닉스 계열 운영 체제에서 사용 가능
 ipfirewall (ipfw): FreeBSD 기본 패킷 필터
 넷필터 및 Iptables/Nftables: 리눅스 패킷 필터
 NPF: NetBSD 기본 패킷 필터
 PF: OpenBSD 기본 패킷 필터
 Routing and Remote Access Service (RRAS): Windows Server 운영 체제에 포함된 라우팅 구현
 VPP: 리눅스용 사용자 공간 패킷 포워딩 구현
 WinGate: Windows용 타사 라우팅 구현

 같이 보기 

 Anything In Anything (AYIYA) – IPv4 UDP를 통한 IPv6, 따라서 대부분의 NAT에서 작동하는 IPv6 터널링
 캐리어급 NAT – ISP 내부의 NAT 뒤 NAT

 인터넷 게이트웨이 장치 프로토콜 (UPnP IGD) NAT 트래버설 방법

 NAT Port Mapping Protocol (NAT-PMP) NAT 트래버설 방법
 Port Control Protocol (PCP) NAT 트래버설 방법


 테레도 터널링 – IPv6를 사용한 NAT 트래버설

 내용주 

 각주 

 외부 링크 
 다양한 유형의 NAT를 논의하는 논문
 Anatomy: A Look Inside Network Address Translators – Volume 7, Issue 3, September 2004
 제프 타이슨, HowStuffWorks: 네트워크 주소 변환 작동 방식
 IBM iSeries 문서의 일부
 네트워크 주소 변환(NAT) FAQ – 시스코 시스템즈