我正在运行多个 openvpn 实例,每个实例都连接到不同的服务器,我们假设有 3 个,我正在使用一个简单的 php 脚本和这个命令
system('openvpn config1');
system('openvpn config2');
system('openvpn config3');
配置文件包含守护进程和route-nopull,最后我将tun0 tun1 tun2启用,当我想使用tun0时我使用
curl_setopt($curlh, CURLOPT_INTERFACE, "tun0");
现在第一个问题是,如果界面有问题,curl 超时将不起作用!它会永远挂在那里,直到我手动中止它
第二个问题是,如果连接由于某种原因失败,即使 openvpn 也不会终止接口,我该如何检查连接是否一直处于活动状态(keepalive 10 60 没有起作用,我不知道为什么)
我不是 openvpn 专家,他们的手册中也没有很多信息,所以我如何才能始终确保特定接口上的连接正常工作,如果不是,我不想终止该 openvpn 实例,以及使用 CURLOPT_INTERFACE 时 curl 超时的解决方案是什么
答案1
我能想到的最简单的方法是检查链接状态。例如:
$ ip link show tun0
11: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UNKNOWN mode DEFAULT qlen 500
link/none
如果该接口处于活动状态,您将UP
在这些 <> 中看到。您还可以检查是否有与该接口关联的活动路由。没有活动路由意味着该接口将处于未使用状态。
$ ip ro show dev tun0
default via x.x.x.x dev tun0 scope link metric 1
最正确的方法是启用 openvpn 守护进程上的管理接口,并直接询问其链接状态并读取任何错误。管理界面的文档可以在 openvpn 网站上找到。
至于 curl 超时,我不知道为什么会这样。如果最新版本可以重现此问题,您可能需要使用 PHP 为其打开一个缺陷。
答案2
ping -c 1 whoami.ultradns.net
返回您的 IP 地址(您的客户端)。这样可以非常轻松地查看您的 VPN 是否处于活动状态/您通过哪个 VPN 服务器进行连接(例如在国外)。
无需配置。