我使用的是 Debian 7.8 Wheezy,并且已经从稳定存储库安装了 openvpn。
我想为另一个用户(没有很高的计算机知识)设置一个系统,如果我配置的主服务器 ( /path/to/one.ovpn
) 由于某种原因发生故障,我有一个备份服务器 ( /path/to/two.ovpn
) 可以自动连接,作为备份。
也许我给他们十个 .ovpn 文件(例如使用来自VPN 门),尝试真正确保用户安全(假设其中一个有效),而无需他们手动执行任何操作。
默认的 openvpn 配置或与 Debian 兼容的第三方 GUI 有没有办法可以实现这一点?
或者也许是一个脚本? (然后我可以将其设置为在启动时运行。)
答案1
我认为你现在能做的最好的事情就是正确设置 OpenVPN 以通知它有第二个服务器,如下所示:
实施负载平衡/故障转移配置客户端
OpenVPN 客户端配置可以参考多个服务器进行负载平衡和故障转移。例如:
remote server1.mydomain
remote server2.mydomain
remote server3.mydomain
将指示 OpenVPN 客户端按顺序尝试与 server1、server2 和 server3 建立连接。如果现有连接中断,OpenVPN 客户端将重试最近连接的服务器,如果失败,将移至列表中的下一个服务器。您还可以指示 OpenVPN 客户端在启动时随机化其服务器列表,以便客户端负载按概率分布在服务器池中。
remote-random
如果您还希望 DNS 解析失败导致 OpenVPN 客户端移动到列表中的下一个服务器,请添加以下内容:
resolv-retry 60
60 参数告诉 OpenVPN 客户端尝试解析每个远程 DNS 名称 60 秒,然后再转到列表中的下一个服务器。
服务器列表还可以引用在同一台计算机上运行的多个 OpenVPN 服务器守护程序,每个守护程序侦听不同端口上的连接,例如:
remote smp-server1.mydomain 8000
remote smp-server1.mydomain 8001
remote smp-server2.mydomain 8000
remote smp-server2.mydomain 8001
如果您的服务器是多处理器计算机,则从性能角度来看,在每台服务器上运行多个 OpenVPN 守护程序可能会很有优势。
OpenVPN 还支持引用 DNS 名称的远程指令,该名称在域的区域配置中具有多个 A 记录。在这种情况下,每次域名解析时,OpenVPN 客户端都会随机选择一条 A 记录。
来源: https://openvpn.net/index.php/open-source/documentation/howto.html#loadbalance
答案2
没有足够的代表发表评论,但我想根据这一页,可以为每个remote
条目指定协议。
如何设置我的服务器故障转移配置文件?
您可以向 OpenVPN 提供要连接的服务器列表。连接失败时,OpenVPN 将轮换列表,直到找到响应的服务器。例如,配置文件中的以下条目将首先尝试通过 UDP 端口 1194 连接到服务器 A,然后通过 TCP 端口 443 连接到服务器 A,然后与服务器 B 重复该过程。OpenVPN 将继续重试,直到成功连接或达到连接超时,可以在首选项中进行配置。
remote server-a.example.tld 1194 udp remote server-a.example.tld 443 tcp remote server-b.example.tld 1194 udp remote server-b.example.tld 443 tcp
答案3
参见<connection>
https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage。这并不完全是您正在寻找的内容,但它很接近并且可能对其他人有帮助。
<connection> 定义客户端连接配置文件。客户端连接配置文件是一组 OpenVPN 选项,描述如何连接到给定的 OpenVPN 服务器。客户端连接配置文件在 OpenVPN 配置文件中指定,每个配置文件均由 <connection> 和 </connection> 括起来。 OpenVPN 客户端将依次尝试每个连接配置文件,直到成功连接。
--remote-random 可用于最初“打乱”连接列表。
以下是连接配置文件使用的示例:
客户端开发屯
<连接>远程198.19.34.56 1194 udp</连接>
<连接> 远程 198.19.34.56 443 tcp </连接>
<连接>远程198.19.34.56 443 tcp http代理192.168.0.8 8080 </连接>
<连接> 远程 198.19.36.99 443 tcp http 代理 192.168.0.8 8080 </连接>
persist-key persist-tun pkcs12 client.p12 remote-cert-tls server verb 3 首先,我们尝试使用 UDP 连接到 198.19.34.56:1194 的服务器。如果失败,我们将尝试使用 TCP 连接到 198.19.34.56:443。如果也失败,请尝试使用 TCP 通过 HTTP 代理(192.168.0.8:8080 到 198.19.34.56:443)进行连接。最后,尝试使用 TCP 通过同一代理连接到位于 198.19.36.99:443 的服务器。
以下 OpenVPN 选项可以在 <connection> 块内使用:
绑定、连接重试、连接重试最大、连接超时、显式退出通知、浮动、片段、http 代理、http 代理选项、link-mtu、本地、lport、mssfix、mtu-disc、 nobind、port、proto、remote、rport、socks-proxy、tun-mtu 和 tun-mtu-extra。
存在默认机制,用于指定应用于所有配置文件的选项。如果上述任何选项(remote 除外)出现在 <connection> 块之外,但在具有一个或多个 <connection> 块的配置文件中,则该选项设置将用作 <connection> 的默认设置配置文件中紧随其后的块。
例如,假设 nobind 选项放置在上面的示例配置文件中,靠近文件顶部的第一个 <connection> 块之前。效果就好像在其下面的所有 <connection> 块中都声明了 nobind 一样。