IGW、NAT Gateway 与路由:归属、绑定和流量路径

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。

网关的归属与子网的出入口是两件事:先创建/关联网关,再由路由表决定哪些流量使用它。 本文使用 IPv4 示例;NAT Gateway 简称 NAT GW,避免用含义不统一的 NGW。

1. 各资源到底绑定到哪里#

资源 归属/放置 谁引用它
VPC(虚拟私有云) 一个区域,可覆盖多个 AZ(可用区) 子网、路由表等归属于它
Subnet(子网) 一个 VPC、一个 AZ 网卡和工作负载放入子网
Route table(路由表) 一个 VPC 一个子网同时使用一张子网路由表;多个子网可共用
IGW(Internet Gateway,互联网网关) attach 到 VPC;不是某个子网内的设备 公网子网路由指向它;不需要每 AZ 创建一个
Zonal public NAT Gateway 一个 VPC 内的一个公网子网,因此属于一个 AZ 私网子网默认路由指向它;公网出口使用 EIP(Elastic IP,弹性公网地址)
Zonal private NAT Gateway 一个 VPC 内的一个子网,不关联 EIP 私有网络互联的地址转换;不能通过 IGW 出互联网
Regional NAT Gateway 选择 VPC,无需指定承载子网;区域模式跨 AZ 提供服务 私网路由可指向同一个 NAT ID;网关拥有自己的路由表

一个 VPC 同时最多附加一个 IGW,一个 IGW 同时只附加一个 VPC(网关配额)。NAT Gateway 不 attach 到 IGW;传统 zonal public NAT 的下一跳由其所在子网路由表指向同 VPC 的 IGW。IGW 工作方式、NAT 类型

2. 公有/私有子网由路由决定#

  • 子网有直接指向 IGW 的互联网路由,属于公网子网;标签叫 public 不会改变路由。
  • 普通 EC2(Elastic Compute Cloud,云服务器)直接通过 IGW 访问 IPv4 互联网,还需公网 IPv4/EIP、允许的安全规则和正常 DNS(域名解析)。只有公网 IP 或只有 IGW 都不够。
  • 私网子网可以通过 NAT 主动访问公网,因此“private”不等于“不能上网”;公网不能借此主动建立到私有实例的新连接。
  • isolated 子网通常不配置互联网默认路由,但仍可能访问本 VPC、Peering 或 Endpoint;它也不是自动的安全隔离区。

SG(Security Group,安全组)控制关联网卡的访问且有状态;NACL(Network ACL,网络访问控制列表)在子网边界无状态,需允许请求及回包端口。路由可达与访问许可缺一不可。NAT Gateway 不支持关联 SG;在工作负载、NACL 或专门防火墙上实施相应控制。NAT 限制

3. 双 AZ、zonal public NAT 的完整路由#

采用 10.64.0.0/18 VPC,public-a 内放 nat-a,public-b 内放 nat-b。下表每张路由表还包含 10.64.0.0/18 → local。

子网/路由表 默认路由 结果
public-a、public-b / rt-public 0.0.0.0/0 → igw 公网入口与 NAT 出口;相同策略可共用路由表
app-a / rt-app-a 0.0.0.0/0 → nat-a 应用 A 走同 AZ 出口
app-b / rt-app-b 0.0.0.0/0 → nat-b 应用 B 走同 AZ 出口
data-a、data-b / rt-data 无互联网默认路由 数据层仅走已明确配置的私有路径
app-a 私网地址
  → app-a 路由表的 nat-a
  → nat-a 转换为自身私网地址
  → public-a 路由表的 igw
  → IGW 映射为 nat-a 的 EIP
  → 互联网服务;响应沿连接状态反向返回

因此:不能把 public-a 的默认路由设成 nat-a 自己;也不能只给 app-a 写 NAT 路由,却漏掉 NAT 承载子网到 IGW 的路由。两个 AZ 共用一个 zonal NAT 会引入跨 AZ 依赖及流量费用,失去该 AZ 时其他 AZ 的出口也会受影响。

子网没有显式关联时使用 VPC 的 main route table(主路由表)。建议主表保持最小路由,每个业务子网显式关联,防止修改主表时意外影响未登记子网。子网路由表

4. Regional NAT 的差异#

Regional 模式不需要创建公网承载子网;选择 VPC 后,AWS 创建网关路由表并预置通往 IGW 的路由,VPC 仍需 IGW。多个 AZ 私网子网可引用同一 NAT ID。它支持自动或手工地址/AZ 管理,目前不提供 private NAT。

自动扩展到新 AZ 可能需要最多 60 分钟,期间可能跨 AZ 处理。迁移时更换路由会重置现有连接;还要核对出口 IP 白名单、目标区域支持及费用。不能把“Regional”理解成固定单一公网 IP 或迁移无中断。Regional NAT 官方说明

5. 路由选择及容易遗漏的边界#

同一张路由表中,10.64.80.0/20 → pcx 比 0.0.0.0/0 → nat 更具体,因此去共享服务的流量走 Peering,不会先去 NAT。最长前缀匹配先于默认路由;还要确认目标路由不是 blackhole。

IPv6 使用独立的 ::/0。需要仅主动出站时可用 egress-only IGW(仅出站互联网网关);不要把 IPv4 NAT 默认路由当成 IPv6 保护。访问支持的 AWS 服务可使用 VPC Endpoint,同时核对 Endpoint policy、服务权限与私有 DNS。

容量评审还需记录峰值带宽、并发连接与热点目的地址,观察 NAT 的端口分配失败、丢包及连接指标;费用分别估算网关运行、处理流量、跨 AZ 与公网传输,不把多 AZ 只理解为多建几个网关。

6. 只读 hands-on:核对真实归属#

使用具有只读 EC2 Describe 权限的短期身份,设置当前账号、区域和目标 VPC。以下命令不会修改资源:

export AWS_REGION='us-east-1'  # 改为目标区域
export VPC_ID='REPLACE_VPC_ID'
aws sts get-caller-identity
aws ec2 describe-subnets --filters "Name=vpc-id,Values=$VPC_ID" --query 'Subnets[].{Subnet:SubnetId,AZ:AvailabilityZoneId,CIDR:CidrBlock,Free:AvailableIpAddressCount}'
aws ec2 describe-route-tables --filters "Name=vpc-id,Values=$VPC_ID" --query 'RouteTables[].{Table:RouteTableId,Associations:Associations,Routes:Routes}'
aws ec2 describe-internet-gateways --filters "Name=attachment.vpc-id,Values=$VPC_ID"
aws ec2 describe-nat-gateways --filter "Name=vpc-id,Values=$VPC_ID"

逐项验收:子网匹配显式 Association,没有则查 Main=true;查看实际路由目标;NAT 检查 availability mode、VpcId、State 与地址,zonal 再查 SubnetId;IGW 检查 attachment 的 VPC。最后从目标应用执行一次批准的 HTTPS 请求,核对对端观察到的出口 IP 与预期 EIP。静态路由检查不能证明 DNS、安全规则和应用都已通。

故障排查顺序:身份/区域 → 子网实际路由 → 网关状态 → 回程与地址转换 → SG/NACL → DNS → 应用;不要一上来把安全组开放为所有来源。

完整请求、回包与拦截点见 ALB → EC2 与 EC2 出网链路。

主机自身如何选择网关及回程,见 Linux 路由表实战。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭