🧩 NAT Gateway란?
NAT(Network Address Translation) Gateway는
VPC 내부의 Private IP ↔ Public 네트워크 간의 주소 변환을 수행하는 서비스입니다.
즉,
- 내부 → 외부 통신할 때 IP를 바꿔줌
- 외부 → 내부 통신할 때 IP를 바꿔줌
그런데 이때 사용되는 기술이 바로
- SNAT (Source NAT)
- DNAT (Destination NAT)
입니다.
🟦 SNAT (Source NAT) — 내부 → 외부 통신
✔ 핵심 정의
VPC 내부(Private IP)에서 외부(인터넷)로 나갈 때
출발지 IP(Private → Public)로 변환해주는 기능.
✔ 왜 필요한가?
Private Subnet에 있는 ECS들은 보통 Public IP가 없음
그래서 그냥은 인터넷에 못 나감.
내부 IP(10.x.x.x)로는 절대로 공인 인터넷에서 응답을 줄 수 없음
그럼 어떻게 해야 할까?
→ NAT Gateway의 SNAT 규칙을 만들어
내부 IP가 NAT Gateway가 보유한 Public IP로 변환되어 나가게 함.
⚙ 동작 흐름
예시: Private ECS → Internet (yum update)
- ECS(10.0.1.10)에서 yum update 요청
- NAT GW가 SNAT 규칙에 의해 출발지 IP를 공인 IP로 변경
→ 예: 47.xxx.xxx.xxx - 인터넷으로 전송
- 응답은 NAT GW 공인 IP로 돌아옴
- NAT GW가 다시 Private IP(10.0.1.10)로 복원
- ECS에 전달
📦 실제 규칙 예시
SNAT:
VPC subnet 10.0.1.0/24 → EIP 47.xxx.xxx.xxx
🟥 DNAT (Destination NAT) — 외부 → 내부 통신
✔ 핵심 정의
외부(인터넷)에서 들어오는 패킷의
목적지 IP(공인 → 사설)로 변환해주는 기능.
✔ 왜 필요한가?
보통 ECS는 Private Subnet에 있고
직접 Public IP를 붙이지 않을 때가 많음.
하지만 외부에서 특정 서비스를 들어와야 할 때가 있죠?
예:
- 웹서버 접속(HTTP/HTTPS)
- SSH 접속
- 특정 Port 기반 API 요청
→ 이때 사용하는 것이 DNAT 규칙(Port Forwarding)
⚙ 동작 흐름
예: 외부 클라이언트 → ECS의 22번 포트로 SSH 접속
- 외부에서
47.xxx.xxx.xxx:22로 요청 - NAT GW의 DNAT 규칙을 확인
- 목적지 IP를 Private IP(10.0.1.10:22)로 변환
- 패킷 내부로 전달
- 응답도 NAT GW를 통해 역 변환해서 외부로 나감
📦 실제 규칙 예시
DNAT:
EIP 47.xxx.xxx.xxx:22 → 10.0.1.10:22
🟩 언제 어떤 NAT를 써야 할까?
✔ SNAT이 필요한 경우
- Private ECS에서 인터넷 나가는 용도
- Docker 이미지 pull
- yum/apt update
- 외부 API 호출
- 소규모 백엔드 서버 구성
✔ DNAT이 필요한 경우
- Public IP 없이 웹서비스를 노출하고 싶을 때
- 특정 Private ECS에 SSH해야 할 때
- 특정 Port로 들어오는 요청을 내부 포트로 보내고 싶을 때
(Nginx, Game Server, Custom API 등)
🧾DNAT 구성할 때 쉽게 안되었던 부분
DNAT구성은 다음과 같이 했다.
PC -> EIP -> NAT-GW(DNAT) -> ECS(Private IP)
위와 같은 형태로 Private IP만 붙은 서버 앞단에 NAT-GW(EIP)만 붙여서 ssh(22)로 접속하려 했으나, 통신이 안되는 현상 발생했다.
그 이유는,
✅ ICMP Retrieval 옵션이 “켜져 있으면” DNAT 트래픽이 차단될 수 있다.
📌 ICMP Retrieval 이란?
Alibaba Cloud Internet NAT Gateway에서 제공하는 특별한 기능으로,
ICMP(Echo Request/Reply) 트래픽을 NAT Gateway가 역방향으로 되찾아(retrieve) 전달하도록 강제하는 옵션
이다.
일반적인 NAT는 TCP/UDP 위주의 state tracking을 하지만,
ICMP는 별도의 처리가 필요하다.
ping 요청 (Echo Request)ping 응답 (Echo Reply)
이 두 개를 NAT 테이블에서 올바르게 매칭해야만 왕복이 성립된다.
그래서 ICMP Retrieval은 내부 → 외부 방향의 ping(SNAT 기반)에서
ICMP 패킷의 state tracking을 보다 안정적으로 처리하기 위한 기능이다.
이 옵션이 DNAT 규칙(inbound 트래픽)과 충돌을 일으킨다는 점.
📌 ICMP Retrieval을 켜면 DNAT가 안되는 이유
Alibaba Cloud 공식 문서에서도 다음과 같이 설명한다.
ICMP Retrieval은 SNAT(ICMP outbound) 전용 기능이며,
DNAT inbound 트래픽과 NAT Translation entry를 공유한다.
이때 충돌이 발생하면 DNAT 트래픽이 NAT GW에서 Drop된다.
즉, 흐름이 이렇게 꼬인다:
PC → EIP → NAT Gateway
(여기서 ICMP Retrieval이 state를 먼저 가로챔)
→ DNAT 룰 적용 전 Drop
→ ECS까지 도달하지 못함
📌 결론 정리
✔ ICMP Retrieval = SNAT 기반 ICMP 보조 기능
✔ DNAT inbound 트래픽과 충돌 가능성 있음
✔ 켜져 있으면 DNAT 기반 SSH/HTTP까지 실패할 수 있음
✔ 끄면 DNAT가 즉시 정상 동작함 (정상적인 현상)
✔ Alibaba Cloud NAT Gateway의 설계 구조상 발생하는 특성임


댓글 남기기