「OSPF」- 针对 MPLS VPN 的扩展

  CREATED BY JENKINSBOT

在 MPLS VPN 中的 OSPF/BGP 扩展

问题描述

当 PE-CE 间部署 OSPF 交互路由信息时,若在 PE 上使用标准 BGP/OSPF 过程(简称为 BGP/OSPF 互操作)互来传递路由信息,则 Remote-PE 在将 BGP 引入 OSPF 进程时,会直接产生 Type5 LSA 路由,此时不同站点都会将其他站点的路由视为自治系统外部路由(AS_external);

在实际应用中,如果两个要互通的 Site 都在相同的 AS 内,那么每个 Site 都应该将另个 Site 的路由视为区域间路由,而不是 AS 外部路由。此时 PE2 应该视为 ASBR 设备;

解决方案

为了解决标准 BGP/OSPF 的互操作导致的 OSPF 路由信息丢失的问题,BGP 和 OSPF 得以拓展;

为了保留 OSPF 的路由信息,BGP.Path-Attr.Ext-Comm 能够携带 OSPF 路由信息:
1)Domain ID:域标识符,用来标识和区分不同的域;默认为空(0.0.0.0);
2)Route Type:包含被引入到 BGP 的 OSPF-Route 的 Area-ID 以及 Route Type 信息;
3)Router ID:是 PE.OSPF 的 Router ID 信息;


注:该图仅表达其中的若干字段、交互大致过程,并未准确显示报文字段信息;

Domain ID

在 PE 上,将 BGP import OSPF 时,PE 将根据本地配置为 BGP-Route 增加 Domain ID 属性,并在 BGP.Path-Attr.Ext-Comm 中传播;

在 PE 上,将 OSPF import BGP 时:
1)若 BGP-Route.Domain-ID == OSPF.Domain-ID 时,则认为两个站点属于同个 OSPF 路由域;
2)若 BGP-Route.Domain-ID != OSPF.Domain-ID 时,则认为该路由来自不同的路由域;

Domain ID 需要在绑定到 VRF-Inst 的 OSPF 视图下使用命令 domain-id 配置:
1)缺省,Domain-ID=0(NULL)。若不同 OSPF Domain 都使用 NULL 作为 Domain ID,将无法区分 OSPF 域,此时它们间的路由将被当作区域内路由;
2)如果一个 OSPF Domain 配置 非 0(即非 NULL)的 Domain ID,NULL 不再是该 OSPF Domain 的 Domain ID;
3)建议与同个 VPN 相关的所有 OSPF 都使用相同的 Domain ID,或者都使用缺省的 Domain ID;

Area-ID

PE.OSPF 与 CE.OSPF 在建立邻接关系时的区域号;

Route Type

该字段显示被引入的 OSPF-Route 的类型:
1)1 或 2 :表示路由类型为区域内部路由,也就是 PE 根据 Type-1 LSA 及 Type-2 LSA 所计算出来的路由。通常为 1(不管是 Type 1 还是 Type 2 都会被转化为 Type 3,所以没必要区分)
2)3:表示路由的类型为区域间路由;
3)5:表示路由的类型为 OSPF 外部路由,也就是 PE 通过 Type-5 LSA 计算得出的路由。当 Route-Type=5 时,Area-ID 字段的值需为 0.0.0.0;
4)7:表示路由的类型为 NSSA 路由,也就是 PE 通过 Type-7 LSA 计算得出的路由;

根据 BGP-Route 的 Domain ID 与 Route Type 属性,Remote-PE 将产生不同类型的 OSPF LSA 类型,再发布到 VRF 的 OSPF 进程中:

该处理动作发生在 Remote-PE 中(如图 PE2 设备):

OSPF Loop Prevention(防环)

OSPF VPN – NE05E and NE08E V300R003C10SPC500 Feature Description – IP Routing 01 – Huawei

路由防环:LSA Type 3

如图是 LSA Type 3 路由产生环路的例子:
1)其中 Site-1 和 Site-2 都属于 VPN1;
2)Site-1 通过 OSPF Area 0 接入骨干网的 PE1;
3)Site-2 通过 OSPF Area 0 分别接入骨干网的 PE2 和 PE3(双归属负载分担场景);

问题,该场景将产生环路:经过传递,PE3 既能从 CE2 学到路由,PE3 还能从 PE1 学到路由,但是缺省情况,IGP(OSPF)路由优先级高于 IBGP 路由,PE3 将选择 OSPF 路由。PE3 将优选的学自 OSPF 通过 MP-IBGP 发布给 PE1,对 PE1 该路由优先级更高(AS-PATH 为空),此时 PE1 要么出现环路,要么出现路由震荡;

解决,为了防止 LSA Type 3 环路,OSPF 多实例进程使用 LSA Options 域中原先未使用的比特作为标志位,称为 DN 位。使用 DN 位可以防止 Type3 LSA 环路。PE 的 OSPF 在进行 SPF 计算时,忽略 DN=1 的 LSA Type 3 信息;

缺省情况下,OSPF 产生的 LSA 的 DN 位设置为 1。可通过命令 dn-bit-set disable 来禁止设置 OSPF LSA 的 DN 位;

Q:为什么 Hub-Spoke 需要两个 OSPF 进程?
A:通过引入的方式,祛除 DN=1 标志位;

路由防环:LSA Type 5/7

如图是 LSA Type 5 路由产生环路的例子:
1)其中 Site-1 和 Site-2 都属于 VPN1;
2)Site-1 通过 EBGP 接入骨干网的 PE1;
3)Site-2 通过 OSPF 分别接入骨干网的 PE2 和 PE3;

问题,路由产生环路的原因与 LSA Type 3 类似:在 PE3 中,BGP 引入 OSPF 路由,该路由无 AS-PATH,优先级更高;

解决,通过 VPN Route Tag(Route Tag)来防止此 LSA Type 5/7 路由环路;

首先 PE 在根据收到的 BGP 的私网路由生成 5/7 类 LSA 时,该类型 LSA 将携带 VPN Route Tag 信息;
当 PE 发现 LSA 的 VPN 路由标记和本地配置的一样,就会忽略这条 LSA,因此可以避免上述环路;

Route Tag 不在 BGP.Path-Attr.Ext-Comm 中传递,只是本地概念,只在收到 BGP 路由并且产生 OSPF LSA 的 PE 设备上有意义,该值将存在于生成的 OSPF.Route 中;
缺省情况下,Route Tag 是根据 BGP AS Number 计算得到的(若未配置 BGP,则 default=0)。华为,通过指令 route-tag 配置 VPN 的路由标记;

OSPF Sham Link

问题描述

通常情况下,BGP 对等体之间通过 BGP 扩展团体属性在 MPLS VPN 骨干网上承载路由信息。另一端 PE 上运行的 OSPF 可利用这些信息来生成 PE 到 CE 的 Type 3 LSA,这些路由是区域间路由(Inter_Area route);

若在 CE1 和 CE2 之间增加一条后门(Backdoor)链路,并且直接运行 OSPF 交互路由。通过后门链路学习到的路由类型为区域内路由(Intra_Area route);

但是,由于区域内路由优于区域间路由,故后门链路会被优选。哪怕调整开销值,MPLS 链路学习到的 OSPF-Route 依旧为 Type 3 LSA,仍然不会被优选;

解决方案

所以,若想实现后门链路作为备份链路,可采用 sham link 实现。类似于 OSPF Virtual Link 功能;

Sham link 在两台 PE 之间创建了一条区域内链路。当 LSA 在伪装链路中泛洪,所有的 OSPF 路由类型都不会改变,不会转换成 LSA3 或者 LSA5 的类型;

Sham link 被看成是两个 VPN 实例之间的链路,链路的两端是 PE 上的端点地址,分别作为建立连接时的源和目的地址。伪连接的源地址和目的地址使用 32 位掩码的 Loopback 接口地址,该 Loopback 接口需要绑定到 VPN 实例中,并通过 BGP 发布;

同一个 OSPF 进程的多条 Sham link 可以共用端点地址,但不同 OSPF 进程不能拥有两条端点地址完全相同的 Sham link;

配置流程

1)PE 创建 Loopback 接口
2)该接口绑定 VPN Instance
3)该接口通告到 BGP 中,并保证能够互通;
4)配置 Sham Link 连接:[OSPF/VPN-Instance/Area] sham-link <SRC> <DST>

# 在 PE 上创建用于建立 sham Link 的接口(PE2 配置类似);
[PE1]interface LoopBack0
[PE1-LoopBack0] ip binding vpn-instance VPNA
[PE1-LoopBack0]ip address 1.1.1.1 32
#在 BGP 的 VPN 地址族中发布出去
[PE1-bgp-VPNA]network  1.1.1.1 32
# 在 PE 节点上配置 sham Link(PE2 节点配置类似);
[PE1-ospf-1]area 0
[PE1-ospf-1-area-0.0.0.0]sham-link 1.1.1.1 2.2.2.2

# 调整 cost 值,确保后门链路的 cost 要大于 sham Link 上的 cost;
[CE1-GigabitEthernet0/0/0]ospf cost  1000