오늘은 AWS에서 자주 막히는 부분인 네트워크 흐름에 대해 정리해보려고
한다.
특히 EC2 접속이 안 되거나 인터넷이 안 되는 문제는 대부분 구성 자체보다
흐름을 이해하지 못해서 발생한다.
AWS에서는 다음과 같은 질문이 정말 자주 나온다.
이 문제들은 대부분 다음 원인이다.
즉 단순히 서비스 이름을 아는 것이 아니라
패킷이 어디서 어디로 어떻게 이동하는지를 이해해야 한다.
가장 기본적인 상황은 외부에서 EC2로 접속하는 경우다.
구조는 다음과 같다.
User → Internet → Internet Gateway → VPC → Subnet → EC2
실제 흐름을 조금 더 풀어보면 다음과 같다.
User → Internet → Public IP → Internet Gateway → Route Table → Subnet → EC2
여기서 중요한 조건이 4가지 있다.
EC2는 기본적으로 Private IP만 가진다.
예를 들면
10.0.1.10
이 상태에서는 외부에서 접근할 수 없다.
외부에서 접속하려면 Public IP가 필요하다.
즉 외부 사용자는 항상 Public IP를 기준으로 접속한다.
VPC는 기본적으로 인터넷과 단절되어 있다.
따라서 Internet Gateway가 있어야 외부와 연결된다.
Internet Gateway는 말 그대로
인터넷과 VPC 사이의 출입구 역할을 한다.
Route Table에는 반드시 다음 경로가 있어야 한다.
0.0.0.0/0 → Internet Gateway
이 의미는
외부로 가는 모든 트래픽을 IGW로 보내겠다는 것이다.
이 경로가 있어야 해당 서브넷이 Public Subnet이 된다.
마지막으로 포트가 열려 있어야 한다.
예를 들어
이 중 하나라도 막혀 있으면 접속이 안 된다.
이번에는 EC2에서 외부 인터넷으로 나가는 경우다.
예를 들면 apt update, wget 같은 상황이다.
흐름은 다음과 같다.
EC2 → Subnet → Route Table → Internet Gateway → Internet
여기서 중요한 조건이 하나 더 있다.
EC2가 IGW를 통해 외부로 나가려면 Public IP가 필요하다.
즉 구조가 다음과 같아야 한다.
Public Subnet → EC2 (Public IP) → IGW → Internet
Public IP가 없다면 외부로 나갈 수 없다.
실제 운영 환경에서는 대부분의 서버를 Private Subnet에 둔다.
예를 들면
구조는 보통 이렇게 된다.
VPC
├ Public Subnet → Load Balancer
└ Private Subnet → Application Server
Private Subnet의 특징은 다음과 같다.
즉 보안을 위해 내부 서버는 Private에 둔다.
하지만 Private EC2도 인터넷이 필요한 경우가 많다.
예를 들면
문제는 Private Subnet에는 IGW 경로가 없다는 것이다.
이때 사용하는 것이 NAT Gateway다.
NAT Gateway는 Private 서버 대신 인터넷에 접속해주는 역할을 한다.
구조는 다음과 같다.
Private EC2 → NAT Gateway → Internet Gateway → Internet
흐름을 보면
EC2 → NAT → Internet
응답은
Internet → NAT → EC2
즉 NAT Gateway는
Private IP를 Public IP로 변환해서 통신을 대신 처리한다.
외부에서 Private EC2로 직접 들어오는 것은 불가능하다.
Internet → NAT → EC2
이 흐름은 차단된다.
즉 NAT는 나가는 통신만 가능하다.
NAT Gateway는 반드시 Public Subnet에 있어야 한다.
그래야 IGW를 통해 인터넷과 연결된다.
Private Subnet의 Route Table에 다음 경로를 추가한다.
0.0.0.0/0 → NAT Gateway
이렇게 해야 Private EC2가 외부로 나갈 수 있다.
같은 VPC 내부에서는 Private IP로 통신한다.
예를 들면
Web Server → 10.0.1.10
DB Server → 10.0.2.20
이 경우 통신은 다음처럼 이루어진다.
Web → VPC 내부 네트워크 → DB
이 과정에서는 IGW나 NAT를 전혀 사용하지 않는다.
즉 내부 통신은 AWS 내부 네트워크에서 바로 처리된다.
지금까지 내용을 합치면 기본 구조는 다음과 같다.
Internet
→ Internet Gateway
→ Public Subnet
→ Load Balancer
→ Private Subnet
→ Application
→ Database
그리고 Private Subnet은 NAT Gateway를 통해 인터넷과 연결된다.
Private Subnet
→ NAT Gateway
→ Internet Gateway
→ Internet
이 구조가 가장 기본적인 AWS 3-Tier 구조다.
User → Internet → IGW → Route Table → Subnet → EC2
EC2 → Route Table → IGW → Internet
EC2 → NAT Gateway → IGW → Internet
VPC -> NAT 게이트웨이 -> 생성


Private 라우팅테이블에 ngw 추가

NAT게이트웨이는 비용이 발생하기때문에 사용하지 않을땐 반드시 삭제 해야한다.
AWS 네트워크는 복잡해 보이지만 핵심은 단순하다.
어디에 있는가
어디로 나가는가
이 두 가지만 정확히 이해하면 대부분의 문제는 해결된다.