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

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

我在 freeBSD 中使用 openbgpd,有 2 个 ISP 连接。我有自己的 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

答案1

我已经有好几年没有使用过 openbgpd 了,因此,我会给你一些可以应用到你的配置中的理论。

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

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

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

你应该能够做类似的事情:

显示 ip bgp 摘要(IOS 命令)

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

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

在我们的一个边界路由器上,我显示了 310540 条活动路由,请确保您有足够的 RAM,并且已将机器配置为处理来自两个提供商的路由(如果您采用全路由)。您可以尝试采用来自两个提供商的客户路由,直到您感到更舒服为止。或者采用来自两个提供商中较小的提供商的客户路由,看看情况如何变化。

这仍然无法实现“负载平衡”或均匀分配流量,具体取决于您的流量。您可能会发现一个提供商仍然占据了大部分流量。此时,您需要进行一些前缀/路由映射来调整流量以优先选择其中一个对等体。

一旦您设置了路由图或 ASN 匹配来转移流量,如果目标站点发生故障,并且其路由从该提供商中删除,您的路由器仍会将流量发送到其他连接。BGP 在某种程度上具有自我修复功能。

我们所做的是,我们定义了一些基于 ASN 匹配的地图。

PROVIDER_A_TO PROVIDER_A_THROUGH PROVIDER_B_TO PROVIDER_B_THROUGH

与使用社区相比,Juniper 使这变得更容易,不过您可以同时使用两种方式。

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

我确信 openbgpd 有类似的方法。

答案2

BGP 不是负载平衡协议。

让我重复一遍,BGP 是不是负载平衡协议。

如果全部流量通过单个连接出去,我的第一个猜测是你没有从被忽略的提供商那里获得完整的反馈。路由是这样的,优先考虑更具体的路由,所以如果你有一条通往提供商 a 的路由 192.168.0.0/23,还有两条通往提供商 b 的路由 192.168.0.0/24 和 192.168.1.0/24,提供商 a 将被完全忽略。我不熟悉 OpenBGP。所以我不能告诉你如何在不查看的情况下验证某些事情的具体细节。但你需要做的第一件事是验证两个都提供商会向您提供完整的信息,而不仅仅是默认路线。

如果是这种情况,那么您需要研究出站流量的路由偏好和入站流量的路径填充。确保在配置更改之间等待 24 到 48 小时,以确保您拥有足够大的数据集来确定更改的有效性。

答案3

建立一座桥梁。Freebsd 实际上会在当前前缀的上游功能上进行负载平衡,并且负载平衡效果会非常好。BGP 则不会。您可以安装两个上游 ISP 并按照您的 /22 向两个 ISP 通告,并且可能会拒绝您的 /30 wan 前缀,但 iBGP 会接受它。iBGP 将在桥上运行良好,因此不再需要 OSPF。您现在有了一个负载平衡器和完全冗余的 BGP 设置。我们已经安装了几个,并且喜欢它们在千兆互联网链接上的表现。

答案4

首先要检查的是两个 BGP 会话是否正常工作。使用

bgpctl 显示摘要

并查看您是否与双方交换了消息。

并且,你应该删除“宣布全部”,除非你希望你的对等方通过你来路由他们的流量,这通常是相反的;

只要删除全部公告就可以了。

相关内容