我有两个带有 carp 的 openbsd nat/防火墙盒,用于故障转移/高可用性。为确保我计划在这些盒子上运行的 OpenVPN 也能正常进行故障转移,最佳做法是什么?
答案1
OpenVPN 不支持两个不同的守护进程实例之间任何类型的状态共享,因此,您无法实现无缝故障转移。
但是,您始终可以配置客户端以妥善处理服务器故障。 如果这种冗余满足您的需求,您可以通过结合 OpenVPN 实际具有的两个功能来实现它:
1) 与服务器断开连接后自动重试,并且 2) 每次尝试时从预定义列表中随机选择一台服务器进行连接。
基本思路是,您可以运行两个(或三个或更多)OpenVPN 服务器,并将其所有 IP 地址或主机名添加到您的 VPN 客户端配置中。此外,客户端应快速重试,以尽量减少用户遇到的停机时间。当一个服务器发生故障时,客户端会轮换到其连接列表中的下一个地址,并且连接会在很短的时间内重新建立。
文档可在以下位置获取:
具体来说,您可能希望查看以下配置选项:
- 偏僻的
- 重试連線
- 最大连接重试次数
- 远程随机
- ifconfig-pool-persist
您应该能够在客户端将这些选项添加到您可能已经使用的其他客户端/服务器选项的任意组合之上。只需记住将“connect-retry”保持在较低水平,将“connect-retry-max”保持在较高水平(甚至可能是无限的),它应该可以很好地工作。
答案2
不会丢失当前会话?
无论如何,您始终可以使用 ifstated(8) 来感知 CARP 降级并启动 OpenVPN 服务器。
实际上,我不知道 MASTER 和 SLAVE 同时运行 OpenVPN 服务器是否会出现任何问题。
答案3
现在 openvpn 具有高可用性故障转移模式 -https://openvpn.net/vpn-server-resources/setting-up-high-availability-failover-mode/