到今天,BGP4(BGP版本4)是个非常成熟的协议,已经成为域间路由的标准使用协议,BGP非常适合承载成百上千条路由协议,并且能够对稳定性提供很好的支持。同时它具有良好的可扩展性,可以实施扩展策n的路由协议。所以选择BGP来承载MPLS L3 VPN的路由。要实现MPLS L3 VPN还需要解决一些基本问题,这些问题包括VRF、路由区分器RD、路由对象RT等。
1、全新的路由转发表VRF
VRF即VPN Routing & Forwarding Instance,VPN路由转发实例,由VPN路由表和VPN IP转发表(转发表包含了MPLS封装信息)组成,是实现MPLS VPN分组转发的核心表项。在PE上的每一sVPN有自己独立的一个VRF实例,不同VPN的VRF地址空间可以重叠。在MPLS VPN网络中一个PE通常包含有多个独立运作的VRF,一个PE维护了一张IP路由表,同时由于在PE上的路由需要被相互隔离,以确保队每一个用户VPN的私有性,所以为每一个连到PE的VPN维护了一张VRF表,在PE上,指向CE的接口只属于一个VRF,同样地,所有在VRF接口上收到的IP报文都应该毫无疑问地属于这个VRF。
2、路由区分器RD
由于BGP/MPLS VPN提供私密性,支持不同用户之间使用重叠的IP地址,如果没有保障机制来区分的话,那样会乱套了,路由肯定会产生错误,为了解决这个问题,RD的构想被定义来让IPv4前缀唯一。其基本原理就是每一个用户收到一个前缀都会有一个唯一的标识符(即RD)来区分来自不同用户的相同前缀。我们将这种IPv4前缀和RD的前缀结合在一起的形式称为vpnv4 前缀。而BGP/MPLS VPN需要将这些vpnv4前缀在PE之间进行传递。
在IPv4地址加上RD之后,就变成VPN-IPv4地址族了。理论上可以为每个VRF配置一个RD,但要保证这个RD全球唯一,通常建议为每个VPN都配置相同的RD,如果两个VRF中存在相同的地址,但是RD不同,则两个VRF一定不能互访,间接互访也不成。PE从CE接收的标准的路由是IPv4路由,如果需要发布给其他的PE路由器,此时需要为这条路由附加一个RD。VPN-IPv4地址仅用于服务供应商网络内部。在PE发布路由时添加,在PE接收路由后放在本地路由表中,用来与后来接收到的路由进行比较。CE不知道使用的是VPN-IPv4地址。在其穿越供应商骨干时,在VPN数据流量的包头中没有携带VPN-IPv4地址。
3、路由对象RT
RD仅仅标识VPN的唯一性,如果在不同的VPN场P之间进行通信的话就会出现问题,假如VPN A的一个site无法和VPN B的一个site之间进行通信,这是由于RD不匹配造成的,让VPN A的一个site和VPN B的一个site之间进行互访,这被称之为外部VPN,那么同一个VPN之间的site互相通信被称为内部VPN,解决VPN的外部通信的问题是由BGP/MPLS VPN的另一个特性RT所决定。RT也是BGP的扩展,它能标明哪些路由需要从MP-BGP中注入到VRF,PE路由器上的VPN实例有两类RT属性:
Export Target属性:本地PE在把从与自己直接相L的Site学到的VPN-IPv4路由发布给其它PE前,为这些路由设置Export Target属性;
Import Target属性:PE在接收到其它PE路由器发布的VPN-IPv4路由时,检查其Export Target属性,只有当此属性与PE上VPN实例的Import Target属性匹配时,才把路由加入到相应的VPN路由表中。
也就是说,RT属性定义了,一条VPN-IPv4路由可以为哪些Site所接收,PE路由器可以接收恍㏒ite发送来的路由。
4、BGP/MPLS VPN中的VPNv4路由转发
CE和PE之间通过IGP(静态路由/rip/ospf等)或EBGP进行IPv4路由交换。而PE和PE之间通过IBGP来交换VPNv4路由和标签。
MPLS VPN网络中路由传播的详细步骤:
第一步:CE通过IGP或EBGP向PE通告IPv4路由
第二步:在PE上将这些来自于VPN站点的IPv4路由注入到VRF路由表中,这个VRF通常是配置在PE上指向CE接口的VRF
第三步:路由被添加了RD之后被分配给了特定的VRF。变成了VPNv4路由并被注入到MP-BGP中,并添加RT
第四步:通过iBGP协议向MPLS VPN网络中其它PE通告这些VPNv4路由
第五步:当PE收到VPNv4路由的报文后,将VPNv4路由的RD去掉
第六步:以IPv4路由的方式注入到VRF路由表中
第七步:这些IPv4路由通过PE和CE之间运行的某种IGP或EBGP路由通告给CE。