将来自同一 BGP AS 的不同链路的流量路由出去

网络工程 bgp
2021-07-15 14:46:50

我在 BGP AS 65000 中有两个站点 A 和 B,在 AS 65001 中有第三个站点 C。所有三个站点都通过运营商 MPLS 建立连接,站点 A 和 B 之间有内部连接。我正在尝试影响 BGP这样,从站点 A 到站点 C 的流量将通过站点 A 的 MPLS 链路进行路由,而从站点 B 到站点 C 的流量将通过站点 B 的 MPLS 链路进行路由。拓扑类似于本示例中描述的拓扑

AS 65000 和 65001

站点 A 和站点 B 的边缘路由器都将自己的 MPLS 链路视为最佳路径,因为 EBGP 路由优于 IBGP 路由。但是,位于 AS 65000 内部的路由器都将优先选择一条链路或另一条链路。我的目标是强制任一站点的所有路由器都选择最近的链接。(不幸的是,我目前无法将这两个站点拆分为单独的 AS。)

有没有一种理智的方法来实现这一点,同时仍然允许在站点 A 和 B 链接之间建立到站点 C 的故障转移连接?

编辑:我应该注意到这里没有使用 IGP。事实上,每个站点的网络都存在于一个 VRF 中,作​​为一个更大的网络的一部分。因此,任何解决方案都需要完全依赖 BGP。

4个回答

站点 A 和站点 B 之间是否有明确的定义?

如果是这样,那么我会考虑在边缘路由器上定义一个策略,以便在从运营商 MPLS 接收路由时注入社区。

一旦这个社区被放置在前缀上(比如站点 A 为 100:1,站点 B 为 100:2),您就可以向站点 A 的每个路由器添加一个策略,以增加社区为 100:1 的任何路由的 LP 和同样对于具有社区 100:2 的站点 B。

该解决方案将满足仅使用 BGP 的要求,并且还足够灵活,如果 B 失去了自己的到运营商的上行链路,仍然允许使用 A 的上行链路。

在此处输入图片说明当我做类似的事情时,我没有在路由器之间使用 eBGP。我让 BGP 路由器只通过 OSPF 将默认路由发送到站点 A 和站点 B 路由器,然后将 OSPF 路由重新分配到 BGP。在两个站点之间的链接上,我应用了 OSPF 成本。

这允许站点 A 拥有到其网络、站点 B 网络的路由,以及离开站点 A 的默认路由(如果您丢失站点 A 链接,OSPF 成本会将来自站点 B 的默认路由保留为次要选项)。站点 A 将直接与站点 B 对话,除非站点之间出现链路故障,否则不使用 MPLS。

同样,在重新分配期间,OSPF 成本会转化为 BGP MED,这会导致运营商 MPLS 网络更喜欢将站点 A 流量直接发送到站点 A,但如果需要,也会使用站点 B 到达站点 A。

感觉少了一些信息。为什么边缘路由器不喜欢最佳路径?

65000有全网状iBGP吗?或者你在使用路由反射?

如果您有全网状 iBGP,那么每个边缘路由器都会从 [AB] 中学习路由,并将求助于将 IGP 成本与下一跳进行比较,这应该会转化为最近的边缘框。

如果有路由反射,它只会从它自己的 POV 反射最佳路由,这可能会删除最佳路径转发。这也可以通过添加另一个 RR 来解决,该 RR 将选择其他路由作为最佳,然后边缘盒再次可以选择最佳路由。如果像这样修复 RR 是不可能的。您可以在两个边界路由环回中添加相同的 IPV4 地址,并且当边界路由器向 RR 通告前缀时,它们会将下一跳设置为该任播地址。然后即使经过反射,您也会跟随 IGP 到最近的边界。

如果您可以控制 IGP:

我们所做的是在 iBGP 网格中只拥有 eBGP 路由器。我们内部路由​​器的其余部分是 OSPF 路由器。我们在每个 AS 内从 BGP 重新分配到 OSPF。我们的设置与您的设置略有不同,但这应该允许 OSPF 的成本指标通过将其定向到最近的 eBGP 路由器来影响流量采用的路径。

如果您无法控制 IGP:

也许您可以将导入策略应用于内部路由器,使它们静态地首选所需退出 eBGP 路由器的路由公告。因此,例如,如果 iBGP 包含给定前缀的两个公告(一个来自站点 A 路由器,一个来自站点 B 路由器,但只有一个安装到 RIB 中),那么您可以本地预置所需的公告在。我将不得不对它进行实验,但我不明白为什么它不起作用。