二、MP-BGP路由协议

1.4、RD前缀

假设VPN1和VPN2都使用了10.110.10.0/24网段的地址,并各自发布了一条去往此网段的路由。虽然本端PE通过不同的VPN实例可以区分地址空间重叠的VPN的路由,但是这些路由发往对端PE后,由于不同VPN的路由之间不进行负载分担,因此对端PE将根据BGP选路规则只选择其中一条VPN路由,从而导致去往另一个VPN的路由丢失。PE之间使用MP-BGP来发布虚拟专用网络私网路由,并使用VPN-IPv4地址来解决上述问题。

VPNv4地址簇,这个地址簇格式是RD+IPv4地址。

mpls ipv4报文 mpls报文格式_网络协议

VPN-IPv4地址共有12个字节,包括8字节的路由标识符RD(Route Distinguisher)前缀和4字节的IPv4地址。在定义一个虚拟专用网络(VPN)时,在设计RT属性之外,还要设计一个RD值。每个虚拟专用网络(VPN)只能配置唯一一个的RD值,共有3种格式:
(1)、16位自治系统号(AS)+32位用户自定义数值,如100:1;
(2)、32位IP地址+16位用户自定义数值,如10.1.1.8:1;
(3)、32位治系统号(AS)+16位用户自定义数值,如65536:1。

用户根据自己的习惯来决定使用哪一种RD格式。由于RD在不同的VPN间具有唯一性。如果两个VPN使用相同的IP地址,PE路由器为它们添加不同的RD,转换成唯一的VPN-v4地址,不会造成冲突。PE从CE接收的标准的路由是IPv4路由,如果需要引入VRF路由表并发布给其他的路由器,此时需要附加一个RD。建议相同VPN的RD配置成相同的。

在MP-BGP中,使用RT来控制各虚拟专用网络(VPN)间的互访,当一条路由到达PE时,PE根据该路由所携带的RT属性判断该路由应该被学习到本地哪一个虚拟专用网络(VPN)的路由表。

mpls ipv4报文 mpls报文格式_mpls ipv4报文_02


RD前缀的目的是用于撤销路由时使用。在MP-BGP的撤销信息无法携带RT属性,以至于PE无法判断想要删除哪个虚拟专用网络的路由,RD就是用于解决这个问题的。

由于RD的前缀的使用,在MP-BGP里,路由的前缀变成RD,路由表项是VPNv4地址格式。

1.5、术语的总结

VRF:在一台PE上虚拟出来的一个路由器,包括一些特定的接口,一张路由表,一个路由协议,一个RD和一组RT规则。

mpls ipv4报文 mpls报文格式_运维_03

RT:表明了一个VRF的路由喜好,通过他可以实现不同VRF之间的路由互通。他的本质就是BGP的community属性。RT实际上是一个属性列表,RT来控制各虚拟专用网络(VPN)间的互访。100:1、10.10.10.1:2、65536:1。

RD:用来解决VPN路由在公共网络中传递时的地址空间冲突问题,而加在路由前面的特殊信息。在PE发布路由时加上,在远端PE接收到路由后放在本地路由表中,用来与后来接收到的路由进行比较。一个站点分配唯一一个RD。

Label:为了防止一台PE接收到远端PE发给本地不同VRF的相同地址的主机时不知所措,而加在报文前面的特殊信息。

VPN:是一些站点的集合,这些站点由于共享了相同的路由信息可以互通。

1.6、PE和PE之间的路由交换

1.6.1、入节口PE和CE之间的路由交换

mpls ipv4报文 mpls报文格式_mpls ipv4报文_04

PE维护独立的路由表:公网和私网(VRF)路由表
公网路由表(也叫全局路由表):包含全部PE和P路由器之间的路由,由VPN的骨干网IGP产生。
私网路由表:包含到一个或多个直接相连的CE的路由和转发表;VRF可以与任何类型接口绑定在一起;如果直接相连的CE属于同一VPN,那这几个接口可以使用同一个VRF。

1.6.2、PE路由之间的路由交换

VRF路由注入到MP-iBGP。

mpls ipv4报文 mpls报文格式_运维_05


PE1接收到CE1的IPv4路由,通过以下动作:

1、加上RD,变为VPN-IPv4路由。手工配置

2、更改下一跳属性为自己,一般是自己的Loopback地址

3、自动生成私网标签

4、加上RT属性,手工配置。

5、发给所有的MP-BGP邻居。

发送MP-iBGP update报文到所有PE邻居。update报文

mpls ipv4报文 mpls报文格式_网络协议_06


后面是Extended_Communities格式的RT列表

mpls ipv4报文 mpls报文格式_mpls ipv4报文_07

1.6.3、MP-iBGP路由注入到VRF

mpls ipv4报文 mpls报文格式_网络协议_08

每个VRF都有import route-target和export route-target的属性。
发送PE发出MP-iBGP updates时,报文携带export属性。
接受PE收到VPN-IPv4的MP-iBGP updates时,判断收到的export是否与本地的VRF的import相等,相等就加入到相应的VRF路由表中,否则丢弃。
VPN-v4路由变为IPv4路由,并根据本地VRF的相应import RT属性加入到对应的VRF中。私网标签保留,留做转发时使用。

1.6.4、出节口PE和CE之间的路由交换

再由VRF的路由协议引入并转发给相应的CE。

mpls ipv4报文 mpls报文格式_网络_09

1.7、MP-BGP的私网Label

私网Label也是解决VPN路由在公共网络中传递时的地址空间冲突问题。为什么有了RD、RT还会出现PE无法决定从哪一私网路由表转发问题?

RD、RT是解决私网路由的学习和撤销中存在的问题。但在转发数据时,数据报文通过MPLS隧道到达出口PE设备,PE查询报文的目的IP地址,根据本地私网路由表转发。但是此PE设备上存在多个VPN的私网路由表,就会出现多个VPN中的有与目标IP地址相同的问题,此时,PE将无法判断应该按照哪一个VPN的私网路由表进行传输。

这时解决办法是在数据报文中增加一个标签,来帮助PE判断该报文应该从哪一个VPN的私网路由表进行转发。

1、PE1设备将本端私网路由发送给PE2设备,update报文中MP_REACH_NLRI属性携带有私网MPLS标签值。
2、PE2设备接收到该路由后,将该私网MPLS标签值和该路由同时保存下来。
3、PE1设备发送数据时,压入公网标签和私网标签,PE2接收到数据报文,公网标签弹出,私网标签保留,PE2根据私网标签值对应的是由哪个VPN(Export Target)转发的,而找到哪个VPN的路由表将该数据转发给对应的VPN用户。

三、BGP/MPLS虚拟专用网络基本原理

1、公网隧道的建立

上图中,有两家公司分别是文具公司和汽车公司都分别拥有两个分部,现在需要VPN1的CE1与CE3相互通信,也就两个文具公司分部能相互通信。VPN2的CE2与CE4之间相互通信,汽车公司分部能相互通信。VPN1与VPN2之间是相互隔离的,但是VPN1和VPN2的私网IP地址有可能有相同的现象。

mpls ipv4报文 mpls报文格式_mpls ipv4报文_10

我们可以看到公网中路由器之间运行的是ISIS路由协议,PE1、P、PE2属于同一个运营商位于一个AS中。文具公司和汽车公司的各个分部私网处于不同的AS中,为了让两家公司的分部之间通过公网进行通信,首先得建立MPLS隧道,从PE1到PE2方向建立一个MPLS LSP。也要PE2到PE1建立一个MPLS LSP,这样才能双向通信。建立的方法就是PE1、P、PE2设备均使能MPLS功能和MPLS标签分配协议。此时公网隧道的标签完成分配,这是BGP/MPLS公网标签,也是外层标签。

2、建立本地VPN

在每一台PE设备边缘端口绑定对应的VPN实例,先为VPN用户建立一个VRF,并且完成PE设备与CE设备的互通。

mpls ipv4报文 mpls报文格式_华为_11

在两个PE设备上设立两个VPN的RD值和RT值。建立VPN后,将用户接入接口与该VPN进行绑定,然后需要PE设备与本VPN用户完成私网路由的交互,使得接入设备PE1上的VPN用户知道分部的出口。

3、私网路由的学习

作用:将PE设备在本地VPN的建立过程中学习到本地刮私网路由信息通过MP-BGP协议传递给对端PE设备,并将路由信息存放在对端PE设备的VPN路由表中。

私网路由学习分为两部分:

(1)、本地路由的封装,也就是在本端PE上将参数封装成一个MP-BGP路由更新消息发送给对方。

mpls ipv4报文 mpls报文格式_华为_12

PE2学习到CE3的10.1.1.1/24这条路由,引入MP-BGP发送给邻居。
从PE2路由表中获取10.1.1.1/24这条路由,变成VPNv4类型,RD+IPv4地址/掩码,100:1 10.1.1.0/24;
下一跳属性为自己,一般是自己的Loopback地址;
RT属性的设置发出是Export Target值;
私网标签,为发往BGP邻居的私网路由分配一个私网标签,这是一个随机值。

(2)、对端PE学习私网路由。

mpls ipv4报文 mpls报文格式_运维_13

PE1接收更新路由消息后,与自己的RT属性进行“或”方式比较,当与本地Import Target值有交集就收下,加入该路由表。
记录路由信息:记录路由信息包括记录该路由的前缀(RD+IPv4前缀),下一跳信息和私网标签。
将路由信息发布给本地CE1设备,这样用户CE1就知道分部的路由信息是10.1.1.0/24。

4、报文的转发

此时MPLS的标签分两层,外层是LDP(标签分发协议)分配的,内层是多协议MP-BGP分配的。外层标签是转发层面。数据层面通过LDP交换数据。

4.1、外层标签:

  • LDP标签分发协议为了到达对端BGP(PE)的更新源的标签。
  • 外层标签用来指示如何到达BGP下一跳。

4.2、内层标签:

  • 通过MP-BGP为VPNV4路由分配内层标签。VPN是内层标签,是控制层面BGP、IGP的重分布。VPN只关心出口地址和接口,不关心入口,因为VPNV4标签关联了出口IP。PE与对端PE运行MP-BGP。
  • 不同路由有不同的标签。
  • 内层标签表示报文的出接口或属于哪个VRF。

4.3、私网数据的传递:

PE设备通过对VPN数据包进行标签堆叠(双层标签)让其穿越运营商网络。控制层面(IGP、LDP、BGP)通过一系列复杂的规则来形成FIB和LFIB。转发平面是一个简单的转发引擎(内层标签和外层标签),负责普通IP报文的转发以及带MPLS标签报文的转发。

mpls ipv4报文 mpls报文格式_华为_14

PC1访问PC2终端,入口PE1收到CE1的普通IP报文后,根据目的地址为10.1.1.8的报文,PE1在入接口GE0/0/0(入接口与VPN1绑定)所属的VRF进入到相应的VPN1私网路由转发表,查找下一跳和标签。首先插入私网的标签:15566,这是内层标签,并转发给下一跳22.1.1.1,由于22.1.1.1并不是一个直接的出口。这时PE1需要进行路由迭代,在BGP/MPLS VPN的实现中,将自动迭代到公网路由表进行转发。PE1这时是使用了MPLS(多协议标签交换协议)的LFIB标签转发表,进行MPLS转发。

mpls ipv4报文 mpls报文格式_网络_15


通过控制层面的LDP(标签分发协议)在22.1.1.1这条特定的FEC,为已加上私网标签的报文压上标签BGP/MPLS公网标签(公网隧道建立时就已经存在的标签),这个是外层标签,到达P设备后,根据外层标签匹配标签转发表,不会查看和识别内层私网标签和IP报文内容,只是检查外层公网标签,进行SWAP动作是将报文的外层标签值更换成对应的OUT标签值,到达倒数第二个LSR设备时,根据标签值3弹出,再将报文根据标签转发表项从输出接口发出。此时报文只剩一层MPLS标签。

mpls ipv4报文 mpls报文格式_运维_16

报文到达PE2设备后,PE2发现是一个MPLS数据包,将检查该报文的MPLS标签值,发现是15566,由于MP-BGP路由更新消息PE2已经获取这个值并记录,这个值是VPN1的一条私网路由分配的标签,这时PE2就会将此报文的私网标签值弹出,然后根据IP数据包的目的地址查询VPN1的私网路由表进行转发。

根据VPN1的私网路由表目的地址10.1.1.0/24网段从GE0/0/0输出IP数据包,CE2客户的边界路由器再根据路由表匹配10.1.1.8的目的地址,将PC1的数据包发送到PC2终端。