更好的企业多宿主

网络工程 bgp
2021-07-14 13:49:37

我想就我可以改进 BGP 双供应商、双路由器设计的方法获得一些意见。每个提供程序提供一个 /24 公共子网。我将路由器、电路、子网、HSRP 组和提供商分别称为 A 和 B。每个电路的带宽足以满足整个负载的需求。

当前设计

当前的设计试图实现每个提供者的对称性。在稳定状态下,预期的路由逻辑是进/出子网 A 的流量仅通过电路 A,进/出子网 B 的流量仅通过电路 B。这些电路将在故障状态下相互备份。

提供者只通告默认路由。出站路由需要混合使用 PBR 和 HSRP。路由器之间没有路由:没有 iBGP、没有 OSPF、没有静态路由。相反,有两个 HSRP 组跟踪默认路由。路由器 A 是 HSRP 组 A 的主要路由器,路由器 B 是 HSRP 组 B 的主要设备。下游设备有一条指向 HSRP 组 A 的默认路由和 PBR,它将来自子网 B 的流量定向到 HSRP 组 B。入站路由受前置和社区。子网 A 在电路 B 上预置和共享,子网 B 在电路 A 上预置和共享。

我看到这个设计有很大的改进空间。互联网拓扑意识的缺乏与电路亲和力的结合完全消除了最佳路径选择。对供应商的层级指定存在担忧,并且设计已被合理化为提供“可接受的性能”并且更易于排除故障。事实上,设计不可能变得更简单。我已经证明传输额外的 AS 会为 RTT 增加 6 跳和 63 毫秒(+421%)。我宁愿不满足于可接受。

更好的设计

更好的设计为路由器提供尽可能多的 Internet 拓扑感知。最佳路径算法用于确定入站和出站路由逻辑。电路会在故障状态下相互支持。

提供商宣传完整视图。路由器运行 iBGP 和 OSPF。HSRP 被淘汰。出站路由将是纯粹基于目的地的最佳路径,入站路由将留给最佳路径算法和中转提供商的奇思妙想。

现在我把它打出来,看起来确实更简单了。至少,解释的字数少了。有人担心不对称,但我在当前的设计中看到了很多不对称。我认为它们可能同样容易出现不对称,我真的不担心。我们从未见过因此出现问题。目前它被降级为 ifs 的领域,“如果我们必须解决某些问题怎么办?”

我在这里离基地很远还是我撞到了头上?其他人是如何解决这个问题的?谷歌会怎么做?

4个回答

是的,你确实一针见血。

您将在改进的设计中看到不对称,但不对称是 Internet 上的一个现实,并且确实没有充分的理由期望进出流量的对称路由。射击,数据包路由的整个概念是单独的数据包彼此独立路由并且可能采用不同的路径,甚至数据包在同一方向上。

就个人而言,我讨厌 PBR。它是一种技术,当我决定它是问题的最佳解决方案时,我会停下来退后一步,看看我是否真的了解问题的真正性质,甚至回到弄清楚要解决的业务问题是。当我这样做时,我几乎总是发现有一种方法可以在不使用此类技术的情况下解决问题。

在您的路由器中拥有完整的 Internet 路由需要一些时间来适应,但是一旦您习惯了它,它确实很容易理解和排除故障。当然,需要担心的不同协议的“移动部件”更少。

您不想在 OSPF 数据库中包含完整的 Internet 路由,因此您需要通过 OSPF 将默认值通告到您的网络内部(或者可能是静态默认值……我个人更喜欢 OSPF 中的默认值)。这会将流量移向 BGP 说 Internet 路由器,从而可以更充分地做出拥有完整 Internet 路由的决定。

这将使您接近“基于目的地的最佳路径”。在某些情况下,流量仍会执行您不太期望的事情,因此您需要熟悉 BGP 路由选择过程。

为已经给出的其他方法提供不同的方法,这可能比现有的想法更好也可能不会,但主要是通过一些额外的想法;

我想说,您可以采取以下两个简单的步骤来改善您目前的状况;

第 1 步

从两个提供商处获取完整的 BGP 表 - 现在,您将拥有更优化的出站路由,因为您将通过具有最小 AS 路径的中转提供商路由到目的地。正如您所说,您可以删除 HSRP 并简单地在 OSPF 中通告默认路由,并在您的两个边缘路由器之间运行 iBGP。

第 2 步

在您的两个边缘路由器上设置 AS 前置和社区等,以根据需要精细地控制出站流量。因此,ISP B 可能有更好的路由到某个子网,但您可以从 ISP A 购买更多的传输,而不是通过它们购买,依此类推。


假设您提到的两个 /24 是独立于 PI 的地址空间,因此您通过两个提供商宣布它们,或者两个提供商都同意为您宣布相同的 IP 地址空间,您现在可以从两个路由器向两个 ISP 宣布两个前缀没有前置或社区并获得更好的入站路由(当然,除非您有一些需要遵守或类似的 CDR,在这种情况下您可以根据需要进行调整)。

从简单开始,然后仅在需要时添加复杂性。我会质疑是否有必要在您的 Internet 边缘路由器上运行 OSPF。将 PBR 引导到路边,仅在您的内部网络上使用。

  1. 如果您的路由器有内存,则采用完整的 Internet 路由,但要进行过滤!扔任何东西 gt a /24。
  2. 从 A 和 B 选择默认路由。
  3. 必须运行 iBGP 才能让您的路由器在考虑从 A 和 B 收到的所有前缀的情况下做出最佳路径决策。
  4. 如果您计划对两个提供商同时使用 A 和 B 的 /24,那么您可以通过在 B 的网络上添加 A 的 /24 来更好地影响入站流量,反之亦然。两个 /24 都必须做广告!在为您设置前置词时,请咨询您的 ISP 以了解他们的社区。
  5. 对来自防火墙的出站流量使用两个不同的 HSRP 组;您可以将 ECLB 设置为负载共享到您的两个路由器。 等价负载均衡

如果您只使用向 A 和 B 宣传的单个 /24,则所有这些都可以简化。

稍后,查看更多复杂性以获得更好的流量工程和保护:

  1. 熟悉 A 和 B 的社区,因为您可能更喜欢使用对等路由映射来设置 localpref 以确定哪些路由使用 A 和 B。
  2. 在两台路由器上设置浮动静态默认路由,作为其他所有路由器的紧急备份,以防您的 BGP 崩溃。

    ip route 0.0.0.0 0.0.0.0 a.b.c.d 254
    
  3. 查看更复杂的广告方式来控制入站策略,例如一半的 IP 空间通过 A,另一半通过 B。对于给定的 /24,您可以将 /24 广告给 A 和 B,但将其拆分为两个 /25 并将较低的 /25 广告给 A,将较高的 /25 广告给 B。

  4. 使用软重新配置,这样您就可以调整策略并对 BGP 会话进行软重置,这样如果您完全重置(或清除)会话,就不会在另一端导致前缀减弱。政策的变化需要重新设置。

所以我从这篇文章中了解到,您实际上并不需要根据到达外部子网的 AS 路径做出决定,并且双归属到两个 ISP 的唯一目的是购买冗余以到达互联网。如果是这样,那么您实际上不需要运行 BGP。您可以只接受您已经从您的服务提供商处收到的相同默认路由。现在对于网络的本地端,在面向 LAN 的接口上连接到 ISP 的路由器上运行单个 ospf 区域(不包括进程下的 ISP 接口)并取决于设计需要的简单程度您可以在不同区域添加路由器并汇总网络边界处的子网,但是对于两个子网,我认为 OSPF 数据库的大小或 LSA 泛洪的数量并不是一个大问题,

在连接到 ISP 的每个 OSPF 路由器上,使用“default-information originate”语句将学习到的默认路由重新分配到 OSPF 中。

几个优点:

  1. 通过这种设计,当您扩展网络时,您可以与服务提供商一起启用 BGP,并且只接受默认路由,而无需接触任何下游设备。在您确认收到来自 BGP 的默认路由之前,您一切正常。

  2. 每当您需要从 ISP 路由流量进行维护时,只需从该路由器上的 OSPF 进程下方删除“默认信息来源”并继续维护。不需要其他任何东西。

我同意之前的答案,因为对称路由被高估了,我宁愿追求可扩展性和易于维护。