
[network] 라우트 테이블
같은 서브넷인데 왜 어떤 건 인터넷이 되고 어떤 건 안 될까. 그 답은 트래픽의 이정표, 라우트 테이블에 있습니다.
One-Line Summary
Route Table은 "이 목적지(IP 대역)로 가는 트래픽은 저 장치로 보내라"는 경로 규칙의 모음이다. 서브넷마다 하나의 라우트 테이블이 연결되고, 그 규칙에 따라 트래픽이 VPC 내부(local)·인터넷(IGW)·NAT·피어링·Transit Gateway 등으로 흘러간다. 서브넷이 public이냐 private이냐를 실제로 결정하는 것도 바로 이 라우트 테이블이다.
Why It Exists
VPC 안에는 인터넷으로 나가야 하는 트래픽, VPC 내부끼리 도는 트래픽, 다른 VPC나 온프레미스로 가야 하는 트래픽이 섞여 있다. 각 트래픽을 목적지에 따라 어디로 보낼지 정하는 규칙이 없으면 통신이 성립하지 않는다.
Route Table이 그 교통정리를 한다.
라우트 규칙이 없으면
-> 트래픽이 어디로 가야 할지 몰라 통신 실패
Route Table
-> "목적지 CIDR → 보낼 대상(target)" 규칙으로 경로 결정
-> 서브넷에 연결되어 그 서브넷의 트래픽 흐름을 통제
시험 감각:
"통신이 안 된다 / 인터넷이 안 된다" 문제의 절반은 라우트 테이블에 경로가 없어서다.
Abbreviations
| 약어 | 풀네임 | 의미 |
|---|---|---|
Route | Route | 목적지(CIDR) → 대상(target) 한 줄 규칙 |
Destination | Destination | 트래픽의 목적지 IP 범위(CIDR) |
Target | Target | 그 트래픽을 보낼 대상(local, igw, nat 등) |
Main Route Table | Main Route Table | 명시적 연결이 없는 서브넷이 기본으로 쓰는 테이블 |
local | local route | VPC 내부 통신용, 자동 생성·삭제 불가 |
Blackhole | Blackhole | 대상이 사라져 더 이상 유효하지 않은 경로 |
Route Propagation | Route Propagation | VGW/DX 경로를 라우트 테이블에 자동 반영 |
라우트 테이블의 구조 — 규칙 한 줄씩
라우트 테이블은 여러 개의 route(규칙) 로 이루어진다. 각 route는 목적지(Destination) → 대상(Target) 형태다.
예시 (public 서브넷용):
| Destination | Target | 의미 |
|---|---|---|
10.0.0.0/16 | local | VPC 내부(10.0.0.0/16)로 가는 트래픽은 VPC 안에서 처리 |
0.0.0.0/0 | igw-xxxx | 그 외 모든 목적지(=인터넷)는 Internet Gateway로 |
0.0.0.0/0은 "나머지 전부(=인터넷)"를 뜻하는 기본 경로(default route).local은 VPC를 만들면 자동으로 생기고 삭제할 수 없다. 덕분에 VPC 안 모든 서브넷은 별도 설정 없이 서로 통신 가능하다.
라우트 테이블과 서브넷의 연결 규칙 (중요)
| 규칙 | 내용 |
|---|---|
| 서브넷 : 라우트 테이블 | 서브넷 하나는 정확히 하나의 라우트 테이블에 연결된다 |
| 라우트 테이블 : 서브넷 | 하나의 라우트 테이블은 여러 서브넷에 연결될 수 있다 |
| 명시적 연결이 없으면 | 그 서브넷은 VPC의 Main Route Table을 자동으로 따른다 |
| Main Route Table | VPC 생성 시 자동 생성. 어떤 테이블을 main으로 할지 변경 가능 |
VPC
├── Main Route Table (기본) ← 명시적 연결 없는 서브넷이 사용
├── Custom RT-public ← public 서브넷들 연결 (0.0.0.0/0 → igw)
└── Custom RT-private ← private 서브넷들 연결 (0.0.0.0/0 → nat)
실무 팁: Main Route Table은 되도록 건드리지 말고(안전을 위해 인터넷 경로 없이 두고), public/private용 커스텀 라우트 테이블을 따로 만들어 명시적으로 연결하는 것이 안전한 관례다. 새 서브넷이 실수로 main을 따라 의도치 않게 노출/차단되는 사고를 막는다.
Public / Private를 결정하는 것이 라우트 테이블
앞선 노트(IGW, VPC)에서 반복된 핵심을 라우트 테이블 관점으로 정리한다.
| 서브넷 성격 | 라우트 테이블 핵심 경로 |
|---|---|
| Public | 0.0.0.0/0 → igw-xxxx (인터넷 양방향) |
| Private (아웃바운드 필요) | 0.0.0.0/0 → nat-xxxx (아웃바운드만) |
| Isolated (완전 격리, 예: DB 전용) | local만 존재 (외부 경로 없음) |
Public RT : 10.0.0.0/16 -> local , 0.0.0.0/0 -> igw
Private RT : 10.0.0.0/16 -> local , 0.0.0.0/0 -> nat
Isolated RT : 10.0.0.0/16 -> local
대상(Target) 종류 — 어디로 보낼 수 있나
라우트의 Target으로 지정할 수 있는 대표 대상들. "이 목적지는 저 장치로" 를 정할 때 쓴다.
| Target | 언제 쓰나 |
|---|---|
local | VPC 내부 통신(자동) |
Internet Gateway (igw) | 인터넷 양방향 (public 서브넷) |
NAT Gateway (nat) | private 서브넷의 아웃바운드 인터넷 |
Egress-only IGW (eigw) | IPv6 아웃바운드 전용 |
VPC Peering (pcx) | 피어링된 다른 VPC의 CIDR로 |
Transit Gateway (tgw) | TGW 허브를 통해 다수 VPC/온프렘으로 |
Virtual Private Gateway (vgw) | Site-to-Site VPN / Direct Connect로 온프레미스 |
Gateway VPC Endpoint (pl-xxxx) | S3·DynamoDB로 인터넷 안 거치고(프리픽스 리스트) |
Network Interface (eni) / instance | 특정 인스턴스로(예: NAT 인스턴스, 방화벽 어플라이언스) |
경로 우선순위 — Longest Prefix Match (빈출)
목적지에 매칭되는 route가 여러 개면, 가장 구체적인(prefix가 긴) 경로가 이긴다. 이를 longest prefix match라 한다.
예: 목적지 172.31.5.10으로 가는 패킷
| Destination | Target | 채택? |
|---|---|---|
0.0.0.0/0 | igw | ✕ (덜 구체적) |
172.31.0.0/16 | pcx-A | ✕ |
172.31.5.0/24 | pcx-B | ✅ 가장 구체적 |
local경로는 항상 최우선(VPC 내부 대역은 무조건 local로).- 그래서 VPC CIDR과 겹치는 대역을 다른 곳으로 보내는 것은 불가능(피어링/VPN 설계 시 CIDR 겹치면 안 되는 이유).
정적 경로 vs 전파된 경로 (Route Propagation)
| 구분 | 내용 |
|---|---|
| 정적(static) 경로 | 사용자가 직접 추가한 경로 |
| 전파(propagated) 경로 | VGW(VPN/DX) 에서 학습한 온프레미스 경로를 BGP로 라우트 테이블에 자동 반영 |
Route Propagation을 켜면 온프레미스 네트워크가 알려주는 대역이 자동으로 라우트 테이블에 들어와, 수동으로 일일이 추가할 필요가 없다.
Blackhole 경로
route의 Target이 삭제되거나 분리되면(예: NAT Gateway 삭제) 그 경로는 blackhole 상태가 되어 트래픽이 버려진다.
"설정은 그대로인데 갑자기 통신이 끊겼다" → 라우트가 blackhole인지(대상 리소스가 삭제됐는지) 확인.
실제 사용 예 — 3-Tier에서의 라우트 테이블
[Public Subnet] RT-public : local , 0.0.0.0/0 -> igw
(ALB, NAT Gateway 위치)
[Private App] RT-private : local , 0.0.0.0/0 -> nat
(EC2 앱: 인바운드는 ALB 통해서만, 아웃바운드는 NAT로)
[Private DB] RT-db : local 만
(RDS: 외부 경로 아예 없음, VPC 내부에서만 접근)
| 계층 | 라우트 테이블 | 효과 |
|---|---|---|
| Public | 0.0.0.0/0 → igw | 인터넷과 양방향 |
| App(Private) | 0.0.0.0/0 → nat | 아웃바운드만(패치·외부 API) |
| DB(Private) | local만 | 완전 격리, 최고 수준 보호 |
Common Wrong Directions
| 오답 방향 | 왜 부족한가 |
|---|---|
| IGW만 붙이면 인터넷 된다고 생각 | 라우트 테이블에 0.0.0.0/0 → igw가 있어야 함 |
| 서브넷 하나에 라우트 테이블 여러 개 연결 | 서브넷은 정확히 하나의 라우트 테이블에만 |
| 명시적 연결 안 한 서브넷은 인터넷 되는 줄 | Main Route Table을 따름 → main에 인터넷 경로 없으면 안 됨 |
| local 경로를 지우거나 다른 곳으로 우회 | local은 삭제/오버라이드 불가(VPC 대역은 항상 내부) |
| 피어링/VPN인데 CIDR이 겹침 | local이 최우선이라 겹친 대역은 외부로 못 감 |
| 통신 끊김 원인을 SG만 의심 | 라우트 blackhole(대상 삭제)도 흔한 원인 |
| 여러 경로 중 default(0.0.0.0/0)가 항상 쓰인다고 생각 | longest prefix match — 더 구체적 경로가 우선 |
Exam Triggers
| 문제에서 이런 표현이 나오면 | 떠올릴 것 |
|---|---|
| "instance in public subnet can't reach internet" | 라우트 테이블 0.0.0.0/0 → igw 확인 |
| "private subnet needs outbound internet" | 라우트 0.0.0.0/0 → nat |
| "which makes a subnet public vs private" | Route Table의 IGW 경로 유무 |
| "traffic between peered VPCs not working" | 양쪽 라우트 테이블에 상대 CIDR → pcx 필요 |
| "route to on-premises via VPN/DX" | vgw 대상 + Route Propagation |
| "most specific route is chosen" | longest prefix match |
| "route shows blackhole / suddenly no connectivity" | 대상 리소스 삭제 여부 |
| "S3 access without internet" | Gateway Endpoint 프리픽스 리스트 경로 |
Memory Sentence
라우트 테이블 = "목적지 CIDR → 대상" 규칙 모음. 서브넷은 라우트 테이블 하나에만 연결(없으면 Main을 따름), 하나의 테이블은 여러 서브넷에. local은 자동·삭제불가로 VPC 내부 통신을 보장하고,
0.0.0.0/0 → igw면 public·→ nat면 private·local만이면 격리. 경로가 겹치면 가장 구체적인 것(longest prefix match)이 이긴다.
References
댓글
아직 댓글이 없습니다.