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 路由表实战。