列出已连接的 VPN 客户端

列出已连接的 VPN 客户端

情况:我在家里有一个私人 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

相关内容