为什么MPLS VPN收到路由却不放入VPN实例?——可能是你的MPLS出现了问题

这篇文章主要是一个计算机网络的排错案例,是我在配置MPLS VPN的时候偶然发现的一些现象。写这篇文章主要是想介绍一下MPLS VPN的排错思路,另外,简单的搜索了以下各大技术论坛、博客,发现没有对文章标题介绍的现象进行排错的,在这里我也稍微设计一下。
本文适合对MPLS VPN配置有一定了解的同学阅读,通过阅读本文,可以提升对MPLS VPN配置和MPLS协议、BGP协议的理解,也能够对网络排错有所帮助。

一、实验架构介绍

实验拓扑图如下所示:
为什么MPLS VPN收到路由却不放入VPN实例?——可能是你的MPLS出现了问题
很简单的拓扑图,其配置目的就是使用MPLS VPN实现两个公司两个分部之间互相联通。
本来,这是一道很普遍的拓扑图,但是,如果在运行IBGP关系的时候,采用直连口而不是环回口建立IBGP邻居,此时会出现问题。
此时,我的实验现象是:
BGP关系正常建立:
为什么MPLS VPN收到路由却不放入VPN实例?——可能是你的MPLS出现了问题
MPLS正常建立:
为什么MPLS VPN收到路由却不放入VPN实例?——可能是你的MPLS出现了问题
PE设备可以收到对方的路由:
为什么MPLS VPN收到路由却不放入VPN实例?——可能是你的MPLS出现了问题
但是!PE收到的路由不放在路由表中。
为什么MPLS VPN收到路由却不放入VPN实例?——可能是你的MPLS出现了问题

二、为什么实验出现了问题

简单的对上述情景进行总结,会发现——对于PE设备,收到了对方BGP对等体传递来的路由,但是没有把该路由放入自己的VPN路由表中。
如果在配置MPLS VPN的时候出现这种问题,可能有以下两种原因:
①VPN的RT、RD值设置错误
比如说在设置VPN的时候,如果有两个RD值相同,则会出现问题,如果RT值配置不同,则VPN实例可能会造成应该收的路由信息不收。
但是,显然,在这个例子中,该效果不是由上述原因造成的。
②VPN传递来的路由不可达
除了第一条原因外?还有一种原因,就是虽然VPN实例收到了路由,但是由于MPLS VPN出现了问题,导致路由的下一条不可达,从而导致虽然放入了VPN实例中,但是没有将该路由加入到路由表里。
在本例子中,出现问题的原因就在于此。
可以在PE设备上简单的查看,执行命令:

dis bgp vpnv4 all routing-table

为什么MPLS VPN收到路由却不放入VPN实例?——可能是你的MPLS出现了问题
可以发现,虽然VPN传递来了路由,但是下一条却被认为不可达。在上图中可以看到红圈部分的路由没有一个尖括号,因此,该路由不会加入到路由表中。
可是为什么该路由不会加入到路由表中呢?
在PE设备上执行命令:
为什么MPLS VPN收到路由却不放入VPN实例?——可能是你的MPLS出现了问题
明明有150.1.67.0/24网段的路由啊?
之所以PE的BGP认为该路由不可达,是因为虽然该路由有路由表,但是该路由不走MPLS,因此在转发去往该IP地址的数据包的时候,不会走标签转发路径,而是走正常的网络层路由,因此认为该路由不可达。
可以执行命令:
为什么MPLS VPN收到路由却不放入VPN实例?——可能是你的MPLS出现了问题
可以看出,该路由的Tunnel ID是0 ,而0表示不走标签转发路径,而是走了正常的路由转发,因此该目的不可达,造成了实验的失败。

三、应该怎样做才能解除问题

既然底层设备运行了MPLS,为什么去往该目的IP的路由没有被加入到MPLS中呢?
这是与MPLS特性有关的。
当我们在运行MPLS协议的时候,在蓝色区域内路由器互联的接口上使能了MPSL和MPLS LDP,在这样配置的情况下,就会出现MPLS没有生成该接口IP的标签,因此也就不能被其他人学习到了,因此该路由也就不走标签转发了。
因此,本实例的问题就在于,IBGP使用的是直连口建立的邻居,如果在建立IBGP邻居关系的时候,使用环回口而不是直连口,上述问题就迎刃而解了。

四、常见MPLS VPN排错思路。

最后,再给大家介绍一下常见的MPLS VPN的排错思路。
1、查看底层路由
MPLS VPN建立的最基础便是AS域内底层路由的互通,如果底层路由都不同,那么自然MPLS VPN不可能建立起来。
可以首先查看路由表,进而查看路由协议的邻居是否正常,通过上述过程,判断底层路由协议的运转情况。
2、查看BGP
执行命令:

display bgp peer 

可以查看BGP邻居是否建立起来,如果建立起来,那么BGP邻居的状态会是Established,而如果是其他状态,则说明BGP邻居没有建立起来。
此外,即使BGP邻居建立起来的,还需要查看BGP是否为VPNv4邻居,在MPLS VPN中,由于要传递的都是带标签的路由信息,因此BGP邻居关系必须为VPNv4类型。
3、查看MPLS
此外,MPLS VPN,还需要MPLS的建立。须知,MPLS的建立与否不影响BGP的建立,因此,很容易出现的情况时BGP邻居已经建立完成,但是MPLS还没有建立起来。此时,BGP邻居是完好的,但是由于MPLS没有建立起来,因此不能够传递路由。
4、查看路由的收、发情况
执行命令:

dis bgp vpnv4 all routing-table  peer 150.1.67.7 received-routes
dis bgp vpnv4 all routing-table peer 150.1.67.7 advertised-routes  

可以查看BGP对等体对路由的收、发情况,这样可以帮助我们进一步确定故障位置,查看究竟是对端路由器没有发路由,还是本地路由器没有接收到路由。
5、查看其他信息
比如本实例提到的一些命令,查看其它可能造成路由传递失败的因素。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200/article/details/118445428

上一篇:计算机网络 —— 网络层 2.


下一篇:python的数据结构和基本语法