개요
네트워크 주소 변환, 줄여서 NAT)은 컴퓨터 네트워킹에서 쓰이는 용어로서, IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고 받는 기술을 말한다. 패킷에 변화가 생기기 때문에 IP나 TCP/UDP의 체크섬(checksum)도 다시 계산되어 재기록해야 한다. NAT를 이용하는 이유는 대개 사설 네트워크에 속한 여러 개의 호스트가 하나의 공인 IP 주소를 사용하여 인터넷에 접속하기 위함이다. 많은 네트워크 관리자들이 NAT를 편리한 기법이라고 보고 널리 사용하고 있다. NAT가 호스트 간의 통신에 있어서 복잡성을 증가시킬 수 있으므로 네트워크 성능에 영향을 줄 수 있는 것은 당연하다.
사설망 관리
NAT 가능 라우터는 홈 네트워크(서브넷 네트워크)의 일부인 인터페이스를 갖는다. 사설망과 같은 사설 개인 주소를 갖는 권역은 [RFC 1918]]에 예약된 IP 주소 공간을 가지게 된다. 이때 사설 주소를 갖는 권역은 네트워크 주소들이 그 네트워크의 내부에 있는 장비에게만 의미를 가지게 된다. 따라서 홈 네트워크를 벗어나 글로벌 인터넷 WAN으로 가는 패킷들은 NAT를 이용해 처리하게 된다.
NAT 원리
NAT 가능 한 라우터는 외부 세계로는 라우터처럼 보이지 않는다. NAT라우터는 외부세계로는 하나의 IP 주소를 갖는 하나의 장비로 동작한다. 본질적으로 NAT가능 라우터는 외부에서 들어오는 홈 네트워크의 상세한 사항을 숨긴다. (홈 네트워크는 DHCP서버를 이용해 주소를 할당 받았음) WAN에서 같은 목적지 IP 주소를 갖는 NAT라우터 에 모든 데이터 그램이 도착하면, NAT라우터에서 NAT 변환 테이블을 사용해 그 테이블의 정보를 참조하여 패킷을 포워딩시킨다.
NAT 변환 테이블 (NAT Translation Table)
NAT는 기본적으로 도착 주소, 출발 주소, 도착 포트 번호, 출발 포트 번호, UDP/TCP 정보를 테이블에 저장한다. 만약 이 정보로 충분한 패킷의 흐름이라면 NAT라우터는 상황에 맞게 패킷을 포워딩하게 된다. 예를 들어서 10.0.0.1 에서 a.com 으로 TCP 포트를 이용해 80번 포트로 접속을 시도했으며 출발 포트는 52000번이라 해보자. 우연히 10.0.0.2 에서 a.com 으로 TCP 포트를 이용해 80번 포트로 접속을 시도했으며 출발 포트는 52005번이라 해보자. 그러면 a.com은 도착 포트를 다르게 해서 보내기 때문에 NAT 라우터는 어디로 정보를 보내야 하는지 알 수 있게 된다. 만약 포트 번호까지 겹치게 된다면, NAT에서 포트 번호를 다르게 수정해서 보낸뒤 그 포트 번호를 원래 포트에 포워딩 함으로써 이 문제를 해결한다. 만약 이 정도 정보로도 부족하다면 Deep Packet Inspection 을 사용해 NAT 테이블을 좀더 촘촘하게 작성해 그 정보에 따라 포워딩 시키게 된다. 따라서 이론적으로 NAT는 한 IP 주소에 대해 대략 60,000개 정도의 동시 접속을 지원한다. 즉 NAT 라우터는 포트 번호를 프로세스 주소 지정이 아닌 호스트주소 지정에 사용한다는 것이다.
NAT의 단점
- 포트 번호가 호스트 주소 지정이 아닌 프로세스 지정에 사용되는 OSI7 레이어 원칙을 무시함
- P2P네트워크나 서버컴퓨터의 경우 고정된 포트번호가 서버 역할을 하는데 기본이 되기 때문에 NAT를 사용할 경우 이 작동이 잘 안될수 있다. 특히 P2P서버는 개인의 서버 이용을 방해하게 된다. 이 문제의 해결은 호스트가 가까운 NAT를 발견하고 구성하게 해주는 프로토콜인 범용 플러그 앤 플레이가 있다.