Overview
인터넷 환경에서 모든 장치가 고유한 공인 IP를 가지는 것은 현실적으로 불가능하다.
그 해결책이 바로 NAT(Network Address Translation)이다.
NAT는 사설 네트워크와 외부 인터넷 간의 주소를 변환하여 IP 주소 자원 절약, 보안성 강화, 유연한 통신 환경을 제공하는 핵심 기술이다.
이번 글에서는 NAT의 개념과 더불어 SNAT, DNAT, PAT 등 다양한 유형들을 실제 시나리오와 함께 설명하며, 네트워크 흐름 속 NAT의 동작 원리를 쉽게 이해할 수 있도록 정리한다.
📅 관련 글
2023.01.13 - [CS 지식] - [CS 지식1.] 웹 브라우저의 동작원리
2023.02.23 - [CS 지식] - [CS 지식2.] DNS의 동작원리(Domain Name System)
2023.03.06 - [CS 지식] - [CS 지식3.] HTTP / HTTPS 란?
2023.03.07 - [CS 지식] - [CS 지식4.] OSI 7계층 & TCP/IP 4계층이란?
2023.03.17 - [CS 지식] - [CS 지식5.] 가상화란?
2023.05.24 - [CS 지식] - [CS 지식6.] HTTP 메서드(Method)란? / HTTP Status Code
2023.12.05 - [CS 지식] - [CS 지식7.] Kubernetes 구성요소와 Pod 생성 방식이란?
2023.12.19 - [CS 지식] - [CS 지식8.] 프로세스(Process)와 스레드(Thread)란?
2023.12.30 - [CS 지식] - [CS 지식9.] 클라우드 컴퓨팅이란?(Public & Private Cloud / IaaS SaaS PaaS / Multitenancy)
2024.01.05 - [CS 지식] - [CS 지식10.] 웹1.0(Web1.0) vs 웹2.0(Web2.0) vs 웹3.0(Web3.0)
2024.02.02 - [CS 지식] - [CS 지식11.] NAT(Network Address Translation)란?
2024.05.22 - [CS 지식] - [CS 지식13.] 동기 및 비동기 처리란?
2024.05.23 - [CS 지식] - [CS 지식14.] 3tier 아키텍처란?
2024.08.28 - [CS 지식] - [CS 지식15.] SSR vs CSR vs ISR vs SSG
2024.11.09 - [CS 지식] - [CS 지식16.] stdin(표준입력) vs stdout(표준출력) vs stderr(표준에러)
2024.11.11 - [CS 지식] - [CS 지식17.] IPsec vs SSL/TLS
2024.11.22 - [CS 지식] - [CS 지식18.] Quantum Computing(양자 컴퓨팅)
NAT란?
NAT는 네트워크 주소를 다른 주소로 변환하는 과정이다. 이 기술은 주로 IP 주소의 부족 문제를 해결하고, 내부 네트워크를 인터넷으로부터 보호하기 위해 사용된다. 일반적으로 홈 라우터나 기업의 방화벽에서 많이 볼 수 있으며, 여러 장치가 하나의 공인 IP 주소를 사용하여 인터넷에 접속할 수 있도록 해준다.
NAT는 내부 네트워크(사설 네트워크)와 외부 네트워크(인터넷) 사이의 IP 주소를 매핑하는데 사용되며, 내부 IP 주소를 외부로 노출시키지 않고 인터넷과 통신할 수 있게 한다.
NAT 유형
Static NAT
단일 개인 IP 주소와 단일 공인 IP 주소 간의 일대일 매핑입니다. 일반적으로 웹 사이트를 호스팅하는 서버와 같이 외부 네트워크에서 직접 액세스해야 하는 장치에 사용된다.
Dynamic NAT
이 유형에는 개인 IP 주소 풀을 공인 IP 주소 풀에 매핑하는 작업이 포함된다. 각 연결의 개인 IP 주소에 대해 항상 동일한 공인 IP 주소를 보장하는 것은 아니다. 아웃바운드 연결을 시작해야 하는 여러 장치가 있고 공인 IP 주소 풀이 있는 경우에 사용된다.
PAT(Port Address Translation)
NAT 오버로드라고도 하는 PAT는 여러 포트 번호를 사용하여 여러 개인 IP 주소를 단일 공인 IP 주소 또는 몇 개의 공인 IP 주소에 매핑한다. 이는 많은 내부 장치가 ISP에서 제공하는 단일 공인 IP 주소를 공유하는 소규모 사무실/홈 오피스(SOHO) 네트워크에서 매우 일반적이다.
SNAT (Source Network Address Translation)
SNAT는 발신 트래픽에 대해 내부 소스 IP 주소를 외부 IP 주소로 변환하는 과정이다. 이는 주로 내부 네트워크에서 외부 네트워크로 나가는 트래픽에 적용된다. SNAT를 사용하면 여러 개의 사설 IP 주소를 가진 장치들이 단일 공인 IP 주소를 통해 인터넷에 접근할 수 있다. 이 과정에서 포트 번호도 함께 변환되어, 외부 응답이 올바른 내부 장치로 라우팅될 수 있게 한다.
DNAT (Destination Network Address Translation)
DNAT는 목적지 주소를 변환하는 방식으로, 외부 네트워크에서 들어오는 트래픽에 대해 공인 IP 주소를 내부 IP 주소로 매핑한다. DNAT는 주로 인바운드 서버 접속이나 포트 포워딩 설정에 사용된다. 예를 들어, 인터넷에서 특정 공인 IP 주소와 포트로 들어오는 요청을 내부 네트워크의 특정 서버로 전달하고자 할 때 DNAT 규칙이 사용된다.
NAT Workflow
내부 네트워크의 장치가 인터넷에 접속할 때 SNAT를 통해 IP 주소가 어떻게 변환되는지, 그리고 외부 네트워크에서 내부 서버로 트래픽이 들어올 때 DNAT를 통해 어떻게 목적지 IP 주소가 변환되는지를 보여준다. SNAT는 주로 발신 트래픽에 대해 적용되며, DNAT는 주로 들어오는 트래픽에 대해 적용된다. 이 과정은 라우팅과 포트 번호도 관련이 있어, 트래픽이 올바른 내부 장치로 정확히 전달될 수 있도록 한다.
- Internal Network [Private IP Space]
- 사설 IP 주소 공간을 가진 내부 네트워크이다. 클라이언트 기기와 내부 서버가 이에 속한다.
- SNAT Device
- 내부 네트워크에서 외부 인터넷으로 나가는 트래픽의 소스 IP 주소를 사설에서 공인으로 변환한다.
- DNAT Device
- 외부에서 내부 네트워크로 들어오는 트래픽의 목적지 IP 주소를 공인에서 사설로 변환한다.
- Internet [Public IP Space]
- 공인 IP 주소 공간을 가진 인터넷이다. 외부 클라이언트가 이에 속한다.
NAT Workflow Scenario
SNAT와 DNAT가 모두 포함된 NAT 시나리오를 설명하는 업로드된 이미지를 기반으로 IP 주소와 포트가 포함된 예제를 추가하여 어떻게 작동하는지 알아본다.
Internal Client Machine | Internet-Facing Public IP | External Client | Internal Server |
192.168.1.100 | 198.51.100.1 | 203.0.113.50 | 192.168.1.200 |
내부 클라이언트 시스템이 인터넷에 액세스하려고 하면 다음 세부 정보가 포함된 패킷을 보낸다.
Source IP | Source Port | Destination IP | Destination Port |
192.168.1.100 | 12345 | 203.0.113.50 | 80 |
내부 서버의 사설 IP | 클라이언트 운영 체제에서 선택한 임의의 포트 | 외부 클라이언트의 공인 IP | HTTP 요청이라고 가정 |
요청이 SNAT 장치를 통과하면 소스 IP와 포트가 변환된다.
Translated Source IP | Translated Source Port |
198.51.100.1 | 54321 |
SNAT 장치의 공인 IP | NAT 장치에서 할당한 새 포트 |
외부 클라이언트가 내부 서버에 요청을 보낼 때 다음 세부 정보가 사용된다.
Source IP | Source Port | Destination IP | Destination Port |
203.0.113.50 | 44321 | 198.51.100.1 | 80 |
외부 클라이언트의 퍼블릭 IP | 외부 클라이언트의 OS가 선택한 임의의 포트 | 인터넷에 연결된 공인 IP, 내부 서버와 연결됨 | HTTP 요청이라고 가정 |
이 패킷이 DNAT 장치에 도착하면 대상 IP와 포트가 내부 서버에 도달하도록 변환된다.
Translated Source IP | Translated Source Port |
192.168.1.200 | 80 |
내부 서버의 사설 IP | 내부 서버가 Listen하고 있는 포트 |
내용을 정리하자면 다음과 같다.
내부 클라이언트에서 인터넷으로: 내부 클라이언트(192.168.1.100)가 외부 공인 IP(203.0.113.50)를 목표로 인터넷으로 패킷을 보낸다.
SNAT 변환: 패킷이 SNAT 장치를 통과하면서 소스 IP가 내부 클라이언트의 IP에서 라우터의 공용 IP(198.51.100.1)로 변경된다.
외부 클라이언트에서 내부 서버로: 외부 클라이언트(203.0.113.50)가 내부 서버로 향하는 라우터의 공인 IP(198.51.100.1)로 패킷을 보낸다.
DNAT Translation: DNAT 장치는 이 패킷을 가로채서 대상 IP를 내부 서버의 사설 IP(192.168.1.200)로 변환한다.
해당 프로세스는 내부 네트워크의 개인 주소 공간을 보존하면서 양방향 통신을 보장한다.
실무에서 자주 쓰이는 NAT 활용 예시
실제 시스템 운영 환경이나 클라우드, Kubernetes와 같은 컨테이너 기반 플랫폼에서는 NAT가 아래와 같은 방식으로 자주 활용된다.
항목 | 설명 |
NAPT (Network Address Port Translation) | IP 주소뿐만 아니라 포트 번호까지 포함하여 매핑하는 방식. 하나의 공인 IP로 다수의 사설 IP를 동시에 처리 가능하며, PAT(Port Address Translation)과 사실상 동일 개념이다. 일반적인 가정용 공유기나 기업 NAT 장비에서 기본적으로 사용됨. |
클라우드에서의 NAT 예시 | 퍼블릭 클라우드를 사용할 경우 NAT 게이트웨이 기능이 자주 등장함. 예: AWS NAT Gateway, Azure NAT Gateway, GCP Cloud NAT. 이를 통해 사설 서브넷에 위치한 리소스가 인터넷에 접근은 가능하지만 외부에서 직접 접근은 차단된다. |
Kubernetes에서의 NAT 활용 | Kubernetes 클러스터에서도 NAT는 Pod → 외부 통신 시 기본적으로 사용됨. 특히 LoadBalancer 서비스, ExternalName 서비스의 경우 SNAT이 적용되어 클러스터 외부와 통신할 수 있다. |
NAT와 보안 | NAT는 외부에서 사설 IP 영역으로 직접 접근이 불가능하게 막기 때문에 일종의 기본 방화벽 효과를 제공한다. 이로 인해 인바운드 접근을 명시적으로 설정하지 않으면 외부에서 내부 시스템에 접근할 수 없다. |
IPv6 시대에서의 NAT 논쟁 | IPv6는 광대한 주소 공간을 가지고 있어 NAT 없이도 모든 장치에 고유한 IP를 부여할 수 있음. 하지만 여전히 NAT66이라는 형태로 NAT를 적용하는 사례도 존재하며, 보안 및 트래픽 제어 관점에서 필요성이 제기되기도 한다. |
마무리
NAT는 단순한 주소 변환 기술을 넘어, 인터넷 통신의 기반을 지탱하는 핵심 인프라이다.
SNAT는 내부에서 외부로 나가는 트래픽,
DNAT는 외부에서 내부로 들어오는 트래픽,
그리고 PAT는 포트 기반의 다중 매핑을 통해 효율적인 IP 사용을 가능하게 해준다.
이러한 기술은 일반적인 가정용 공유기부터 대규모 데이터센터의 라우터, 클라우드 네트워크까지 폭넓게 활용되며, 현대 네트워크 구조의 보안성과 확장성을 동시에 확보하는 데 중요한 역할을 한다.
또한, 클라우드 환경(AWS, GCP 등)이나 Kubernetes 네트워크에서도 SNAT/DNAT는 자주 활용되는 개념이므로,
DevOps나 인프라 엔지니어를 지향한다면 반드시 이해하고 넘어가야 할 필수 지식이다.
참고로, Kubernetes의 kube-proxy가 클러스터 내부 Pod 간 통신 시 SNAT을 적용하거나, AWS에서는 NAT Gateway를 통해 VPC 내부에서의 인터넷 접근을 SNAT 방식으로 처리한다.
Reference
https://itwiki.kr/w/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC_%EC%A3%BC%EC%86%8C_%EB%B3%80%ED%99%98
https://aws-hyoh.tistory.com/145
https://whatismyipaddress.com/nat
https://en.wikipedia.org/wiki/Network_address_translation
'CS 지식' 카테고리의 다른 글
[CS 지식13.] 동기 및 비동기 처리란? (0) | 2024.06.06 |
---|---|
[CS 지식12.] SSO(Single Sign-On)란? (With OAuth SAML OIDC) (0) | 2024.03.23 |
[CS 지식10.] 웹1.0(Web1.0) vs 웹2.0(Web2.0) vs 웹3.0(Web3.0) (2) | 2024.01.09 |
[CS 지식9.] 클라우드 컴퓨팅이란?(Public & Private Cloud / IaaS SaaS PaaS / Multitenancy) (0) | 2023.12.30 |
[CS 지식8.] 프로세스(Process)와 스레드(Thread)란? (1) | 2023.12.27 |