「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