无为长老的小内功——V5&V7平台版本VPN路由与VPNv4路由选路规则总结与案例分析
一、VPN路由传递过程
在BGP MPLS-VPN环境中,VPN路由使用VPNV4地址族和BGP扩展属性,通过MP-BGP协议进行传输,并以BGP路由的形式体现。
我们先来回顾一下VPN路由的传递过程:
1) CE路由表中的路由,经过PE-CE间的路由协议传递到PE相应的VPN路由表中;
2) 在PE上,VPN的路由表被附加上相应的RD值和RT属性后被导入到VPNv4路由表中;
3) PE通过MP-BGP协议将VPNv4路由传递给远端PE, 远端PE收到后,将VPNv4路由添加到自己的VPNv4路由表中;
4) 在远端PE上,VPNv4路由表中的路由与VPN的RT(import)属性进行匹配,匹配上的VPNv4路由,被导入到相应的VPN路由表中;
5) 远端PE VPN路由表中的路由,经过PE-CE间路由协议通告给远端CE,CE进行路由计算后,将这些路由加入到自己的路由表中。
综上所述,VPN路由表包括从CE学习到的路由,从VPNV4路由表中根据RT值导入的路由。VPNv4路由表包括所有通过MP-BGP学习到的私网路由表,以及本地导入的路由表,按照不同的RD值进行排列。
需要注意的是,BGP路由反射器反射的是VPNv4路由表的最佳路由。
二、BGP选路规则
VPN路由虽然也是BGP路由,但是其选路原则不同于BGP的选路规则,BGP选路规则如下:
1) 丢弃下一跳(NEXT_HOP)不可达的路由;
2) 优选首选值(Preferred-value)最大的路由;
3) 优选本地优先级(LOCAL_PREF)最高的路由;
4) 依次选择network命令生成的路由、import-route命令引入的路由、聚合路由;
5) 优选AS路径(AS_PATH)最短的路由;
6) 依次选择ORIGIN类型为IGP、EGP、Incomplete的路由;
7) 优选MED值最低的路由;
8) 依次选择从EBGP、联盟EBGP、联盟IBGP、IBGP学来的路由;
9) 优选下一跳Cost值最低的路由;
10) 优选CLUSTER_LIST长度最短的路由;
11) 优选ORIGINATOR_ID最小的路由;
12) 优选Router ID最小的路由器发布的路由;
13) 优选IP地址最小的对等体发布的路由。
三、不同于BGP的选路规则,V5平台版本的VPN路由与VPNv4路由选路规则如下(注意VPN路由与VPNv4路由选路规则的区别):
1) 比较LocalPref值,优选LocalPref值较大的路由;
2) 比较AS-Path长度,优选AS-Path较短的路由;
3) 比较Origin属性,优选值较小的(Incomplete > EGP > IGP,IGP值最小);
4) 比较MED值,优选MED值较小的路由;
5) 比较路由类型,EBGP路由>联盟BGP路由>IBGP路由;
6) 比较下一跳的IGP cost值,优选值较小的(对VPNv4路由则不进行此项的比较);
7) 优先选择CLUSTER-LIST长度最短的路由;
8) 比较源路由器的RouterId,优选RouterId值较小的;
9) 比较NeighborId,优选NeighborId值较小的。
四、V7平台版本的VPN路由和VPNv4路由选路规则一致,具体如下:
1) weight值大的优(prefered_value)本地生成的路由WEIGHT默认32768,从邻居学到的路由默认为0
2) local preference 值大的优(local preference value优先取路由上的值,其次是实例下配置的值)
3) 本地初始路由优先级比较NETWORK > IMPORT > 聚合 > 自动聚合
4) As-path 长度短的优(AsSequence Count的个数少的优)
5) Origin小的优( IGP > EGP > INCOMPLETE )
6) Med小的优(配置 compare-different-as-med或bestroute med-confederation比较)
7) 协议优选级比较(EBGP > 联盟EBGP > 联盟IBGP > IBGP)
8) 协议路由依赖路由的Metric值比较 BGP-nexthop-metric comparison
综上所述,V7平台版本VPN路由和VPNv4路由选路规则一致,而V5平台版本VPN路由和VPNv4路由选路规则不一致。所以V7平台上VPN路由和VPNv4路由优选结果肯定相同,V5平台上可能不同。
五、案例分析
下面我们来分析一个实际案例,V5平台版本VPN路由选路和路由负载分担应用案例,及此种情况下V7平台版本上处理的区别:
如下图所示,SR88-3和SR88-4作为路由反射器,其他四台SR88路由器分别和这两台路由反射器建立MP-IBGP邻居。有VPN路由192.168.0.0/24,被SR88-1和SR88-2两台设备发布到BGP VPNv4路由表中:
1、从各台路由器上查看BGP路由表中此条路由
1) SR88-2除了有本地路由,还有SR88-3和SR88-4两台路由反射器反射过来的路由:
2) SR88-3,其中两条路由分别来自SR88-1和SR88-2,以及一条是SR88-4反射过来的路由:
3) SR88-4,从下图可以看出优选了SR88-2的路由,但从上面的几张图可以看出SR88-4反射出去的路由下一跳均是172.18.245.76,即SR88-1发布过来的路由,而没有反射SR88-2发布过来的路由:
4) SR88-5上可以看出两台路由反射器反射给它的路由都是下一跳172.18.245.76,即SR88-1发布的路由,但是在SR88-4上优选的却是下一跳为172.18.245.77的路由,即SR88-2发布的路由:
5) SR88-6上可以看出两台路由反射器反射给它的路由也都是下一跳是172.18.245.76,即SR88-1发布的路由:
如此就造成了以下一种情况:
SR88-6去往192.168.0.0/24这个网段的路由最优的应该是下一跳为172.18.245.77的路由,但是它却选择了下一跳是172.18.245.76的路由。这是为什么呢?
2、我们来分析一下原因,参考V5平台对于VPNV4与VPN路由优选规则和区别
1) 最佳的VPNv4路由,优选规则前五项的属性相同,接下来因为不比较IGP cost值,则优选route id 小的,即优选始发为172.18.245.76的路由,反射器反射的是VPNv4最优的路由,所以向客户端发送的是这条路由,所以SR88-5/SR88-6上学到的都是始发为172.18.245.76的路由;
2) 最佳的VPN-instance路由,因为比较IGP cost值,因SR88-4与SR88-2直连,所以SR88-4优选始发为172.18.245.77的路由。
3、负载分担怎么办?
用户希望在SR88-5/SR88-6上实现VPN路由192.168.0.0/24的负载分担,同时选择下一跳是172.18.245.76和172.18.245.77的两条路由,那该如何实现呢?
解决方法如下:
对于两台路由反射器SR88-3/SR88-4上做如下路由策略,对于直连的PE(SR88-1或者SR88-2)发布过来的VPNv4路由,修改路由属性让其优选,比如在SR88-3上配置
ipv4-family vpnv4
peer 172.18.245.76 route-policy 1 import
在SR88-4上配置
ipv4-family vpnv4
peer 172.18.245.77 route-policy 1 import
route-policy 1 是对于对端发布的路由,修改本地优先级为110(原优先级为100)。这样两台路由反射器只会把直连的PE(SR88-1或者SR88-2)发布过来的VPNv4路由(通过local-prefence优选)发布到远端的PE上(SR88-5或者SR88-6).
而在SR88-5/SR88-6上的vpn视图下配置“balance 2”,这样就能形成2条等价路由:
[H3C]display ip routing-table vpn vpn1
Routing Tables: vpn1
Destinations : 3 Routes : 4
Destination/Mask Proto Pre Cost NextHop Interface
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
192.168.0.0/24 BGP 255 0 172.18.245.77 NULL0
BGP 255 0 172.18.245.76 NULL0
Bingo! 问题解决!
V7平台版本的VPN路由和VPNv4路由选路规则一致,所以VPNv4的路由表也会通过IGP cost值优选路由,其结果与VPN路由表优选结果一致,不存在上述问题。如要形成VPN路由负载分担,在SR88-5/SR88-6上的vpn视图下配置“balance 2”即可。
附:V7平台版本上VPN路由是否能形成负载分担,参考如下属性,
1) 路由类型不同不能形成等价(区分IBGP,EBGP,Import引入,network引入,聚合,自动聚合);
2) IBGP邻居MED值不同不能进行负载分担;
3) As-path值不同不能形成等价;
4) 反射路由和非反射路由不进行负载分担;
5) 标签路由与非标签路由不能形成等价。