没有 BGP 的多宿主 Internet 边缘。重叠的路线,一个可行的设计?

网络工程 路由 互联网 互联网服务供应商 网络访问
2021-08-03 09:10:10

虽然该行业在每个市场都在鼓吹云计算,而用户,无论是急切地、不情愿地还是不知不觉地开始排队,但似乎很少有人谈论互联网的实际结构以及无可否认地介于客户和他们的使命之间的永远存在的复杂性关键的云服务。

因此,对于任何类型的连接问题,几乎没有人能接受;没关系,即使是欧洲北部郊区相当大的服务提供商,也可以影响骨干提供商之间的全球流量流动或缓解跨大西洋拥堵,其程度与附近的会议酒店大致相同,所述服务提供商在那里举办客户培训会议,可以阻止联合航空公司(当然,仅由于“紧迫的、不可预见的和其他未公开的乘客安全问题”。我相信你明白。)尽管酒店有明显且无可争议的义务,但取消客户团队的出境航班做好不可退款的房间预订。

简单来说,客户越来越希望服务提供商承担起他们的责任,以确保持续的服务可用性和性能,至少在客户自己的 Internet 上行链路之外。只需单击一下鼠标,竞争就不再遥远,我觉得多宿主正在迅速成为即使是最小的 SaaS 或其他互联网相关服务提供商的绝对要求——除了建立在第三方基础设施之上,在这种情况下同样的要求属于上述第三方。

不幸的是,BGP与以往一样复杂、繁琐和可怕,而且似乎不太适合没有专门的 wan 人员团队的相对较小的操作。因此,我一直在努力寻找一种相当强大、简单且廉价的解决方案,该解决方案将允许通过两个 Internet 服务提供商进行动态路由,而无需从您自己的 AS运行完整的 BGP

现在,我想我终于有了一个可用设计的想法,该设计至少将动态路由协议保持在一定范围内,并且在大多数情况下,在两个 ISP 的各自域内。

建议的网络设计概要

设置利用一对夫妇的著名力学的BGP routing protocolF5 Networks BigIP appliance首先,BGP 会关注最具体的适用路由对象。这允许两个 ISP 宣布更大/22 route的和更具体的/23 route每个,从而在正常操作期间有效地将块切成两半。由于两者/23 routes合并占整个/22 block只要两个 ISP 都可以访问,就/22 routes应该忽略 ,从而让流量根据/23 routes绿色标记流向每个站点。

如果,比方说,链路ISP 2断开,AS 200 应该撤回两条路由(或撤回小路由并降级另一个,因为他们仍然可以代表它的对等方宣布AS 1000)并且流量将开始流向/22 route已经宣布的AS 1000,运气好,跟随红色标记。

由于两者BigIP appliances都可从ISP gateways同一第 2 层网段中到达,因此重新路由的流量将跨Lan 2 Lan链路桥接,并以与BigIP appliance以前相同的方式结束,尽管它们将到达面向 的两个端口之一,Lan 2 Lan而不是面向 的端口ISP 2 gateway.

在这里,他提到的两个机制中第二个开始发挥作用。通过该商品的特定要求的网络端口默认发送答复将起源,同样(或者我希望如此)直接流量始发端网关。诚然,我还没有测试有关转发到始发路由器的回复的部分;我想这可能是必要的某种规则的更新,也许用一个简单的本地路由协议或者甚至让(或如果可能的话,在剩余的健康)接管不健康的IP地址BigIPstatic gateway route entryVIP interfaceBigIPISP gatewayISP gateway

在此特定布局中,两个 ISP 已经具有直接对等互连的事实似乎增加了解决方案的稳健性。这些很可能已经代表彼此向各自的同行宣布了我们的路线。这既可以帮助减少中断的直接影响,也可以加速重新获得完全可达性所需的更改的传播。如果AS 200ofISP 2变得几乎不可用,尽管以某种方式保持与 toSite B以及BGP sessionto 的连接性ISP 1,则任何目的地ISP 2到达的流量都AS 1000将简单地转发到AS 200并从那里加入绿色标记的路径。

当然,如果这些场景中的任何一个被颠倒并且故障发生在ISP 1侧面,那么反映前面概述的那些效果应该会出现,并且流量应该同样开始沿着蓝色标记的路径流动。

至于设计的其余部分,将其与DNS round-robin在两个站点之间分发初始请求相结合应该是可能的,甚至是有益的该设置还意味着tolerate任何内部组件的故障,包括整个站点停电。

所以。认为这应该可以正常工作吗?有什么理由不应该这样做?我错过了什么大问题吗?看到任何可能的改进吗?或者甚至有一个更好的选择?正如他们所说,我全神贯注:)

3个回答

您对外部 BGP 广告的考虑是合理的,尽管正如其他人所建议的那样,我强烈建议您与您的提供商一起运行 BGP,以便在失败时自动撤回路由。还要考虑需要使站点脱机进行维护,或者将来需要添加、移动或迁移提供程序。

话虽如此,另一种设计如何:

  1. 与其取消聚合您的前缀并进一步污染已经膨胀的 DFZ,不如向两个提供商宣传相同的 /22。(搜索:BGP任播)

  2. 与其将第 2 层域扩展到两个物理上独立的站点,不如使用 OSPF 和 BFD 之类的东西路由每个链接,以便您的故障转移更快(亚秒级),让您的站点出现裂脑不会影响任何事情,当您将其中一个站点移动到距离第 2 层邻接太远的位置时,您的设计仍将有效。

  3. 使用相同的 VIP 配置您的两个 BIG-IP LTM,这样无论您的上游服务提供商发生了什么,这两个 LTM 都能正常工作。考虑从相邻站点使用辅助服务器池,以便在后端维护的情况下,LTM 可以愉快地继续将客户端发送到另一个站点。VIP 子网将被通告到 OSPF/BGP(最好来自 BIG-IP),使本地 LTM 成为来自任一 ISP 网关的流量的首选目标。在维护窗口期间,此路由将被撤回,但 BIG-IP 将被邻居站点接管(搜索:F5 Route Health Injection)

  4. 我在 LTM 和 ISP 网关之间看不到任何有状态的(除非 ISP 网关本身是),因此返回流量可以通过最近的 ISP 网关离开,而不管它来自何处。对于奖励积分,如果您从每个提供商(仅限他们的客户和本地对等方)获取有限的 BGP 馈送并在您的 Internet 网关之间共享该馈送,您将为这些客户提供最佳性能。

BGP 不必是一个复杂的野兽,就像任何设计一样:好的文档应该解决对未来可支持性的任何担忧。如果您的管理层不支持正确构建它,那么我建议 SaaS 不是他们应该进入的领域。外包给像 AWS 这样的玩家,让它成为别人的问题™

关于可用性,根据您的 SLA 要求,通过调用 ISP 并请求删除路由来从一个 ISP 手动故障转移到另一个 ISP 听起来像是一个超出 SLA 的过程。BGP 路由不像内部路由协议那样快速变化,这让我担心变化需要多长时间。此外,如果 ISP 遇到问题,那么现实中他们会有工作人员及时满足您的要求,这对我来说听起来也很冒险。

根据 SLA,我希望在 SiteA 和 SiteB 上同时拥有 ISP1 和 ISP2。然后我想用两个 ISP 运行 BGP。这将允许自动故障转移。但是,听起来我们都希望看到的选项超出了范围/预算。

我只是建议使用诸如千眼.com 之类的东西来监控 BGP 路径。您可以将其设置为在路径更改时向您发送电子邮件警报,这可以让您在 ISP 向您报告此问题之前检测到问题。

您提供的图表看起来像是 Cisco ASR,这让我想到了 ASR1001 或类似的东西。如果是这样,那是与您的服务提供商一起运行 BGP 的绝佳设备。我看到您可以在其上运行 BGP 的唯一其他设备(不确定它的工作情况)是 F5。这是出于保持低成本的心态。

这里的独特挑战是每个位置都有不同的 ISP,并尝试为 SaaS 的入站流量提供一定程度的冗余。

另一个想法是仅广告来自一个 ISP 的一个前缀和来自另一个 ISP 的另一个前缀。在 F5 的每个前缀中设置一个 VIP,在它们各自的位置前缀 A 与 ISP1,然后在站点 B 与 ISP2 前缀 B。然后使用 DNS 使客户端失败或将客户端负载平衡到您的 SaaS。如果您将 DNS 条目上的 TTL 值设置为 30 秒,这可能几乎是自动的。DynDNS 有一个负载平衡选项和一定的健康检查(服务器是否启动,如果没有将 DNS 更改为备用 IP)。此外,您可以为 DynDNS 的 API 编写自己的健康检查,并在您的脚本检测到会执行更改 DNS 的命令的事件时以这种方式进行更改。我认为进行 DNS 更改比打电话给您的 ISP 以从广告中删除 BGP 路由要快得多,因为 ISP'

只要您完全联网并且您可以回程到达一个站点但目的地为另一个站点的自己的流量,当然,它会起作用。因此,如果您的对等会话与任一 ISP 断开,您的更具体的会话将被撤回(您希望!)并且流量将流向另一个 ISP 上的聚合路由,然后您可以将流量回传到另一个站点。

我看到的最令人沮丧的问题是广告不可达路由的网络提供商。通过内部的一些错误或其他方式,他们向对等方宣布了一条他们实际上无法到达其网络内部的路由。对于这些情况,没有太多解决方法。

至于 F5 通过接收回复流量的接口将回复流量交回,大多数负载均衡器都可以做到这一点。我不知道 F5 是否会,但我知道 Citrix Netscaler 会和 A10 会,所以它似乎是一个相当标准的功能。