NAT (Network Address Translation)

2025. 10. 24. 16:17·컴퓨터 네트워크

1. 개요 (Overview)

NAT (Network Address Translation)는 IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고받는 기술이다. 주로 사설 네트워크에 속한 여러 개의 호스트가 하나의 공인 IP 주소를 사용하여 인터넷에 접속하기 위해 사용된다.

  • 주요 목적: IPv4 주소 고갈 문제 해결, 내부 네트워크 보안 강화
  • 표준: RFC 2663, RFC 3022

2. 핵심 개념 (Core Concepts)

  • 사설 IP 주소 (Private IP Address)
    • 내부 네트워크(LAN)에서만 사용되도록 예약된 IP 주소 대역. 인터넷을 통해 직접 접근할 수 없으며, 라우팅되지 않는다.
    • 대역:
      • Class A: 10.0.0.0 – 10.255.255.255
      • Class B: 172.16.0.0 – 172.31.255.255
      • Class C: 192.168.0.0 – 192.168.255.255
  • 공인 IP 주소 (Public IP Address)
    • ISP(인터넷 서비스 제공업체)가 제공하는 고유한 IP 주소. 전 세계 인터넷상에서 식별 가능하며, 직접 통신이 가능하다.
  • NAT Translation Table
    • NAT 장비(라우터 등)가 IP 주소와 포트를 변환한 내역을 기록하는 테이블. 이 테이블을 참조하여 외부에서 들어오는 패킷을 정확한 내부 호스트로 전달한다.
    • 구성 항목: 출발지 사설 IP/Port, 변환된 공인 IP/Port, 목적지 IP/Port 등

3. 동작 방식 (Mechanism)

Outbound Traffic (LAN → Internet)

  1. 패킷 생성: 내부 호스트(192.168.0.10)가 외부 서버(8.8.8.8)로 패킷을 생성한다.
    • Source IP: 192.168.0.10, Destination IP: 8.8.8.8
  2. 주소 변환: 패킷이 NAT 장비에 도달하면, 장비는 패킷의 출발지 주소를 자신의 공인 IP 주소(211.100.10.1)와 임의의 포트 번호로 변경한다.
    • Source IP: 211.100.10.1, Destination IP: 8.8.8.8
  3. 테이블 기록: NAT 장비는 변환 내역(192.168.0.10:port_A → 211.100.10.1:port_B)을 Translation Table에 기록한다.
  4. 패킷 전송: 변환된 패킷을 인터넷을 통해 목적지로 전송한다.

 

Inbound Traffic (Internet → LAN)

  1. 응답 수신: 외부 서버(8.8.8.8)가 NAT 장비의 공인 IP(211.100.10.1)로 응답 패킷을 보낸다.
    • Source IP: 8.8.8.8, Destination IP: 211.100.10.1
  2. 테이블 조회: NAT 장비는 수신된 패킷의 목적지 포트 번호를 확인하고, Translation Table을 조회하여 매핑된 내부 호스트 정보를 찾는다.
  3. 주소 재변환: 테이블 기록을 바탕으로 패킷의 목적지 주소를 원래의 사설 IP(192.168.0.10)로 재변환한다.
    • Source IP: 8.8.8.8, Destination IP: 192.168.0.10
  4. 패킷 전달: 재변환된 패킷을 해당 내부 호스트로 전달한다.

4. 주요 유형 (Major Types)

  • Static NAT (1:1 NAT)
    • 정의: 사설 IP와 공인 IP를 1:1로 고정하여 매핑한다.
    • 특징: 외부에서 사설 네트워크의 특정 호스트(서버 등)로의 접속이 필요할 때 사용된다. 보안성은 낮지만 특정 서비스를 외부에 노출시키기 용이하다.
    • 주요 용도: 외부 접속용 웹 서버, 메일 서버 등.
  • Dynamic NAT
    • 정의: 다수의 공인 IP Pool을 설정하고, 내부 호스트가 외부 접속을 요청할 때 Pool에서 사용 가능한 공인 IP를 동적으로 할당한다.
    • 특징: 할당할 공인 IP 개수만큼의 동시 접속만 허용한다.
  • PAT (Port Address Translation) / NAPT (Network Address Port Translation)
    • 정의: 하나의 공인 IP 주소를 사용하되, 포트 번호를 다르게 할당하여 여러 내부 호스트의 동시 접속을 가능하게 한다.
    • 특징: 현재 가장 보편적으로 사용되는 NAT 방식. IP 주소와 포트 번호의 조합으로 연결을 식별한다. (예: 211.100.10.1:10001, 211.100.10.1:10002)
    • 주요 용도: 가정용 공유기, 대부분의 기업 네트워크 환경.

5. 개발 환경에서의 적용 (Application)

  • 클라우드 컴퓨팅 (AWS 예시)
    • VPC (Virtual Private Cloud): 논리적으로 격리된 사설 네트워크 환경.
    • EC2 Instance: 생성 시 기본적으로 사설 IP를 할당받는다.
    • Internet Gateway: VPC와 인터넷 간의 통로. EC2에 공인 IP를 할당하고 외부에서 접속할 수 있도록 한다.
    • NAT Gateway: Private Subnet에 위치한 인스턴스(DB 서버 등)가 외부 인터넷(OS 업데이트, 패키지 다운로드 등)으로 통신할 필요가 있을 때 사용되는 아웃바운드 전용 게이트웨이.
    • Elastic IP: 고정된 공인 IP 주소를 인스턴스에 할당하는 서비스로, Static NAT의 한 형태이다.
  • 컨테이너 (Docker 예시)
    • Docker Network: 컨테이너는 기본적으로 docker0 브리지 네트워크에 연결되며, 호스트와 격리된 사설 IP 대역(172.17.0.0/16)을 할당받는다.
    • Outbound 통신: 컨테이너가 외부로 통신을 시도할 때, Docker 호스트의 커널이 iptables의 MASQUERADE 규칙을 사용하여 컨테이너의 사설 IP를 호스트의 공인(또는 사설) IP로 변환한다. 이는 PAT 방식과 동일하게 동작한다.
    • 포트 포워딩 (Port Forwarding): docker run -p 8080:80 옵션은 호스트의 8080 포트로 들어오는 트래픽을 컨테이너의 80 포트로 전달하는 규칙을 생성한다. 이는 외부에서 컨테이너 내부의 서비스에 접근하기 위한 일종의 NAT 설정이다.

'컴퓨터 네트워크' 카테고리의 다른 글

서버 연결에 관하여(HTTP, 톰캣, 소켓, 포트)  (0) 2025.11.24
CDN(콘텐츠 분배 네트워크)  (0) 2025.11.06
DNS (Domain Name System)  (0) 2025.10.13
2. 애플리케이션 계층  (0) 2025.04.24
1. 컴퓨터 네트워크와 인터넷  (0) 2025.03.11
'컴퓨터 네트워크' 카테고리의 다른 글
  • 서버 연결에 관하여(HTTP, 톰캣, 소켓, 포트)
  • CDN(콘텐츠 분배 네트워크)
  • DNS (Domain Name System)
  • 2. 애플리케이션 계층
이경빈
이경빈
이 블로그의 게시글을 바탕으로 학습하는 것을 권장하지 않습니다. 이 블로그의 게시글을 통해 무엇을 학습할 수 있고 무엇을 학습해야 하는지 알 수 있는 이정표 및 목차가 되었으면 합니다.
  • 이경빈
    메모용 블로그
    이경빈
    • 분류 전체보기 (44)
      • 기본개념 (0)
      • Git (2)
      • OOP (객체 지향 프로그래밍) (1)
      • CS (2)
      • JAVA (7)
        • 문법 (0)
        • stream api (1)
        • 자료구조 (1)
      • Spring (11)
        • Spring Context (1)
        • Spring beans (1)
        • Spring MVC (0)
        • RestTemplate (1)
        • JPA (1)
        • Mockito (1)
        • Spring Security (4)
        • Async (1)
      • Gradle (0)
      • 컴퓨터 네트워크 (6)
      • DBMS (2)
        • SQL (2)
      • 자료구조 (1)
      • 위클리페이퍼 (5)
      • AWS (0)
      • 프로젝트 (3)
        • 트러블슈팅 (1)
        • 회고 (2)
        • git hub 프로젝트 (0)
        • git in java (0)
      • 운영체제 (1)
      • Project (0)
        • 고민거리들 (0)
        • ai에게 요구한 수정사항 (0)
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.3
이경빈
NAT (Network Address Translation)
상단으로

티스토리툴바