「MPLS-VPN」- 控制平面:路由发布、路由传递

  CREATED BY JENKINSBOT

问题描述

若想实现同一个 VPN 的不同站点之间的通信,首先需要完成不同站点之间的路由交互。在基本 MPLS VPN 组网中,VPN 路由信息的发布涉及 CE 和 PE,而 P 只维护骨干网的路由,不需要了解任何 VPN 路由信息;

解决方案

路由(指 Site-A 内的路由信息)的发布过程包括三部分:
1)Local-CE 到 Local-PE,即 CE1 ⇒ PE1;
2)Local-PE 到 Remote-PE,即 PE1 ⇒ PE2;
3)Remote-PE 到 Remote-CE,即 PE2 ⇒ CE3;

CE ⇒ PE(CE1 => PE1)

如图,User-X 和 User-Y 属于不同的 VPN,分别拥有两个站点,现需要实现站点间的路由信息交互:
1)在 CE 与 PE 间,可以使用静态路由、OSPF、IS-IS、BGP 交换路由信息;
2)无论使用哪种路由协议,CE 和 PE 间交换的都是标准的 IPv4 路由(我们这里学习的是 IPv4 相关场景);

PE ⇒ PE(PE1 => PE2)

问题:用户的地址空间出现重叠

但是,VPN 是种私有网络,不同的 VPN 独立管理自己的地址范围,也称为地址空间(address space)。不同 VPN 的地址空间可能会在一定范围内重合,例图中 User-X 和 User-Y 都使用 192.168.1.0/24 网段地址,即地址空间的重叠(address spaces overlapping);

以下两种情况允许 VPN 使用重叠的地址空间:两个 VPN 没有共同的站点,即相互独立;两个 VPN 有共同的站点,但此共同站点中的设备不与两个 VPN 中使用重叠地址空间的设备互访;

所以,当 PE 接收到 CE 传递来的路由后,需要独立保存不同 VPN 的路由,且需要解决不同的客户使用重叠地址空间的问题;

首先:本端需要区分用户的路由(VRF)

既然地址空间重叠,我们需要先确定收到的多个相同路由分别是来自哪个用户,以将路由传递到正确的对端;

解决方案是 VRF,其是 MPLS VPN 架构中的关键技术,设备接口分属不同的 VRF 实例,每个 VRF 使用独立的路由转发表项,实现 VPN 间的逻辑隔离;

然后:远端需要区分用户的路由(VPNv4, RD)

Local-PE 收到不同 VPN 的 CE 发来的 IPv4-Route 条目,Local-PE 能根据 VRF 配置去区分这些 IPv4-Route 条目。但是 VRF 只是个设备本地的概念,PE 无法将 VRF 信息传递到 Remote-PE 设备,所以 Rmote-PE 无法确定相同的路由分别属于哪些 Remote-CE 设备;

解决方案是 RD(Route Distinguisher,路由标识符):PE 从 CE 接收到 IPv4-Route 后,在 IPv4-Route 前加上 RD,转换为全局唯一的 VPN-IPv4 路由。简单说,就是针对不同 IPv4-Route 增加不同的前缀信息,这样相同的路由通过不同的 RD 得以区分;

VPN-IPv4,又被称为 VPNv4 地址:VPNv4 地址共有 12Byte:8-BYTE 的 RD;4-BYTE 的 IPv4 地址前缀;

RD,8Byte,用于区分使用相同地址空间的 IPv4 前缀;

当配置 RD 信息时:
1)只需要指定 RD 的 Administrator Subfield 和 Assigned Number Subfield 字段;
2)补充说明:Type Field 固定 2Byte,而后面的两个字段,总计 6Byte 即可,至于谁占多长并无严格限制;

RD 的配置格式有四种,常用的两种如下:
1)<16bits-AS-Number>:<32bits-User-Defined-Number>(例如 100:1、200:4 等等);
2)<32bits-IPv4-Address>:<16bits-User-Defined-Number>(例如:172.1.1.1:1、192.168.12.45:9 等等);

RD 的结构使得每个运营商可以独立地分配 RD,但为了在某些应用场景下保证路由正常,必须保证 RD 全局唯一;

然后:本端与远端之间路由传递(MP-BGP)

现在路由已经变成 VPNv4-Route,而非传统的 IPv4-Route,如何在 PE 间传递 VPNv4 路由呢?

传统的 BGP-4 不支持 VPNv4-Route 的传递;(该问题致使 MP-BGP 协议被引入到 MPLS VPN 技术中)
而 IGP 协议,对于 P 设备来说,需要承载大量的路由条目,所以没有考虑使用 IGP 协议;(该问题致使 MPLS VPN 出现双标签中)

解决方案是 MP-BGP,为了正确处理 VPN 路由,MPLS VPN 使用 RFC2858(Multiprotocol Extensions for BGP-4)中规定的 MP-BGP 协议;
其负责在 PE 与 PE 间传递站点内的路由信息。在 PE 间,建立 BGP 邻居关系,并通过 BGP 进行路由传递;

为什么采用 BGP 呢?(1)其使用 TCP 作为其传输层协议,提高协议的可靠性。(2)且可以跨路由器的两个 PE 设备之间直接交换路由,无需在 P 中传递路由。(2)BGP 拓展性强,为 PE 间传播 VPN 路由提供便利。(4)PE 间需要传送的路由条目可能较大,BGP 只发送更新的路由,提高传递路由数量的同时不占用过多链路带宽;

然后:远端需要区分用户的路由(RT)

Local-PE 需要区分相同的用户路由,那么 Remote-PE 也需要区分用户路由,以将路由导入到正确的 VRF-INST 中。即:MP-BGP 将 VPNv4 传递到 Remote-PE 后,Remote-PE 需要将 VPNv4-Route 导入正确的 VRF 实例;

解决方案是 MPLS VPN 使用 32bit 的 BGP 扩展团体属性-Route Target(也称为 VPN Target)来控制 VPNv4-Route 的发布与接收。在发布 VPNv4-Route 信息前,Local-PE,附上 RT 属性,对端 RT 在接到到 VPNv4-Route 后,根据 RT 将路由导入对应的 VRF 实例;

Q:我们认为直接使用 RD 值便能解决 Remote-PE 将路由对应到 VRF-INST,那为什么要引入 RT 值?
A:确实 RD 能够完成 VPNv4 与 VRF 的绑定关系,但是 RT 除了区分路由,还需控制路由接收(PE 具有控制权)。通过 RT 参数,才能实现两个 MPLS VPN 之间的复杂组网(例如,在 MPLS VPN 的组网形态中,Extranet,需要 RT 实现,否则单靠 RD 那所有的路由都会被通告给其他 CE);

在 PE 上,每个 VRF 都会与一个或多个 RT 属性绑定,有两类 RT 属性:
1)Export Target(ERT):Local-PE 从直连站点学到 IPv4-Route 后,转为 VPNv4-Route,为其添加 ERT 属性,并作为 BGP 的扩展团体属性随路由发布;
2)Import Target(IRT):Remote-PE 收到 Local-PE 发布的 VPNv4-Route 时,检查其 ERT 属性。PE 遍历所有 VRT-INST,当 RT 与某个 VRF-INST 的 IRT 匹配时,PE 就把路由加入到该 VRF-INST 的路由表;

Q:如果 VPNv4-Route 与 Remote-PE RT 不匹配,是否会接收路由?
A:当查找路由 VRF-INST 后,如果为找到与 VPNv4-Route 匹配的 RT 值,则路由是不会被接收的(因为接收没有意义)。但是可以修改 RT 的过滤策略([Huawei]policy vpn-target),以选择接收所有路由(此时,即便 RT 不匹配也会被 MP-BGP 接收,但不会传递到 VRF 中)。VPNv4 的 BGP RR 会使用该技术,需要接收所有路由,才能进行反射,否则不接收则无路由则无法反射(RR 未运行也不能运行 VRF-INST,所以也没有 RT 参数,需要这种方法来接收路由);

与 RD 相同,RT 由 Type、Administrator、Assigned Number 三个字段构成,长度也是 8 字节;
当配置 RT 信息时,只需要指定其 Administrator、Assigned Number 字段。VPN-Target 的配置格式与 RD 格式一致;

Remote-PE 根据 VPNv4-Route 所携带的 RT 将路由导入正确的 VRF 后,VPNv4-VRF 的 RD 也被剥除,变成最开始的 IPv4-Route 通告给相应的 Remote-CE 设备。此时 Site-B 和 Site-D 的 CE 就能学习到去往各自远端站点的路由。同理,通过一系列的操作,可以实现同一用户(同一 VPN)不同站点之间的路由互通;

至此,路由传递已经由 MP-BGP 完成,接下来便开始数据转发:2.Data Forwarding (Right to Left)

PE ⇒ CE(PE2 => CE3)

对于 Remote-PE 到 Remote-CE 的路由信息交换,与 Local-CE 到 Local-PE 的原理完全相同;

路由交互全过程(总结)