在 freebsd 上使用 openbgpd 时对出站流量进行负载均衡

Raj*_*r S 8 bgp ip-routing

我在具有 2 个 ISP 连接的 freeBSD 中使用 openbgpd。我有自己的 AS 编号和 /22 网络。目前我正在向两个网络宣传整个 /22。入站流量进来但我的出站流量通过单个链接。

我想通过两个链接分配我的出站流量,以便出站流量也可以进行负载平衡。

如何在 freebsd 中使用 openbgpd 进行配置?

附上我当前的 openbgpd 配置以供参考。

AS 00my-as
listen on xx.xx.xx.x
router-id xx.xx.xx.x
network aa.aa.aa.0/22
group "ISP1" {
  remote-as 11remoteas-1
  neighbor bb.bb.bb.1 {
   descr "ISP1"
   announce all  
  }
}
group "ISP2" {
  remote-as 22remoteas-2
  neighbor cc.cc.cc.37 {
   descr "ISP2"
   announce all  
  }
}
deny from any
deny to any
allow from bb.bb.bb.1
allow to bb.bb.bb.1
allow from cc.cc.cc.37
allow to cc.cc.cc.37
Run Code Online (Sandbox Code Playgroud)

小智 2

我已经很多年没有使用 openbgpd 了,所以,我会给你一些可以应用到你的配置中的理论。

提供商可以向您发送路线。通常他们会发送“默认”、“客户”或“完整”。默认路由就是这样,向您宣布 0.0.0.0/0,并且您知道通过它们到达 0.0.0.0/0(任何 IP)。您的情况听起来好像两个提供商都为您提供了默认路由,并且最有可能的是,ASN 较低的提供商获得了所有流量(当数据包可以发送到多个目的地并且 AS 路径相等时,ASN 是决定性因素)长度等)。

“客户”提要会让他们宣布与他们直接相连的每条路线。如果您有像 Level3 这样的提供商,您可能会通过此源看到一半的互联网。如果您的其他提供商的 ASN 较低,他们将获得任何未直接连接到向您宣布其客户路由的对等方的流量。

“完整”提要将包含提供商知道如何到达的每个站点的路线公告 - 而不仅仅是那些直接连接的站点。

您应该能够执行以下操作:

show ip bgp 摘要(IOS 命令)

其中应该列出某处收到的前缀数量。

如果您现有的两个提供商都向您发送默认路由,则您的连接当前已设置为故障转移。提供商 A 出现故障,您将路由到提供商 B。如果您沿着默认路由从这两个提供商获取客户源,流量将流向具有最短 ASpath 的提供商以到达给定地址,并会回退到默认路由如果找不到地址,则路由。如果您从两者获得完整的提要,根据提供商之间的重叠,您将把流量从“最佳”路径发送到每个提供商。

在我们的一台边界路由器上,我显示了 310540 条活动路由,如果您采用完整路由,请确保您有足够的 RAM 并配置机器来处理来自两个提供商的路由。您可以尝试从这两个方向选择客户路线,直到您感到更舒服为止。或者从两者中规模较小的提供商那里获取客户路线,看看情况如何变化。

这仍然不会“负载平衡”或根据您的流量均匀分配流量。您可能会发现一家提供商仍然获得了最大份额的流量。此时,您需要执行一些前缀/路由映射来调整流量以选择其中一个对等点。

一旦您设置了路由映射或 ASN 匹配来转移流量,如果目标站点出现故障,并且其路由已从该提供商中删除,您的路由器仍会将流量发送到其他连接。BGP 具有一定的自我修复能力。

我们所做的是根据 ASN.1 定义了一些匹配的映射。

PROVIDER_A_TO PROVIDER_A_THROUGH PROVIDER_B_TO PROVIDER_B_THROUGH

瞻博网络使这比使用社区更容易,不过您也可以这样做。

我们的前缀列表会查看目的地是否是特定的 ASN,如果是,则会遍历 _TO 映射。如果 ASN 在 _THROUGH 中列出,它将优先选择该提供商。由于我们的提供商之一与 AT&T 直接连接,PROVIDER_B_THROUGH 在 7018|7019(以及其他一些 ASN)上匹配,因此 AT&T 流量默认发送至提供商 B。尽管 AT&T 可以从两者访问,但我们更愿意通过提供商 B 发送流量。

我确信 openbgpd 有类似的方法。