情况:我在家里有一个私人 VPN 服务器,它对互联网开放,以便某一群人可以连接到它(只允许密钥对身份验证)。
如何查看当前哪些客户端连接到我的 VPN 服务器?
我已经尝试 ping 主机,但似乎有些(实际上是大多数)主机阻止了 ICMP 请求,因此总是失败。当然,我可以/etc/openvpn/openvpn.log
每次都检查一下,但这不太方便,而且绝对不适合通过电子邮件发送给我的状态报告。
备注:我正在使用OpenVPN 2.2.1 x86_64-linux-gnu
。
答案1
你可以用一个小的期望脚本来完成这个任务:
/usr/bin/期望 生成 telnet 本地主机 7505 设置超时 10 预计 ”OpenVPN管理界面“ 发送“状态 3\r” 期望“结束” 发送“exit\r”
并运行它(例如)
当为真时;执行 ./openVPNUserlist.sh |grep -e ^CLIENT_LIST; 睡眠 1; 完成
另外,在您的 server.conf 文件中,添加以下行
管理本地主机 7505
您需要安装的软件包:
telnet 期望
将 server.conf 中的超时更改为您需要的值:
保持活动 10 60= 每 10 秒 ping 一次客户端,1 分钟后视为断开连接。
答案2
我在这个文件夹中找到了大量的 VPN 日志:
ls /var/log/openvpn/
对我来说,那里有两个文件,名称如下:
Arbitary-Name-VPN.log
status-Arbitary-Name-VPN.log
第一个文件显示了一段时间内发生的所有 vpn 连接的日志,第二个文件(状态-......)显示了当前谁处于连接状态。
答案3
简单的方法是:
添加
status /var/log/openvpn-status.log
在您的 /etc/openvpn/server.conf 中并重新启动 vpn 服务器。
使用以下命令从日志中查看已连接的客户端。
while true; do cat /var/log/openvpn-status.log | sed -n '/OpenVPN CLIENT LIST/,/ROUTING TABLE/p' | tail -n+4 | sed "s/ROUTING TABLE//g"; sleep 4s; done
这将每 3 秒更新一次客户端列表。
答案4
如果您希望在单个 bash 脚本中完成它,我采用了@GoodbyeKitty 的回答并制作了一个脚本。
#!/bin/bash
function management_server() {
/usr/bin/expect <(cat << EOF
spawn telnet localhost 7505
set timeout 10
expect "OpenVPN Management Interface"
send "status 3\r"
expect "END"
send "exit\r"
EOF
)
}
while true
echo "Checking IPs"
do management_server | grep -e ^CLIENT_LIST
sleep 30
done