[Network] 네트워크 계층 : NAT(Network Address Transmission)
모든 IP 활용 장치에는 IP 주소가 필요하다.
SOHO(Small Office, Home Office)네트워크의 확산으로 인해서, SOHO가 장치를 연결하기 위해 LAN을 설치할 때마다 ISP는 모든 SOHO의 IP장치(전화, 태블릿, 게임기, IP TV ..)를 수용할 수 있는 주소 범위를 할당해야 한다. SOHO가 커지면 큰 주소 블록이 할당되어야 한다.
하지만 ISP가 이미 SOHO 네트워크의 해당 주소 범위에 인접한 부분을 할당해버렸다면?
또는 특정 홈 네트워크 소유자가 IP 주소가 어떻게 관리되는지 알고자 한다면?
이러한 상황에서 네트워크 주소 변환(NAT)를 사용해서 주소를 할당할 수 있다.
NAT 운영
NAT 가능 라우터는 위 그림의 오른쪽 처럼 홈 네트워크의 일부인 인터페이스를 갖는다. 홈 네트워크의 4개 인터페이스 모두 같은 네트워크 서브넷(10.0.0.0/24)을 갖는다.
위 그림에서의 주소 공간 10.0.0.0/8 은 홈 네트워크와 같은 사설 개인 주소를 갖는 권역을 위해 예약된 IP 주소 공간 중의 하나이다.
사설 주소를 갖는 권역 : 네트워크 주소들이 그 네트워크의 내부에 있는 장비에게만 의미가 있는 그런 네트워크를 의미한다.
수십만개의 홈 네트워크가 있고, 이 중에 많은 네트워크들이 같은 주소 공간 10.0.0.0/24를 사용하고 있다는 것을 생각해보자.
주어진 홈 네트워크 내부의 장비는 서로 10.0.0.0/24 서브넷을 사용해서 패킷을 송수신 할 수 있다.
그러나 홈 네트워크를 벗어나 글로벌 인터넷으로 가는 패킷 전달은 이 주소들을 사용할 수 없다. 즉, 10.0.0.0/24 주소들은 주어진 홈 네트워크 내부에서만 의미가 있다.
이러한 사설 주소가 홈 네트워크 내부에서만 의미가 있다면, 패킷의 유일한 주소가 필요한 글로벌 인터넷과의 송수신에서는 어떻게 처리할 수 있을까?
NAT가 가능한 라우터는 외부 네트워크의 입장에서는 라우터처럼 보이지 않는다. 대신에 NAT 라우터는 하나의 IP 주소를 갖는 하나의 장비로 동작한다. 위 그림에서 홈 라우터를 떠나 인터넷으로 가는 트래픽은 출발지 주소 138.76.29.7:5001을 가져야 한다.
본질적으로 NAT 가능 라우터는 외부에서 들어오는 홈 네트워크의 상세한 사항은 숨긴다.
이때 홈 네트워크 컴퓨터가 어디서 주소를 얻고 라우터가 IP 주소를 어디서 얻는것인지에 대한 의문이 필요하다.
대부분 이에 대한 대답은 DHCP이다. 라우터는 ISP의 DHCP서버로부터 주소를 얻고, NAT-DHCP-라우터로 제어되는 홈 네트워크의 주소 공간에서 DHCP 서버를 실행하여 컴퓨터에게 주소를 제공한다.
WAN(Wide Area Network : 광역 네트워크)에서 같은 목적지 IP 주소를 갖는 NAT 라우터에 모든 데이터그램이 도착했을때, 라우터가 이 데이터그램을 전달하는 내부호스트를 알 수 있는 방법은 NAT 변환 테이블을 사용하고, 그 테이블에 IP 주소와 포트 번호를 매핑해 놓는 것이다.
예시 상황
호스트 10.0.0.1인 홈 네트워크가 IP 주소 128.119.40.186인 웹 서버(포트 80)에게 웹 페이지를 요청한다고 가정하자.
1. 호스트 10.0.0.1은 데이터그램의 헤더에 임의의 출발지 포트 번호 3345와 출발지와 목적지의 주소를 기록하고 LAN으로 데이터그램을 보낸다. 이 때, 출발지에는 자신의 사설 IP 주소를 기록한다.
- 호스트에서 출발
출발지 IP 주소 : 10.0.0.1:3345
목적지 IP 주소 : 128.119.40.186:80
2. 홈네트워크 라우터에서 외부로 나가는 패킷을 인식하게 되면, 출발지의 IP 주소를 자신의 공인 IP 주소로 변경하고, 출발지 포트번호를 새로운 5001 포트번호로 변환한다. 이 때, 별도의 NAT 테이블을 생성한다.
새 출발지 포트번호를 생성할 때, NAT라우터는 NAT 변환 테이블에는 없는 모든 출발지 포트 번호를 선택할 수 있다.(포트 번호의 필드가 16비트 이므로 NAT 프로토콜은 라우터에 대한 WAN쪽의 한 IP 주소에 대해 6만개 이상의 동시 접속을 지원한다.)
- 라우터에서 다시 출발
출발지 IP 주소 : 10.0.0.1:3345 -> 138.76.29.7:5001 (변경)
목적지 IP 주소 : 128.119.40.186:80
NAT 테이블
프로토콜 | 사설 IP 주소 | 사설 IP 출발 포트 | 출발지 포트 | 출발지 IP 주소 | 목적지 IP 주소 |
TCP | 10.0.0.1 | 3345 | 5001 | 138.76.29.7 | 128.119.40.186 |
3. 웹 서버에서 수신한 데이터를 처리한 후, 응답 데이터그램에 출발지와 목적지의 IP 주소를 다음과 같이 기록하여 보낸다. 이 때, 목적지의 IP 주소는 라우터의 IP 주소가 된다.
- 웹 서버에서 출발
출발지 IP 주소 : 128.119.40.186:80
목적지 IP 주소 : 138.76.29.7:5001
4. 라우터는 데이터그램을 받고 헤더 정보를 추출한다. 그리고 기록해두었던 NAT 테이블을 참조하여 최종 목적지인 호스트의 사설 IP 주소로 변경하여 해당 호스트로 패킷을 전달한다.
- 라우터에서 출발
출발지 IP 주소 : 128.119.40.186:80
목적지 IP 주소 : 138.76.29.7:5001 -> 10.0.0.1:3345 (변경)