2. Transit Gateway 核心概念解析

要真正用好 AWS Transit Gateway(下文简称 TGW),关键不是记住它“能连很多 VPC”,而是理解它内部那套由 Attachment(挂载)、Route Table(路由表)、Association(关联)、Propagation(传播) 和 Blackhole(黑洞路由) 组成的转发模型。这五个术语构成了 TGW 的“控制面”,决定了数据包从哪个挂载进来、查哪张表、命中哪条路由、最终从哪个挂载出去。理解它们之间的分工,才能解释为什么“VPC 都挂上了却不通”“路由明明存在却丢包”这类典型问题。

Attachment:TGW 的“接口”,也是路由的下一跳

Attachment 是 TGW 与外部网络建立连接的逻辑接口。常见的挂载类型包括:VPC Attachment(连接某个 VPC)、VPN Attachment(连接 Site-to-Site VPN)、Direct Connect Gateway Attachment(连接专线)、Peering Attachment(连接另一个 TGW),以及 Connect Attachment(连接 SD-WAN/第三方设备)。每个 Attachment 在创建后会获得一个 TGW 侧的标识,并作为路由表中的“下一跳目标”被引用。

需要特别区分两个方向:VPC Attachment 在 VPC 侧会表现为一个弹性网络接口(ENI),它落在你指定的某个子网里,并从这个子网获取一个 IP 地址。因此,VPC 子网路由表里指向 TGW 的路由,下一跳写的是这个 Attachment 的 ID,而不是某个 IP。示例中,VPC-A 的私有子网路由表可以写成:目标 10.20.0.0/16(VPC-B 网段),目标类型 transit-gateway,目标 tgw-0abc123。这条路由只负责把包“送进 TGW”,进入 TGW 之后走哪条路,由 TGW 自己的路由表决定。

Route Table、Association 与 Propagation:谁查表、表里有什么

TGW Route Table 是 TGW 内部的转发表,它和 VPC 路由表是两套独立的东西。TGW 路由表由两部分行为组成:

  • Association(关联):把一个 Attachment 绑定到某张 TGW 路由表,决定“这个挂载进来的流量查哪张表”。一个 Attachment 同一时间只能关联一张 TGW 路由表,但一张表可以被多个 Attachment 关联。
  • Propagation(传播):把一个 Attachment 的网段信息自动写入某张 TGW 路由表,决定“这张表里能学到哪些可达网段”。一个 Attachment 可以向多张表传播,也可以不向任何表传播。

Association 和 Propagation 是解耦的,这正是 TGW 能做网络分段(segmentation)的根本原因。举例:生产 VPC 关联到“生产路由表”,开发 VPC 关联到“开发路由表”;生产 VPC 只向生产表传播,开发 VPC 只向开发表传播。这样两张表互不包含对方网段,生产与开发之间天然隔离,无需依赖安全组或 NACL 兜底。

反过来,如果希望所有 VPC 互通,就把所有 VPC Attachment 都关联到同一张默认路由表,并让它们都向这张表传播。此时表内会出现类似条目:10.10.0.0/16 → tgw-attach-vpcA、10.20.0.0/16 → tgw-attach-vpcB、10.30.0.0/16 → tgw-attach-vpcC。TGW 收到包后按最长前缀匹配选路,命中后从对应 Attachment 转发出去。

Blackhole 路由:路由还在,但下一跳已失效

Blackhole 是 TGW 路由表中的一种特殊状态。当某条路由的下一跳 Attachment 被删除、或 VPN 隧道全部不可用时,这条路由不会立刻消失,而是被标记为 blackhole。此时数据包仍会命中这条路由,但 TGW 会直接丢弃,不会回退到其他更宽泛的路由。这是排查“路由存在但业务不通”时最容易被忽略的一点。

例如,VPC-B 的 Attachment 被误删后,生产表中 10.20.0.0/16 → tgw-attach-vpcB 会变成 blackhole。即使表中还有一条 10.0.0.0/8 → tgw-attach-vpcA 的汇总路由,发往 10.20.1.10 的包依然会被丢弃,因为最长前缀匹配优先命中了 blackhole 的 /16。处理方式通常是删除失效路由、重建 Attachment,或修正传播关系。

Transit Gateway 转发模型:挂载 → 关联 → 查表 → 传播 → 黑洞 VPC-A 10.10.0.0/16 子网路由 → tgw-attach-A VPC-B 10.20.0.0/16 子网路由 → tgw-attach-B VPC-C 10.30.0.0/16 子网路由 → tgw-attach-C Attachment A tgw-attach-A Attachment B tgw-attach-B Attachment C tgw-attach-C TGW Route Table(生产表) 10.10.0.0/16 → tgw-attach-A 10.20.0.0/16 → tgw-attach-B 10.30.0.0/16 → tgw-attach-C 10.40.0.0/16 → blackhole 最长前缀匹配优先;命中 blackhole 直接丢弃 Association 决定查哪张表 Propagation 决定表里有哪些网段 Blackhole 表示下一跳已失效 Association Association Association Propagation Propagation Propagation 注意:blackhole 路由仍参与最长前缀匹配,不会自动回退到更宽泛路由;需删除失效路由或重建 Attachment。

一次完整转发的推演

把上述概念串起来看一次实际转发。假设 VPC-A 的实例 10.10.1.5 访问 VPC-B 的 10.20.1.10:

  1. VPC-A 子网路由表命中 10.20.0.0/16 → tgw-attach-A,包被送入 TGW。
  2. TGW 根据 Attachment A 的 Association,确定查“生产表”。
  3. 生产表中存在 10.20.0.0/16 → tgw-attach-B(由 Attachment B 传播而来),最长前缀匹配命中。
  4. TGW 从 Attachment B 转发,包进入 VPC-B,再由 VPC-B 子网路由表送达目标实例。

回程流量同理,需要 VPC-B 子网路由表有指向 TGW 的路由,且生产表中存在 10.10.0.0/16 → tgw-attach-A。任何一侧缺失,都会表现为单向不通。

常见误区与判断依据

  • 只挂载不关联:Attachment 创建后若未关联到任何 TGW 路由表,其流量无处可查,直接丢弃。
  • 只关联不传播:其他 VPC 的表里学不到该网段,别人无法回包。
  • 传播到错误的表:网段出现在不该出现的路由表里,可能造成越权互通。
  • 忽略 blackhole:看到路由条目存在就认为通,实际下一跳已失效。
排查顺序建议:先确认 VPC 子网路由表是否指向 TGW,再确认 Attachment 的 Association 指向哪张 TGW 路由表,然后检查该表是否通过 Propagation 学到了目标网段,最后确认目标路由是否为 blackhole。这四步能覆盖绝大多数 TGW 连通性问题。

掌握这五个术语的分工后,TGW 就不再是一个“黑盒”。Attachment 提供接口,Association 决定查表,Propagation 决定表内容,Route Table 执行最长前缀匹配,Blackhole 标记失效下一跳——这套模型是后续多 VPC 分段、共享服务、集中出口等架构设计的共同基础。