MPLS VPN(3)

一、MPLS VPN的网络架构


1、CE    Custom Edge

用户网络的边界设备,直接与服务提供商网络相连,CE设备可以是路由器、交换机或主机等设备;

2、PE    Provider Edge Router

骨干网络的边界设备,直接连接CE,从而提供VPN业务的接入,PE设备可以是路由器或交换机等设备;

3、P      Provider Router

骨干网络中的核心路由器,主要是提供骨干网内部的路由和数据包快速转发服务;

二、MPLS VPN基本概念


1、VPN-Instance        VRF    VPN Routing and Forwarding Table

用于在PE上解决不同VPN用户间地址重叠问题;

一个VPN实例相当于一台虚拟路由器,有自己的接口、路由转发表等资源,在控制平面上是独立运行的;

每个VPN用户都会在PE上拥有自己的VPN实例,当PE收到来自不同用户的私网路由时,会将其放在该用户对应VPN实例的路由转发表中;

一台PE可以拥有多个路由转发表,包括一个公网路由转发表,以及一个或多个VPN路由转发表;

2、RD    Route Distinguisher

用于MP-BGP区分来自不同VPN相同前缀的路由,VPN路由通过MP-BGP在MPLS VPN骨干网络中传递;

一条IPv4路由之前加上RD值后,就变成VPNv4路由了,VPNv4路由只在运营商骨干网内部存在,由PE路由器产生并发布;

RD具体格式:

Type Field:2字节,用来定义管理子域的表示方法;

类型取值为0时,管理子域占用2个字节使用AS号,分配号占用4个字节由服务提供商分配;

类型取值为1时,管理子域占用4个字节使用IPv4地址,分配号占用2个字节由服务提供商分配;

3、RT    Route Target    或VPN Target

用来判断VPN路由该被送入哪个VPN实例,当一个PE将VPN路由引入到MP-BGP后,就会让其携带一个RT值,然后送到远端PE,远端PE根据RT值来决定将其送往哪个VPN实例;

VPN实例的RT值分为Export和Import两种值,VPNv4路由发布出来时会携带Export的RT,在VPNv4路由的接收端PE上会比较路由携带过滤的Export RT值跟本地所有VRF的Import RT值,如果匹配上了,该路由就被送往相应的VRF路由表;

RT是一种BGP扩展团体属性,具体格式如下:

除去2字节的类型字段外,后面6字节的RT值表现形式有:

(1)2字节AS号:4字节用户自定义数

(2)4字节自治系统号:2字节用户自定义数

(3)IPv4地址:2字节用户自定义数

三、路由发布过程


为了使路由进入骨干网络后具有唯一性,MP-BGP给IPv4路由添加了一个RD值,从而允许不同的用户地址空间可以重叠,并且使用RT值来标识此路由是去往哪个VPN实例;

在MPLS VPN中路由交换可以分成以下几个阶段:
1、CE到PE之间的路由交换

用户站点内的路由信息需要先通过CE发布给PE设备,这时PE和CE之间可以运行任何动态路由协议或静态协议,如静态路由、RIP、OSPF、ISIS、BGP;

所有的CE端可以使用相同的路由协议,但是需要在PE的每个VRF运行不同路由协议实例;

PE将CE传来的路由分别放在不同的VPN实例,根据路由进入的接口判断路由是属于哪个VPN实例;

2、PE将VRF中的路由注入进MP-BGP

PE从CE学习到客户的私网路由后,需要将这些私网路由从VPN实例中引入到MP-BGP成为VPNv4路由,如果PE和CE之间运行的是BGP,就不需要引入;

PE将VPN实例中的客户私网路由引入到MP-BGP后,

(1)在IPv4路由前缀的前面添加一个RD形成VPNv4路由;

(2)还会为该VPNv4路由分配一个私网标签(每条VPNv4都会映射到一个私网标签,由MP-BGP协议随机自动分配);

(3)同时在VPNv4路由通告中通过扩展团体属性携带ExportRT值;

(4)将路由的下一跳修改成自己;

这些操作完成后,PE将VPNv4路由发布到所有的MP-BGP邻居;

3、VPNv4路由在骨干网中传递

客户的私网路由在PE上被引入到MP-BGP后变成VPNv4路由,这些VPNv4路由需要传递到其他的PE(也可以先传递到骨干网中的RR,再由RR反射到其他PE);

经过多协议扩展后的BGP可以用来传递VPNv4路由,如果这些PE都在同一个AS,那么需要在PE之间配置MP-IBGP邻居关系(或者所有PE都与RR建立MP-IBGP邻居关系);

4、PE将VPNv4路由注入到VRF中

在PE收到邻居的VPNv4路由后,由于VPNv4路由通告中通过扩展团体属性携带了Export RT值,可以根据本地VRF的Import RT值将路由导入到相应的VRF中,路由被注入时RD值会被移除变成IPv4路由,同时将VPNv4路由的私网标签存放在FIB中,再通过PE-CE之间运行的路由协议把IPv4路由发布到CE;

四、数据转发过程


因为骨干网的P路由器没有私网路由,所以骨干网不能使用IP转发的方式转发VPN业务数据流量,而是使用MPLS标签转发的方式,VPN业务流通过入站PE进入MPLS骨干网后,通过相应的LSP转发到出站PE;

传递VPN业务数据流时需要使用两层标签,公网标签和私网标签;

公网标签用于帮助VPN业务数据流通过LSP隧道穿越公网;

私网标签用于LSP的出站PE判断该向哪个VPN实例转发报文;

1、数据从CE到入站PE

(1)Site2去往Site1的业务数据由CE2通过普通IP转发到PE2后,

(2)PE2根据报文进入的接口,查找相应的VPN实例转发表,找到该路由在公网的下一跳和私网标签;

(3)封装完私网标签后,再通过公网的标签转发表查找去往公网中下一跳地址的标签,该标签作为公网标签封装进数据包,封装完两层标签后,数据包被转发进MPLS网络;

2、数据从入站PE到出站PE

当IP报文由入站PE进入MPLS网络后会通过LSP转发,并且通过中间的P设备查找标签转发表进行标签交换,最终通过公网LSP转发到出站的PE;

3、数据从出站PE到远端CE

数据包由MPLS骨干网转发到出站PE时,只剩下一层私网标签,这是因为PHP倒数第二跳的原因,公网标签已经在倒数第二跳的P设备剥离掉了;

出站PE利用该私网标签判断出该数据包去往的VPN实例,在查找到相应的VPN实例转发表后,移除该私网标签,将报文还原为IP报文后再转发给CE;

五、PE-CE间路由协议


1、静态路由

2、RIP


BGP通过MED携带RIP路由的跳数到达另一侧PE,再通过MED值还原出真实的RIP跳数,从用户的角度看,中间的MPLS骨干网是透明的;

在入站PE处,将RIP路由引入到MP-BGP时, Metric值(跳数)会被复制到BGP路由的MED值中;

在另一侧的出站PE路由器上,在将该BGP路由引入到VPN实例时,直接使用MED值作为RIP路由的跳数;

3、OSPF


OSPF协议作为PE和CE之间的路由协议,PE上把OSPF路由引入到MP-BGP,在远端PE上将MP-BGP的VPNv4路由引入到OSPF,这些路由变成了OSPF外部路由,导致路由优先级变低,这样会带来两个问题:

一、如果客户站点之间存在备份链路(后门链路),这会导致远端站点优先选择后门链路的路由,而不是穿越MPLS VPN骨干的路由,这不符合客户预期;

二、从网络设计角度看,同个VPN用户的不同站点被MPLS VPN骨干分割了;

为避免在远端PE上将引入到OSPF中的路由变成外部路由,MPLS VPN的解决办法是在远端PE上将MP-BGP传递过来的VPNv4路由引入到OSPF时以3类LSA的形式通告出来,而不是全部都用5类LSA通告出来;

对于OSPF来说,MPLS VPN骨干网看起来像一个超级骨干区域,将多个站点的OSPF区域连接在了一起,从而形成了一个整体;

有了MPLS VPN骨干网这个超级骨干区域之后,用户各站点内的OSPF区域需要注意以下两点:

一、用户站点如果都是单区域,各站点可以使用相同或不同的区域

二、用户站点如果采用多区域,要确保骨干区域0连接在PE上

如果用户站点内部采用多区域,而骨干区域0没有连接在PE上,会有什么问题,该如何解决?

OSPF水平分割:从非骨干区域学到的3类LSA是不能再传递给骨干区域,这样会导致用户站点区域0学不到其他站点的路由,因为ABR路由器能够收到3类LSA但不会计算出路由;

(1)用于OSPF的BGP扩展团体属性

要想OSPF路由无缝地穿越MPLS VPN骨干网络,就必须使MP-BGP协议携带OSPF路由的信息,这些OSPF路由信息可以帮助远端PE决定向CE端通告什么类型的LSA,这样就使得OSPF路由可以在远端PE处得以完全重建;

MP-BGP通过扩展团体属性携带的OSPF路由信息如下:

*域ID

用来告诉远端PE路由器,通告的路由是否是一条外部OSPF路由;

远端PE路由器通过比较VPN路由中的域ID和本端的域ID是否一样,如果一样则以内部路由引入到OSPF区域,否则以OSPF外部路由引入到OSPF区域;

OSPF进程下可以修改域ID,华为VRP缺省域ID为0;

*OSPF路由器ID

*区域号、路由类型、外部路由类型

路由类型使用的是LSA的类型值,如果路由类型是1/2/3类LSA,那么远端PE会以区域间路由(3类LSA)的形式通告给OSPF区域;

OSPF DOMAIN ID <0.0.0.0:0>表示冒号前面的0.0.0.0为域ID,后面为可选项,默认为0;

OSPF ROUTER ID <172.16.1.1:0>表示发送该路由的VPN实例的RouterID;

OSPF RT <0.0.0.0:1:0>表示区域号:路由类型:外部路由的度量值类型1或2;

:1:0或:2:0表示区域内路由,1类LSA或2类LSA;

:3:0表示区域间路由,3类LSA;

:5:0或:5:1表示外部路由,5类LSA,度量值类型分别是1或2;

:7:0或:7:1表示外部路由,7类LSA,度量值类型分别是1或2;

:129:0表示sham-link端点;

(2)OSPF路由穿越MPLS VPN骨干网的Metric传递

在PE上将OSPF内部路由或外部路由引入到BGP后,使用OSPF路由的Cost值来设置BGP路由的MED值;

当远端的PE把BGP路由引入到OSPF区域时,又将MED值复制回来给OSPF路由的Cost值;

情况一:两端PE的域ID相同,OSPF内部和外部路由的Cost传递

因为PE1和PE2的域ID相同,所以在PE2上会根据路由的类型来产生相应的LSA给CE2,而Cost值则是复制BGP路由的MED值;

情况二:两端PE的域ID设置不相同,OSPF内部和外部路由的Cost传递

因为PE1和PE2的域ID不同,所以PE2上把BGP路由引入到OSPF区域的路由都是OSPF外部路由,而Cost值则是复制BGP路由的MED值;

(3)Sham-link后门链路

通过MPLS VPN骨干网将运行OSPF协议的用户站点连接起来后,用户的业务通过骨干网进行传送;

为增强网络的健壮性,现在很多大型的MPLS VPN场景中都会部署备份路径,这些备份路径也称为后门链路;

通过后门链路将各站点的OSPF区域打通后,OSPF区域内路由(1/2类LSA)通过后门链路传递到远端的站点还是区域内路由,而区域内路由穿过MPLS VPN骨干传递过去后变成区域间路由3类LSA,导致两个站点之间永远选择的是后门链路,而用户期望站点之间的数据流默认以MPLS VPN骨干为主路径,后门链路做备用路径;

同一个OSPF区域的两个站点之间存在后门链路的场景下,可以通过sham-link来解决该问题;

sham-link是一条点到点链路有自己的接口,可以建立SPF邻居关系,传递OSPF报文,同步LSDB,参与SPF路由计算,但是在sham-link上不会周期性泛洪LSA,也不能传递数据报文;

sham-link建立在两台PE路由器之间,要求两台PE路由器分别在对应的VRF中建立一个32位掩码的环回接口来充当sham-link的端点,并且需要将这个地址宣告进iBGP,BGP使用扩展团体属性将sham-link的端点地址通告给其他PE;

部署sham-link要点:

1、用于sham-link的端点接口必须属于特定的VRF;

2、用于sham-link的端点地址必须是32位掩码;

3、用于sham-link的端点地址必须宣告进BGP,但不能宣告进VRF的ospf中;

sham-link配置如下:

int loopback0

ip binding vpn-instance vpna

ip address 1.1.1.1 32

#

bgp 100

ipv4-family vpn-instance vpna

network 1.1.1.1 32

#

ospf 1 vpn-instance vpna

area 0

sham-link 1.1.1.1 3.3.3.3

#

注意,不能把sham-link端点地址宣告进VRF下的OSPF进程,否则会导致sham-link抖动;

PE如果同时通过iBGP和OSPF学习到端点地址的路由,由于OSPF路由的优先级高于BGP路由,PE会选择OSPF路由,但是只有bgp路由才能建立sham-link,因此sham-link会中断;

另外,因为一台PE路由会优选通过sham-link收到的OSPF路由,而不会选择BGP传递过滤的路由,虽然PE上做了OSPF和BGP的双向引入,但是sham-link学来的路由不会再引入进BGP;

(4)防止OSPF站点间的路由环路

在CE双归属场景中,PE1、PE2、PE3都已建立iBGP连接,PE和CE之间使用OSPF路由协议;

假设PE1先接收到来自PE3的VPNv4路由,PE1会将BGP路由引入到左侧站点的OSPF区域,PE2从OSPF中学习到该路由,下一跳指向CE1;PE上做了双向引入,所以PE2会将该OSPF路由引入到BGP形成VPNv4路由,同时将该路由通告给PE1;这时PE1从PE2和PE3接收到了同一条VPN路由,在链路开销相同的情况下,假设PE2的Router-ID小于PE3的Router-ID,那么PE1会优选PE2为下一跳,环路就产生了;

通过DN比特位防环

3/5/7类LSA的Option字段中DN比特位,用于表明路由是由PE向CE方向传递的;

PE发布给CE的路由(3/5/7类LSA)中DN比特位会被置1,同一用户站点的其他PE收到带有DN比特位置位的3/5/7类LSA时,不会进行SPF计算,更不会将其引入到BGP中;

RFC定义的DN比特位只会出现在3类LSA,但是华为在5/7类LSA中也设置了DN比特位;

DN位无法避免某些特定场景下的环路问题

CE双归属,CE1连接PE1的链路在Area0中,CE1连接PE2的链路在Area1中;

当PE1以3类LSA的形式向CE1发送OSPF路由时DN比特位置1,由于CE是ABR,当这条3类LSA经过CE再传递到Area1时,DN比特位置0,PE2接收后仍然会计算该路由,造成环路;

在华为设备中,5/7类LSA除了可以像3类LSA一样通过DN比特位来防环外,还可以通过Route-tag来防环;

设置了Route-tag的PE路由器将OSPF外部路由发布给CE之前会使路由带上Route-tag;如果同一站点的其他PE路由器收到该OSPF外部路由时发现路由携带的Route-tag跟本端配置的一样,就会忽略该路由;

可以通过Route-tag命令来设置路由域标记;

4、ISIS


用户VPN站点连接到MPLS VPN骨干网的模式可以使用L1或L2;

CE双归属场景下的路由环路问题:

ISIS通过定义的Up/Down位来防环,类似于OSPF的DN比特位;

Up/Down位为0说明路由起源于L1区域,如果为1说明路由是从L2区域引入到L1区域的;

在MPLS VPN环境中,一台PE路由器从BGP学到的VPNv4路由通告给ISIS时会将Up/Down位置1,同一站点的其他PE收到后,不会将Up/Down位置1的ISIS路由引入到BGP中,从而防环;

5、BGP


CE双归属的MPLS VPN环境中,AS替换和Allow-as-loop两个特性会使AS-Path防环机制失效,造成环路隐患;

CE1和CE2位于同一VPN站点,CE1接入PE1,CE2接入PE2,PE1从CE1接收到路由后,通过MP-iBGP通告给其他PE,PE2进而将路由转发给CE2,而CE已通过Site1内的IGP学习到该路由,这样可能引入Site1内部的环路;

通过起源站点SoO(Site of Origin)的扩展团体属性来防环;

配置了SoO的PE路由器上,当VPN实例中的路由被引入到BGP后会携带上SoO值,在同一站点的其他PE从公网中接收到VPNv4路由时,发现路由携带的SoO值和本端配置的一样,就不会引入到VPN实例,从而避免路由环路;

peer x.x.x.x SoO 100:1

你可能感兴趣的:(MPLS VPN(3))