持续检查 OpenVPN 连接状态

apo*_*poc 4 linux vpn script openvpn

我正在尝试检查并显示状态(已连接/未连接)和 OpenVPN 连接的服务器主机名/cn,该连接应该在每次启动时连接。

现在我发现在/var/log/syslog连接中已记录,我可以用它来确定是否Initialization Sequence Completed已记录并从[brimstone] Peer Connection Initiated with [AF_INET]1.2.3.4:1234.

获取此日志,我可能会检查Initialization Sequence Completed,这意味着我已连接和主机名,我只想要不同的脚本。

现在我的问题是我目前不知道连接是否仍然存在和/或我是否连接到另一台服务器。我可以定期检查日志的变化,但这对于一个相当基本的任务来说似乎有点极端。

我如何检查我的 OpenVPN 的连接状态,如果连接得到服务器主机名/cn?

Mar*_*iae 5

您不需要这样做,但您仍然可以通过检查您明显的外部 IP 地址来做到这一点:以下命令

   wget 216.146.38.70:80
Run Code Online (Sandbox Code Playgroud)

查询 checkip.dyndns.org 以获取您的外部 IP。您应该能够通过这种方式识别连接的当前状态。

或者,您可以检查您的路由表:

   $ ip route show
   0.0.0.0/1 via 10.8.0.17 dev tun0 
   default via 192.168.73.1 dev eth0  proto static 
   10.8.0.0/24 via 10.8.0.17 dev tun0 
   10.8.0.17 dev tun0  proto kernel  scope link  src 10.8.0.18 
   128.0.0.0/1 via 10.8.0.17 dev tun0 
   192.168.73.0/24 dev eth0  proto kernel  scope link  src 192.168.73.74  metric 1 
   IP.Address.Of.Your.OpenVPN.server via 192.168.73.1 dev eth0 
Run Code Online (Sandbox Code Playgroud)

(这是针对路由的 OpenVPN,但这无关紧要)。重要的一行是最后一行:如果你有这样的东西,你的数据包将通过 OpenVPN 路由。

您还可以使用一个工具,例如mtrwhichpings并且traceroutes同时(并且连续!!)给定的 IP 地址,例如:

   mtr www.debian.org
Run Code Online (Sandbox Code Playgroud)

如果 OpenVPN 已启动,您将看到通过隧道(tun0tap0)而不是通过常规网关路由的数据包。

但是,正如我在开头所说,您不需要这样做:OpenVPN 为您提供了一种机制来持续检查连接状态,并在需要时重新启动它:

--keepalive nm

一个帮助指令,旨在简化服务器模式配置中 --ping 和 --ping-restart 的表达。例如,--keepalive 10 60 扩展如下:

 if mode server:
   ping 10
   ping-restart 120
   push "ping 10"
   push "ping-restart 60"
 else
   ping 10
   ping-restart 60
Run Code Online (Sandbox Code Playgroud)

您可以使用、、、、、、keepalive或 中的任一个或任何合适的组合来自动控制连接状态。pingping-restartping-exit