通过 OpenVPN 进行绑定,实现容错

通过 OpenVPN 进行绑定,实现容错

我有两个 OpenVPN 服务器,还有两台连接到它们的机器。

服务器1 openvpn地址:10.158.1.1
服务器2 openvpn地址:10.158.2.1

机器 1 在服务器 1 上的地址为 10.158.1.11,在服务器 2 上的地址为 10.158.2.11。
机器 2 在服务器 1 上的地址为 10.158.1.12,在服务器 2 上的地址为 10.158.2.12。

一个简单的基于文本的图表如下所示:

10.158.1.11(机器1)<-------(10.158.1.1 服务器1)-------> 10.158.1.12(机器2)
10.158.2.11(机器1)<-------(10.158.2.1 服务器2)-------> 10.158.2.12(机器2)

此时一切正常,我可以从 1.12 ping 1.11,从 2.12 ping 2.11,依此类推...

因此,机器可以通过 openvpn 服务器的两个 VPN 接口互相访问(openvpn 服务器中启用了客户端到客户端)

我想要实现的是拥有一个绑定接口,让一个 IP 可以与机器相互通信。

例如:机器 1 为 10.159.0.1,机器 2 为 10.159.0.2。

尝试将 tap10 和 tap20(分别是 openvpn 接口)置于绑定模式 active-backup,但如果我使用 mii,显然它无法感知 vpn 接口是否关闭,因为如果链接关闭,openvpn 不会关闭 tap 接口。
还尝试使用 arp 监控,但绑定认为所有接口都已关闭,因为当接口被奴役时 ARP 不起作用。尝试在 openvpn tap 上使用 GRE 隧道(更具体地说,是 GRETAP,而不是只有 l3 的常规 GRE),但它们就像普通的 TAP 接口一样失败了。

PS:机器 2、服务器 1 运行 Debian 9,服务器 2 和机器 1 运行 Debian 8。
在 Debian 8 系统上,使用反向移植的 2.4 OpenVPN。因此 OpenVPN 版本匹配。

有什么想法吗?
感谢您的意见!

答案1

首先,我会这样回答:你的策略行不通。你不会在这些接口上进行绑定。当你进入路由时,你已经放弃了绑定的概念,现在进入了高级路由技术领域,如 BGP 或负载平衡 VPN 服务器本身。但是,在不知道你的需求的情况下,我无法提出非常可靠的建议。

BGP 很可能是解决外部网络需求的潜在解决方案,因为它可以将多个共同位置的 ISP 路由到一起,以实现“互联网”链路冗余。您甚至可以使用它来跨地理区域动态路由并提供地理多样化的可用性。您可能不需要这样做,但如果您有两个站点受您控制,用于同一目的,您可能会考虑这样做。

如果您想要为 OpenVPN 创建本地共置服务器集群,以代替或补充高级路由,您将需要使用有状态(应用程序)负载平衡器进行主动/主动集群,或利用带有 Pacemaker 的 Linux HA 来管理故障转移集群中的资源。

这两条建议通常都过于复杂,无法通过这种媒介得以完成,通常旨在作为指示,帮助您重建策略。

最后,我讨厌推荐产品;它们不会随着时间而改变。然而,在撰写本文时,“PFSense”是一款出色的开箱即用产品,可帮助您将 OpenVPN 集群到 HA 对中并管理 BGP 流量。如果您对细节不甚了解,并且想要一个可行的概念或产品,这可能会对您有所帮助。即使在虚拟机中,该防火墙设备也只需几分钟即可完全发挥作用。

相关内容