首页/云/云网络与负载均衡速查/把子网默认路由指向 NAT 网关

把子网默认路由指向 NAT 网关

让实例通过 NAT 出公网需要两个条件:所在子网的默认路由(0.0.0.0/0)指向 NAT 网关,且 NAT 上有覆盖该来源的 SNAT 规则。路由负责把流量送进 NAT,SNAT 负责做地址转换。

为什么要把默认路由指向 NAT

让实例通过 NAT 出公网需要两个条件同时满足:所在子网关联的路由表里有 0.0.0.0/0 指向 NAT 网关的条目,以及 NAT 上有覆盖该来源网段的 SNAT 规则。路由负责把流量送进 NAT,SNAT 负责做地址转换,缺任何一项实例都出不了公网,排查时也要按这个顺序核对。

基本信息

作用决定子网内实例的出网路径
配置位置子网关联的路由表,新增目标网段 0.0.0.0/0
与 SNAT 关系路由送流量、SNAT 决定能否转换,两者缺一不可
细粒度不同子网关联不同路由表即可实现差异化出口
生效范围只对关联该路由表的子网生效
冲突处理已有更精确的明细路由时,按最长前缀匹配优先

典型使用场景

  • 应用子网统一经 NAT 出公网,数据库子网不放默认路由
  • 部分子网需要走 NAT,另一部分子网直连专线,通过不同路由表区分
  • 迁移期间临时调整出口路径,验证后再固化配置
  • 排查「这台机器不能出公网」时核对路由与 SNAT 两处
  • 为容器集群的节点子网单独配置出口路径

添加默认路由

添加默认路由
路由表 → 添加路由条目
  目标网段:0.0.0.0/0
  下一跳类型:NAT 网关
  下一跳:nat-bp1xxxxxxxx
前置确认:该路由表已关联目标子网;NAT 上已有覆盖该网段的 SNAT
验证:实例内 curl -s https://ifconfig.me 是否返回 NAT 绑定的 EIP

排障顺序

检查项确认方法
子网关联哪张路由表子网详情中查看关联关系
是否有默认路由路由表条目中查找 0.0.0.0/0
下一跳是否正确核对指向的 NAT 网关实例 ID
SNAT 是否覆盖该网段NAT 的 SNAT 条目中查看来源网段
出口地址是否符合预期实例内查询出口 IP 与 NAT 绑定的 EIP 比对
排障顺序建议固定为:先确认默认路由指向,再查 NAT 网关上的 SNAT 覆盖范围,最后确认 NAT 规格是否被打满,从前往后排查能快速缩小范围。
给数据库等敏感子网添加默认路由等于主动打开外传通道,出口能力应按业务需要最小化开通。

易错点

  • 只创建了 SNAT 规则,实例流量压根不经过 NAT 网关,规则再完整也没有作用
  • 路由表中详细路由与默认路由同时存在,命中顺序容易被看错,实际流量去往与预期不同
  • 把默认路由加到系统路由表而不是子网实际关联的自定义路由表,配置看似成功但不生效
  • 数据库子网被顺手加上了默认路由,敏感数据具备了外传路径且长期无人复核

数据来源与参考

  • 阿里云 VPC 路由表文档
  • 阿里云 NAT 网关文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌