Jerry's Log

NAT

contents

1. 핵심 개념: NAT란 무엇인가?

NAT (Network Address Translation) 는 라우터와 같은 네트워크 장비가 패킷을 중계하는 동안, 패킷 헤더에 있는 IP 주소 정보를 수정하여 하나의 IP 주소 공간을 다른 IP 주소 공간으로 재매핑(Remapping) 하는 기술입니다.

비유: 회사 우편물실 (Mailroom)

수백 명의 직원이 근무하는 거대한 회사 빌딩(내부 네트워크)을 상상해 보세요.


2. NAT 작동 원리: 패킷 변조 과정

패킷이 LAN(내부망)에서 WAN(외부망)으로 이동할 때, 라우터는 물리적으로 데이터 패킷의 헤더(Header) 내용을 수정합니다.

단계별 흐름 (PAT / Masquerading 방식)

상황: 사용자님의 노트북(192.168.1.5)이 구글(8.8.8.8)에 접속하려고 합니다.

  1. 요청 발송 (노트북 $\rightarrow$ 라우터):
    • 출발지: 192.168.1.5:12345 (내부 IP + 랜덤 포트 번호)
    • 목적지: 8.8.8.8:80 (구글 웹 서버)
    • 패킷이 라우터에 도착합니다.
  2. 변환 (라우터의 행동):
    • 라우터는 자신의 NAT 변환 테이블(Translation Table) 에 기록을 남깁니다.
    • 출발지 IP를 자신의 WAN IP(203.0.113.1)로 바꿔치기합니다.
    • 출발지 포트를 자신이 관리하는 고유 번호(55001)로 바꿔서 이 대화를 추적합니다.
  3. 인터넷 구간 (라우터 $\rightarrow$ 구글):
    • 출발지: 203.0.113.1:55001 (라우터의 공인 얼굴)
    • 목적지: 8.8.8.8:80
    • 구글이 응답을 보냅니다.
  4. 응답 수신 (구글 $\rightarrow$ 라우터):
    • 출발지: 8.8.8.8:80
    • 목적지: 203.0.113.1:55001 (라우터의 공인 IP로 도착)
  5. 역변환 (라우터의 행동):
    • 라우터가 테이블을 확인합니다: "55001번 포트 누가 쓰고 있었지? 아, 192.168.1.5의 12345번 포트였구나."
    • 목적지 IP를 다시 192.168.1.5로 되돌립니다.
    • 목적지 포트를 다시 12345로 되돌립니다.
    • 노트북에게 패킷을 전달합니다.

3. NAT의 종류

모든 NAT가 같은 것은 아닙니다. 어떤 종류를 쓰느냐에 따라 서버 운영이 쉬울 수도, 어려울 수도 있습니다.

A. Static NAT (1:1 NAT)

B. Dynamic NAT

C. PAT (Port Address Translation) / NAT Overload


4. NAT 용어 정리 (Cisco 표준)

네트워크 문서나 Orchestrator 매뉴얼에서 자주 보게 될 헷갈리는 4가지 용어입니다.

용어 정의
Inside Local 내부망에 있는 기기의 실제 IP
Inside Global 외부 세상이 보기에 내부 기기가 사용하는 IP
Outside Global 목적지 서버의 실제 공인 IP
Outside Local 내부 호스트가 보기에 목적지가 사용하는 IP

5. NAT Traversal: NAT를 뚫는 방법들

NAT는 기본적으로 외부에서 들어오는 트래픽을 차단(보안 기능)하므로, 이를 우회하는 기술들이 있습니다.

  1. 포트 포워딩 (Static): 라우터에게 수동으로 명령합니다. "8080번 포트로 누가 오면 무조건 기기 X로 보내." (지금 사용하신 방법)
  2. DMZ (Demilitarized Zone): "누군지 모르는 손님은 일단 무조건 기기 X로 다 보내." (편하지만 위험한 방법)
  3. UPnP (Universal Plug and Play): 내부 기기가 라우터에게 자동으로 "나 554번 포트 좀 열어줘"라고 부탁하는 기능.
  4. 홀 펀칭 (Hole Punching - STUN/TURN): 줌(Zoom), 스카이프, P2P 게임 등이 쓰는 방식. 내부 클라이언트가 외부 서버에 먼저 신호를 보내서 NAT 테이블에 구멍(Entry)을 잠시 뚫어놓고, 그 구멍으로 상대방과 통신하는 기술입니다.

개발자를 위한 요약

references