当 VRF 位于同一 PE 上时,使用 BGP 加入 VRF 的最佳方式

网络工程 BGP 虚拟现实
2022-02-10 18:17:13

我有一个防火墙,我需要使用它来加入服务提供商 PE 上的两个不同 VRF。选择的 EGP 是 BGP。我已经使用不同的技术进行了许多测试,我找到了两种可行的解决方案,但我还没有确定一个解决方案,因为我认为这两种方法都不完美。所以我把这个问题作为我的发现提出来,看看是否有人有更好的方法来做到这一点。

vrf: Cust-A                         vrf: Cust-B 
   on PE1   \                     /    on PE1
             \_____ Firewall_____/
             /                   \
vrf: Cust-A /                     \ vrf: Cust-B
   on PE2                              on PE2

在上图中,PE 是相同的 PE。例如,客户 A 和客户 B 在两个服务提供商 PE(PE1 和 PE2)上各有一个“vrf”。

不幸的是,防火墙不支持 MPLS。所以现在出现了让 BGP 在共享相同 AS 编号的两个 MPLS VPN 之间分配路由的问题。

BGP 设置本地为

我的第一次尝试是在每个 VRF 和防火墙上使用 local-as。(所以这是三个唯一的 AS 编号) Local-AS 实际上会导致实际编号和本地编号都添加到 AS-Path 之前。因此 BGP 环路预防看到本机 AS 号并且不会安装路由。瞻博网络(我认为是思科)提供了一个选项,即不添加本地号码,而只添加本地号码。然而事实证明,local-as 编号(即使它仅分配给 VRF)对于 BGP 进程是“全局的”,并且 Cust-B vrfs 不会从 Cust-A vrfs 导入路由。

为了验证这一点,我发现如果 Cust-A 和 Cust-B 在物理上独立的设备上并且本地-as 预挂起被禁用(使用瞻博网络逻辑实例测试),则 local-as 可以工作,但是在服务提供者 PE 中可能存在下游影响我无法测试的云。

AS覆盖

下一个选择的工具是 AS-Override,令人惊讶的是,防火墙支持我没有预料到的 AS-Override。通过覆盖从 PE 获知的 AS-Path,路由成功通过 VRF。这具有创建潜在循环的副作用,因为从 Cust-B-PE1 学习的路由被重新通告(替换了 AS-PATH)到 Cust-B-PE2(对于 Cust-A 也是如此)。在我的实验室环境中,这不会仅靠“幸运”而最终出现在路由表中,因为 AS-Path 恰好在替换远程 as 的所有实例后预先添加了 Native-AS。

我再次可以看到,当客户使用 AS-Path 长度来确定路由时,这将在客户 MPLS 云中出现下游问题。

循环输入 1

最后,似乎可用的唯一选项是 Loops-In。这也有效,但遇到与 AS-Override 相同的问题。Loops-In 的优点是 AS-Path 保持不变。

剥离私有 AS

另一个问题是客户 CE 使用 private-as 号码。如果 Cust-A 和 Cust-B 的私有 AS 编号重叠,则 AS-Override 或 Local-AS 都不会阻止 CE 拒绝路由,并且重新配置 CE 设备以进行环入是不切实际的。因此,这需要在防火墙或 VRF 实例上使用 strip-private-as 功能。

当前解决方案

目前,我已经决定在 PE 上使用 AS-Override 和 strip-private-as。

为了阻止潜在的路由循环,我在防火墙上添加了一个社区,用于学习的路由,并确保我不会将此社区重新发布给任何从中学习的客户 VRF。

更好的方法

我对执行此操作的最佳方法感兴趣?

笔记

应该注意的是,VRF 具有私有 IPv4、公共 IPv4 和 IPv6 地址的组合。PE 不会将任何私有 IPv4 重新分配到防火墙。

注意:到防火墙的静态路由不是一个选项。

0个回答
没有发现任何回复~