서브넷은 두 가지 종류가 있는데 public 서브넷과 private 서브넷이 있다. 퍼블릭 서브넷은 Internet Gateway(IGW)가 있다. IGW은 VPC와 외부 인터넷 세상을 연결해주는 유일한 관문이다. VPC에는 오직 하나의 IGW만 있다. VPC는 기본적으로 고립된 환경을 가지고 있어 IGW가 없다면 VPC 내부 인프라에서 인터넷 접속이 불가능하다.
퍼블릿 서브넷은 IGW가 있어 인터넷 접속이 가능하지만 IGW가 없는 프라이빗 서브넷은 어떻게 인터넷에 접속을 할까?
이때 필요한게 NAT 게이트웨이이다.
NAT 게이트웨이는 프라이빗 서브넷에 있는 서버가 공인 IP없이 인터넷으로 나갈 수 있게 해주는 중계 장치이다.
→ 쉽게 말하면 외부로 나가는 요청은 대신 전달해주지만 인터넷에서 먼저 안으로 직접 들어오는 요청은 막아주는 구조이다.
NAT(Network Address Translation)는 사설IP를 공인 IP로 바꿔서 통신하게 만드는 기술이다.
AWS의 NAT Gateway는 이 NAT 기능을 관리형으로 제공하는 서비스이다. 보통 프라이빗 서브넷의 EC2나 애플리케이션 서버가 인터넷에 접근해야 할 때 사용한다.
예를 들어 프라이빗 서브넷에 있는 EC2 인스턴스는 사설IP만 가지고 있기 때문에 인터넷과 직접 통신할 수 없다. 이때 NAT를 사용하면 해당 인스턴스는 외부 API를 호출하거나 패키지를 설치하고 운영체제를 업데이트할 수 있다.
특징
즉, NAT는 내부 → 외부 통신을 위한 기술이지만 외부 사용자가 내부 서버로 직접 들어오게 하는 기술은 아니다.
그럼 여기서 사설 IP는 뭐고 공인 IP는 뭐고 왜 바꿔야 할까?

IP는 인터넷에 연결되어 있는 모든 장치들(컴퓨터, 서버, 스마트폰 등)을 식별할 수 있도록 부여된 고유 주소이다.
예시로는 택배를 보낼 때 국가, 지역, 아파트, 동호수를 정확히 기재해야 받을 수 있는 것처럼, 인터넷이 내 노트북에서 내 벨로그를 뛰우기 위해서는 정확한 주소 정보가 필요하다. 이를 인터넷 주소IP라고 불린다.
IP주소는 IPv4와 IPv6 2가지가 있다. 우리는 일반적인 IP주소는 IPv4라고 생각하면 된다.
IPv4는 전 세계적으로 사용된 첫 번째 인터넷 프로토콜이다.
아이피는 일반적으로 192.168.1.1와 같이 마침표로 구분된 4개의 숫자가 있다.

IPv4는 43억개의 주소를 가질 수 있지만, 전 세계적으로 인터넷 사용자 수가 급증하면서 주소가 고갈될 위기가 있었다.
왜 43억개나 있는데 고갈이 될까?
요즘에는 집에 컴퓨터와 와이파이 공유기, 스마트폰, 아이패드, TV 등 IP 주소를 할당받은 전자 기기들이 개인 집집마다 여러 개를 가지고 있다. 게다가 전세계적으로 발전하면서 인터넷 사용량이 늘어나고 있기 때문에 43억개는 진작에 고갈되기 시작했을 것이다. 따라서 IPv6이 나왔다.

공인 IP는 인터넷에서 전 세계적으로 고유한 주소이다.
인터넷에 직접 연결되는 장비나 서비스는 공인IP를 통해 외부와 통신한다.
→ 외부에서 이 주소를 보면 어느 대상과 통신해야 하는지 인터넷 전체에서 식별할 수 있다.
예를 들면 집 공유기가 인터넷에 연결될 때 받는 주소
AWS에서 퍼블릭 서브넷에 있는 리소스에 할당된 주소
인터넷에 공개된 앱 서버의 주소 등이 있다.
사설IP는 내부 네트워크에서만 사용하는 주소이다.
집, 회사, 학교, AWS VPC 같은 내부망 안에서만 의미가 있고, 인터넷에서는 직접 사용할 수 없다.
예를 들면 집 와이파이에 연결된 노트북의 192.168.x.x
회사 내부 PC의 10.x.x.x
AWS private subnet의 EC2 주소

왜 인터넷에 연결이 되는 공인IP를 안 쓰고 사설IP로 나눠서 쓰는걸까?
위에서 말했듯이 모든 기기에 공인IP를 하나씩 주기에는 IPv4가 부족하다.
그래서 내부에서는 사설IP를 쓰고 외부 인터넷과 통신할 때만 NAT를 통해 공인 IP로 바꿔서 사용한다.
| 구분 | 공인IP | 사설IP |
|---|---|---|
| 개념 | 전 세계적으로 유일한 공식 주소 | 내부 네트워크에서만 사용 가능한 내부 주소 |
| 인터넷 접근성 | 인터넷에 직접 접근 가능 | 내부 네트워크 안에서만 사용 가능(외부 직접 접근 불가) |
| 중복 가능 여부 | 전 세계적으로 절댇 중복 불가능(유일성) | 서로 다른 내부망(VPC/집)이라면 중복 사용 가능 |
| 인터넷 통신 방식 | 자체 줒소로 어디서나 직접 통신 가능 | 인터넷으로 나갈 때 반드시 NAT를 통해 공인 IP로 변환되어야 함 |
| 할당 주체 | ICANN, ISP(KT, SKT, AWS 등)가 관리 및 할당 | 공유기 또는 네트워크 관리자가 자체 할당 |
→ 💡핵심 차이점 요약
공인 IP는 인터넷에서 직접 식별 가능
사설 IP는 내부 네트워크 안에서만 식별 가능

NAT 게이트웨이는 프라이빗 서브넷의 인스턴스를 위해 사용되지만, 반드시 퍼블릭 서브넷에 위치해야 한다. 왜냐 NAT 게이트웨이가 실제로 인터넷과 통신해야 하기 때문이다.
NAT 게이트웨이는 보통 Elastic IP라는 공인IP를 가지고 있고 이를 통해 IGM와 연결되어 외부 인터넷과 통신한다. 따라서 프라이빗 서브넷의 인스턴스를 대신해 외부로 요청을 보내려면, NAT 게이트웨이은 인터넷으로 나갈 수 있는 위치에 있어야 한다.
즉, 정리하면

지금까지는 내부에서 외부로 가는 방법을 알아보았다면 외부에서 내부는 어떻게 갈까?
바스티온 서버는 외부에서 private subnet 내부 서버로 접속하기 위한 중간 서버이다.
private EC2는 사설IP만 가지고 있기 때문에 인터넷에 접속할 수 없다.
그래서 public subnet에 공인IP를 가진 바스티온 서버를 하나 두고 관리자는 먼저 이 서버에 접속한 뒤 내부 서버로 이동한다.
바스티온 서버가 필요한 이유는 private 서버를 인터넷에 직접 노출하지 않기 위해서, 외부 관리 접속 경로를 한 곳으로 모으기 위해서, 접근 제어, 인증, 로그 감시를 집중적으로 하기 위해 필요하다.
→ 즉, 외부 → 내부 접속을 통제된 방식으로 만들기 위한 서버이다.

Q. 집에서는 공유기가 사설IP를 공인IP로 변환해준다면 공유기없이 휴대폰 LTE/5G 데이터를 쓸 때는 어떻게 사설IP가 공인IP로 변환이 될까?
A. 통신사 안에 거대한 공유기가 있다.
사용자가 스마트폰에서 와이파이를 끄고 데이터를 켜는 순간, 휴대폰은 주변에 있는 통신사 안테나와 연결된다. 이때 SKT, KT, LGU+ 같은 통신사는 우리 스마트폰에 전용 사설IP를 부여한다.
데이터 통신을 할 때 흐름은 다음과 같다.
1. 사설IP 할당 : 통신사 기지국이 내 휴대폰에 내부용 사설IP를 쥐여준다.
2. 내가 네이버나 유튜브에 접속하려고 요청을 보내면, 이 요청은 기지국을 거쳐 통신사 중심부에 있는 대형 통신사 NAT시스템으로 들어간다.
3. 이 대형NAT가 집에 있는 공유기 역할이다. 내 휴대폰의 사설IP를 통신사가 미리 사둔 몇 안되는 귀한 공인IP 중 하나로 변한(NAT) 시켜서 인터넷과 연결시켜준다.
4. 인터넷에서 데이터가 들어오면 통신사 장비가 다시 내 휴대폰 사설IP를 찾아 기지국 안테나를 통해 데이터를 보내준다.
Q. 공인IP로 바스티온 서버에 SSH로 접속할 때 NAT가 공인IP를 사설IP로 바꿔주는 걸까? 아니면 바스티온 서버도 NAT처럼 변환해주는 걸까?
A. 놉!, 바스티온 서버는 NAT처럼 주소를 바꿔주는 구조가 아니다.
바스티온 서버는 NAT와 다르게 공인IP를 가진 바스티온 서버에 직접 접속한 뒤, 그 서버를 경유해서 private EC2의 사설IP로 다시 접속하는 방식이다.
흐름으로 보자면
1. 사용자가 인터넷에서 바스티온 서버의IP로 SSH접속을 한다.
2. IGW를 통해 VPC 안으로 들어온다.
3. 바스티온 서버는 퍼블릭 서브넷에 있고 공인IP를 가지고 있어 외부에서 직접 접속할 수 있다.
4. 접속한 후 바스티온 서버는 요청을 보낸 사설IP를 내부 네트워크에서 찾아서 사설IP로 다시 접속한다.
5. 주소를 변환하는게 아니라 외부 LAN과 내부 LAN을 가지고 있어 공인망과 사설망을 둘 다 볼 수 있다. 그래서 중간 접속 서버라고 하는것이다.

NAT와 NAT Gateway의 차이
NAT : 네트워크 주소를 변환하는 기술 자체
NAT Geteway : AWS에서 NAT 기능을 관리형으로 제공하는 서비스
즉, NAT는 개념이고 NAT Gateway는 AWS 구현체라고 보면된다.
Bastion 서버