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,或修正传播关系。
一次完整转发的推演
把上述概念串起来看一次实际转发。假设 VPC-A 的实例 10.10.1.5 访问 VPC-B 的 10.20.1.10:
- VPC-A 子网路由表命中
10.20.0.0/16 → tgw-attach-A,包被送入 TGW。 - TGW 根据 Attachment A 的 Association,确定查“生产表”。
- 生产表中存在
10.20.0.0/16 → tgw-attach-B(由 Attachment B 传播而来),最长前缀匹配命中。 - TGW 从 Attachment B 转发,包进入 VPC-B,再由 VPC-B 子网路由表送达目标实例。
回程流量同理,需要 VPC-B 子网路由表有指向 TGW 的路由,且生产表中存在 10.10.0.0/16 → tgw-attach-A。任何一侧缺失,都会表现为单向不通。
常见误区与判断依据
- 只挂载不关联:Attachment 创建后若未关联到任何 TGW 路由表,其流量无处可查,直接丢弃。
- 只关联不传播:其他 VPC 的表里学不到该网段,别人无法回包。
- 传播到错误的表:网段出现在不该出现的路由表里,可能造成越权互通。
- 忽略 blackhole:看到路由条目存在就认为通,实际下一跳已失效。
掌握这五个术语的分工后,TGW 就不再是一个“黑盒”。Attachment 提供接口,Association 决定查表,Propagation 决定表内容,Route Table 执行最长前缀匹配,Blackhole 标记失效下一跳——这套模型是后续多 VPC 分段、共享服务、集中出口等架构设计的共同基础。