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 路由表是“无状态”的转发决策表,它只决定“下一跳是谁”,不负责放行或拒绝。真正的安全控制由安全列表(Security List)和网络安全组(NSG)完成。路由可达但安全规则未放行,流量依然不通。

二、静态路由与动态路由

按路由条目的来源,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 按以下优先级判定:

  1. 最长前缀优先:更精确的网段始终胜出,与来源无关。
  2. 静态路由优先于动态路由:在目标网段完全相同的情况下,手工配置的静态路由优先。
  3. 动态路由之间比较 BGP 属性:如 AS Path 长度、MED 值等,由 BGP 选路规则决定。

此外,OCI 路由表还支持为每条规则设置优先级数值(部分场景下通过 API/CLI 配置),数值越小优先级越高,用于在同一目标网段下显式指定主备路径。实际配置中,建议为关键路径保留一条低优先级的备份路由,避免主路径故障时业务中断。

OCI 路由决策与跨网络转发路径 最长前缀匹配 → 静态优先 → BGP 属性比较 源子网 Subnet-A 10.0.1.0/24 实例 10.0.1.15 关联 RT-A 路由表 RT-A(VCN-A) 10.0.2.0/24 → LPG-A(对等 VCN) 192.168.0.0/16 → DRG-A(本地网络) 0.0.0.0/0 → NAT-GW(出公网) 匹配顺序:最长前缀 → 静态优先 → BGP 属性 对等 VCN-B 10.0.2.0/24 本地数据中心 192.168.0.0/16(BGP 学习) Internet 0.0.0.0/0 DRG 动态路由(BGP)与 VCN 静态路由的分层关系 VCN 路由表 仅静态条目 决定子网下一跳 DRG 路由表 静态 + BGP 动态 管理 Attachment 映射 本地路由器 BGP 通告本地网段 AS 65001 ↔ AS 31898

四、实战:跨子网、跨 VCN 与本地网络的流量转发配置

下面以一个典型的三层网络为例,说明如何通过路由表实现三类转发。假设拓扑如下(示例参数,非实测环境):

对象网段关键组件
VCN-A / Subnet-A10.0.1.0/24RT-A,关联 LPG-A、DRG-A、NAT-GW
VCN-A / Subnet-B10.0.2.0/24RT-B,关联同一 DRG-A
VCN-B10.1.0.0/16LPG-B,与 LPG-A 对等
本地数据中心192.168.0.0/16CPE,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。

常见排障误区:只检查 VCN 路由表,忽略 DRG 路由表和 Attachment 的关联关系。跨本地网络的流量路径是“子网 → VCN 路由表 → DRG Attachment → DRG 路由表 → IPSec/FastConnect → CPE”,任何一环缺失都会导致不通。

五、配置后的验证方法

配置完成后,建议按以下顺序验证:

  1. 在源实例执行 ip route get 10.1.0.20,确认本地路由指向 VCN 网关。
  2. 使用 OCI 控制台的“路由表”页面,检查目标网段与目标对象是否匹配预期。
  3. 通过 ping 或 traceroute 观察路径,确认流量经过 LPG 或 DRG 而非 NAT 网关。
  4. 查看 DRG 的 BGP 会话状态,确认 State = Up,且学习到的前缀包含 192.168.0.0/16。
  5. 若不通,依次检查安全列表、NSG、DRG Attachment 关联、以及本地 CPE 的 ACL。

掌握路由表的匹配逻辑与分层结构后,跨子网、跨 VCN、跨本地网络的转发就不再是“黑盒”。核心记忆点可以归纳为三句话:最长前缀决定走哪条,静态优先决定谁生效,DRG 分层决定动态路由能否落地。