我有一个防火墙,我需要使用它来加入服务提供商 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 重新分配到防火墙。
注意:到防火墙的静态路由不是一个选项。