MPLS VPN故障解决一例
2019-04-03云南卢立云
■ 云南 卢立云
编者按:MPLS VPN由于搭建快捷、配置灵活、安全保密、扩展性好等特点,在营运商网络被广泛使用,近期笔者遇到在配置MPLS VPN时,出现两端的CE彼此ping不通对方的情况,后通过排查,找到了原因,并加以解决。
MPLS VPN由于搭建快捷、配置灵活、便于控制、安全保密、扩展性好等特点,在营运商网络被广泛采用,可为政府、企业在公共Internet网上构建安全可靠、方便快捷的专用网络,并可大大节省广域网的建设和运行维护费用。
MPLS VPN技术是广域网建设的最佳解决方案,MPLS VPN是基于MPLS技术构建的虚拟专用网,能够在提供原有VPN网络所有功能的同时,提供强有力的QoS能力,具有可靠性高、安全性高、扩展能力强、控制策略灵活以及管理能力强大等特点。
MPLS是一种特殊的转发机制,它为进入网络中的IP数据包分配标记,并通过对标记的交换来实现IP数据包的转发。在网络内部MPLS在数据包所经过的路径通过交换标记(而不是看IP包头)来实现转发;当数据包要退出MPLS网络时,数据包被解开封装,继续按照IP包的路由方式到达目的地。
图1 网络拓扑图
基本配置
利用EVE虚拟平台可以搭建一个MPLS VPN的实验环境,营运商网络有PE1、P、PE2,采用OSPF协议实现IGP网络的联通可达,PE1和PE2之间采用MP-BGP建立VPN连接,PE1-CE1之间,PE2-CE2之间可以采用静态路由方式,也可以采用OSPF,EIGRP,BGP等方式,这里先采用静态路由方式。网络拓扑图如图1所示。配置步骤如下:
1.配置CE1、PE1、P、PE2、CE2的主机名,环回口loopback0地址和互联接口地址;
2.营运商网络一侧,配置OSPF协议,实现营运商网络IGP可达,如PE1:
router ospf 234
network 22.22.22.0 0.0.0.255 area 0
network 23.23.23.0 0.0.0.255 area 0
!
3.在PE上定义并配置VRF,如PE1:
ip vrf aaa
rd 100:11
route-target export 100:1
route-target import 100:1
!
4.在PE1-P-PE2之间的互联接口配置启用LDP和mpls功能,如,PE1:
interface Ethernet1/1
ip address 23.23.23.2 255.255.255.0
duplex half
mpls ip
!
5.在PE1-CE1的PE1侧的接口启动ip vrf forwarding,如PE1:
interface Ethernet1/0
ip vrf forwarding aaa
ip address 12.12.12.2 255.255.255.0
duplex half
!
6.PE1-PE2建立MP-BGP VPNV4连接,如PE1:
router bgp 100
bgp router-id 22.22.22.22
bgp log-neighborchanges
no bgp default ipv4-unicast
neighbor 44.44.44.44 remote-as 100
neighbor 44.44.44.44 update-source Loopback0
图2 CE1 ping不通CE2
!
address-family ipv4
exit-address-family
!
address-family vpnv4
neighbor 44.44.44.44 activate
neighbor 44.44.44.44 send-community extended
exit-address-family
!
7.PE1端配置vrf静态路由指向CE1的loopback0口,如:PE1:
!
ip route vrf aaa 11.11.11.0 255.255.255.0 12.12.12.1
!
8.将VRF静态路由再发布到BGP的VRF AAA中,如PE1:
Router bgp 100
。。。。
address-family ipv4 vrf aaa
redistribute static
exit-addressfamily
!
9.CE1端配置默认路由,指向PE1,如CE1:
!
ip route 0.0.0.0 0.0.0.0 12.12.12.2
!
问题发现
以上配置部署完成,并且PE2、CE2参照PE1、CE1配置,P上只要配置OSPF协议,并在与PE1、PE2的直连端口配置MPLS IP即可,配置完成后,在CE1端ping CE2的loopback0,结果不通,如图2所示,同样CE2也ping不通CE1。
原因分析
发现CE1-CE2两端ping不通后,起初还以为是两端配置不对。通过仔细检查PE1和PE2的配置,并没有错,再在PE1处输入命令“sh ip route”和“sh ip route vrf aaa”,PE1已经学习到关于CE2端loopback0网段的路由。同样,PE2也学习到CE1端loopback0网段的路由,如图3所示的路由信息。
在PE1端输入命令“sh ip bgp vpnv4 all”,结果如图4显示,说明PE2和PE1建立了Mpbgp vpnv4的邻居关系,并且PE2与PE1相互传递了VPN路由。
CE1和CE2是客户一侧,MPLS VPN对于用户是透明的,客户端不用配置任何有关MPLS VPN的命令,只需配置默认路由即可。但是在CE1上ping对端CE2的loopback0口还是不通。
通过仔细排查,结果发 现,CE1上ping对端CE2的loopback0口地址,IP数据包的源地址是用的CE1-PE1的直连口地址,即12,12.12.1/24,而该地址没有通过VPN传递给PE2,即PE2的VRF AAA的路由表中没有该地址段的表项,数据包可以到达CE2,但是响应数据包从CE2到达PE2后,由于没有该网段的路由,结果被丢弃,从而导致无法ping通。
图3 路由信息
图4 在PE1端显示PE2和PE1建立了邻居关系
图5 CE1 ping通CE2
故障解决
知道了问题的根源后,解决起来就得心应手。
解决方法一:只要在CE1处将ping命令后面添加源地址即可,即:CE1#ping 55.55.55.55 source 11.11.11.11,这样数据包的源地址是11.11.11.11/32,即CE1的loopback0的地址,数据包到达PE1后,包上标签,因为有到55.55.55.0的VPN路由,数据被转发到PE2,再拆除标签,转发给CE2,而CE2的响应包上传至PE2后,包上标签,系统在PE2的VRF AAA路由表中查找到去往11.11.11.0的路由,并将数据包转发给PE1,在PE1处拆除标签,转发给CE1,完成ping通过程。如图5所示,CE1 ping通CE2。
解决方法二:可在PE1的BGP配置中“addressfamily ipv4 vrf aaa”部分配置“network 12.12.12.0 mask 255.255.255.0”命令通告直连网段,在PE2也做同样配置,即可解决以上问题。
经验总结
通过故障排查,需要技术人员不仅对VPN的路由和转发过程有清晰的了解,还要求能够了解数据包的结构和跟踪数据包的转发。这样才能快速检查和排除问题。另外,在配置过程中,一个VPN对应一个RD,这一点也是应该要注意的。