优化 ExpressRoute 路由

有多个 ExpressRoute 线路时,可以通过多个路径连接到 Microsoft。 结果就是,所采用的路由可能不是最理想的 - 也就是说,流量可能会经历较长的路径才能到达 Microsoft,而 Microsoft 的流量也可能会经历较长的路径才能到达网络。 网络路径越长,延迟越严重。 延迟对应用程序性能和用户体验有直接影响。 本文详述此问题,并说明如何使用标准路由技术来优化路由。

Microsoft 和公共对等互连的路径选择

如果有一个或多个 ExpressRoute 线路,请务必确保在使用 Microsoft 或公共对等互连时流量流过所需的路径。 还需要确保 Internet 路径使用 Internet Exchange (IX) 或 Internet 服务提供商 (ISP)。 BGP 利用基于许多因素的最佳路径选择算法,包括最长前缀匹配 (LPM)。 为了确保通过 Microsoft 或公共对等互连发往 Azure 的流量遍历 ExpressRoute 路径,必须实现“本地首选项”属性。 此设置可确保在 ExpressRoute 上始终为首选路径。

注意

默认的本地优先级通常为 100。 本地优先级越高越好。

请考虑以下示例场景:

Diagram that shows the ExpressRoute Case 1 problem - suboptimal routing from customer to Microsoft

在上面的示例中,要首选 ExpressRoute路径,请按如下所示配置“本地优先级”。

从 R1 角度看 Cisco IOS-XE 配置:

  • R1(config)#route-map prefer-ExR permit 10

  • R1(config-route-map)#set local-preference 150

  • R1(config)#router BGP 345

  • R1(config-router)#neighbor 1.1.1.2 remote-as 12076

  • R1(config-router)#neighbor 1.1.1.2 activate

  • R1(config-router)#neighbor 1.1.1.2 route-map prefer-ExR in

从 R1 角度看 Junos 配置:

  • user@R1# set protocols bgp group ibgp type internal
  • user@R1# set protocols bgp group ibgp local-preference 150

从客户到 Microsoft 的欠佳路由

让我们通过一个示例来详细了解路由问题。 假设你在中国有两个办事处,一个位于北京,一个位于上海。 办公室通过广域网 (WAN) 进行连接,该广域网可能是自己的主干网络,也可能是你服务提供商的 IP VPN。 你有两条 ExpressRoute 线路,一条位于中国北部,一条位于中国东部。 两者也在 WAN 上连接。 显然,可以通过两个路径连接到 Microsoft 网络。

现在,假设你在中国北部和中国东部都有 Azure 部署(例如 Azure 应用服务)。 你的目的是将北京的用户连接到 Azure 中国北部,将上海的用户连接到 Azure 中国东部。 之所以进行此设置,是因为服务管理员会播发每个办事处的用户访问附近的 Azure 服务,以获得最佳体验。 此计划非常适合东部用户,但不适合北部用户。

该问题的原因在于,在每个 ExpressRoute 线路上,我们会向本地播发 Azure 中国东部的前缀 23.100.0.0/16 和 Azure 中国北部的前缀 13.100.0.0/16。 如果不知道哪个前缀是来自哪个区域,则无法进行区别对待。 你的 WAN 网络可能会认为这两个前缀更靠近中国东部而非中国北部,因此会将两个办事处的用户都路由到中国东部的 ExpressRoute 线路。 结果就是,北京办事处的许多用户会很不满意。

ExpressRoute Case 1 problem - suboptimal routing from customer to Microsoft

解决方案:使用 BGP 社区

若要优化两个办事处的用户的路由,需要知道哪个前缀来自 Azure 中国北部,哪个前缀来自 Azure 中国东部。 我们使用 BGP 社区值对此信息进行编码。 我们为每个 Azure 区域都分配了唯一的 BGP 社区值,例如为中国东部分配了 12076:51302,为中国北部分配了 12076:51301。 现在,知道了哪个前缀来自哪个 Azure 区域,因此可以配置哪个 ExpressRoute 线路应该为首选线路。 由于我们使用 BGP 来交换路由信息,因此用户可以使用 BGP 的“本地首选项”来影响路由。

在我们的示例中,可以在中国东部将比中国北部更高的本地首选项值分配给 13.100.0.0/16。类似地,可以在中国北部将比中国东部更高的本地首选项值分配给 23.100.0.0/16。 此配置可确保当通往 Microsoft 的两个路径都可用时,你在洛杉矶的用户使用中国北部的 ExpressRoute 线路连接到 Azure 中国北部,而你在北京的用户使用中国东部的 ExpressRoute 连接到 Azure 东部。 两边的路由都获得了优化。

ExpressRoute Case 1 solution - use BGP Communities

注意

使用专用对等互连时,对于从客户到 Azure 虚拟网络的路由,同样可以应用“本地首选项”技术。 Microsoft 不会在从 Azure 播发到网络的前缀中标记 BGP 社区值。 但是,由于你知道哪个虚拟网络部署靠近哪间办公室,因此可以相应地配置路由器,以优先使用某一条 ExpressRoute 线路。

从 Microsoft 到客户的欠佳路由

在本例中,从 Microsoft 发出的连接需要更长的路径才能到达网络。 在此示例中,在 混合环境中使用本地 Exchange 服务器和 Exchange Online。 办公室都连接到 WAN。 通过两个 ExpressRoute 线路将两个办事处中的本地服务器的前缀都播发到 Microsoft。

在进行邮箱迁移等情况下,Exchange Online 会发起到本地服务器的连接。 通往北京办事处的连接会在遍历整个大陆回到中国西部之前路由到中国东部的 ExpressRoute 线路。 问题原因类似于第一个。 在没有任何提示的情况下,Microsoft 网络无法判断哪个本地前缀靠近中国东部,哪个本地前缀靠近中国北部。 它碰巧选取了到北京办事处的错误路径。

ExpressRoute Case 2 - suboptimal routing from Azure to customer

解决方案:使用 AS PATH 追加

此问题有两种解决方案。 首先,只需在中国北部的 ExpressRoute 线路上播发北京办事处的本地前缀 177.2.0.0/31。 然后,在中国东部的 ExpressRoute 线路上播发上海办事处的本地前缀 177.2.0.2/31。 结果就是,Microsoft 只能通过一个路径连接到每个办事处。 路径不再模拟两可,路由得到了优化。 使用此设计时,需要考虑故障转移策略。 在通过 ExpressRoute 连接到 Microsoft 的路径故障的情况下,需确保 Exchange Online 仍能连接到本地服务器。

第二种解决方案是,继续将两种前缀播发到两个 ExpressRoute 线路上,但除此之外你还需提示我们哪个前缀靠近你的哪个办公室。 由于我们支持 BGP AS Path 追加,因此可以对前缀的 AS Path 进行配置,使之影响路由。 在本例中,可以延长中国东部 172.2.0.0/31 的 AS PATH,以便我们首选中国北部的 ExpressRoute 线路来处理发往此前缀的流量。 类似地,可以延长中国北部 172.2.0.2/31 的 AS PATH,这样我们就会首选中国东部的 ExpressRoute 线路。 路由是针对这两处办公室进行优化的。 根据此设计,如果一个 ExpressRoute 线路断开,Exchange Online 仍可通过其他 ExpressRoute 线路以及 WAN 访问你。

重要

使用专用 AS 编号进行对等互连时,我们会删除 Microsoft 对等互连上收到的前缀的 AS PATH 中的专用 AS 编号。 需要与公共 AS 进行对等互连,并在 AS PATH 中追加公共 AS 编号,以影响 Microsoft 对等互连的路由。

ExpressRoute Case 2 solution - use AS PATH prepending

注意

尽管此处给出的示例针对的是 Microsoft 和公共对等互连,但我们也支持专用对等互连的相同功能。 此外,AS Path 追加会在单个 ExpressRoute 线路内工作,以影响主要和次要路径的选择。

虚拟网络之间的路由欠佳

可以通过将虚拟网络(也称为“VNet”)链接到 ExpressRoute 线路,来实现虚拟网络之间的通信。 将 VNet 链接到多条 ExpressRoute 线路时,VNet 之间的路由可能欠佳。 我们分析一个示例。 有两条 ExpressRoute 线路,一条在美国西部,一条在美国东部。 每个区域中有两个 VNet。 Web 服务器部署在一个 VNet 中,应用程序服务器部署在另一个 VNet 中。 为实现冗余,将每个区域中的两个 VNet 链接到了本地 ExpressRoute 线路和远程 ExpressRoute 线路。 如下图所示,从每个 VNet 到另一个 VNet 有两条路径。 VNet 不知道哪条 ExpressRoute 线路是本地的,哪条是远程的。 由于等成本多路径 (ECMP) 路由用于负载均衡 VNet 间的流量,因此某些流量会经历更长的路径,最终路由到远程 ExpressRoute 线路。

ExpressRoute Case 3 - suboptimal routing between virtual networks

解决方法:将高权重分配给本地连接

解决方法很简单。 由于你知道 VNet 和线路的位置,因此可以告诉我们,每个 VNet 应该优先使用哪条路径。 具体而言,在本示例中,可向本地连接分配一个比远程连接更高的权重(请参阅此处的配置示例)。 当 VNet 收到多个连接上的另一个 VNet 的前缀时,会优先选择具有最高权重的连接将流量发送到该前缀。

ExpressRoute Case 3 solution - assign high weight to local connection

注意

如果有多条 ExpressRoute 线路,也可以影响从 VNet 到本地网络的路由:配置连接的权重而不是应用 AS PATH 附加(第二种方案中所述的技术)。 对于每个前缀,我们在确定如何发送流量时,始终会查看 AS Path 长度前面的连接权重。

后续步骤