NAT란?

신동혁·2023년 4월 20일

NAT란?

NAT는 Network Address Translation의 약자로 하나의 공인 ip로 여러 호스트(pc)가 인터넷에 연결될 수 있도록 하는 기술이다. 보통 라우터나 방화벽에 설치되는 기술이다. 주소를 변환하는 과정에서 속도 저하가 발생된다.

동작원리

<예시 상황>

  • HOST : 10.0.0.1
  • ROUTER의 공인 ip : 150.150.0.1
  • SERVER : 200.100.10.1

위와 같은 조건에서 HOST가 ROUTER를 통해 SERVER와 통신하는 과정을 알아본다. 아래 과정은 NAT의 한 종류인 PAT다.

  1. HOST가 SERVER로 신호를 보내기 위해 패킷 헤더에 출발지와 목적지를 기록.
    출발지 : 10.0.0.1
    목적지 : 200.100.10.1

  2. 이때 ROUTER에서 HOST가 외부로 신호를 보낸다는 것을 인지하고 출발지를 자신의 공인ip 주소로 변경해 기록하고, 해당 정보들로 NAT 테이블을 생성.
    출발지 : 10.0.0.1 -> 150.150.0.1
    목적지 : 200.100.10.1

    <NAT 테이블>

    프로토콜사설ip출발지ip목적지ip
    TCP10.0.0.1150.150.0.1200.100.10.1
  3. 위 과정을 통해 SERVER에 신호가 도착한다면 SERVER는 데이터를 수신해 처리하고 응답한다. 이때도 패킷 헤더에 출발지와 목적지를 기록한다. 하지만 이때의 목적지ip는 ROUTER의 공인 ip주소로 기록한다.
    출발지 : 200.100.10.1
    목적지 : 150.150.0.1

  4. 해당 패킷을 ROUTER가 받게 되면 기존에 기록해두었던 NAT 테이블을 참조해 목적지를 ROUTER의 공인 ip에서 사설 ip로 변경한다. 이러면 통신 완료
    출발지 : 200.100.10.1
    목적지 : 150.150.0.1 -> 10.0.0.1

※ 만약 여러 사설 ip들이 같은 SERVER와 통신을 원한다면?
<NAT 테이블>

프로토콜사설ip출발지ip목적지ip
TCP10.0.0.1150.150.0.1200.100.10.1
TCP10.0.0.2150.150.0.1200.100.10.1
TCP10.0.0.3150.150.0.1200.100.10.1

다음과 같은 NAT 테이블이 기록되어 어떤 사설 ip가 SERVER로 신호를 보냈던 SERVER에서 되돌아오는 패킷에 목적지가 150.150.0.1로 표시되어 있기 때문에 어떤 사설 ip로 응답을 보내야 하는지 모르게 될 것이다. 이를 위해서 포트를 이용해 각각의 사설 ip들을 구분하는 방식을 이용한다. 이를 PAT 또는 NAPT라고 한다.

즉, 다음과 같은 NAT 테이블이 생성됨
<NAT 테이블>

프로토콜사설ip사설망포트출발지ip목적지ip
TCP10.0.0.11150.150.0.1200.100.10.1
TCP10.0.0.22150.150.0.1200.100.10.1
TCP10.0.0.33150.150.0.1200.100.10.1

종류

  • Static NAT
    1:1 매핑으로 주소를 변화하는 방식이다. 1:1로 변환만 해주는 방식으로 ip를 효율적으로 사용하는 방식은 아니다. 이 방법은 보통 하나의 사설ip가 큰 역할을 담당해 포트 포워딩 작업이 많이 필요할 경우 사용한다. 한 개의 사설ip = 공인 ip 이런 느낌으로 사용하는 방식.
  • Dynamic NAT
    사설 ip도 여러개, 공인 ip도 여러개 있을 때 사용하는 방식이다. 위에서 설명한 동작 원리를 통해 서로 다른 사설 ip들이 같은 SERVER에 신호를 주고 응답을 받기 위해서는 서로 다른 사설 ip들을 구분할 수 있어야 함을 알 수 있었다. 이를 위해 서로 다른 비어있는 공인 ip를 동적으로 선택해 주소를 변환하는 방식이다.
  • PAT
    위에서 설명한 동작원리의 방식.

0개의 댓글