排查 BGP 路由和路由选择问题

本指南用于排查与 BGP 路由相关的问题,包括路由选择、路由传播和路由优先级。

如需了解更多问题排查信息,请参阅以下内容:

已建立 IPv6 BGP 会话,但不交换 IPv4 路由

  1. 验证 VLAN 连接或高可用性 VPN 网关具有所需的栈类型 IPV4_IPV6。如果 VLAN 连接的栈类型不正确,请修改 VLAN 连接。对于高可用性 VPN 网关,请重新创建高可用性 VPN 网关及其隧道。

  2. 确保 Cloud Router 路由器已正确配置。 运行以下命令:

    gcloud compute routers describe ROUTER-NAME
    

    在输出中,检查以下值:

    • bgpPeers.enableIpv4true
    • 存在 bgpPeers.ipv4NexthopAddressbgpPeers.peerIpv4NexthopAddress

某些本地 IPv4 或 IPv6 前缀不可用

如果某些本地 IPv4 或 IPv6 前缀不可用,请检查配额和限制或重叠的子网范围。

自定义已知路由不活跃

如果您已配置自定义已知路由,但遇到流量丢失、ping 错误或与路由相关的其他问题,请执行以下操作:

  • 确保已在 BGP 会话上正确配置路由。

  • 确保 BGP 会话正在运行。

如需了解详情,请参阅检查自定义已知路由的状态

检查配额和限制

请检查您的 Cloud Router 路由器是否已超出已知路由的限制。如需了解 Cloud Router 路由器的已知路由数,请查看其状态

如需了解限制、相关日志消息和指标,以及如何解决问题,请参阅下表。

限制 指南
关于限制

已知路由存在两个限制。这些限制不会直接定义已知路由数量上限。而是定义唯一目的地前缀的数量上限:

  • 可由给定区域中所有 Cloud Router 路由器应用于该区域内子网的已知路由的唯一目的地数量上限
  • 可由不同区域中的 Cloud Router 路由器应用于给定区域内子网的已知路由的唯一目的地数量上限

无论 VPC 网络使用的动态路由模式如何,第一个限制都是相关的。仅当 VPC 网络使用全局动态路由模式时,第二个限制才有意义。如需详细了解 Cloud Router 路由器限制,请参阅限制

已知路由 可由给定区域中所有 Cloud Router 路由器应用于该区域内子网的已知路由的唯一目的地数量上限。
日志 如果您遇到其中一个限制,则会在 Cloud Logging 中看到一条 limit-exceeded 消息。有关如何创建高级查询以查看此消息的信息,请参阅 Cloud Router 路由器日志记录文档中的相关查询
指标

您还可以通过以下指标了解当前的限制和用量。这些指标以 router.googleapis.com/dynamic_routes/learned_routes/ 开头:

  • used_unique_destinations

    此 VPC 网络中使用的唯一目的地数量。如果启用全球动态路由,则此指标会同时显示全球用量和区域用量。

  • unique_destinations_limit

    此 VPC 网络中允许通告的唯一目标数量。如果启用全球动态路由,则此指标会同时显示全球限制和区域限制。

  • any_dropped_unique_destinations

    表示此 VPC 网络是否因超过一个或两个路由配额限制而舍弃任何目标。

这些指标可通过 gce_network_region 受监控资源获取。如需详细了解 Cloud Router 路由器指标以及如何查看这些指标,请参阅“查看日志和指标”中的指标部分。

解决问题

您可以执行以下操作来解决路由限制问题。在路由数量大大超过限制的情况下,应当同时执行以下两项操作:

  • 配置本地路由器以聚合导出的路由,以使这些路由通告较少的目的地 (CIDR)。
  • 与支持团队联系。 支持团队可以与您一起重置您的 Cloud Router 路由器(如果需要)或提高限额。

检查重叠子网范围

确保 VPC 子网的 IPv4 和 IPv6 地址范围与本地网络中的通告路由不完全重叠。重叠的 IPv4 和 IPv6 范围可能会导致路由被丢弃。这也适用于与 Cloud Router 路由器获知的动态路由重叠的自定义静态路由。 在以下情况下,Cloud Router 路由器接收到的前缀将被忽略(不创建自定义动态路由):

  • 获知的前缀与 VPC 网络中子网的主要或次要 IPv4 或 IPv6 地址范围完全匹配。

  • 获知的前缀与您的 VPC 网络中的自定义静态路由的目的地完全匹配。

  • 获知的前缀比 VPC 网络中子网的主要或次要 IPv4 或 IPv6 地址范围更具体(具有更长的子网掩码)。

  • 学习的前缀比您的 VPC 网络中的自定义静态路由的目的地更具体(具有更长的子网掩码)。

如需了解详情,请参阅“VPC 路由”概览中的路由的适用性和顺序

从本地网络获知的路由不传播到其他 VPC 网络

单个 Cloud Router 路由器无法将从一个 BGP 对等体获知的路由重新通告到其他 BGP 对等体,包括无法通告到其他 VPC 网络中的 Cloud Router 路由器。

例如,在以下中心辐射型拓扑中,Cloud Router 路由器无法支持在多个 VPC 网络之间进行路由通告。

Cloud Router 路由器中心辐射型拓扑。
Cloud Router 路由器中心辐射型拓扑(点击可放大)

如需查看 Google Cloud 中网络拓扑的建议,请参阅 VPC 设计的最佳实践与参考架构

此外,如需在 Google Cloud 中构建和管理中心辐射型拓扑,您可以使用 Network Connectivity Center

前缀不会被导入到 BGP 会话中(AS 路径在前)

AS 路径在前与控制层面和 VPC 网络无关。仅在每个 Cloud Router 路由器软件任务中考虑 AS 路径长度,如以下情况所述。

如果单个 Cloud Router 路由器软件任务从两个或多个 BGP 会话学习了相同目的地:

  • 该软件任务选择 AS 路径长度最短的下一个跃点 BGP 会话。
  • 软件任务会将目的地、下一个跃点和 MED 信息提交到 Cloud Router 路由器控制层面。
  • 控制层面使用该信息来创建一个或多个候选路由。每个候选者的基准优先级设为“接收 MED”。

如果两个或多个 Cloud Router 路由器软件任务从两个或多个 BGP 会话学习了相同目的地:

  • 每个软件任务会选择 AS 路径长度最短的下一个跃点 BGP 会话。
  • 每个软件任务会将目的地、下一个跃点和 MED 信息提交到 Cloud Router 路由器控制层面。
  • 控制层面使用该信息来创建两个或更多候选路由。每个候选者的基准优先级设为“接收 MED”。

Cloud Router 路由器控制平面随后根据 VPC 网络的动态路由模式在 VPC 网络中安装一个或多个动态路由。在全局动态路由模式下,每个区域动态路由的优先级在与 Cloud Router 路由器区域不同的区域中进行调整。如需详细了解 Google Cloud 如何选择路由,请参阅 VPC 文档中的路由顺序

在多 NIC 虚拟机上,每个 NIC 获得的路由不同

此行为符合预期。您必须在唯一 VPC 网络中为多 NIC 虚拟机配置每个网络接口控制器 (NIC)。 每个 Cloud Router 路由器都在一个 VPC 网络中创建自定义动态路由。因此,一个 Cloud Router 学习的路由仅适用于多 NIC 虚拟机的一个网络接口。从虚拟机的网络接口发送的数据包仅使用适用于该接口的 VPC 网络的路由。

流量的路由不对称

如果入站流量和出站流量使用不同的路径,则流量会以不对称的方式路由。例如,假设您有两个 Cloud VPN 隧道。VPC 网络的出站流量可能使用第一个隧道,而 VPC 网络的入站流量可能使用第二个隧道。

当本地路由器和 Cloud Router 路由器通告的首选路径不一致时,就会发生非对称路由。对于进入 VPC 网络的入站流量,请使用 Cloud Router 路由器配置通告路由的优先级。如需了解详情,请参阅已知路由

请查看设备文档,了解如何选择 BGP 最佳路径,因为其他特性(例如路由器 ID 或来源 ASN)可能会影响它。 例如,请参阅以下资源:

对于流出 VPC 网络的出站流量,请检查本地路由器的 MED 值。

默认路由(0.0.0.0/0::/0)向互联网网关发送流量

创建 VPC 网络时,Google Cloud 会自动创建优先级为 1000 且下一个跃点是默认互联网网关的默认路由

具有默认互联网网关的下一个跃点的路由只能由满足互联网访问要求的虚拟机使用。

访问 Google API 和服务时,也需要使用具有默认互联网网关的下一个跃点的路由,例如,使用专用 Google 访问通道时。

以下示例说明了可能导致通往互联网的流量或通往 Google API 和服务的流量被阻止的情况:

  • 如果删除自动创建的默认路由(具有默认互联网网关的下一个跃点的路由)。

  • 如果替换自动创建的默认路由且替换路由的下一个跃点与默认互联网网关不同。

  • 如果 Cloud Router 路由器获知目的地为 0.0.0.0/0::/0 且优先级比自动创建的默认路由高的路由。

下一个跃点不明确

如需了解 Google Cloud 的路由选择算法的工作原理,请参阅 VPC 路由文档中的适用范围和顺序

IPv6 流量未路由

如果您在连接到 IPv6 主机时遇到问题,请执行以下操作:

  1. 验证 IPv4 路由是否已正确通告。通过先检查 IPv4 流量,您可以排除常见网络问题。如果未通告 IPv4 路由,请执行本文档中列出的常规问题排查步骤。

  2. 检查防火墙规则,以确保允许您的 VPC 网络与本地网络之间的 IPv6 流量。

  3. 验证您的 VPC 网络和本地网络中没有重叠的 IPv6 子网范围。请参阅检查重叠子网范围

  4. 确定您是否超出了已知路由的任何配额和限制。如果您已超出已知路由的配额,则系统会先丢弃 IPv6 前缀,之后才会丢弃 IPv4 前缀。请参阅检查配额和限制

  5. 验证所有需要 IPv6 配置的组件都已正确配置。

    • VPC 子网配置为使用 IPV4_IPV6 栈类型。

    • VPC 子网将 --ipv6-access-type 设置为 INTERNAL

    • 子网上的 Compute Engine 虚拟机配置了 IPv6 地址。

    • 专用互连的高可用性 VPN 网关或 VLAN 连接配置为使用 IPV4_IPV6 栈类型。

    • BGP 对等端配置为使用 IPv6,并且您为 BGP 会话配置了正确的 IPv6 下一个跃点地址。

后续步骤