4. 路由表与路由策略
在 Oracle Cloud Infrastructure(OCI)中,VCN 内部的子网互通、VCN 之间的对等连接、以及 VCN 与本地数据中心之间的流量转发,最终都依赖一个核心组件——路由表(Route Table)。理解路由表的工作机制,是排查“为什么 ping 不通”“为什么流量走了错误的路径”这类问题的前提。本节从路由表的匹配规则讲起,逐步展开静态路由与动态路由的差异、路由优先级判定,并通过一个跨子网、跨 VCN 及本地网络的实战配置示例,把抽象规则落到具体操作上。
一、路由表的基本结构与匹配规则
OCI 的每个 VCN 在创建时会自动生成一个默认路由表,子网可以关联默认路由表,也可以关联自定义路由表。路由表由若干条路由规则(Route Rule)组成,每条规则包含三个关键字段:
- 目标网段(Destination CIDR):流量的目的地址范围,例如 10.0.1.0/24、0.0.0.0/0。
- 目标类型(Target Type):流量的下一跳类型,常见有 Internet Gateway(IGW)、NAT Gateway、Service Gateway、Dynamic Routing Gateway(DRG)、Local Peering Gateway(LPG)、Private IP 等。
- 目标对象(Target):具体绑定的网关或实例,例如某个 DRG 的 OCID。
匹配规则遵循最长前缀匹配(Longest Prefix Match)原则:当多条规则都能覆盖目的地址时,选择掩码最长、最精确的那一条。例如目的地址为 10.0.1.15,路由表中同时存在 10.0.0.0/16 和 10.0.1.0/24 两条规则,则命中 10.0.1.0/24。若没有任何规则匹配,流量被丢弃,不会回退到默认网关。
二、静态路由与动态路由
按路由条目的来源,OCI 路由可分为两类:
静态路由由管理员手工在路由表中添加,目标网段和目标对象都是固定写死的。它适用于拓扑稳定、对端网段明确的场景,例如 VCN 内子网通过 LPG 访问对等 VCN 的网段、通过 DRG 访问本地数据中心网段。静态路由的优点是可控、可预测;缺点是拓扑变化时需要人工维护,容易遗漏或写错。
动态路由不由管理员逐条填写,而是通过路由协议自动学习。在 OCI 中,动态路由主要发生在 DRG 与本地网络之间,通过 BGP(边界网关协议) 交换路由信息。当你在 DRG 上创建 IPSec VPN 或 FastConnect 虚拟电路时,可以配置 BGP 会话,让本地路由器把本地网段通告给 OCI,OCI 也把 VCN 网段通告给本地。这样本地网段增减时,路由表会自动更新,无需手工干预。
需要特别说明:OCI 的 VCN 路由表本身不运行动态路由协议,它只承载静态条目;动态学习到的路由由 DRG 的路由表(DRG Route Table)管理,再通过 DRG 关联(Attachment)映射到 VCN 路由表。理解这一分层,是排查跨 VCN、跨本地网络问题的关键。
三、路由优先级与冲突处理
当同一目标网段存在多条来源不同的路由时,OCI 按以下优先级判定:
- 最长前缀优先:更精确的网段始终胜出,与来源无关。
- 静态路由优先于动态路由:在目标网段完全相同的情况下,手工配置的静态路由优先。
- 动态路由之间比较 BGP 属性:如 AS Path 长度、MED 值等,由 BGP 选路规则决定。
此外,OCI 路由表还支持为每条规则设置优先级数值(部分场景下通过 API/CLI 配置),数值越小优先级越高,用于在同一目标网段下显式指定主备路径。实际配置中,建议为关键路径保留一条低优先级的备份路由,避免主路径故障时业务中断。
四、实战:跨子网、跨 VCN 与本地网络的流量转发配置
下面以一个典型的三层网络为例,说明如何通过路由表实现三类转发。假设拓扑如下(示例参数,非实测环境):
| 对象 | 网段 | 关键组件 |
|---|---|---|
| VCN-A / Subnet-A | 10.0.1.0/24 | RT-A,关联 LPG-A、DRG-A、NAT-GW |
| VCN-A / Subnet-B | 10.0.2.0/24 | RT-B,关联同一 DRG-A |
| VCN-B | 10.1.0.0/16 | LPG-B,与 LPG-A 对等 |
| 本地数据中心 | 192.168.0.0/16 | CPE,BGP AS 65001,对端 OCI AS 31898 |
场景一:跨子网转发。同一 VCN 内不同子网默认通过 VCN 本地路由互通,无需额外配置。但如果 Subnet-A 与 Subnet-B 关联了不同的自定义路由表,且 RT-A 中没有 10.0.2.0/24 的条目,则 Subnet-A 的实例无法访问 Subnet-B。此时需要在 RT-A 中添加一条规则:目标 10.0.2.0/24,目标类型选择“Private IP”或直接依赖 VCN 本地路由(OCI 默认允许同 VCN 内子网互通,前提是安全规则放行)。
场景二:跨 VCN 转发。VCN-A 与 VCN-B 通过 LPG 对等。在 RT-A 中添加:目标 10.1.0.0/16 → LPG-A;在 RT-B(VCN-B 的路由表)中添加:目标 10.0.0.0/16 → LPG-B。同时,两端的 LPG 需要分别与对应子网的路由表关联,且安全列表需放行 10.0.0.0/16 与 10.1.0.0/16 之间的 ICMP/TCP 流量。配置完成后,从 10.0.1.15 ping 10.1.0.20 应能收到回复。
场景三:访问本地网络。VCN-A 通过 DRG-A 与本地 CPE 建立 IPSec VPN,BGP 会话建立后,本地路由器将 192.168.0.0/16 通告给 DRG。此时需要在 RT-A 中添加静态条目:目标 192.168.0.0/16 → DRG-A。注意,DRG 侧学习到的动态路由需要通过 DRG Route Table 关联到 VCN Attachment,才能最终出现在 VCN 路由表的可选下一跳中。若只配置了 BGP 而未在 VCN 路由表添加静态条目,流量依然无法到达 DRG。
五、配置后的验证方法
配置完成后,建议按以下顺序验证:
- 在源实例执行
ip route get 10.1.0.20,确认本地路由指向 VCN 网关。 - 使用 OCI 控制台的“路由表”页面,检查目标网段与目标对象是否匹配预期。
- 通过
ping或traceroute观察路径,确认流量经过 LPG 或 DRG 而非 NAT 网关。 - 查看 DRG 的 BGP 会话状态,确认
State = Up,且学习到的前缀包含 192.168.0.0/16。 - 若不通,依次检查安全列表、NSG、DRG Attachment 关联、以及本地 CPE 的 ACL。
掌握路由表的匹配逻辑与分层结构后,跨子网、跨 VCN、跨本地网络的转发就不再是“黑盒”。核心记忆点可以归纳为三句话:最长前缀决定走哪条,静态优先决定谁生效,DRG 分层决定动态路由能否落地。