关于路由表和路由
IBM Cloud® 虚拟专用云 (VPC) 会自动为 VPC 生成默认路由表,以管理区域内的流量。 缺省情况下,此路由表为空。 您可以向缺省路由表添加路由,或者创建一个或多个定制路由表,然后添加路由。 例如,如果需要特定子网的专用路由策略,那么可以创建路由表并将其与一个或多个子网相关联。 但是,如果要更改影响使用默认路由表的所有子网的默认路由策略,则应将路由添加到默认路由表中。
缺省路由表的功能与其他路由表相同,只是它是自动创建的,并且在创建子网时使用,而不指定路由表。
您可以在任何路由表中定义路由,以按照您需要的方式来调整流量。 每个子网分配一个路由表,负责管理子网的流量。 您可以随时更改子网用于管理其出口流量的路由表。
此服务还允许将 Network Functions Virtualization (NFV) 用于高级联网服务,例如第三方路由,防火墙,本地/全局负载均衡,Web 应用程序防火墙等。 定制路由表目前也已集成到 IBM Cloud 服务中。
出口和入口路由
-
出口路由控制流量,这些流量从子网出发,流向公共互联网或同一区域或不同区域的另一个虚拟机。
-
输入路由可让您自定义从 VPC 可用性区域外部流量源IBM Cloud Direct Link、IBM Cloud Transit Gateway、同一 VPC 中的另一个可用性区域或公共互联网)传入 VPC 的流量的路由。
只能有一个定制路由表与特定入口流量源相关联。 不过,您可以针对不同的流量源使用不同的路由表。 例如,路由表 A 可能使用 Transit Gateway 和 VPC Zone,而路由表 B 使用 Direct Link。
定义系统隐式路由表
不能将路由表配置为使用系统隐式路由表; 将自动填充该路由表。 当在定制路由表中找不到与流量所在子网相关联的匹配路由时,将使用系统隐式路由表。 如果找不到匹配,则丢弃数据包。
为每个 VPC 维护一个系统隐式路由表。 一个 VPC 可以在多个专区中存在,而 VPC 的系统隐式路由表在每个专区中都是不同的。 对于入口路由,系统隐式路由表仅包含到 VPC 区域中每个网络接口的路由。
通过具有 drop
操作的定制路由表缺省路由可以避免此行为。
系统隐式路由表包含:
-
路由到 VPC 中每个子网的 CIDR
-
到区域内子网的路由 (静态维护)
-
通过 BGP 学习到的其他区域中的子网的路由
-
通过 BGP 学习的动态路由 (例如,Direct Link 和 Transit Gateway)
-
因特网流量的缺省路由 (当公共网关或浮动 IP 与 VPC 相关联时使用)
-
路由到经典基础架构服务网络 CIDR (在服务网关与 VPC 关联时使用),例如:
10.0.0.0/14
,10.200.0.0/14
,10.198.0.0/15
和10.254.0.0/16
是经典基础架构服务网络 CIDR。
确定路由首选项
您可以指定 VPC 路由的路由优先级(0
-4
),以便在特定目的地存在多个路由时确定哪个路由优先级更高。 创建的现有路由和新路由如果没有优先级值,将自动设置为默认优先级(2
)。
路由优先级仅在相同的目标上考虑,并且类似于任何动态学习的路由。
设置路由优先级示例
- 如果您具有
/32
前缀和优先级为1
的路由以及目标为/31
且优先级为0
的路由,那么将首先使用/32
(最长前缀匹配)。 换言之,仅当存在多个具有完全相同的前缀的路由时,优先级才重要。 - 如果您有三个具有
0.0.0.0/0
(缺省路由) 的路由,那么将仅使用具有最高优先级的路由。 如果除去所选路由 (例如,通过自动化),那么将选择其余两个路由中的最高优先级。 - 如果自定义路由表中只有一条路由具有特定前缀,则无论优先级如何,始终使用这一条路由。 最佳路由选择针对每个特定前缀执行,并选择优先级最高的路由。
当两个路由具有相同的目标和优先级时,将使用等成本多路径 (ECMP) 路由 (扩展当前行为,其中 ECMP 用于具有相同目标的两个路由)。 最多允许路由表中的两个路由具有相同的目标和优先级。 例如,如果定制路由表具有三个具有相同目标的路由,一个具有优先级 1
的路由,另一个具有优先级 4
(ECMP) 的路由,那么将选择具有优先级 1
的路由,并且将忽略 ECMP 路由 (无 ECMP)。 现在,如果具有相同目标和优先级的两个路由具有最高优先级,那么系统会选择这两个路由并执行
ECMP。 然后,如果删除其中一个路由,那么将选择仍存在的路由,并且不会执行 ECMP。
有关路由优先级限制,请参阅 限制和准则。
广告路线
过去,VPC 的根地址前缀中的地址前缀已发布到 Direct Link 和 Transit Gateway。 但是,您无法在 VPC 的根地址前缀之外宣传地址前缀。 路由广告添加此功能。 例如,图 1 将所有区域中的路由 0.0.0.0/0
广告到特定于区域的下一个中继段。

广告路线注意事项
在宣传路线时要注意以下几点:
-
您可以向分配给 VPC 的根地址前缀之外的路由发布广告,因此您可以向 Direct Link 或 Transit Gateway 发布您的外部网络或驻留在 VPC 之外的网络。
-
如果多个中转网关或直接链路连接到您的 VPC,您可以在单个 Transit Gateway 或 Direct Link 连接上使用路由过滤,以微调将哪些路由宣传到哪些连接。
-
如果有多条路由以不同的优先级发布到目的地前缀,则优先级较高的(优先级值较低的)路由为主路由,优先级较低的(优先级值较高的)路由为备用路由。
-
如果您公告了两条不同的路由,例如
172.16.0.0/31
通过10.1.1.0
公告,172.16.0.0/32
通过10.1.2.0
公告,则带有/32
前缀的路由总是优先于带有/31
前缀的路由。 这与“最长前缀匹配”规则集一致。 与较窄的前缀相比,通向主机目的地的较长前缀总是更受青睐。 -
目前,没有用于标记来自 Transit Gateway 或 Direct Link的重复路线的机制。 Transit Gateway优先使用最特定的前缀和最短的 AS 路径来选择最佳路径。 否则,Transit Gateway会选择它最先收到的路由。 该路由可能不是 VPC 端最老的路由,如果内部刷新了到 Transit Gateway 的路由,它就会发生变化。
用例
以下用例说明了不同的路由方案。
用例 1: 边缘代理防火墙

目标 | 操作 | 下一个跃点 | 地区 |
---|---|---|---|
10.10.0.0/16 |
代理人 | 达拉斯 DC 1 | |
10.11.0.0/16 |
代理人 | 达拉斯 DC 1 | |
0.0.0.0/0 |
交付 | 10.10.1.5 |
达拉斯 DC 1 |
目标: 边缘代理防火墙
安全地从客户机定义的网关、代理或防火墙设备后面流向公共因特网,同时还允许其他子网上的资源流经 VPC 管理的公共网关。
通过使用 VPC 自定义路由和每个子网出口路由,可以创建一个表来覆盖 VPC 网络内的系统隐式路由。 在此示例中,系统创建的默认表(所有子网均在创建时分配)保持不变。 此外,还会创建一个表,用于将来自子网 10.10.1.0/24
的流量通过边缘代理 (NFV 代理) 进行定向。
由于代理数据流的目的地是公共互联网,而且通常会遵循默认路由 (0.0.0.0/0
),因此必须首先使用自定义路由的委托功能,免除流向内部可达的专用网络。 子网 10.10.3.0/24
中的资源将继续使用连接到该子网的公共网关。
当使用代理的实例与此示例中的代理共享公共子网时,无需执行此操作。 使用自定义路由,可以指定连接到不同子网的实例的下一跳 IP。 这样,您就可以横向扩展,而无需考虑边缘服务的子网大小。 例如,可将代理路由表附加到子网 10.10.3.0/24
并将所有公共流导向 NFV 代理。
边缘代理防火墙中使用的函数
此用例使用 Edge 代理防火墙的以下功能:
- 在
10.10.0.5
和10.10.1.5
接口上禁用 IP 电子欺骗检查以启用源地址保留。 此操作需要提升对实例的 IAM 许可权。 - 具有未通过 NFV 代理定向的资源的出站流的公共网关。
- 连接到
10.10.0.5
接口的浮动 IP,用于启用直接到 NFV 代理的入站和出站公共流。 - 将有状态安全组和网络访问控制表 (ACL) 分别添加到实例接口和 VPC 子网,以在 VPC 中提供额外的隔离资源。
用例 2: 公共负载均衡器

目标 | 操作 | 下一个跃点 | 地区 |
---|---|---|---|
10.10.0.0/16 |
代理人 | 达拉斯 DC 1 | |
10.11.0.0/16 |
代理人 | 达拉斯 DC 1 | |
161.26.0.0/16 * |
代理人 | 达拉斯 DC 1 | |
166.8.0.0/14 * |
代理人 | 达拉斯 DC 1 | |
0.0.0.0/0 |
交付 | 10.10.1.5 |
达拉斯 DC 1 |
目标: 公共负载均衡器
托管使用客户定义的应用程序或网络负载平衡器的网络应用程序。
通过利用 VPC 自定义路由和每个子网出口路由,可以创建一个表来覆盖 VPC 网络的系统隐式路由,而无需更新每个实例上的路由信息。 在此示例中,将保留从因特网用户到 Web 层的源 IP。 网络到应用层和应用到数据库层通过隐式 VPC 路由进行通信,并继续使用公共网关作为互联网出口。
通过专用主干的 VPC 和 IBM 服务网络中的内部/专用网络需要路由授权。 为了避免需要授权,可以将 Web 层服务器连接到应用程序层子网,并在 Web 实例上更改路由以使用应用程序子网网关作为内部 VPC 和云服务网络的下一个中继段。
公共负载均衡器中使用的函数
此用例使用公共负载均衡器的以下功能:
- 在
10.10.0.5
和10.10.1.5
接口上禁用 IP 电子欺骗检查以启用源地址保留。 此操作需要提升对实例的 IAM 许可权。 - 未通过 NFV 代理定向的资源的出站流的公共网关。
- 连接到
10.10.0.5
接口的浮动 IP,用于启用直接到 NFV 负载均衡器的入站和出站公共流。 - 将有状态安全组和网络访问控制表 (ACL) 分别添加到实例接口和 VPC 子网,以在 VPC 中提供额外的隔离资源。
用例 3:VPN
要将 VPN 网关作为 VPC 路由表中的下一个中继段,将在专用子网中创建该网关。 该子网只用于 VPN 网关,当有路由 0.0.0.0/0
且下一跳是 VPN 连接时,该子网与 VPN 网关子网相关联,并具有不同的路由表。
例如:
- 子网 A 用于托管虚拟服务器,并与缺省路由表相关联。 有一个路由
0.0.0.0/0
,下一个中继段是 VPN 连接。 - 子网 B 用于托管 VPN 网关并创建新的路由表 (路由表 B)。 它将子网 B 与路由表 B 相关联。 缺省情况下,您不需要路由表 B 中的任何路由。
要在具有路由 0.0.0.0/0
和下一个中继段是 VPN 连接时在子网之间建立连接,如上所示,您可以添加以下委派路由:
destination CIDR==zone3 VPC prefix, action==delegate, location==zone1
destination CIDR==zone1 VPC prefix, action==delegate, location==zone3
限制和准则
以下限制和准则适用于 IBM Cloud Custom Routes for VPC。
一般限制
- 当前,不能对入口 (连接到流量源) 和出口 (连接到子网) 流量使用定制路由表。 此外,缺省定制路由表无法与入口流量源相关联。
- 当前,返回流量可能由于非对称路由而失败。 此问题会影响依赖于 ECMP 静态路由的所有服务。 例如,假设您在 VPC A 中创建两个 ECMP 路由,目标为
10.134.39.64/26
,下一个中继段分别为192.168.2.4
和192.168.2.5
。 这些后续中继段是 NFV 设备 IP 地址。 从 VPC 中的实例 A 发送流量时,数据包会随机路由到其中一个下一跳,而且由于另一侧的 ECMP 哈希算法,无法保证返回流量的路径与转发流量的路径相同。 此现象称为 非对称路由。 当出现非对称路由时,问题不在路由本身,而是安全组丢弃了流量,即使安全组规则允许该流量,因为安全组只看到一条路径上的流量。 一般来说,建议避免使用 ECMP 路由。 - 在定制路由中到达下一个中继段 IP 地址的能力不是该路由是否用于正向流量的决定因素。 当使用具有相同前缀 (但下一个中继段 IP 地址不同) 的多个路由时,这可能会导致问题,因为无法访问下一个中继段 IP 地址的流量可能无法传递。
- IBM Cloud VPC 允许在 VPC 中私下使用 RFC-1918 和 IANA 注册的 IPv4 地址空间,IANA 特殊用途范围中有一些例外,并选择分配给 IBM Cloud 服务的范围。 在企业中使用 IANA 注册的范围时,以及在 VPC 中与 IBM Cloud Transit Gateway 或 IBM Cloud Direct Link结合使用时,必须在每个专区中安装定制路径。 有关更多信息,请参阅 IANA 注册的 IP 分配的路由注意事项。
- 如果有两条不同的广告路由通往同一目的地,则会受到以下限制:
- 当两个路由的下一跳都在同一区域时,优先级较高的路由(即
priority
的值较小)被用作主路径,优先级较低的路由(即priority
的值较大)被用作备份路径。 如果这两个路由的优先级相同,那么将使用 ECMP 在 2 路由之间平均路由流量。 - 当这两个路由的下一个中继段位于不同的区域中时,Transit Gateway 或 Direct Link 路由器会选择最佳路由。 在这种情况下,这是最早的广告路线。
- 当两个路由的下一跳都在同一区域时,优先级较高的路由(即
路由优先级
如果存在多个具有相同目标 CIDR/prefix 的路由,那么将使用具有最高优先级值的路由。 具有相同目标 CIDR/prefix 和优先级的路由使用 ECMP 路由。
出口路径
对于出口定制路由,在添加目标路由时,必须选择区域。 但是,下一个中继段不必位于同一区域中。 对于入口定制路由,下一个中继段必须位于同一区域中。
同等成本多路径 (ECMP)
隐式路由器执行 ECMP 路由(具有相同目的地但不同下一跳地址的多条路由),但有以下限制:
- 这仅适用于操作为
deliver
的路由。 - 每个专区只允许两个相同的目标路由,并且每个路由都必须具有不同的下一个中继段地址。
- 使用 ECMP 时,返回路径可能不采用相同的路径。
- ECMP 仅支持下一个中继段类型的 IP 地址。
入口路由
- 目前,公共入口路由(
public internet
流量选择)只能在控制台中使用。 CLI 和 API 即将发布。 - 每个入口源类型最多可以与每个 VPC 的一个入口路由表相关联,但是,一个 VPC 可以具有多个入口路由表,并且每个入口路由表可以具有一个或多个关联的入口类型。
- 来自特定流量源的入口流量通过使用与该流量源相关联的自定义路由表中的路由进行路由。
- 与入口流量源相关联的定制路由表中的定制路由以及具有
deliver
操作的定制路由必须具有下一个中继段 IP,该 IP 包含在添加路由的可用性区域中的 VPC 的其中一个地址前缀中。 此外,必须在以路由为目标的 VPC 和可用性区域中的虚拟服务器接口上配置下一个中继段 IP。 - 来自特定流量源的入口流量通过使用与该流量源相关联的自定义路由表中的路由进行路由。 如果在定制路由表中找不到匹配的路由,那么将使用 VPC 系统路由表继续路由。 通过执行 drop 操作,可以避免使用定制路由表的缺省路由来执行此行为。
- 应在与 FIP 关联的虚拟服务器实例所在的区域中定义包含任何具有目标 IP (FIP) 的定制路由的入口定制路由表。
- 当启用公共互联网
route_internet_ingress
) 源类型时,绑定到IBM Cloud VPN网关的浮动 IP 不能用作入口路由表中自定义路由的目标。
唯一前缀长度
每个自定义路由表最多可使用 14 个独特的前缀长度。 您可以拥有多个具有相同前缀的路由,这些路由仅计为一个唯一前缀。 例如,您可能有多个具有 /28
前缀的路由。 这将计为一个唯一前缀。
VPN
- 为基于路由的静态 VPN 连接创建路由时,必须输入下一跳的 VPN 连接 ID。 VPN 网关必须与路由表关联的子网位于同一区域中。 建议不要将 VPN 网关定义为与路由表关联的子网不同的区域中的下一个中继段。
- 具有 VPN 连接作为下一个中继段的路由仅在 VPN 连接处于活动状态时生效。 如果 VPN 连接已关闭,那么在路由查找期间将跳过此路由。
- 包含具有与 VPN 连接关联的下一个中继段的定制路由的定制路由表不能与入口流量源关联。
- 仅在基于路由的 VPN 上支持定制路由。 如果您正在使用基于策略的 VPN,那么路由将由 VPN 服务在缺省路由表中自动创建。