现场组网简化后包括四台设备,公网路由通过OSPF打通,两台SR66F到对方环回口存在左右两条线路的等价路由。中间两台设备为反射器,两台SR66F分别与反射器建立MP-IBGP邻居传递私网路由,两台SR66F都在BGP中开启负载分担。按照上述组网后,SR66F-1设备上查看到对端环回口路由是两条等价的OSPF路由,到私网地址44.44.44.44/32却迭代出两条出接口相同的等价路由:
<RT1>display ip routing-table
Destination/Mask Proto Pre Cost NextHop Interface
4.4.4.4/32 O_INTRA 10 2 10.0.0.2 GE2/0/1
20.0.0.2 GE2/0/0
<RT1>display ip routing-table vpn-instance 1 44.44.44.44
Destination/Mask Proto Pre Cost NextHop Interface
44.44.44.44/32 BGP 255 0 4.4.4.4 GE2/0/1
4.4.4.4 GE2/0/1
这个问题根本原因是V7设备在上述特定组网下迭代路由时实现的异常。对于上述的组网,两台SR66F设备之间学到两条BGP私网路由,下一跳都是对端环回口。正常情况下,当BGP中配置了balance ibgp 8之后,应该在比较origin、local preference、med、as path属性后优选出两条等价BGP路由,之后查询到对端环回口的路由时,迭代出两条出接口分别指向左右两条线路的路由。但实际上设备两条BGP路由迭代出的rely nexthop是相同的。因此display ip routing-talbel vpn-instance 1时看到的等价路由出接口相同。
<RT1>display bgp routing-table vpnv4 44.44.44.44 32
BGP local router ID: 1.1.1.1
Local AS number: 100
Route distinguisher: 1:1(1)
Total number of routes: 2
Paths: 2 available, 2 best
BGP routing table information of 44.44.44.44/32:
From : 2.2.2.2 (10.0.0.2)
Rely nexthop : 10.0.0.2
Original nexthop: 4.4.4.4
OutLabel : 1279
Ext-Community : <RT: 1:1>
AS-path : (null)
Origin : incomplete
Attribute value : MED 0, localpref 100, pref-val 0
State : valid, internal, best
Originator : 11.1.1.2
Cluster list : 10.0.0.2
IP precedence : N/A
QoS local ID : N/A
Traffic index : N/A
VPN-Peer UserID : N/A
DSCP : N/A
From : 3.3.3.3 (3.3.3.3)
Rely nexthop : 10.0.0.2
Original nexthop: 4.4.4.4
OutLabel : 1279
Ext-Community : <RT: 1:1>
AS-path : (null)
Origin : incomplete
Attribute value : MED 0, localpref 100, pref-val 0
State : valid, internal, best
Originator : 11.1.1.2
Cluster list : 3.3.3.3
IP precedence : N/A
QoS local ID : N/A
Traffic index : N/A
VPN-Peer UserID : N/A
DSCP : N/A
实际上在这种组网中,要实现左右两条线路上的负载,不需要在BGP路由层面来实现,而是在公网LDP LSP层面实现负载的。在这种情况下,需要参考下面内容配置tunnel policy实现LSP的负载:
#
tunnel-policy 1
select-seq lsp load-balance-number 2
#
ip vpn-instance 1
route-distinguisher 1:1
tnl-policy 1
vpn-target 1:1 import-extcommunity
vpn-target 1:1 export-extcommunity
#
业务的负载实现过程如下:当SR66F-1下联的私网地址11.11.11.11/32访问SR66F-2的私网地址44.44.44.44/32时,SR66F-1会查找对应的fib表来找到对应的token来指导业务报文转发,
<RT1>dis fib vpn-instance 1 44.44.44.44
Destination/Mask Nexthop Flag OutInterface/Token Label
44.44.44.44/32 4.4.4.4 UGHR 91 1279
44.44.44.44/32 4.4.4.4 UGHR 94 1279
之后设备会根据对应的token查找对应标签转发表项,这样找到的实际出接口分别指向两条LSP,即这样通过两条LSP实现负载。
[MSR5660-1]display mpls forwarding nhlfe
NID Tnl-Type Flag OutLabel Forwarding Info
4 LSP NA 4222 GE2/0/1 10.0.0.2
5 LSP NA 4222 GE2/0/0 20.0.0.2
在这种标签转发的组网中,从路由表开始确认报文转发出接口正确查看过程如下:
首先查看详细路由表信息,找到这条路由对应的下一跳ID,即NibID,
[MSR5660-1]display ip routing-table vpn-instance 1 44.44.44.44 32 verbose
Summary count : 2
Destination: 44.44.44.44/32
Protocol: BGP instance default
Process ID: 0
SubProtID: 0x1 Age: 00h03m40s
Cost: 0 Preference: 255
IpPre: N/A QosLocalID: N/A
Tag: 0 State: Active Adv
OrigTblID: 0x0 OrigVrf: default-vrf
TableID: 0x102 OrigAs: 0
NibID: 0x16000001 LastAs: 0
AttrID: 0x1 Neighbor: 3.3.3.3
Flags: 0x110060 OrigNextHop: 4.4.4.4
Label: 1279 RealNextHop: 10.0.0.2
BkLabel: NULL BkNextHop: N/A
Tunnel ID: 0x4 Interface: GigabitEthernet2/0/1
BkTunnel ID: Invalid BkInterface: N/A
FtnIndex: 0x0 TrafficIndex: N/A
Connector: N/A VpnPeerId: N/A
Dscp: N/A
Destination: 44.44.44.44/32
Protocol: BGP instance default
Process ID: 0
SubProtID: 0x1 Age: 00h03m40s
Cost: 0 Preference: 255
IpPre: N/A QosLocalID: N/A
Tag: 0 State: Active Adv
OrigTblID: 0x0 OrigVrf: default-vrf
TableID: 0x102 OrigAs: 0
NibID: 0x16000001 LastAs: 0
AttrID: 0x2 Neighbor: 2.2.2.2
Flags: 0x110060 OrigNextHop: 4.4.4.4
Label: 1279 RealNextHop: 10.0.0.2
BkLabel: NULL BkNextHop: N/A
Tunnel ID: 0x4 Interface: GigabitEthernet2/0/1
BkTunnel ID: Invalid BkInterface: N/A
FtnIndex: 0x0 TrafficIndex: N/A
Connector: N/A VpnPeerId: N/A
Dscp: N/A
根据NibID查看路由模块中下一跳信息,找到对应的转发隧道,例如下面信息中,该下一跳对应两条转发隧道,隧道编号分别为4和5。之后display mpls forwarding nhlfe来看这两条隧道对应的标签值及出接口。
[MSR5660-1]display rib nib 16000001 verbose
NibID: 0x16000001 Sequence: 13
Type: 0x53 Flushed: Yes
UserKey0: 0x100000001 VrfNthp: 0
UserKey1: 0x0 Nexthop: 4.4.4.4
IFIndex: 0x0 LocalAddr: 0.0.0.0
TopoNthp: 0
Instance: default
RefCnt: 2 FlushRefCnt: 0
Flag: 0x84 Version: 1
Policy: 1
1 nexthop(s):
PrefixIndex: 0 OrigNexthop: 4.4.4.4
RelyDepth: 1 RealNexthop: 10.0.0.2
Interface: GE2/0/1 LocalAddr: 10.0.0.1
TunnelCnt: 2 Vrf: default-vrf
TunnelID: 4 5 Topology: base
Weight: 1000000
总之,在这种两个反射器反设给我们V7设备的路由下一跳相同时,V7设备迭代出的出接口是相同的,这是软件实现上的不合理。但实际上这种组网中并不依靠BGP路由来实现负载。
那么在什么情况下需要通过BGP路由来实现负载呢?可以看下下面这个组网,
在这个组网中,RT2和RT3都在BGP进程中引入OSPF私网路由,之后通过两台RR反射给SR66F-2。这种情况下,SR66F-2访问RT1私网地址11.11.11.11的流量如果想在左右两条线路上负载,需要在BGP下开启balance 8。因为在这种情况下,SR66F-2学到的两条到11.11.11.11/32的等价路由,下一跳分别是RT2和RT3的环回口,没有两条等价的LDP LSP,因此需要通过BGP路由来实现负载,这种情况下BGP路由是能正常负载的。
[SR66F-2]dis ip routing-table vpn-instance 1
Destination/Mask Proto Pre Cost NextHop Interface
11.11.11.11/32 BGP 255 2 2.2.2.2 GE0/0
3.3.3.3 GE0/1
[SR66F-2]dis fib vpn 1 11.11.11.11
Destination/Mask Nexthop Flag OutInterface/Token Label
11.11.11.11/32 2.2.2.2 UGHR 2 1278
11.11.11.11/32 3.3.3.3 UGHR 4 1278
[SR66F-2]dis mpls forwarding nhlfe
NID Tnl-Type Flag OutLabel Forwarding Info
2 LSP NA 1150 GE0/0 50.0.0.1
4 LSP NA 1149 GE0/1 60.0.0.1
在现场组网中,可以关闭BGP的balance,通过配置tunnel policy来实现LDP LSP上的负载。
在现场这种组网下,V5设备的BGP会迭代出两条出接口不同的路由,V7设备这一块实现有异常。虽然这种组网下不需要通过BGP来实现负载,但这种迭代异常还是会造成用户在display ip routing-table vpn-instance的时候产生疑惑。目前已向研发提交需求对此进行修改。
✖
案例意见反馈
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作