本文档主要探讨的是,在MPLS环境中,如果某个VPN站点存在双PE,那么有可能存在的问题,诸如路由环路、次优路径等等。做个分析,同时结合OSPF在MPLS VPN环境中的相关细节问题做个介绍。
一、实验描述
左右两个Site,PE-CE都是跑OSPF。
左右两个Site都将客户路由放给PE,最终要实现Site之间能够互访,重点观察左侧Site的路由。
我们重点关注两个站点内,OSPF网络设计的不同,从而对网络的影响,以及Site1内双PE在各种环境下产生的问题和解决办法。
二、设备配置
CE1、CE2、CE3的配置就不说了。
PE1的配置如下:
ip vrf cisco
rd 1:1
route-target export 3456:12
route-target import 3456:3
route-target import 3456:12
!
ip cef
mpls label range 300 399
mpls ldp router-id Loopback0
!
interface Loopback0
ip address 3.3.3.3 255.255.255.255
interface Ethernet0/0
ip vrf forwarding cisco
ip address 10.1.13.3 255.255.255.0
interface Ethernet0/1
ip address 10.1.35.3 255.255.255.0
mpls ip
!
router ospf 1 vrf cisco
redistribute bgp 3456 subnets
network 10.1.13.3 0.0.0.0 area 0
!
router ospf 100
router-id 3.3.3.3
network 3.3.3.3 0.0.0.0 area 0
network 10.1.35.3 0.0.0.0 area 0
!
router bgp 3456
no bgp default ipv4-unicast
neighbor 5.5.5.5 remote-as 3456
neighbor 5.5.5.5 update-source Loopback0
address-family vpnv4
neighbor 5.5.5.5 activate
neighbor 5.5.5.5 send-community extended
exit-address-family
address-family ipv4 vrf cisco
no synchronization
redistribute ospf 1 vrf cisco match internal external 1 external 2
exit-address-family
PE2、PE3的配置大同小异,这里不在赘述
PE2的VRF配置:
ip vrf cisco
rd 1:2
route-target export 3456:12
route-target import 3456:3
route-target import 3456:12
PE3的VRF配置:
ip vrf cisco
rd 1:3
route-target export 3456:3
route-target import 3456:12
ip vrf forwarding cisco
三、实验现象
1.两边站点PE上的VRF OSPF进程号相同,且Site1内是OSPF单区域
首先考虑下Site2到Site1的路由传递过程
我们假设先配置的是PE1,后配置PE2,来看看路由的传递过程。关键看VPNv4路由从R5传递给PE1后,PE1将路由注入到OSPF,形成3类 LSA,这些3类 LSA的DownBit都置位了,因此,即使再经过Site1内的OSPF网络被传到PE2,PE2也不会用这些LSA3参与路由的计算,因为他们 DownBit都置位了。竟然忽略了这些3类LSA,自然就不会加载进路由表,更不会在PE2上经过OSPF到BGP的重发布倒灌回BGP注意,此刻 PE2是恒定忽略这些Downbit置位的3类LSA的,即使shutdown掉PE2的e0/1口,也是一样。
因此在这个环境下,得益于OSPF Downbit的设计,网络显得很可靠。
再考虑下Site1到Site2的路由传递过程
假设PE1先配置的OSPF到BGP的重发布,那么site1内的客户路由,被PE1注入到MP-BGP形成了VPNv4的前缀,经由RR反射给了PE2,这时候,对于PE2来说,一边是从VRF 的OSPF路由进程学习到Site1内的路由,另一边,从MP-iBGP也学习到这些路由,由于OSPF的AD110小于IBGP的200,因此PE2优选OSPF路由,从而不会造成次优路径的问题。
2.两边站点PE上的VRF OSPF进程号相同,但Site1是多区域
注意,在这个测试中,我们的环境变了,变化的地方在site1,从OSPF单区域,变成了多区域,R1属于area0,R2是ABR,跟PE2直连的网段,以及自身的loopback 2.2.2.2属于area1。我们来网络会有什么影响。
首先考虑下Site2到Site1的路由传递过程
首先看PE1上发生什么事情,PE1上首先是通过BGP学习到了7.7.7.7也就是Site2内的路由,然后将路由重发布到OSPF,形成LSA3,这些LSA3 Downbit置位。那么CE1就能学习到关于7.7.7.7的OIA路由,并且继续将LSA3传递给CE2,CE2也收下了,由于它是ABR,从 area0收到LSA3,于是将LSA3又注入常规区域area1,但是,这条LSA3就发生变化了,DOWNbit位被清除。当然,这还不是最糟糕的,更糟糕的是,3类LSA被传递给PE2后,我们前面分析过了,对于OSPF来说MPLS VPN Backbone就是一个super backbone area超级骨干区域,那么此刻PE2即是一台ASBR又是一台ABR,我是一台ABR,但是我却从area1收到3类LSA,这是违反OSPF关于“3 类LSA必须经过area0中转”这一原则的,因此PE2忽略在area1上手收到的来自CE2的任何3类LSA,当然,产生自CE2的area1内的区域内部1类LSA还是会收的。
正是由于PE2的ABR属性,造成的另一个问题是,来自Site1内area0的路由,经由CE2以LSA3的形式通告给PE2,PE2在路由计算的时候也照样忽略它们。这将直接导致接下去发生的问题:次优路径。怎么造成的呢,我们知道PE1上已经学习到了Site1内的OSPF路由,它将这些OSPF重发布到BGP,并经RR反射给了PE2,于是,PE2从BGP学习到了这些Site1内的路由,另一方面,它又忽略了CE2更新过来的关于Site1内的 3类LSA,因此PE2的路由表里装载的Site1里area0的路由全是BGP的,这就是次优路径了,此时此刻PE2的路由表是这样的:
B 1.1.1.1 [200/11] via 3.3.3.3, 01:27:08
O 2.2.2.2 [110/11] via 10.1.24.2, 00:00:04, Ethernet0/0
B 7.7.7.7 [200/11] via 6.6.6.6, 01:27:08
B 10.1.12.0/24 [200/20] via 3.3.3.3, 01:27:08
B 10.1.13.0/24 [200/0] via 3.3.3.3, 01:27:08
C 10.1.24.0/24 is directly connected, Ethernet0/0
B 10.1.67.0/24 [200/0] via 6.6.6.6, 01:27:08
刚才描述的过程,可以用上面的图来概述。哥们实验的时候,做了个测试,将PE2上连接RR的接口shutdown了。于是PE2的VRF路由表变成了:
O 2.2.2.2 [110/11] via 10.1.24.2, 00:10:48, Ethernet0/0
只有一条area1内的路由,但是查看PE2的OSPF database,发现还是有许多CE2发过来的LSA3的,很明显这就验证了我们前面的说法,PE2这哥们认为爷爷我是个ABR,直接忽略你。
这个事情还没完,由于PE2路由表里的这个问题,加上PE2又做了OSPF 和BGP的双向重发布,那么,PE2上,这些从PE1倒灌过来的关于Site1内的路由,由于此刻在PE2的路由表里是BGP路由,那么在BGP到OSPF的重发布动作后,这些路由又被坑爹的倒灌回了Site1:
这样一来,就得看CE2的了。
对于Site1内area0里的路由,从area0学到的是LSA1及LSA2,而从PE2倒灌回来的是LSA3,CE2当然优选LSA1及LSA2计算得出的区域内部路由,所以这里天然防环。
对于Site2的路由,CE2同时学到PE1及PE2更新过来的LSA3,因此比metric,最后优选PE2作为下一跳。
关键点,注意,这里有个细节,R2,是一台ABR啊各位亲戚朋友。既然是一台ABR,那么当它收到PE2重发布进来的OSPF LSA3,即使放进了LSDB本该是忽略的,因为它是从常规区域area1收到这些LSA3的,违反OSPF的法则吧?但是实际上,在这个环境中,CE2 不但将LSA装载进了LSDB,而且,这些LSA还参与路由计算。但是这些LSA3,CE2自己是手下了,却不会将他们泛洪到area0中,也就是说,只影响了CE2自己。
综上所述,当Site1内规划成多区域时,有可能引发一系列的潜在问题。所以:
MPLS VPN环境中,OSPF网络的设计要非常谨慎
上面的问题,可以考虑在CE2和PE2之间,建立一个virtual-link
再有就是可以利用一些策略工作过滤掉路由
3.两边站点PE上的VRF OSPF进程号不相同,且Site1内是OSPF单区域
两边的VRF OSPF进程号不一样,大家都知道会发生什么了,Site2的路由被PE1注入进OSPF后,会以LSA5的形式注入,那么接下去:
得益于Domain-Tag的设计,我们的网络还是比较健壮的。
同样,也不同担心Site1内的路由被PE1注入到BGP然后反射回PE2的问题,这里直接比AD值然后BGP光荣落败,没什么难度。
原文博客:http://blog.sina.com.cn/s/blog_5ec353710101eg0h.html