【MPLS VPN】基础知识:模型、PE路由器、VRF、RD及RT

(红茶三杯http://weibo.com/vinsoney版权所有,转载请注明出处)
 
一、MPLS VPN模型
 
1. PE(Provider edge)运营商边界设备
    运营商边界设备,与客户边界设备相连接。运行MPLS。同时在PE上,使用VRF对VPN客户进行隔离。
2. P(Provider)运营商设备
    运营商设备不直接与客户设备相连接。运行MPLS。P设备往往并不知道VPN客户网络、以及客户的路由。它只负责在Backbone内运载标签数据。
3. CE(customer edge )客户边界设备
    客户网络中,与PE直连的设备,主要的功能是将VPN客户的路由通告给PE,以及从PE学习同一个VPN下其他站点的路由
二、VRF
 
    MPLS VPN一个非常吸引人的地方,就是可以让不同客户的路由及数据穿越运营商的MPLS VPN Backbone,而且这些路由和数据又是相互隔离和独立的,即使不同的客户,拥有相同的IPv4地址空间也不要紧。
    那么作为这些客户路由进入MPLS Backbone入口的设备 — PE,就显得非常重要了。在PE上有个非常重要的概念—VRF(严格的说,VRF的作用现在已经扩展了,我们这里重点讨论在MPLS VPN PE中的运用)。
    VRF:Virtual Routing and Forwarding,翻译成虚拟路由及转发,它是一种VPN路由和转发实例。一台PE路由器,由于可能同时连接了多个VPN用户,这些用户(的路由)彼此之间需要相互隔离,那么这时候就用到了VRF,PE路由器上每一个VPN都有一个VRF。PE路由器除了维护全局IP路由表之外,还为每个VRF维护一张独立的IP路由表,这张路由表称为VRF路由表。要注意的是全局IP路由表,以及VRF路由表都是相互独立或者说相互隔离的。
    因为每一个VPN都有一张独立的VRF路由表,所以PE路由器上每一个VPN也会有一张独立的CEF表来转发这些报文,这就是VRF CEF表
一旦在PE路由器上创建了一个VRF,我们就可以将特定的接口(物理或逻辑的)放入这个VRF,那么这个接口将不再属于全局IP路由表或其他任何VRF,只为该VRF服务。
三、RD
    由于VPN前缀是通过MP-BGP在MPLS VPN网络中扩散,那么可能,同一时间,MPLS VPN网络承载着多个客户的VPN前缀,甚至有可能是相同的IPv4地址空间,那么怎么做到客户之间地址空间的唯一性呢?就需要用到RD值了。RD值在VRF中进行配置。
    RD(route distinguisher)64bits,用于在MP-BGP运载VRF前缀时,确保这些前缀的唯一性。但是RD并不会说明该前缀属于哪一个VRF(需要搭配RT),RD的功能并不是VPN标示符,因为在一些复杂的VPN环境中,可能一个VPN存在多个RD。RD的最重要的两个功能: 
  • 与32bits的Ipv4前缀一起构成96bits的VPNv4前缀;
  • 如果不同的VPN客户,存在相同的IPv4地址空间,那么可以通过设置不同的RD值从而保证前缀的唯一性。
    这个64比特的值可以有两种表现形式:AS:nn或者IP-address:nn。其中nn代表数字。最常用的格式是AS:nn,其中AS代表AS号。通常AS是IANA分配给服务提供商的AS号,nn是服务提供商分配给VRF的唯一号码。
产生的VPNv4前缀通过MP-BGP在PE路由器之间被传递。
(红茶三杯http://weibo.com/vinsoney版权所有,转载请注明出处)
四、RT
    Route Targets,这玩意就是用来区分customer的。是BGP community 的扩展属性,在VRF中进行配置。它跟在VPNv4前缀后面被一起传递。一条路由可以附加多个RT值。
  • Export RTs
通过在vrf中定义export RT值,将使得输出的VPNv4路由携带上该RT值一起传递 – 以BGP扩展community的方式。注意这些VPNv4路由,是由VPN客户的IPv4路由导入VRF后,加上VRF中配置的RD值所形成的。
 
  • Import RTs
    PE会从其他MP-BGP对等体的PE那收到VPNv4的前缀,这些前缀都是携带RT值的。默认情况下,PE是不会将这些VPNv4路由以IPv4的形式装载到VRF路由表里,除非在本地的VRF中,配置import RTs,那么如果import RTs与收到的VPNv4前缀中的RT匹配的话,这些VPNv4前缀才会被以IPv4的形式装载到相应的VRF路由表里,相当于在这里RT起到一个前缀过滤或者识别的作用,这个功能在许多场景中非常有用。
VPNv4路由可能携带不止一个RT值,只要有一个匹配import RT即可导入到VRF路由表。
 
五、PE设备逻辑详解
    PE设备是MPLS VPN部署非常关键的一个环节。上面这张图就是一个典型的PE路由器的逻辑分解图。蓝色的这个框框代表的就是一台PE路由器。我们看到这个PE设备创建了两个VRF,VRF-A对应的是客户A,VRF-B对应的是客户B。(红茶三杯http://weibo.com/vinsoney版权所有,转载请注明出处)
    一旦创建了两个VRF,我们就可以将特定的接口放入特定的VRF,那么这些接口将只为所属的VRF服务。上图中的PE路由器实际上就有了三张路由表,分别是两张VRF路由表,以及一张全局IP路由表。
    一个PE路由器连接不同的客户Customer,使用类似虚拟路由器的概念,来进行逻辑上的进行区分,看到上图中的virtual router for A和virtual router for B了么。这些客户甚至有可能使用相同的地址空间,那么我们在一台PE上,使用多个virtual路由表,将客户及客户的路由进行逻辑上的隔离。这里virtual路由表是相对于我们的全局IP路由表的概念。从global接口上学习到的路由,放入全局IP路由表,从VRF接口上学习到的路由,放入相应的VRF路由表。不同的virtual路由表完全隔离。
 
    再来看仔细一点,上面这个PE,我们创建了VRF ABC,那么同时一并出现的还有VRF ABC的路由表以及VRF ABC的CEF表。我们将PE上与CE直连的接口放入VRF ABC。接下去来分解一下,看看这里头有什么东西:
  •  首先PE上,运行一个Core的IGP协议,这里用的是OSPF 100,这个OSPF进程是为全局IP路由表贡献路由的。OSPF 100与运营商骨干网内的其他设备形成OSPF邻居关系并且交互骨干网Core内的路由,交互这些路由的目的是,可以为后面的MP-BGP的建立服务,因为MP-BGP往往是通过PE之间的Loopback来建,MP-BGP邻居关系建立需要这些IGP路由。同时后续的LDP也依赖这个Core的IGP协议。
  • 接着PE上运行一个MP-BGP,MP-BGP至少有两个address-family也就是地址族,一个是address-family vpnv4,用于和对端的PE交互VPNv4前缀。另一个地址族是address-family ipv4 vrf ABC,注意这个地址族是和vrf ABC关联的,用于获取VPN客户的路由,这个图中就是customer-A。
  • 接着PE上跑一个PE-CE的路由协议,例如静态、RIP、EIGRP、BGP等等,目的是为了从VPN客户那,也就是CE设备那学习到VPN客户的路由。注意由于连接CE的接口被放入了VRF ABC,因此通过这个接口学习到的路由,被放入了VRF ABC的路由表。放入了VRF ABC路由表之后呢?接下来就要将路由引入到MP-BGP中,如果PE-CE之间运行的是路由协议是非BGP,那么就需要做路由重发布,将客户路由重发布进address-family ipv4 vrf ABC这个地址族下面,而如果PE-CE之间运行的已经是BGP了,那么路由当然就直接进入MP-BGP了。
  • 现在MP-BGP已经有了VPN客户的路由,现在要将这些IPv4的路由前缀,变成VPNv4的路由前缀,通过已经建立起来的VPNv4的邻接关系传递给对端PE。由于这些路由是属于VRF ABC的,而VRF是定义了RD、RT值的,那么这些值在这里就派上用场了。32bits的IPv4路由前缀,搭配上64bits的RD值,就形成了96bits的VPNv4的前缀。另外,RT值跟随着这个VPNV4前缀,被MP-BGP更新给了对端PE。
(红茶三杯http://weibo.com/vinsoney版权所有,转载请注明出处)

发布者

小挨踢

一名89年出生的女网络工程师的博客,20180319小挨踢的博客来啦!

发表评论