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