示例:在 Draft-Rosen 组播 VPN 上配置 PIM 加入负载平衡
此示例说明如何为内部网关协议 (IGP) 指标不相等的外部和内部虚拟专用网 (VPN) 路由配置多路径路由,并在运行 Draft-Rosen 组播 VPN (MVPN) 的提供商边缘 (PE) 路由器上加入负载平衡。当 PE 路由器具有面向源或会合点 (RP) 的外部 BGP (EBGP) 和内部 BGP (IBGP) 路径时,此功能允许客户 PIM (C-PIM) 加入消息跨外部和内部 BGP (EIBGP) 上游路径进行负载均衡。
要求
此示例需要以下硬件和软件组件:
三款路由器,可以是 M 系列多服务边缘路由器、MX 系列 5G 通用路由平台或 T 系列核心路由器的组合。
在所有设备上运行的 Junos OS 12.1 或更高版本。
开始之前:
配置设备接口。
在所有 PE 路由器上配置以下路由协议:
Ospf
Mpls
自民党
Pim
Bgp
配置组播 VPN。
概述和拓扑
Junos OS 12.1 及更高版本支持多路径配置以及 PIM 加入负载平衡。如果 PE 路由器具有指向源(或 RP)的 EBGP 和 IBGP 路径,则 C-PIM 加入消息可以在不相等的 EIBGP 路由之间实现负载均衡。在之前的版本中,仅使用活动 EBGP 路径发送加入消息。此功能适用于 IPv4 C-PIM 加入消息。
在负载平衡期间,如果 PE 路由器丢失了一个或多个指向源(或 RP)的 EBGP 路径,则之前使用 EBGP 路径的 C-PIM 加入消息将被移动到组播隧道接口上,并且根据哈希机制选择组播隧道接口上的反向路径转发 (RPF) 邻接方。
在发现指向源(或 RP)的第一条 EBGP 路径时,只有新加入消息会跨 EIBGP 路径实现负载均衡,而组播隧道接口上的现有加入消息将不受影响。
尽管多路径 PIM 加入负载平衡的主要目标是对组播流量使用不相等的 EIBGP 路径,但如果 PE 路由器仅选择 EBGP 路径,而远程 PE 路由器为不同组提供了一条或多条加入消息,则可以避免潜在的加入环路。如果远程 PE 路由器的加入消息在 PE 路由器已选择 IBGP 作为上游路径后到达,则可以将所选上游路径更改为 EBGP,从而破坏潜在的环路。
在平滑路由引擎切换 (GRES) 期间,C-PIM 加入消息的 EIBGP 路径选择可能会有所不同,因为会根据从 CE 和 PE 邻接方收到的加入消息,为新路由引擎再次执行上游接口选择。这可能会导致组播流量中断,具体取决于接收的加入消息数量和正常重启时网络上的负载。但是,不支持不间断活动路由功能,并且不会影响 Draft-Rosen MVPN 场景中的组播流量。
在此示例中,PE1 和 PE2 是上游 PE 路由器,为其配置了多路径 PIM 加入负载平衡功能。路由器 PE1 和 PE2 有一个 EBGP 路径和一个指向源的 IBGP 路径。连接到客户边缘 (CE) 路由器的源和接收器是免费 BSD 主机。
在具有指向源(或 RP)的 EIBGP 路径(如 PE1 和 PE2)的 PE 路由器上,将按如下执行 PIM 加入负载平衡:
执行基于加入计数的现有负载平衡,以便算法首先选择负载最少的 C-PIM 接口。如果所有 C-PIM 接口的负载相等或无负载,则加入消息将平均分布到可用的上游接口上。
在 图 1 中,如果 PE1 路由器从 CE2 路由器接收 PIM 加入消息,并且如果指向源的 EBGP 和 IBGP 路径上负载相等或无负载,则加入消息在 EIBGP 路径上将实现负载均衡。
如果所选的最小负载接口是组播隧道接口,则如果客户加入 (C-join) 消息的下游列表已包含组播隧道接口,则可以存在潜在的加入环路。在这种情况下,EBGP 路径中最低负载的接口被选为 C-join 消息的上游接口。
假设 IBGP 路径是负载最少的,PE1 路由器将使用 IBGP 路径将加入消息发送至 PE2。如果来自 PE3 路由器的 PIM 加入消息到达 PE1 上,则 PE3 的 C-join 消息下行列表已包含一个组播隧道接口,这可能导致潜在的加入环路,因为上游和下游接口都是组播隧道接口。在这种情况下,PE1 仅使用 EBGP 路径发送加入消息。
如果所选的最小负载接口是组播隧道接口,而组播隧道接口不存在于 C-join 消息的下行列表中,则无需环路防御机制。如果任何 PE 路由器已播发数据组播分布树 (MDT) 类型、长度和值 (TLV),则该 PE 路由器被选为上游邻接方。
当 PE1 路由器使用加载最少的 IBGP 路径将加入消息发送至 PE2 时,如果 PE3 将其加入消息发送至 PE2,则不会创建任何加入环路。
如果没有与 C-join 消息对应的数据 MDT TLV,则组播隧道接口上负载最少的邻接方被选为上游接口。
在只有指向源(或 RP)的 IBGP 路径(如 PE3)的 PE 路由器上,将按如下执行 PIM 加入负载平衡:
PE 路由器仅将组播隧道接口作为 RPF 接口,并在组播隧道接口上的 C-PIM 邻接方之间实现负载平衡。
路由器 PE3 对从 CE4 路由器接收的消息通过 IBGP 路径到 PE1 和 PE2 路由器进行负载均衡。
如果任何 PE 路由器已播发与 C-join 消息对应的数据 MDT TLV,则会选择该 PE 路由器作为 RPF 邻接方。
对于特定的 C 组播流,至少有一个具有指向源(或 RP) 的 EIBGP 路径的 PE 路由器必须仅使用 EBGP 路径,以避免或中断加入环路。由于环路避免机制,当下行列表中已存在组播隧道接口时,PE 路由器只能选择 EIBGP 路径。
在 图 1 中,假设 CE2 主机要接收来自源的流量,而 CE2 会为不同组(组地址为 203.0.113.1 的组 1 和组地址为 203.0.113.2)发起多个 PIM 加入消息,则两个组的加入消息将到达 PE1 路由器。
然后,路由器 PE1 在 EIBGP 路径之间平均分配加入消息,以指向源。假设第 1 组加入消息直接使用 EBGP 路径发送至 CE1 路由器,而组 2 加入消息则使用 IBGP 路径发送至 PE2 路由器,PE1 和 PE2 分别成为第 1 组和第 2 组加入消息的 RPF 邻接方。
当 CE3 路由器启动第 1 组和第 2 组 PIM 加入消息时,两个组的加入消息将到达 PE2 路由器。然后,路由器 PE2 会将加入消息在 EIBGP 路径之间平均分布到源。由于 PE2 是组 2 加入消息的 RPF 邻接方,因此它使用 EBGP 路径将组 2 加入消息直接发送到 CE1 路由器。第 1 组加入消息使用 IBGP 路径发送至 PE1 路由器。
但是,如果 CE4 路由器发起多个第 1 组和第 2 组 PIM 加入消息,则无法控制在 PE3 路由器上接收的这些加入消息如何分布以到达源。PE3 选择 RPF 邻接方会影响 EIBGP 路径上的 PIM 加入负载平衡。
如果 PE3 将第 1 组加入消息发送至 PE1,并将第 2 组加入消息发送至 PE2,则 RPF 邻接方不会发生变化。因此,不会创建任何加入环路。
如果 PE3 将第 1 组加入消息发送至 PE2,并将第 2 组加入消息发送至 PE1,则不同组的 RPF 邻接方发生变化,从而导致创建加入环路。为避免潜在的加入环路,PE1 和 PE2 不会将 IBGP 路径用于发送从 PE3 路由器接收的加入消息。相反,加入消息仅使用 EBGP 路径直接发送至 CE1 路由器。
Draft-Rosen MVPN 中的环路避免机制具有以下限制:
由于远程 PE 路由器上加入消息的到达时间决定了加入消息的分布,因此在加入计数方面分布可能处于次优状态。
由于加入消息的时机无法避免并可能发生连接环路,因此后续 RPF 接口更改会导致组播流量丢失。通过实施 PIM 先断功能,可以避免这种情况。
PIM 先成后断功能是一种在 Draft-Rosen MVPN 中检测和断开 C-PIM 加入环路的方法。在建立 PIM 邻接方关系之后,但在更新相关组播转发条目之前,C-PIM 加入消息将被发送到新的 RPF 邻接方。虽然上游 RPF 邻接方会更新其组播转发条目并开始向下游发送组播流量,但下游路由器不会转发组播流量(由于 RPF 校验失败),直到组播转发条目更新为新的 RPF 邻接方。在交换组播转发条目的 RPF 接口之前,这有助于确保组播流量在新路径上可用。

配置
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以便与网络配置匹配,然后将命令复制并粘贴到 [edit] 层次结构级别的 CLI 中。
PE1
set routing-instances vpn1 instance-type vrf set routing-instances vpn1 interface ge-5/0/4.0 set routing-instances vpn1 interface ge-5/2/0.0 set routing-instances vpn1 interface lo0.1 set routing-instances vpn1 route-distinguisher 1:1 set routing-instances vpn1 vrf-target target:1:1 set routing-instances vpn1 routing-options multipath vpn-unequal-cost equal-external-internal set routing-instances vpn1 protocols bgp export direct set routing-instances vpn1 protocols bgp group bgp type external set routing-instances vpn1 protocols bgp group bgp local-address 192.0.2.4 set routing-instances vpn1 protocols bgp group bgp family inet unicast set routing-instances vpn1 protocols bgp group bgp neighbor 192.0.2.5 peer-as 3 set routing-instances vpn1 protocols bgp group bgp1 type external set routing-instances vpn1 protocols bgp group bgp1 local-address 192.0.2.1 set routing-instances vpn1 protocols bgp group bgp1 family inet unicast set routing-instances vpn1 protocols bgp group bgp1 neighbor 192.0.2.2 peer-as 4 set routing-instances vpn1 protocols pim group-address 198.51.100.1 set routing-instances vpn1 protocols pim rp static address 10.255.8.168 set routing-instances vpn1 protocols pim interface all set routing-instances vpn1 protocols pim join-load-balance
PE2
set routing-instances vpn1 instance-type vrf set routing-instances vpn1 interface ge-2/0/3.0 set routing-instances vpn1 interface ge-4/0/5.0 set routing-instances vpn1 interface lo0.1 set routing-instances vpn1 route-distinguisher 2:2 set routing-instances vpn1 vrf-target target:1:1 set routing-instances vpn1 routing-options multipath vpn-unequal-cost equal-external-internal set routing-instances vpn1 protocols bgp export direct set routing-instances vpn1 protocols bgp group bgp1 type external set routing-instances vpn1 protocols bgp group bgp1 local-address 10.90.10.1 set routing-instances vpn1 protocols bgp group bgp1 family inet unicast set routing-instances vpn1 protocols bgp group bgp1 neighbor 10.90.10.2 peer-as 45 set routing-instances vpn1 protocols bgp group bgp type external set routing-instances vpn1 protocols bgp group bgp local-address 10.50.10.2 set routing-instances vpn1 protocols bgp group bgp family inet unicast set routing-instances vpn1 protocols bgp group bgp neighbor 10.50.10.1 peer-as 4 set routing-instances vpn1 protocols pim group-address 198.51.100.1 set routing-instances vpn1 protocols pim rp static address 10.255.8.168 set routing-instances vpn1 protocols pim interface all set routing-instances vpn1 protocols pim join-load-balance
程序
逐步过程
以下示例要求您在配置层次结构中的各个级别上导航。有关导航 CLI 的信息,请参阅 在配置模式下使用 CLI 编辑器。要配置 PE1 路由器:
修改每个路由器的相应接口名称、地址和任何其他参数后,对 MVPN 域中的每个瞻博网络路由器重复此过程。
配置 VPN 路由和转发 (VRF) 实例。
[edit routing-instances vpn1] user@PE1# set instance-type vrf user@PE1# set interface ge-5/0/4.0 user@PE1# set interface ge-5/2/0.0 user@PE1# set interface lo0.1 user@PE1# set route-distinguisher 1:1 user@PE1# set vrf-target target:1:1
为 VRF 实例启用与协议无关的负载平衡。
[edit routing-instances vpn1] user@PE1# set routing-options multipath vpn-unequal-cost equal-external-internal
配置 BGP 组和邻接方以启用 PE 到 CE 的路由。
[edit routing-instances vpn1 protocols] user@PE1# set bgp export direct user@PE1# set bgp group bgp type external user@PE1# set bgp group bgp local-address 192.0.2.4 user@PE1# set bgp group bgp family inet unicast user@PE1# set bgp group bgp neighbor 192.0.2.5 peer-as 3 user@PE1# set bgp group bgp1 type external user@PE1# set bgp group bgp1 local-address 192.0.2.1 user@PE1# set bgp group bgp1 family inet unicast user@PE1# set bgp group bgp1 neighbor 192.0.2.2 peer-as 4
配置 PIM 以启用 PE 到 CE 组播路由。
[edit routing-instances vpn1 protocols] user@PE1# set pim group-address 198.51.100.1 user@PE1# set pim rp static address 10.255.8.168
在所有网络接口上启用 PIM。
[edit routing-instances vpn1 protocols] user@PE1# set pim interface all
为 VRF 实例启用 PIM 加入负载平衡。
[edit routing-instances vpn1 protocols] user@PE1# set pim join-load-balance
结果
在配置模式下,输入 show routing-instances 命令,以确认您的配置。如果输出未显示预期的配置,请重复此示例中的说明,以更正配置。
routing-instances { vpn1 { instance-type vrf; interface ge-5/0/4.0; interface ge-5/2/0.0; interface lo0.1; route-distinguisher 1:1; vrf-target target:1:1; routing-options { multipath { vpn-unequal-cost equal-external-internal; } } protocols { bgp { export direct; group bgp { type external; local-address 192.0.2.4; family inet { unicast; } neighbor 192.0.2.5 { peer-as 3; } } group bgp1 { type external; local-address 192.0.2.1; family inet { unicast; } neighbor 192.0.2.2 { peer-as 4; } } } pim { group-address 198.51.100.1; rp { static { address 10.255.8.168; } } interface all; join-load-balance; } } } }
完成设备配置后,请在配置模式下输入 提交 。
验证
确认配置工作正常。
验证不同加入消息组的 PIM 加入负载平衡
目的
验证 PE1 路由器上接收的不同加入消息组的 PIM 加入负载平衡。
行动
在操作模式下,运行 show pim join 实例扩展 命令。
user@PE1>show pim join instance extensive
Instance: PIM.vpn1 Family: INET
R = Rendezvous Point Tree, S = Sparse, W = Wildcard
Group: 203.0.113.1
Source: *
RP: 10.255.8.168
Flags: sparse,rptree,wildcard
Upstream interface: ge-5/2/0.1
Upstream neighbor: 10.10.10.2
Upstream state: Join to RP
Downstream neighbors:
Interface: ge-5/0/4.0
10.40.10.2 State: Join Flags: SRW Timeout: 207
Group: 203.0.113.2
Source: *
RP: 10.255.8.168
Flags: sparse,rptree,wildcard
Upstream interface: mt-5/0/10.32768
Upstream neighbor: 19.19.19.19
Upstream state: Join to RP
Downstream neighbors:
Interface: ge-5/0/4.0
10.40.10.2 State: Join Flags: SRW Timeout: 207
Group: 203.0.113.3
Source: *
RP: 10.255.8.168
Flags: sparse,rptree,wildcard
Upstream interface: ge-5/2/0.1
Upstream neighbor: 10.10.10.2
Upstream state: Join to RP
Downstream neighbors:
Interface: ge-5/0/4.0
10.40.10.2 State: Join Flags: SRW Timeout: 207
Group: 203.0.113.4
Source: *
RP: 10.255.8.168
Flags: sparse,rptree,wildcard
Upstream interface: mt-5/0/10.32768
Upstream neighbor: 19.19.19.19
Upstream state: Join to RP
Downstream neighbors:
Interface: ge-5/0/4.0
10.40.10.2 State: Join Flags: SRW Timeout: 207
意义
输出显示了 PE1 路由器如何均衡四个不同组的 C-PIM 加入消息。
对于组 1(组地址:203.0.113.1)和第 3 组(组地址:203.0.113.3)加入消息,PE1 路由器已选择指向 CE1 路由器的 EBGP 路径来发送加入消息。
对于第 2 组(组地址:203.0.113.2)和第 4 组(组地址:203.0.113.4)加入消息,PE1 路由器已选择指向 PE2 路由器的 IBGP 路径来发送加入消息。