NAT(Network Address Translation)란?

Louie·2022년 8월 7일
3

NAT(Network Address Translation)

  • 한정적인 IP 주소를 절약하기 위해 생긴 시스템이다.
  • NAT는 라우팅 테이블을 참고하여 하나의 공인 IP를 여러 개의 사설 IP로 변환시킬 수 있다.

라우팅 테이블이란?

  • 라우팅 테이블에 설정한 대상에 포함된 패킷들은 Gateway에 설정된 IP로 변환되어 전송됩니다.
  • 예를 들어 아래와 같이 라우팅 테이블을 설정했다고 가정합시다.
대상(Destination)Gateway
0.0.0.0WAN(외부망)
1.2.3.0LAN(내부망)
  • 송신자가 1.2.3.123이라는 IP 주소에 패킷을 보내면 라우팅 테이블은 LAN(내부망)에 연결된 장비들의 중 사설 IP가 1.2.3.123으로 할당된 장비에게 패킷이 전달됩니다.
    • IP 주소에서 0은 0~255의 범위를 뜻하기 때문에 1.2.3.1231.2.3.0에 포함됩니다.
    • 1.2.3.1230.0.0.0에도 포함되지만 라우팅 테이블은 주소가 더 자세히 적혀있을수록 우선순위가 높기 때문에 IP 주소가 1.2.3.0인 대상의 Gateway에 전달됩니다.
  • 송신자가 2.2.2.2이라는 IP 주소에 패킷을 보내면 2.2.2.2는 라우팅 테이블의 대상인 0.0.0.0에 포함되기 때문에 WAN(외부망)으로 패킷이 전달됩니다.
  • 이처럼 NAT는 라우팅 테이블을 참고해 WAN과 LAN을 구분하여 패킷을 전달하게 됩니다.

NAT는 어떻게 공인 IP를 사설 IP로 변환할 수 있을까?

  • 요청을 보내고 응답을 받게 된다면 응답받는 대상의 주소는 외부망끼리 통신하기 때문에 당연히 공인 IP로 되어있을 겁니다.
  • 하지만 공인 IP만 알고 있으면 내부망에는 여러 장비가 연결되어 있기 때문에 요청을 보냈던 특정 장비에게 응답 정보를 보내지 못합니다.
  • 이런 문제를 아래와 같이 수신자가 요청을 보낼 때 사설 IP를 공인 IP로 바꾸는 과정에서 NAT가 내부에 갖고 있는 테이블에 기록해서 해결합니다.
프로토콜요청 송신자의 사설 IP요청 송신자의 공인 IP요청 수신자의 공인 IP요청 PORT
HTTPCAB10000
HTTPDAB10000
  • 테이블에는 수신자의 사설 IP와 포트, 송/수신자의 공인 IP 주소와 프로토콜을 기록하고 응답을 받으면 NAT 내부에 기록했던 테이블 정보를 확인해서 공인 IP를 사설 IP로 변환하게 됩니다.

NAPT(Network Address Port Translation override)

  • 아래와 같이 내부망이 같은 두 기기가 외부망의 같은 서버에 같은 프로토콜로 요청을 보낸 다음 응답을 받는다고 가정합니다.
  • 심지어 요청한 포트까지 같다면 어떻게 될까요?
프로토콜요청 송신자의 사설 IP요청 송신자의 공인 IP요청 수신자의 공인 IP요청 PORT
HTTPCAB10000
HTTPDAB10000
  • 요청 송/수신자의 공인 IP가 같은 행이 여러 개이기 때문에 NAT 내부 테이블만 보고는 공인 IP를 사설 IP로 변환하지 못합니다.
  • 이런 문제를 해결하기 위해 NAPT가 만들어졌습니다.
  • NAPT는 PAT, NAT override라는 용어로 부르기도 합니다.
  • NAPT의 테이블은 아래와 같이 NAT 테이블에서 변환된 요청 PORT를 관리하는 컬럼이 추가로 구성되어 있습니다.
프로토콜요청 송신자의 사설 IP요청 송신자의 공인 IP요청 수신자의 공인 IP요청 PORT변경된 요청 PORT
HTTPCAB1000010001
HTTPDAB1000010002
  • NAPT는 사설 IP를 공인 IP로 변경하는 과정에서 요청 포트까지 변경하여 테이블에 기록합니다.
  • 변경된 요청 포트는 요청에 대한 정보를 구분할 수 있어야 하기 때문에 사용할 수 있는 포트의 번호가 제한되어 있습니다.

참고 자료

profile
백엔드 개발자를 준비하고 있는 Louie입니다.

4개의 댓글

comment-user-thumbnail
2022년 8월 7일

정리해야지 해야지 하면서 미룬 NAT를 루이가 대신 정리해주었네요;;;
너무 잘 읽었어요 역시 루이;;

1개의 답글
comment-user-thumbnail
2022년 8월 11일

딱 핵심만 정리를 잘하셨군요😀
프로젝트하면서 훑어봤던 내용인데 덕분에 다시 복습할 수 있었습니다~

1개의 답글