NAT(Network Address Translation)?

네트워크는 여러개의 분산된 Address Space를 가진다. 네트워크 상에서 이 Address Space는 network host로 구분된다. IP Host, Ineternet Host, 도메인이 network host라 할 수 있다. 이 네트워크 내에서 서버는 다른 호스트의 정보를 가지고 있는 네트워크의 노드이며, 클라이언트는 이 서버와 커뮤니케이션을 하거나, 다른 서버와 혹은 단말과의 커뮤니케이션 중개를 요청하는 노드이다. 이러한 네트워크를 가로질러 각 단말간에 통신을 하기 위해서 IP 주소를 다른 network host로 매핑할 수 있는 프로토콜을 정의하였는데, 이것을 NAT라 한다. NAT 기능은 보통 라우팅 장비에 탑재되어 있으며, NAT Table을 사용하여 단말기의 IP를 변환해준다.

NAT

좀 더 이해하기 쉽게 이야기해보면?

가정의 공유기를 생각해보자. 집까지 인터넷선 하나와 IP 하나가 들어오며, 이 인터넷선에는 공유기가 붙어있다. 그리고 공유기로 구성된 사설 네트워크에 여러 단말기(PC, 핸드폰, 태블릿 등)들이 붙어 있다. 이렇게되면 공유기는 공용 IP를 가지게 되고, 단말기들은 공유기가 DHCP 혹은 고정적으로 할당한 사설 IP를 가지게 된다. 그리고 모든 네트워크는 공유기를 통해 여러 서비스를 제공하는 서버로 연결할 수 있다.

이 과정을 조금 더 자세히 이야기해보자 현재 출시되는 대부분의 공유기에는 기본적으로 NAT 기능을 제공한다. 그리고 이 NAT 기능은 크게 2가지 기능을 제공한다.

  • NAT Table 관리
  • 요청을 보내는 단말기의 network header의 source ip를 내부 네트워크의 단말기의 IP 주소에서 외부로 노출된 IP로 바꾸어 실제 서버로 요청을 보내고, 응답을 받을 때도 마찬가지 작업을 해준다. 단말기를 공유기에 붙게 되면 IP주소를 할당받게 되고, 이는 공유기의 NAT Table에 기록된다. 단말기에서 외부의 서버로 접속할 때 공유기를 통해 요청이 나가게 되고, 요청에 대한 응답은 공유기를 통해 들어오게 된다. 물론 이 때 NAT Table에 의해 source ip는 단말기의 ip가 아닌 공유기의 ip로 변환되어 전송된다.

이걸 쓰면 어떻게 되는데?

  • 부족한 IPv4 수의 대체제
    • 방대한 수의 모든 컴퓨터에 중복되지 않는 유일한 IP주소를 할당하는 것은 불가능하다.
    • 이 부분에서 내부 네트워크 영역을 만들고 이를 처리할 수 있는 서버가 있다면 부족한 IP수를 어느정도 해결할 수 있다. 하나의 NAT내부에 있는 모든 노드들은 NAT가 알 수 밖에 없고, 이로 인하여 NAT는 자신에게 속한 모든 노드를 알 수 있다. NAT 외부에서는 NAT로 연결되는 IP와 포트만 알면 되기 때문에, 인터넷에 연결하려는 모든 노드에 유일한 IP를 할당할 필요가 없다.
    • IPv6의 경우는 이야기가 다른데, IPv6의 경우는 모든 단말기에 유일한 IP주소를 할당할 수 있기 때문에 NAT를 필요로 하지는 않는다.
  • 네트워크를 만들 수 있는 라우팅 환경과 로드밸런싱
    • NAT는 외부에 연결되는 네트워크에 대한 정보 또한 알고 있다. 이는 서로를 알고 있는 NAT 간에 통신을 할 수 있음을 의미한다.
  • 로드밸런싱
    • 외부에서 NAT를 통해 서버로 접속하는 경우, 이를 NAT 장비에서 분산하여 보낼 수 있다.
    • NAT에서 RoundRobin 방식으로 일괄적으로 요청을 분배할 수 있고 혹은 NAT Table을 수정하여 데이터 흐름을 조절할 수 있다.
    • 반대로 필요 시, NAT Table을 수정하여 특정 서버로의 요청을 분산하거나 집중 혹은 우회시킬 수 있다.
    • 이는 모든 요청이 NAT를 통해 들어오니 가능한 부분이다.
  • 내부 단말기의 보호
    • NAT는 내부의 모든 단말기를 알 수 있지만 과연 외부에서도 그럴까?
    • NAT의 작업 중 하나는 source ip를 외부에서 보는 IP로 바꾸어주는 기능이다. 이는 내부의 네트워크를 감춰주는 역할을 한다. 때문에 NAT 외부에서는 서버를 공격하기 위해 먼저 외부에 노출된 NAT를 공격할 수 밖에 없으며, 이는 방어하는 입장에서 굉장히 큰 메리트를 가진다. 외부의 적이 어디로 들어올지 알고, 그 방법이 제한되어 있다면 이를 막기 위한 방법을 선택하거나 적용하기가 더 쉽다.

참고문서

Wikipedia: NAT