NAT (Network Address Translation)
인터넷의 빠른 확산은 곧 IPv4 주소 공간의 고갈이라는 문제로 이어졌다. IPv4는 32비트 주소 체계를 사용하므로 약 43억 개의 고유한 주소만 제공할 수 있는데, 이는 전 세계 수십억 대의 기기들이 모두 공인 IP 주소를 갖기에는 턱없이 부족하다.
이 문제를 해결하기 위해 등장한 기술이 바로 NAT(Network Address Translation)이다. NAT는 하나의 공인 IP 주소만으로도, 로컬 네트워크 내부의 여러 장치들이 외부 인터넷과 통신할 수 있게 해주는 기술이다. 예를 들어 집이나 회사 네트워크에 있는 장치들은 192.168.x.x, 10.x.x.x와 같은 사설 IP 주소를 사용하지만, 외부에서는 이들이 모두 하나의 공용 IP 주소를 사용하는 것처럼 보인다.
NAT 환경에서는 로컬 네트워크 내부의 장치들이 사설 IP 주소(예: 10.0.0.0/24)를 사용한다. 외부 인터넷에서는 이 주소들이 보이지 않으며, 대신 모두 동일한 공용 IP 주소를 사용하는 것처럼 보인다.
예를 들어 다음과 같은 구성의 네트워크를 생각해보자.
- 로컬 네트워크 주소 범위: 10.0.0.0/24
- 공용 NAT IP 주소: 138.76.29.7
- 로컬 장치들: 10.0.0.1, 10.0.0.2, 10.0.0.3, 10.0.0.4 등
이때, 로컬 네트워크에서 외부로 나가는 모든 데이터그램은 공용 IP 주소 138.76.29.7를 출발지 주소로 갖게 된다. 다만 각 장치의 내부 포트 번호를 외부 포트 번호에 매핑하여 구분한다. 즉,
- 출발지는 항상 138.76.29.7이지만, 출발 포트 번호는 각 장치마다 다르게 설정되어 외부에서 응답이 들어올 때 어떤 내부 장치로 전달할지를 NAT 장비가 알아낼 수 있도록 한다.
반대로, 로컬 네트워크 내부에서 발생한 트래픽은 여전히 사설 IP 주소(10.0.0.x)를 사용해 라우터는 NAT 변환 없이 내부에서 직접 패킷을 주고받을 수 있다.
NAT(Network Address Translation)은 로컬 네트워크 내부 장치들이 사용하는 IP 주소를 외부 인터넷과 통신할 수 있도록 공인 IP 주소로 변환해주는 기술이다. NAT를 사용하는 네트워크에서는 모든 장치가 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16과 같은 사설 IP 주소(private IP address) 대역을 사용하며, 이 주소들은 오직 로컬 네트워크 내부에서만 유효하고 인터넷에서는 사용될 수 없다.
NAT의 가장 큰 장점은 하나의 공인 IP 주소만으로 여러 장치가 동시에 인터넷에 접속할 수 있다는 점이다. 이는 ISP(인터넷 서비스 제공자)로부터 공인 IP를 하나만 할당받아도 전체 네트워크가 외부와 통신할 수 있게 해주며, IPv4 주소 고갈 문제를 완화하는 실질적인 대안으로 작동해왔다.
또한, 로컬 네트워크 내부의 주소 체계를 외부에 알릴 필요가 없기 때문에, 내부 호스트의 주소를 자유롭게 바꿔도 외부에 영향을 주지 않는다. ISP를 변경하더라도 로컬 주소 체계는 그대로 유지될 수 있어 운영상의 유연성도 확보된다.
보안 측면에서도 NAT는 장점을 가진다. 외부에서는 NAT 뒤에 있는 내부 장치들이 직접적으로 주소가 보이지 않기 때문에, 기본적으로 비공개된 형태의 방화벽 역할을 수행한다. NAT 장치가 명시적으로 연결을 허용하지 않는 이상, 외부에서 내부 장치로의 직접 접속은 어렵다. 이러한 특성은 기본적인 보안 강화 효과를 제공하지만, 동시에 서버나 P2P 연결과 같이 외부에서 내부로 접근이 필요한 서비스에는 별도의 포트 포워딩 설정이 필요하다는 제약도 발생시킨다.
NAT(Network Address Translation)의 실제 동작은 라우터 수준에서 투명하게 수행되는 주소 및 포트 번호 변환 과정으로 구성된다. NAT 라우터는 내부 장치들이 외부와 통신할 때, 각 패킷의 IP 주소와 포트 번호를 변경하고, 이에 대한 매핑 정보를 유지해야 한다. 이 과정은 크게 세 단계로 나눌 수 있다.
먼저, 외부로 나가는 데이터그램의 경우, NAT 라우터는 각 패킷의 출발지 IP 주소와 포트 번호 (source IP, source port)를 NAT 라우터의 공인 IP 주소와 새로 할당한 포트 번호 (NAT IP, new port)로 바꾼다. 이 변경된 정보는 외부 서버에게 전달되고, 해당 서버는 응답을 NAT 라우터의 공인 IP와 포트 번호로 다시 보낸다. 동시에, NAT 라우터는 이 매핑 정보를 NAT 테이블에 기록해둔다. 이 테이블은 각 내부 연결에 대해 고유한 변환쌍을 기억해야 한다.
다음으로, 외부에서 들어오는 데이터그램은 NAT 라우터가 미리 저장해둔 NAT 테이블을 참조해, 목적지 필드에 있는 (NAT IP, new port)를 해당하는 원래의 내부 주소 (original source IP, source port)로 다시 바꿔준다. 이렇게 변환된 패킷은 내부 장치로 전달되며, 내부 장치는 자신이 처음 요청했던 것처럼 응답을 수신하게 된다.
이 전체 과정은 사용자가 인식하지 못하는 수준에서 실시간으로 동작하며, NAT 라우터가 연결을 기억하고 포트를 적절히 할당하는 기능이 핵심이다. 이와 같은 주소 및 포트 수준의 변환 매핑 덕분에 여러 장치가 동시에 하나의 공인 IP 주소를 공유하면서도 정상적인 통신을 할 수 있다. 다만, 연결 수가 많아질 경우 NAT 테이블의 관리 부담과 일부 애플리케이션의 제약도 함께 발생할 수 있다.
이 예시는 NAT(Network Address Translation)가 실제로 어떻게 작동하는지를 단계별로 보여주는 시나리오다. NAT 라우터가 내부 사설 네트워크와 외부 공용 인터넷 사이에서 주소와 포트 번호를 변환하는 방식이 어떻게 이뤄지는지를 설명하고 있다.
-
호스트 10.0.0.1이 외부 서버(128.119.40.186)의 80번 포트로 데이터그램을 전송
이때 원래 출발지 주소와 포트는 (10.0.0.1, 3345)이고, 목적지 주소와 포트는 (128.119.40.186, 80)이다.
-
NAT 라우터는 출발지 주소/포트를 변환하고 NAT 테이블에 기록
라우터는 (10.0.0.1, 3345)를 자신의 공인 주소 (138.76.29.7)와 새로 할당한 포트 번호 (5001)로 바꾼다.
그리고 이 매핑을 NAT 변환 테이블에 등록한다. 예:
plainWAN side addr LAN side addr 138.76.29.7, 5001 ←→ 10.0.0.1, 3345 -
외부 서버는 응답을 보낼 때 NAT 주소와 포트를 목적지로 사용
외부 서버는 응답을 받을 때 NAT 라우터의 공인 주소와 포트, 즉 (138.76.29.7, 5001)를 목적지로 사용하여 응답을 전송한다.
-
NAT 라우터는 응답을 수신하고 NAT 테이블을 참조해 원래 호스트에게 전달
NAT 라우터는 자신의 NAT 테이블을 확인하고, (138.76.29.7, 5001)가 내부의 (10.0.0.1, 3345)로 매핑되어 있음을 확인한 후,
패킷의 목적지 주소를 원래의 사설 주소 (10.0.0.1, 3345)로 바꿔서 내부 네트워크로 전달한다.
이 전체 과정은 외부 세계에서는 하나의 공인 IP만 보이고, 내부 장치들은 직접적으로 보이지 않도록 하는 NAT의 핵심 구조를 보여준다. 또한 포트 번호까지 함께 변환하여 여러 장치가 동시에 통신하더라도 충돌 없이 구분할 수 있게 하는 것이 특징이다.
NAT(Network Address Translation)은 실제로 널리 사용되고 있지만, 네트워크 설계 원칙 측면에서는 오랜 논란의 대상이 되어왔다. 그 이유는 NAT가 단순한 주소 변환을 넘어서 네트워크 계층의 경계를 흐리는 역할을 하기 때문이다.
비판의 주요 논거 중 하나는, 라우터는 원칙적으로 3계층(네트워크 계층)까지만 처리해야 한다는 점이다. 하지만 NAT는 포트 번호까지 조작하기 때문에 이는 4계층(전송 계층)의 정보를 네트워크 계층 장비가 수정하게 되는 구조로, 계층적 분리 원칙을 위반한다는 지적이 있다.
또한, IP 주소 고갈 문제는 NAT 같은 임시방편이 아닌, IPv6 도입을 통해 구조적으로 해결해야 한다는 주장도 있다. NAT는 일종의 “임시 땜질”로 여겨졌으며, 장기적인 해결책이 아니라는 관점이다.
더 큰 철학적 비판은 end-to-end argument 위반이다. 원래 인터넷 설계 철학은 “종단 간(호스트 간) 연결은 중간 장치가 건드리지 말고 투명하게 유지되어야 한다”는 것이었는데, NAT는 네트워크 내부 장치를 외부에서 직접 주소로 접근할 수 없게 만들고, 라우터가 포트 번호까지 조작하기 때문에 이 원칙에 정면으로 배치된다.
실용적인 문제로는 NAT traversal 문제가 있다. 즉, NAT 뒤에 있는 서버에 외부 클라이언트가 접속하려고 할 때, NAT가 그 요청을 어디로 보내야 할지 알 수 없기 때문에 외부에서 내부로의 연결이 어렵다. 이 때문에 STUN, TURN, UPnP 같은 복잡한 보완 기술이 필요해졌다.
그럼에도 불구하고, NAT는 현실적인 이유로 널리 사용되고 있다. 특히 가정용 공유기, 기업 네트워크, 그리고 4G/5G 이동통신망에서 거의 표준처럼 자리 잡고 있으며, IPv6가 완전히 대체하지 않는 이상 쉽게 사라지지 않을 것으로 보인다. 즉, 이상적인 설계와는 거리가 있지만, 현실적인 효율성과 보안성, 주소 절약이라는 실익 덕분에 NAT는 여전히 유효한 기술로 자리잡고 있다.