这是我第一次在这里提问,我想知道是否可以将两个不同的 ISP 公共 IP 连接到单个系统以实现高可用性?
例如,如果我们的 ISP 1 离线,则第 2 个 ISP 将可用,就像谷歌和 YouTube 有不同的公共地址一样,我只是不知道在哪里配置它。
我们目前正在使用 fortinet 300D。
答案1
是的,但是当其中一个系统出现故障时,您如何实现这一点将影响用户体验。
最简单的方法是,您可以在面向外部的 DNS 中输入 2 个地址 A 记录,然后用户将被发送到这两个地址(称为循环 DNS 负载平衡)。这不是特别好,因为这意味着当其中一个地址不可用时,大约一半的用户连接将失败。这也是低效的,因为一个 ISP 的客户端可能会通过另一个 ISP 发送,或者通过具有不太理想的路由的 ISP 发送。客户端应用程序和 DNS 缓存可能会延迟客户端将地址发送到工作系统,因此故障客户端往往会在相当长的时间内失败,而不会进行干预以重新启动应用程序和刷新 DNS 缓存。如果您将 DNS TTL 保持在较短的时间内并且不介意短暂的中断,则可以在该地址的服务不可用时手动禁用该地址,但是用户体验仍然会是短暂的失败。
为了使这一过程更加智能,您需要让外部系统检查您的服务是否可用,并自动更新 DNS 记录以将用户引导至正常运行的系统。进一步的改进是将 DNS 系统直接连接到后端监控,以将用户引导至负载较少的系统。尽管实现了自动化,但仍然会存在一些用户体验,即某些用户仍会看到故障。
所有这些都不是防火墙所特有的,它只是向两个 ISP 提供两个外部接口。请注意,无法通过 ISP2 路由 ISP1 的流量或反之亦然,因为互联网路由只会丢弃此流量。您不能“交叉连接”两个 ISP 并期望一切正常。
大型企业通常不会仅依赖 DNS 轮询。相反,它们将转移到自己的网络(或合作伙伴网络),并让 ISP 通过称为对等的系统路由到其网络。企业网络可能有许多对等体,由分布在区域到全球范围内的多个 ISP 组成。通过交换路由信息,客户端从其 ISP 通过当前正在运行的 ISP 路由到企业网络。当网络无法访问时,这仍然会导致短暂中断,但是这些系统提供了出色的冗余,即使在链接中断期间也可以访问企业网络。
其他更复杂的解决方案也是可行的,但超出了 StackExchange 答案的范围。例如:
- 在高度可靠的系统(Azure、AWS 等)上放置负载均衡器,并让其将流量转发到“正常运行”的受监控地址。
- 使用基于 VPN 的对等体(有时称为隧道代理)获取独立于 ISP 的外部 IP,并允许 VPN 隧道跨越两个 ISP
- 将整个系统移至高可用性位置
答案2
从适合您需求的提供商处购买虚拟机(可能是 cloudflare 级别?),在那里设置虚拟防火墙,并从要绑定并用于虚拟路由的内部部署站点建立多个 vpn(考虑 MPTCP 或类似技术)。
内部部署系统的互联网连接将是冗余的,您可以根据需要拥有任意数量的链接(不同的提供商、多种技术)以及每个链接到虚拟防火墙的 vpn。
您将通过托管虚拟防火墙从内部系统发布所需的服务。
根据可用性要求,您可以添加内部广域网链接、虚拟防火墙带宽或为虚拟机托管选择更可靠的提供商。