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?
您不需要这样做,但您仍然可以通过检查您明显的外部 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 路由。
您还可以使用一个工具,例如mtr
whichpings
并且traceroutes
同时(并且连续!!)给定的 IP 地址,例如:
mtr www.debian.org
Run Code Online (Sandbox Code Playgroud)
如果 OpenVPN 已启动,您将看到通过隧道(tun0
或tap0
)而不是通过常规网关路由的数据包。
但是,正如我在开头所说,您不需要这样做: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
或 中的任一个或任何合适的组合来自动控制连接状态。ping
ping-restart
ping-exit