MPLS VPN技术详解
阅读 1938 来源:世纪网安
这里的MPLS VPN,应该是指MPLS L3 VPN
VPN:虚拟专用网络。用户不需要专用的物理线路,而是在公共基础设施上进行私有网络服务的传播,从而达到专用网络的功能。
L3 VPN:一种VPN实现方式,它构建在L3网络之上,传输的是L3packet。
MPLS L3 VPN:L3VPN构建在MPLS网络之上。
peer-to-peer模式的实现,
控制简单,成本低,支持IP地址重叠
1 MPLS VPN模型
PE1,PE2,P,一起构成的MPLS 网络,与PE直接相连的是CE
CE:(Customer EdgeRouter,用户网络边缘路由器)设备直接与服务提供商网络相连
感知不到“VPN”的存在,
主要功能就是将VPN客户的路由通告给PE,以及从PE学习同一个VPN下其他站点的路由
PE:(Provider EdgeRouter,网络边缘路由器)设备与用户的CE直接相连,还连接P路由器,
负责VPN业务接入,处理VPN-IPV4路由
使用VRF对VPN客户进行隔离,
通过与客户设备CE进行路由协议,以便获取客户路由,并将路由生成VPNv4前缀放入MPLS VPN骨干网传递到对端PE
P:(Provider Router骨干网核心路由器):与PE或其他的P相连
负责快速转发数据。
不知道VPN客户网络,以及客户的路由。只负责在骨干网内运载标签数据
PE之间,是通过MPLSTunnel(LSP)通讯的。是通过MP-BGP协议传递路由信息
CE-PE之间,是两个路由器之间普通的交流,可以是IGP,如:OSPF,EIGRP,可以是BGP,也可以配置静态路由。
以下对概念的讲解是在此模型的基础上的
2 基本概念:
a,VRF(Virtual Router Forwarding):
MPLS VPN不同于其他VPN,有一个很大的特点是,支持不同VPN中IP地址的重叠,
PE1 是连着VPNA和VPNB ,且CE1 ,CE3 的IP地址相同都是10.0.0.1,那么目的地是10.0.0.1的网络流量到达PE1,PE1怎么区分该网络流量转发CE 1还是CE3呢?
VRF
PE路由器上每一个VPN都有一个VRF,每一个VRF,可看作是虚拟的路由器,包括:
一张独立的路由表,包括独立的地址空间
一组归属于这个VRF的接口的集合,
一组只用于本VRF的路由协议
因此PE1对于VPNA和VPNB都分别对应一个VRF,到达PE1的网络流量只需要先决定到了那个VRF里,到了每个VRF里后,IP地址为10.0.0.1就只有一个了,就能知道是转发到CE1还是CE3了
b MP-BGP(MultiProtocol-BGP)
BGP-4的多协议扩展,原本的BGP协议只能管理IPV4的信息,这个能支持如ipv6这样的其他协议,本质还是一个BGP。
在MPLSL3 VPN的场景下,本质上就是一个iBGP
MP-BGP session建立在PE1和PE2之间。
PE2通过这个MP-BGPsession将CE4的路由传递给PE1。
这里有两个问题?
1.PE1和PE2之间就一个MP-BGP session,VPNA和VPNB都需要通过这个session来传递各自的路由。如果VPNA和VPNB中的路由的目的地址是一样的(像上面提到过的那样),那session的对端怎么区分相同的地址?
2.就一个BGPsession,对端的PE怎么知道传递过来的路由是来自哪个VPN,又要写入到自己的哪个VRF table中?
c RD(Route-Distinguisher)
为解决第一问题:MP-BGP协议专门为MPLS L3 VPN指定了VPNv4前缀。那么VPNv4是什么?
VPNv4前缀有12字节(96bits)就是在4字节的IPv4地址之前,增加了8个字节的标识符,增加的8个字节叫做RD(RouteDistinguisher)。格式就是上面那样。
RD(Route-Distinguisher)
格式:Type=0,AdministratorSubfield=iBGP AS number,Assigned Number Subfield=每个VPN唯一的编号。这是比价常用的
Type=0,AdministratorSubfield=IP-Address,Assigned Number Subfield=每个VPN唯一的编号。
功能:与32bits的IPv4前缀一起构成96bits的VPNv4前缀
若不同的VPN用户,存在相同的IPv4地址空间,可通过设置不同的RD值,来保证前缀的唯一性
本质:就是一个数字,不包含了实际的信息,区分相同IPv4前缀的路由,保证BGP的进程不会认为这些路由相同
对于第一个问题,10.0.0.1这个路由信息,若想传到VPNA,就IP前加VPNA对应的RD,若想传到VPNB,就IP前加VPNB对应的RD,这样地址就可以在MP-BGP session中区别出来了
VPNA: RD1:1 IPv410.0.0.1/24 VPNv4 1:1:10.0.0.1/24
VPNB: RD2:2 IPv410.0.0.1/24 VPNv4 2:2:10.0.0.1/24
d RT(Route Target)
本质:每个VRF表达自己的路由输出和输出方式,主要用于控制VPN路由的发布和安装策略。
属性:import和export
前者import属性表示了我需要的路由属性,后者export属性表示我发出的路由的属性。
当PE发布路由时,将使用路由所属VRF的RT export规则,直接发送给其他的PE设备。
对端PE接收路由时,首先接收所有的路由,并根据每个VRF配置的RTimport规则进行检查,如果与路由中的RT属性match,则将该路由加入到相应的VRF中。
CE1: 我发的路由 RT是101:101,我也只接收 RT是100:100
CE2:我发的路由RT是100:100,我也只接收RT是101:101
CE3:我发的路由 RT是201:201,我也只接收 RT是200:200
CE4:我发的路由 RT是200:200,我也只接收 RT是201:201
CE1发出的路由只能由CE2接收,CE2发出的路由只能由CE1接收,这样CE1和CE2都在一个VPN里,实现互访
同理CE3和CE4也在一个VPN里,实现互访
RT和RD有着同样的结构,为什么不用RD来区分VPN(即用RD实现RT功能)?
分开定义有分开定义的灵活性。
当一条路由需要传递到多个VPN时,如果没有RT,就需要创建多条BGP数据,每条有着不同的RD。而有RT的话,只需要创建一条BGP数据,带上多个RT即可。从数据的长短来看,后者更有优势。
要想实现CE3pingCE4,那么控制平面的过程:
CE4--PE2
PE内部对每一个VPN,都会有一个独立的路由交换进程与对应的CE相连。这里有2个VPN连接PE,那就会有2个独立的路由交换进程,分别与CE交换各自的路由。CE4和PE2两个路由器之间普通的交流,可以是IGP例如:OSPF,EIGRP,也可以是BGP,可以配置静态路由。这样CE4的路由就可以成功传递到了PE2中的VPNB的VRF table VRFB当中。
PE2--PE1
PE2 是通过MP-BGP session将CE4的路由转发给PE1,
PE2中对应VPNB的VRFB Virtual router包含了与VPN相关的路由器变量,就是指RT和RD。
MP-BGP进程会自动的取出RD与RT,在IP地址前加上RD生成VPNv4,在后面加上RT(export 属性),进而生成相应的MP-BGP数据。
同时,PE2还会生成为PE1,生成一个MPLS Label,用于指定是哪个VPN
当PE2把这MP-BGP数据送到PE1之后,PE1首先会取出RT,对比本地的VRFs的Import Targets,记录Import Targets与BGP中RT有交集的VRFs。
如果没有匹配的VRFs,丢弃MP-BGP数据。
这里VRFB的Import Targets匹配,再计算得出IPv4格式的next-hop和IPv4格式的prefix,这样就得到了IPv4格式的路由。再分别写入相应的VRF中,这里是写入PE1的VRFB对应的虚拟转发表中。
至于MPLSLabel,随着上面的IPv4格式路由绑定,一起写入到这个VRF当中。
PE2终于有了CE1的路由信息,并且多个VPN可以共用这个路由传输通道且相互不影响。
PE1--CE3
通过PE1中的Virtual router和对应的路由交换进程,CE3的路由最终到达了CE4。
整个控制平面的过程就结束了
CE3 ping CE4,数据转发的过程:
1 CE3因为从PE1学习到了CE4网络的路由,因此,对应的路由下一跳是PE1。CE1直接将目的地址是CE2的数据包发往PE1。这就是一个普通的路由转发。
2 数据包到达PE1,准确的说是到达了PE1中对应的VPNB的VRFB的路由表中。因为之前是从PE2学习的CE2网络的路由,因此,对应的路由下一跳是PE2,此时会将数据包发往PE2地址。PE2通过MP-BGP不是给PE1分配了一个标签,也就是一个内部标签,标识不同的VPN,这样在VRF内部,IP 数据包就变成了MPLS数据包。
在MPLS网络内部,PE1到PE2并未直接相连,所以,将数据包传递到PE2 就和之前的数据包传递过程时一样的
PE2 再将VPN标签去掉,找到对应的VRF转发表,将IP包转发给对应CE2
由于PE1并未与PE2直接相连,虽然VRF 会将数据包发往PE1,但是数据包不能直接到达目的地。虽然PE1未与PE2直接相连,但是在建立MPLSTunnel的时候,PE1已经把自己的路由