1.简要概述

1.png

  • BGP/MPLS IP VPN是一种L3VPN(Layer 3 Virtual Private Network)。
    • 这里的IP是指VPN承载的是IP报文,即还可以为其他的协议做VPN,比如IPv6。
    • 3 层VPN传输的是IP网络层和以上的报文。
    • 2层VPN传输的是二层和以上的报文,即源目MAC地址可能不变。
  • 它使用BGP(Border Gateway Protocol)在服务提供商骨干网上发布VPN路由,使用MPLS(Multiprotocol Label Switch)在服务提供商骨干网上转发VPN报文。
  • BGP/MPLS IP VPN的基本模型由三部分组成:CE、PE和P。
    • CE(Customer Edge):用户网络边缘设备,有接口直接与服务提供商SP(Service Provider)网络相连。CE可以是路由器或交换机,也可以是一台主机。通常情况下,CE“感知”不到VPN的存在,也不需要支持MPLS。
    • PE(Provider Edge):是服务提供商网络的边缘设备,与CE直接相连。在MPLS网络中,对VPN的所有处理都发生在PE上,对PE性能要求较高。
    • P(Provider):服务提供商网络中的骨干设备,不与CE直接相连。P设备只需要具备基本MPLS转发能力,不维护VPN信息。
  • PE和P设备仅由SP管理;CE设备仅由用户管理,除非用户把管理权委托给SP。
  • 一台PE设备可以接入多台CE设备。一台CE设备也可以连接属于相同或不同服务提供商的多台PE设备。

1.1 VPN类型

  • 3层VPN
    • MPLS VPN
    • Ipsec VPN
    • GRE VPN
  • 2层VPN
    • L2TP VPN



2.基本概念

2.1 Site

2.png

  • site是指相互之间具备IP连通性的一组IP系统,并且,这组IP系统的IP连通性不需通过服务提供商网络实现。
  • Site的划分是根据设备的拓扑关系,而不是地理位置,尽管在大多数情况下一个site中的设备地理位置相邻。(比如一个VPN可以是一个市中的多个区的某些分部网络连接在一起形成的)
  • 一个site中的设备可以属于多个VPN,换言之,一个site可以属于多个VPN

2.2 MPLS VPN特点

3.jpg


2.3 MPLS VPN遇到的问题

4.jpg


2.4 地址空间重叠

5.png

  • 在MPLS VPN中,不同VPN站点地址空间可以重叠。

  • 共同的site

    • 所谓共同的site指的是下面的这种情况

6.jpg

  • VPN1与上面的VPN是属于一个site(可以认为VPN1和VPN2是上面VPN的两个没有业务来往的子公司),另外VPN2与上面的VPN也是属于同一个site,这种情况下,只要这个共同的site不与VPN1和VPN2的重叠地址网段进行通信就可以了,因为实际上,在一个VPN中,会有多个地址网段;
  • 但是如果VPN1和VPN2属于同一个VPN,那么就会有问题了。

3.基本原理

3.1 功能主键

7.jpg
8.jpg


3.2 VPN实例

  • 如何做到同一台PE设备的不同客户CE设备之间的隔离?

9.png

  • PE为每个直接相连的Site建立并维护专门的VPN实例,VPN实例中包含对应Site的VPN成员关系和路由规则。
  • 具体来说,VPN实例中的信息包括:IP路由表**标签转发表、与VPN实例绑定的接口以及VPN实例的管理信息。VPN实例的管理信息包括RD路由过滤策略成员接口列表**等。


    公网路由转发表与VPN路由转发表存在以下不同:

  • 公网路由表包括所有PE和P设备的IPv4路由,由骨干网的路由协议或静态路由产生。

  • VPN路由表包括属于该VPN实例的所有Site的路由,通过CE与**PE之间或者两个**PE之间的VPN路由信息交互获得。
  • 公网转发表是根据路由管理策略从公网路由表提取出来的最小**转发信息;而VPN转发表是根据路由管理策略从对应的VPN路由表提取出来的最小转发信息。**
  • 可以看出,PE上的各VPN实例之间相互独立,并与公网路由转发表相互独立。可以将每个VPN实例看作一台虚拟的设备,维护独立的地址空间并有连接到该设备的接口



3.3 CE与PE之间的信息交互

  • 如何PE设备与CE设备之间维护路由信息?

10.png

  • PE和CE之间通过标准的BGP,OSPF,IS-IS,RIP或者静态路由交换路由信息。
  • 这个过程中,PE需要将CE传来的路由分别存储在不同的VRF,除此之外其他操作和普通的路由交换没有任何区别。
  • 静态路由、RIP、BGP都是标准的协议,所有的CE端都可以使用相同的路由协议,但是需要在PE的每个VRF运行不同的实例,相互之间没有干扰



3.4 MP-BGP

  • 如何在公网上传递客户私网路由?

11.png

  • 传统的BGP-4(RFC1771)只能管理IPv4的路由信息,无法正确处理地址空间重叠的VPN的路由。
  • 为了正确处理VPN路由,VPN使用RFC2858(Multiprotocol Extensions for BGP-4)中规定的MP-BGP,即BGP-4的多协议扩展。MP-BGP实现了对多种网络层协议的支持,在Update报文中,将网络层协议信息反映到NLRI(Network Layer Reachability Information)及Next Hop。
  • MP-BGP采用地址族(Address Family)来区分不同的网络层协议,既可以支持传统的IPv4地址族,又可以支持其它地址族(比如VPN-IPv4地址族IPv6地址族等)。
  • 关于地址族的一些取值可以参考RFC1700(Assigned Numbers)。



3.5 RD和VPN-IPv4地址

  • 如何容许通告重叠的客户私网路由?

12.png

  • PE之间使用MP-BGP(Multiprotocol Extensions for BGP-4,BGP-4的多协议扩展)来发布VPN路由,并使用VPN-IPv4地址族来解决BGP无法区分不同VPN中相同的IP地址前缀的问题
  • RD用于区分使用相同地址空间的IPv4前缀。RD的结构使得每个服务供应商可以独立地分配RD,但为了在CE双归属的情况下保证路由正常,必须保证RD全局唯一。
    • 即在同一台路由器上,为不同的VPN实例配置的RD值应该唯一

**


3.6 VPN Target(RT)

13.jpg

  • BGP/MPLS IP VPN使用32位的BGP扩展团体属性-VPN Target(也称为Route Target)来控制VPN路由信息的发布
  • 每个VPN实例关联一个或多个VPN Target属性。
  • 有两类VPN Target属性:
    • Export Target:本地PE从直接相连site学到IPv4路由后,转换为VPN IPv4路由,并为这些路由设置Export Target属性。Export Target属性作为BGP的扩展团体属性随路由发布
    • Import Target:PE收到其它PE发布的VPN-IPv4路由时,检查其Export Target属性。当此属性与PE上某个VPN实例的Import Target匹配时,PE就把路由加入到该VPN实例的路由表。
  • 也就是说,VPN Target属性定义了一条VPN路由可以为哪些site所接收,以及PE可以接收哪些site发送来的路由


    使用VPN Target而不直接用RD作为BGP扩展团体属性的原因在于:

  • 一条VPN-IPv4路由只能有一个RD,但可以关联多个VPN Target属性;BGP如果携带多个扩展团体属性,可以提高网络的灵活性和可扩展性。

  • VPN Target用于控制同一PE上不同VPN之间的路由发布。即,同一PE上的不同VPN之间可以设置相同的VPN Target来实现路由的互相引入



3.7 交换路由信息及私网标签分配

14.png

  • PE1从CE1接收到IPv4路由后,对该路由加上相应VRF的RD(RD手动配置),使其成为一条VPNV4路由然后在路由通告中更改下一跳属性为自己,通常是自己的Loopback地址,并为这条路由加上私网标签,该标签由MP-IBGP协议随机生成(无需配置),同时加上Export Route Target属性,然后发送给它所有的PE邻居。
  • VRP5.3中,在PE1上需要启动MPLS,然后MP-BGP即可以为私网路由分配标签。PE之间便可以正确交互私网路由信息。
  • SOO主要用于防止VPN某站点有多个CE接入不同的PE时,从CE发往PE的VPN路由可能经过骨干网又回到了该站点的路由环路。



3.8 MP-BGP路由注入VRF

15.png

  • 接收端PE2收到发送端PE1发布的路由后,将VPN-v4 路由变为IPV4路由
  • 并且根据本地VRF的import RT属性加入到相应的VRF中,保留私网标签,留做转发时使用
    • 在将路由信息保存到PE2上的VRF后,除了私网标签,RD和RT都会被拿掉。
  • 然后通过PE和CE之间的路由协议将IPv4路由信息发布给相应的CE,下一跳为接收端PE2的接口地址。

MP-BGP路由注入详细图解
16.jpg


3.9 公网标签分配过程

17.png

  • 在该拓扑中,只需要为1.1.1.1/32和3.3.3.3/32建立LSP就可以了,这两个地址也是MP-BGP建立邻居的地址。
  • 私网数据交换需要跨越MPLS骨干网络,在这个过程中需要进行标准的MPLS转发,公网标签即外层标签分配的过程如下:

    • 首先PE和P路由器通过骨干网IGP学习到BGP下一跳的地址。通过运行LDP协议分配公网标签,建立LSP通道。
    • 标签栈用于报文转发,外层标签用来指示如何到达BGP下一跳,内层标签表示报文的出接口或属于哪个VRF
    • MPLS节点转发是基于外层标签转发,而不管内层标签是多少。


    注意:

  • RD,Route Target用于处理路由信息(控制层面)

  • 私网标签和公网标签用于指导数据转发(数据层面)



3.10 数据转发过程

18.png

  • CE2发出一个IP报文,目的地址为CE1,
  • PE2收到报文后,封装内层标签15362,再封装外层标签1024,转发给P,
  • P收到后,根据外层标签转发,因为P是倒数第二跳,所以弹出外层标签,保留内层标签,发送给PE1 ,
  • PE1收到后根据内层标签判断出该报文属于哪个VRF,即哪个Site,然后PE1去掉私网标签,将IP报文转发给CE1。
  • 由上述的数据转发过程可以知道,只需要建立PE1—PE2的双向LSP即可完成私网数据的转发,也就是1.1.1.1/32到3.3.3.3/32的双向LSP,这两个地址也是MP-BGP建立邻居时使用的地址。


VPN数据转发时内外层标签的作用
19.jpg

VPN数据转发详细图解
20.jpg


4.基本组网

4.1 基本组网与分析

21.png
22.png
23.png

  • 在PE设备配置MP-BGP协议

    1. [AR2-bgp]undo default ipv4-unicast
    2. [AR2-bgp]peer 10.1.5.5 as 100
    3. [AR2-bgp]peer 10.1.5.5 con l0
    4. [AR2-bgp]ipv4-family vpnv4
    5. [AR2-bgp-af-vpnv4]peer 10.1.5.5 enable
  • 取消默认ipv4单播的说明

    • bgp模式下配置的默认就是ipv4单播;
    • 这意味着,BGP其实不仅仅可以用来传递ipv4单播路由条目,还可以传递其它类型的路由条目,比如IPv6单播,VPNv4路由等;
    • 要配置传递的相应的路由条目,或者相应类型的BGP邻居,要在对应的模式下进行配置,比如上面的配置就是用来配置MP-BGP邻居的。
  • 在R5也做了相应的配置后,可以抓取open报文查看相应的字段

24.png

  • 从中就可以看出传递的是IPv4 VPN路由信息。
  • 查看MP-BGP邻居

25.png

  • 可以看到使用dis bgp peer时并没有邻居,是因为通过前面的配置可以知道,并没有配置ipv4单播的bgp邻居,只配置了vpnv4的邻居,dis bgp peer只是查看ipv4单播的bgp邻居的。


  • 在PE设备配置VPN实例,并且将接口划分到VPN实例中

    1. [AR2]ip vpn-instance yeslab
    2. [AR2-vpn-instance-yeslab]route-distinguisher 100:1
    3. [AR2-vpn-instance-yeslab-af-ipv4]vpn-target 100:1
    4. IVT Assignment result:
    5. Info: VPN-Target assignment is successful.
    6. EVT Assignment result:
    7. Info: VPN-Target assignment is successful.
    8. [AR2]int g0/0/0
    9. [AR2-GigabitEthernet0/0/0]ip binding vpn-instance yeslab
    10. [AR2-GigabitEthernet0/0/0]ip add 10.1.12.2 24
  • 查看路由表

26.png

  • 可以看到使用dis ip rou 10.1.12.0命令时,并没有路由显示,这是因为这时候10.1.12.0的接口已经划分进vpn实例中,即这时候它已经属于小路由器的了,而这个命令查看的是大路由器的路由表的,所以也就没有显示;
  • 当使用下面的命令查看是,就是查看vpn实例的路由表了;
  • 连通性测试

27.png

  • 原因跟前面的是一样的,ping 10.1.12.1默认查看的是大路由器的路由表,所以不通,需要像后面的命令一样加上vpn的实例,指明需要查询的是vpn实例的路由表。
  • 配置CE和PE之间的IGP/BGP协议,传送客户的CE VPN路由信息

[AR2]ospf 10 vpn-instance yeslab
[AR2-ospf-10]area 0
[AR2-ospf-10-area-0.0.0.0]net 10.1.12.2 0.0.0.0
[AR1]ospf 10
[AR1-ospf-10]area 0
[AR1-ospf-10-area-0.0.0.0

  • 查看由表信息

28.png

  • 同样,小路由器通过OSPF学习到的路由,在大路由器的路由表上也是看不到的;
  • 将从CE学习到的VPN路由通过MP-BGP传送给对端PE设备
    • 先看下面的VPN路由传递和引入的详细图解

29.jpg
30.jpg

  • BGP VPNv4路由表是属于大路由器的,同时也可以知道在做路由引入的时候,应该是在VPN实例的BGP中去进行引入,即ipv4-family vpn-instance中去引入;

31.jpg

  • 配置如下

[AR2]bgp 100
[AR2-bgp]ipv4-family vpnv4
[AR2-bgp]ipv4-family vpn-instance yeslab
[AR2-bgp-yeslab]import-route ospf 10

  • 查看BGP VPNv4路由表

32.png

  • 在上面的两个路由表中,前面一个是属于大路由器的,所以可以看到RD值,后面一个是小路由器的,所以可以看到VPN-Instance的标识,可以对比上面的图二来加深理解;
  • 查看BGP UPDATE消息的数据报文详细信息

33.png

  • 在R5上查看BGP VPNv4路由表

34.png

  • 同样可以看到全局的BGP VPNv4路由和VRF的BGP路由表;
  • 在R5上查看VRF路由表

35.png

  • 可以看到已经学习到10.1.1.1/32路由,VRF路由表之所以会接收该路由条目,是因为VRF的import RT与该路由条目的export RT是一样的;
  • 可以参考上面的图三,实际上,是有些小问题的,在于,应该是先检查是否有匹配的RT值再决定是否要将该VPNv4路由放入全局VPNv4路由表中(即进路由器的时候就做检查了),进而再放进对应的VRF路由表中;
  • 基于这种情况,可以将R5的import RT修改为100:2,再查看R5上的全局VPNv4路由表和VRF BGP路由表,同时还有VRF路由表:

36.png

  • 可以看到,重新配置入方向的RT值后,由于RT值不匹配,全局VPNv4路由表、VRF BGP路由表和VRF路由表都没有收到10.1.1.1/32路由条目;
  • 实际上,可以配置不进行RT值的检查:

[AR5]bgp 100
[AR5-bgp]ipv4-family vpnv4
[AR5-bgp-af-vpnv4]undo policy vpn-target

  • 再查看相关的表项:

37.png

  • 此时可以看到只有全局VPNv4路由表有此表项,说明取消了RT值的检查之后,路由器保存了下来,但并没有被对应的VRF接收;
  • 重新配置RT值检查,同时在R2上配置export RT为100:2,与R5的import RT对应;
  • 在R5上配置将VRF路由表中通过BGP学习到的路由引入到OSPF中:

[AR5]ospf 10
[AR5-ospf-10]import-route bgp

  • 就可以在R6上看到10.1.1.1/32路由表项:

38.png

  • 在R6~R5的相关路由器也做类似上面的配置,从而使R1学习到R6上的路由条目。
  • 上面的过程都是控制层面的,下面研究数据平面的,也就是数据的转发过程

39.png

  • 以R6发送数据给R1为例进行说明;
  • R5收到数据后,先查看VPN-Instance的FIB表和vpnv4的标签转发表项

40.png
41.png

  • 可以看到,下一跳发往10.1.2.2,并且会打上标签1030(这时fib上的InLabel指的是下游也就是10.1.2.2分配给10.1.1.1/32的标签);
  • R5再查看路由器的FIB表和NHLFE表项

42.png

  • 之后沿着中间路由器,基于外层标签的转发,当数据到达R2时,只有内层标签1030;
  • 查看R2上的LSP表项

43.png

  • 可以看到数据是发往对应VRF的,也就是说,VRF接收的是去掉内层标签之后的纯IP报文;
  • 查看对应VRF的路由表

44.png

  • 这样的话就可以把数据正确转发到10.1.1.1/32了。


  • 问题补充1:MP-BGP标签分配原则

    • 另外需要知道的是,MP-BGP为私网路由分配标签也是基于前缀的,当然也可以配置成基于VPN实例来进行分配,即一个VPN实例就分配一个标签,这样可以节省标签。
  • 问题补充2:/24前缀无法传输VPN流量
    • 前面用来建立LSP隧道的前缀都是/32的,分别是10.1.2.2/32和10.1.5.5/32;
    • 如果换成10.1.2.2/24和10.1.5.5/24,或者只有其中一个是/24的,那么就会出现问题,会发现MP-BGP传递过来的VPNv4路由下发到VRF的BGP表后,无法下发到VRF的路由表:

45.png

  • 可以看到此时的10.1.6.6/32路由其实是有传递过来的,只是不生效的,所以在VRF的路由表也肯定看不到:

46.png

  • 所以最后R1也不会学习到10.1.1.1/32的路由条目;
  • 原因分析
    • 前面在MPLS的内容时有提到路由汇总导致的问题;
    • 就是LSP可能会被分成两段;
    • 如果出现这样的情况,当打上两层的标签到了中间进行汇总的路由器时,会把外层标签拿掉,准备将数据放到第二条LSP中进行转发,但是这时会发现还有一个内层标签,但是该路由器并不认识这个标签,于是就会把这个数据丢弃了;
    • 这也就意味着,如果不是一条完整的LSP,对于上层应用是有影响的,比如MPLS VPN的场景;
    • 但实际上在这个场景当中,并没有做路由汇总,只是华为设备在此做了一个限制,就是当R2发现该LSP是/24前缀之后,会认为可能是中间某台路由器做了路由汇总,通过前面的分析知道,如果做了汇总,那么MPLS VPN的数据转发肯定是失败的,所以R2直接会把通过MP-BGP学习到的路由条目定义为无效,虽然已经放到VRF的BGP表中,但是是无效的,因此该路由条目是不会下发到VRF的路由表中的,这样的话就可以避免前面可能出现的丢弃MPLS VPN报文的情况;
    • 实际上R5还是可以学习到10.1.1.1/32的条目的,因为从R5-R2方向去往10.1.2.2的LSP还是/32前缀的。



4.1.1 路由信息发布的验证

47.png
48.jpg
49.jpg
image.png
image.png
image.png
image.png
image.png


4.1 OSPF-Super Backbone

先看下面的一个实验
50.png
部署完成基于PE-CE OSPF的MPLS VPN后,在R1上查看学习到的OSPF路由。
51.png
可以看到,一个为3类,一个为4类,即外部路由,这是为什么呢?

4.1.2 Super Backbone

52.png
53.png
但是在实验中发现,10.12.2.0的路由却变成了5类的,继续看下面。
54.png
55.png
[Huawei]ospf x vpn-instance y
[Huawei-ospf-x]domain-id 0.0.0.1 (默认0.0.0.0)

在R2上查看相关的VPNv4路由:
56.png
57.png
所以一个为3类,一个为4类,即外部路由。


4.2 部署Sham-Link

58.png


4.3 MPLS VPN环路防护

59.png
60.png
61.png
62.png
63.png


4.4 Intranet VPN

64.png


4.5 Extranet VPN

65.png


4.6 Hub and Spoke

66.png
Import policy
Export policy