![单服务器中的虚拟 IP](https://linux22.com/image/782528/%E5%8D%95%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%AD%E7%9A%84%E8%99%9A%E6%8B%9F%20IP%20.png)
我想进行如下设置
我有两个 ISP,它们具有不同的静态 IP,它们在具有两个 NIC 的单个服务器上终止,为这个 NIC 创建虚拟 IP,想将我的本地 Web 服务绑定到这个虚拟 IP,这样如果任何一个 ISP 发生故障,都不会影响我的 Web 服务器从外部访问。我该如何使用 Linux 来实现这一点。
答案1
对于单个 IP 地址,您无法按照您设想的方式进行操作。
为了在 IP 地址级别实现此功能,你需要有一个自治系统编号 (ASN)并运行 BGP 动态路由协议,该协议会告诉世界上所有的互联网主干路由器如何到达您的虚拟 IP。
不幸的是,单个 IP 地址实际上太小,无法以这种方式进行动态路由。大多数 ISP 不会接受来自家庭/小型企业客户的传入 BGP 公告,即使您越过了这一障碍,Internet 的路由器也会忽略单个 IP 地址的 BGP 公告。为了保持路由性能,并且不让骨干路由器的路由表增长到荒谬的长度,骨干路由器将只处理更大的 IP 地址空间块。
要真正拥有这样的虚拟 IP,您需要是一个规模相当大的组织,并拥有大量(/24 即可)公共 IP 地址。能够相互接受其他组织的流量并通过您的网络链接进行路由也会有所帮助。
当然,如果您的两个 ISP 都是同一个互联网骨干网提供商的客户,并且您愿意协商并支付定制解决方案的费用,那么可能会安排一些事情……但对于大多数人来说,这将浪费大量的金钱和精力,而通过选择不同的方法可以更轻松地实现这一目标。
为单个服务器实施 ISP 故障转移的更现实策略是使用任何可用的动态 DNS 服务。您将为每个上行链路分配一个公共(不一定是静态)IP 地址,并使用 DDNS 客户端更新 Web 服务器完全合格主机名的 DNS A 记录,以指向当前活动的 IP 地址。
如果上行链路中断,您只需更新 A 记录,等待旧记录的生存时间到期(大多数动态 DNS 服务将 TTL 保持在很短的水平 - 比如 60 秒左右),然后再次访问。当然,这样做会导致任何现有连接断开,因为您的 IP 地址会在故障转移时发生变化。但是,如果您的 ISP 进行任何状态防火墙,即使您有虚拟 IP,故障转移时也会发生这种情况。
或者,您可以从任何主要的云运营商那里租用云服务器,让他们处理冗余网络链接和所有复杂性 - 以他们的规模,他们几乎必须理所当然地这样做。