search

Cấu hình VPC private ra Internet qua NAT Gateway và Transit Gateway

calendar_today Đăng ngày: 25/10/2026

Để lái Private VPC truy cập Internet thông qua Transit Gateway (TGW), cần triển khai NAT Gateway trong public subnet của VPC A, cấu hình route 0.0.0.0/0 từ private subnet của VPC B đến TGW, sau đó thêm static route 0.0.0.0/0 trong TGW route table trỏ đến attachment của VPC A. Cuối cùng, cấu hình route table của subnet chứa TGW attachment trong VPC A để chuyển traffic Internet đến NAT Gateway.

Cho VPC private ra Internet qua Transit Gateway hoạt động như thế nào?

VPC B không có Internet Gateway và EC2-B chỉ có private IP, nên nó không tự ra Internet được. Giải pháp là đẩy traffic Internet sang VPC A, nơi có NAT Gateway và Internet Gateway, rồi để NAT đổi source IP thành Elastic IP trước khi ra ngoài.

Luồng đi của một gói tin từ EC2-B:

EC2-B (10.20.1.x)
  → route table B: 0.0.0.0/0 → TGW
  → TGW route table: 0.0.0.0/0 → lab-tgw-att-a
  → subnet attachment của VPC A: 0.0.0.0/0 → NAT Gateway
  → NAT Gateway (nằm ở public subnet) → Internet Gateway → Internet

Gói trả về đi ngược lại: Internet → IGW → NAT Gateway → route 10.20.0.0/16 → TGW ở public subnet → TGW → VPC B.

Công nghệ liên quan: AWS VPC, NAT Gateway, Internet Gateway, Elastic IP, Transit Gateway, EC2, Security Group.

Vì sao không gắn thẳng Internet Gateway vào VPC B?

Gắn IGW vào VPC B được, nhưng EC2-B phải có public IP và subnet B thực chất thành public subnet. Khi đó Internet có thể chủ động kết nối vào, và mỗi VPC lại có một cửa ra riêng, khó kiểm soát.

NAT Gateway giải quyết đúng chỗ này: instance chỉ có private IP, đi ra được nhưng Internet không chủ động vào được.

Cách Ưu điểm Nhược điểm
IGW gắn thẳng VPC B Nhanh nhất Mất tính private, mỗi instance cần 1 public IP
NAT Gateway trong từng VPC Đơn giản, VPC độc lập Mỗi VPC một NAT GW, tốn phí khi có nhiều VPC
NAT Gateway dùng chung qua TGW (bài này) Một cửa ra Internet, dễ log và kiểm soát Cấu hình route phức tạp hơn

Lab này chọn cách thứ ba, vì nó đúng pattern thực tế khi bạn có từ 3 VPC trở lên.

Cần chuẩn bị gì trước khi bắt đầu?

Bạn cần hoàn thành lab trước: 2 VPC, 2 EC2, Transit Gateway lab-tgw với lab-tgw-att-a, lab-tgw-att-b, route table lab-tgw-rt-main đã Association và Propagation, và ping giữa 2 EC2 đã thông.

Chi tiết: AWS Transit Gateway: Hướng dẫn kết nối 2 VPC từ A–Z

Hướng dẫn cấu hình

Bước 1: Tạo NAT Gateway ở VPC A

Vào VPC Console → NAT gateways → Create NAT gateway:

  • Name: lab-tgw-natgw-a
  • Subnet: lab-tgw-a-subnet-public1-ap-southeast-1a
  • Connectivity type: Public
  • Elastic IP allocation ID: nhấn Allocate Elastic IP

Nhấn Create NAT gateway.

Tạo NAT Gateway ở VPC A

Bước 2: Tạo subnet riêng cho TGW attachment

Traffic từ TGW đi vào VPC A sẽ dùng route table của subnet chứa attachment. Nếu attachment vẫn nằm ở public subnet, gói tin từ EC2-B gặp route 0.0.0.0/0 → IGW và đi thẳng ra IGW. IGW chỉ NAT cho instance có public IP nên gói này bị drop, traffic không bao giờ qua NAT Gateway.

Cách xử lý: tách một subnet riêng chỉ để đặt attachment, với route table trỏ 0.0.0.0/0 về NAT Gateway.

Tạo subnet (VPC Console → Subnets → Create subnet):

  • VPC: lab-tgw-a-vpc
  • Subnet name: lab-tgw-a-subnet-tgw
  • Availability Zone: cùng AZ với subnet public
  • IPv4 CIDR: 10.10.2.0/24

Tạo route table (Route tables → Create route table):

  • Name: lab-tgw-a-rtb-tgw
  • VPC: lab-tgw-a-vpc

Vào Subnet associations → Edit subnet associations, chọn lab-tgw-a-subnet-tgw. Sau đó vào Routes → Edit routes, thêm:

Destination Target
0.0.0.0/0 NAT Gateway → lab-tgw-natgw-a

Bước 3: Chuyển attachment A sang subnet mới

Một TGW VPC attachment chỉ có một subnet cho mỗi AZ, nên cách chắc chắn nhất là xóa attachment cũ rồi tạo lại với subnet mới. Xóa attachment sẽ xóa luôn Association và Propagation của nó, nên bạn phải tạo lại hai thứ này.

1. Xóa attachment cũ: vào Transit gateway attachments, chọn lab-tgw-att-a → Actions → Delete, đợi trạng thái Deleted.

2. Tạo lại attachment:

  • Name tag: lab-tgw-att-a
  • Transit gateway ID: lab-tgw
  • Attachment type: VPC
  • VPC ID: lab-tgw-a-vpc
  • Subnet IDs: lab-tgw-a-subnet-tgw

3. Tạo lại Association và Propagation: vào lab-tgw-rt-main, thêm lab-tgw-att-a vào cả tab Associations và Propagations.

Bước 4: Tạo default route trong Transit Gateway như thế nào?

TGW hiện chỉ biết 2 CIDR của VPC. Gói đi tới 8.8.8.8 không khớp route nào nên bị drop. Bạn cần một static route bảo TGW: mọi thứ còn lại gửi về lab-tgw-att-a.

Vào Transit gateway route tables → chọn lab-tgw-rt-main → tab Routes → Create static route:

CIDR Attachment
0.0.0.0/0 lab-tgw-att-a

Bước 5: Cấu hình route ở VPC B và VPC A

VPC B cần đẩy traffic Internet về TGW. VPC A đã có đủ route cần thiết từ lab trước, bạn chỉ cần kiểm tra lại.

VPC B: vào lab-tgw-b-rtb-private1-ap-southeast-1a → Edit routes, thêm:

Destination Target
0.0.0.0/0 Transit Gateway → lab-tgw

Trạng thái cuối cùng của các route table:

Route table Route
lab-tgw-a-rtb-public 10.10.0.0/16 → local, 0.0.0.0/0 → lab-tgw-a-igw, 10.20.0.0/16 → lab-tgw
lab-tgw-a-rtb-tgw 10.10.0.0/16 → local, 0.0.0.0/0 → lab-tgw-natgw-a
lab-tgw-b-rtb-private1-... 10.20.0.0/16 → local, 10.10.0.0/16 → lab-tgw, 0.0.0.0/0 → lab-tgw
lab-tgw-rt-main (TGW) 10.10.0.0/16 → att-a, 10.20.0.0/16 → att-b, 0.0.0.0/0 → att-a

Route 10.20.0.0/16 → lab-tgw trong lab-tgw-a-rtb-public là route quan trọng cho chiều về: gói trả lời từ Internet đi qua NAT Gateway (nằm ở public subnet) cần route này để quay lại TGW.