NAT 生效依赖两个前提
NAT 网关只对它所在的 VPC 生效,而且不会自动接管子网的出网流量。要让某个子网通过 NAT 出网,必须满足两个前提:该子网路由表的默认路由指向 NAT 网关,SNAT 规则覆盖该子网的网段。新建子网时很容易只做了一半,结果新子网里的实例全部无法出网。
基本信息
| 前提一 | NAT 网关与目标子网位于同一 VPC |
|---|---|
| 前提二 | 目标子网路由表的默认路由指向 NAT 网关 |
| SNAT 规则 | 指定允许借用的网段以及使用的 EIP 地址 |
| 常见遗漏 | 新建子网后未同步更新路由与 SNAT 规则 |
| 排查顺序 | 先查路由表指向,再查 SNAT 规则覆盖范围 |
典型使用场景
- 新建子网后实例无法出网,核对路由与 SNAT 覆盖
- 迁移子网到新网段,需要同步调整 SNAT 规则
- 多子网环境下按业务划分不同的出口地址
- 排查「部分实例不能出网」:对比所在子网的配置差异
- 扩容新增可用区子网时,把网络配置纳入扩容清单
在实例内验证路由与出口
在实例内验证路由与出口
ip route get 1.1.1.1 # 默认路由是否指向 NAT 网关
curl -s -m 5 https://ifconfig.me; echo # 实际出口地址是否符合预期
# 出口不符合预期或超时时,回到子网路由表与 SNAT 规则上核对排查对照
| 现象 | 检查点 | 处理方式 |
|---|---|---|
| 整个子网不能出网 | 子网路由表默认路由 | 添加指向 NAT 网关的路由 |
| 部分实例不能出网 | SNAT 规则网段覆盖 | 补充或修正 SNAT 规则 |
| 出口地址不符预期 | SNAT 规则指定的 EIP | 核对绑定关系与规则 |
| 新子网立即不通 | 是否漏了上两步配置 | 纳入新建子网检查清单 |
新增子网是常见遗漏点:路由表与 SNAT 规则要同步更新,否则新子网内的实例会全部无法出网。
SNAT 规则的网段要与实际子网一致;网段写错时现象是「部分地址能通、部分不通」,比全不通更难排查。
新建子网检查清单
创建子网后固定做三件事:确认路由表默认路由指向 NAT 网关、确认 SNAT 规则覆盖新网段、在实例内查一次实际出口地址,三步都通过再交付使用。