前面我们大致了解了MPLS和VPN的概念,MPLS VPN在实际场景中多用于企业总部与分支互联,基于BGP和MPLS技术实现互联互通,现在来了解下原理与工作过程。
一、MPLS VPN路由发布概述
若想实现同一个VPN的不同站点之间的通信,首先需要完成不同站点之间的路由交互。在基本MPLS VPN组网中,VPN路由信息的发布涉及CE和PE,P路由器只维护骨干网的路由,不需要了解任何VPN路由信息。VPN路由信息的发布过程包括三部分:
- 本地CE到入口PE
- 入口PE到出口PE
- 出口PE到远端CE
MPLS VPN骨干网络中PE设备可能是承载了许多的客户VPN,对于同一企业的分支是怎样识别,怎样进行路由传递与交互的呢?
二、CE与PE之间的路由信息交换
CE可以理解为企业的出口路由器,就是企业可以管理的边界,只需要使用静态路由、OSPF、BGP将路由指向运营商PE设备即可,和我们平时使用ip route-static 0.0.0.0 0.0.0.0 NEXT HOP
差不多。
如图,客户X和客户Y属于不同的VPN,分别拥有两个站点,现需要实现站点间的路由信息交互。
CE与PE之间可以使用静态路由、OSPF、IS-IS或BGP交换路由信息。无论使用哪种路由协议,CE和PE之间交换的都是标准的IPv4路由。
本地CE到入口PE和出口PE到远端CE的路由信息交换原理完全相同。
存在的问题:客户的地址重叠以及如何区分不同客户?
VPN是一种私有网络,不同的VPN独立管理自己的地址范围,也称为地址空间(address space)。不同VPN的地址空间可能会在一定范围内重合,例如图中用户X和用户Y都使用192.168.1.0/24网段地址,这就发生了地址空间的重叠(address spaces overlapping)。因此在实际情况下大型企业对于网络地址的规划也是前期规划的重要环节,不同总部与分支网段必须独立。
回到文章中来那么入口PE怎么区分不同的VPN呢?这里涉及两个关键技术:VRF(Virtual Routing and Forwarding,虚拟路由转发) 和RD(Route Distinguisher,路由标识符)。
2.1 VRF
VRF(Virtual Routing and Forwarding,虚拟路由转发),又称VPN实例,是MPLS VPN架构中的关键技术,每个VPN实例使用独立的路由转发表项,实现VPN之间的逻辑隔离。
详细知识参考往期文章:https://mp.weixin.qq.com/s/USj-5-elliczwR5_oXCZyA
VRF可以用于在一台设备中进行实例的隔离,对于接口、路由表条目等实现隔离,这样就可以在入口PE进行客户分支的识别了。
2.2 RD
PE收到不同VPN的CE发来的IPv4地址前缀,本地根据VPN实例配置去区分这些地址前缀。但是VPN实例只是一个本地的概念,PE无法将VPN实例信息传递到对端PE,故有了RD(Route Distinguisher,路由标识符)。
- RD长8字节,用于区分使用相同地址空间的IPv4前缀。
- PE从CE接收到IPv4路由后,在IPv4前缀前加上RD,转换为全局唯一的VPN-IPv4路由。
配置RD时,只需要指定RD的Administrator子字段和Assigned Number子字段。RD的配置格式有四种,常用的两种如下:
- 16bits自治系统号:32bits用户自定义数字(例如:100:1)。
- 32bits IPv4地址:16bits用户自定义数字(例如:172.1.1.1:1)。
RD的结构使得每个运营商可以独立地分配RD,但为了在某些应用场景下保证路由正常,必须保证RD全局唯一。一般情况下实验环境中好像我都是配置的第一种方式。
2.3 VPN-IPv4地址
当采用RD+路由时候地址就变成了类似这种:100:1:192.168.1.0/24
。这种称为VPN-IPv4地址。VPN-IPv4地址又被称为VPNv4地址:VPNv4地址共有12个字节,包括8字节的路由标识符RD(Route Distinguisher)和4字节的IPv4地址前缀。
VPNv4地址构成了VPNv4的路由,PE将这些路由通过BGP进传递。
三、入口PE到出口PE路由传递
PE之间建立BGP邻居关系,并通过BGP进行路由传递。为什么采用BGP呢?
- BGP使用TCP作为其传输层协议,提高了协议的可靠性。可以跨路由器的两个PE设备之间直接交换路由。
- BGP拓展性强,为PE间传播VPN路由提供了便利。
- PE之间需要传送的路由条目可能较大,BGP只发送更新的路由,提高传递路由数量的同时不占用过多链路带宽。
但是传统的BGP-4不支持处理VPNv4路由。
3.1 MP-BGP
为了正确处理VPN路由,MPLS VPN使用RFC2858(Multiprotocol Extensions for BGP-4)中规定的MP-BGP,即BGP-4的多协议扩展。
MP-BGP采用地址族(Address Family)来区分不同的网络层协议,既可以支持传统的IPv4地址族,又可以支持其它地址族(比如VPN-IPv4地址族、IPv6地址族等)。
MP-BGP新增了两种路径属性:
- MP_REACH_NLRI:Multiprotocol Reachable NLRI,多协议可达NLRI。用于发布可达路由及下一跳信息。
- MP_UNREACH_NLRI:Multiprotocol Unreachable NLRI,多协议不可达NLRI。用于撤销不可达路由。
3.2 RT值
使用MP-BGP支持将VPNv4路由进行传递,但是出口PE怎样将对应的路由分发到对应的VPN实例呢?
MP-BGP将VPNv4传递到远端PE之后,远端PE需要将VPNv4路由导入正确的VPN实例。
MPLS VPN使用32位的BGP扩展团体属性-VPN Target(也称为Route Target)来控制VPN路由信息的发布与接收。 本地PE在发布VPNv4路由前附上RT属性,对端RT在接到到VPNv4路由后根据RT将路由导入对应的VPN实例。
简单理解就是RD值是入口PE为了区别入口路由的标识,而RT值是控制PE发布与接收的。
在PE上,每一个VPN实例都会与一个或多个VPN Target属性绑定,有两类VPN Target属性:
- Export Target(ERT):本地PE从直接相连站点学到IPv4路由后,转换为VPN IPv4路由,并为这些路由添加Export Target属性。Export Target属性作为BGP的扩展团体属性随路由发布。
- Import Target(IRT):PE收到其它PE发布的VPN-IPv4路由时,检查其Export Target属性。当此属性与PE上某个VPN实例的Import Target匹配时,PE就把路由加入到该VPN实例的路由表。
就是有一个成对匹配的RT值,入PE发出时候打上ERT,接收PE根据IRT选择是否匹配接收该路由。
RT的配置:
- 与RD相同,RT由Type、Administrator和Assigned Number三个字段构成,长度也是8字节。
- 配置VPN-Target时,只需要指定VPN-Target的Administrator子字段和Assigned Number子字段。VPN-Target的配置格式与RD格式一致。
这里先了解有RD、RT这些概念,在进行实验时候就会比较容易理解了。
PE根据VPNv4路由所携带的RT将路由导入正确的VPN实例之后,VPNv4路由的RD值剥除,将IPv4路由通告给相应的客户的CE设备。
站点B和站点D的CE设备就能学习到去往各自远端站点的路由。同理,通过一系列的操作,可以实现同一用户(同一VPN)不同站点之间的路由互通。
四、标签转发
在PE和P设备需要运行MPLS 和LDP,在VPNv4和LDP中分配内、外层标签。
PE和P设备之间运行LDP,交换公网标签,建立PE之间的LSP隧道(公网隧道)。
入口PE在通过MP-BGP传递VPNv4路由时,会携带私网标签,用于区分不同VPN的数据。
出口PE在接收到VPNv4路由后,需要执行私网路由交叉和隧道迭代来选择路由。
简单说就是入口PE的VPNv4地址族打上内层标签,然后PE和P之间运行LDP,打上外层标签,在没有到达出口PE时只需要更换外层标签,到达出口PE时外层标签已经剥离,根据内层标签确定所属的VPN实例进行转发。
MPLS VPN中的路由交互全过程:
总结:今天了解了MPLS VPN的网络架构、知道了RD值、RT值、MP-BGP等相关概念,了解了MPLS VPN路由转发的过程。