사용자가 브라우저에 웹사이트 주소를 입력했을 때, 데이터 패킷이 어떤 경로와 검증 절차를 거쳐 웹 서버에 도달하는지 단계별로 상세히 추적해 보겠습니다.
Step 1: DNS 조회 (사용자 환경)
www.example.com을 입력하면, 사용자의 컴퓨터는 DNS(Domain Name System) 서버에 이 도메인에 해당하는 IP 주소를 물어봅니다. DNS 서버는 미리 설정된 레코드(예: AWS Route 53의 A 레코드)를 찾아 웹 서버 EC2 인스턴스에 연결된 공인 IP 주소(예: 52.78.1.1)를 반환합니다. 이 과정은 아직 AWS VPC 외부에서 일어납니다.Step 2: 인터넷 경유 및 AWS 네트워크 도착
Step 3: Internet Gateway (IGW) - VPC의 정문
my-vpc에 연결된 my-igw에 도착합니다. IGW는 여기서 매우 중요한 역할인 1:1 NAT(Network Address Translation)를 수행합니다. 패킷의 목적지 주소인 공인 IP(52.78.1.1)를 웹 서버 EC2 인스턴스가 실제로 가지고 있는 사설 IP(10.0.1.100)로 변환합니다. 이제 패킷은 VPC 내부에서 통용되는 주소를 갖게 됩니다.Step 4: VPC 암시적 라우터 (Implicit Router)의 경로 결정
10.0.1.100)를 목적지로 하는 패킷을 받습니다. 라우터는 VPC에 정의된 모든 서브넷의 IP 대역을 알고 있으므로, 10.0.1.100 주소가 my-public-subnet-a(10.0.1.0/24)에 속한다는 것을 인지하고 해당 서브넷으로 패킷을 전달합니다. 이 과정에서는 모든 라우팅 테이블에 기본적으로 존재하는 local 경로가 사용됩니다.Step 5: 네트워크 ACL (NACL) - 서브넷의 방화벽
my-public-subnet-a에 들어가기 직전, 서브넷에 연결된 NACL의 인바운드 규칙을 검사받습니다. NACL 규칙은 번호가 낮은 순서대로 평가되며, 허용(Allow) 또는 거부(Deny) 규칙을 따릅니다. 예를 들어, "모든 IP(0.0.0.0/0)에서 오는 HTTP(포트 80) 트래픽을 허용하라"는 규칙이 있다면, 패킷은 이 검사를 통과합니다. 만약 일치하는 허용 규칙이 없다면 패킷은 여기서 차단됩니다.Step 6: 보안 그룹 (Security Group) - 인스턴스의 개인 경호원
Web-SG 보안 그룹의 인바운드 규칙을 검사받습니다. 보안 그룹은 상태 저장(Stateful) 방식이며, 허용(Allow) 규칙만 가집니다. "모든 IP(0.0.0.0/0)에서 오는 HTTP(포트 80) 트래픽을 허용하라"는 규칙이 있다면, 패킷은 최종적으로 이 관문을 통과합니다.Step 7: EC2 인스턴스 도착
Private Subnet의 EC2 인스턴스가 NAT Gateway 없이 인터넷 통신을 시도하면 어떻게 될까요?
Step 1: 요청 발생
my-private-instance(10.0.11.100)에서 yum update 명령을 실행합니다. 이로 인해 외부 업데이트 서버(52.94.236.48)로 향하는 데이터 패킷이 생성됩니다.Step 2: 인스턴스 및 서브넷 보안 통과
App-SG의 아웃바운드 규칙을 통과합니다 (기본적으로 모두 허용). 그 다음, my-private-subnet-a에 연결된 NACL의 아웃바운드 규칙을 통과합니다 (기본적으로 모두 허용).Step 3: 라우팅 테이블 조회 및 경로 탐색 실패
my-private-subnet-a이므로, 이 서브넷에 연결된 my-private-rt-a 라우팅 테이블을 참조합니다.52.94.236.48my-private-rt-a의 규칙 목록을 확인합니다. NAT Gateway가 없으므로, 이 테이블에는 VPC 내부 통신을 위한 10.0.0.0/16 -> local 경로만 존재합니다.52.94.236.48은 local 경로에 해당하지 않으며, 그 외에 일치하는 다른 경로(예: 0.0.0.0/0)가 없습니다.Step 4: 패킷 폐기 (Packet Drop)
my-private-instance는 외부 서버로부터 아무런 응답을 받지 못하고, 연결은 시간 초과(timeout) 오류와 함께 실패합니다.이제 동일한 요청이 NAT Gateway를 통해 어떻게 성공적으로 처리되는지 단계별로 분석해 보겠습니다.
Step 1 & 2: 요청 발생 및 초기 보안 통과
my-private-instance에서 생성된 패킷이 App-SG와 NACL의 아웃바운드 규칙을 정상적으로 통과합니다.Step 3: Private 라우팅 테이블을 통한 경로 지정
my-private-rt-a 라우팅 테이블을 참조합니다.52.94.236.4852.94.236.48은 10.0.0.0/16(local)에 해당하지 않지만, 0.0.0.0/0 경로에는 해당합니다.0.0.0.0/0 -> nat-xxxxxxxx 규칙을 선택하고, 패킷을 my-nat-gw-a로 전송합니다.Step 4: Public Subnet NACL 인바운드 검사
Step 5: NAT Gateway에서의 주소 및 포트 변환 (SNAT/PAT)
역할: 패킷의 출발지 주소와 포트를 변경하고 상태를 추적합니다.
상세 설명:
- 변환 전: Source: 10.0.11.100:45678 → Destination: 52.94.236.48:443
- 변환 후: Source: 203.0.113.12:23456 → Destination: 52.94.236.48:443
- Connection Tracking: NAT Gateway는 5-tuple 정보를 상태 테이블에 저장:
Original: (10.0.11.100, 45678, 52.94.236.48, 443, TCP)
Translated: (203.0.113.12, 23456, 52.94.236.48, 443, TCP)
Step 6: NAT Gateway에서 IGW로 직접 라우팅
Step 7: Internet Gateway 처리
Step 8: 인터넷 통신