我有一个 OpenVPN 服务器,当用户连接到服务器时,他们会被分配一个 192.168.1.20-25 的 IP。我希望在这些 IP 回复以及断开连接时收到警报。
到目前为止,我可以使用以下代码来实现这一点,正如您所看到的,它没有考虑何时应该发送电子邮件,因为它只会循环并群发电子邮件而不进行任何忽略。
#!/bin/bash
HOSTS_ARRAY=("192.168.1.20" "192.168.20.21" "192.168.20.22" "192.168.20.23" "192.168.20.24" "192.168.20.25")
COUNT=4
for myHost in "${HOSTS_ARRAY[@]}"
do
count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | a$
if [ $count -eq 1 ]; then
echo " VPN User Connected!" | mail -s "VPN User Connected" [email protected]
echo "Host : $myHost Connected! at $(date)"
else
echo " VPN User Disconnected!" | mail -s "VPN User Disconnected" [email protected]
echo "Host : $myHost Disconnected! at $(date)"
fi
done
答案1
尝试使用 server.conf 中的 learn-address 指令,而不是持续运行脚本。这将允许您在新用户连接和断开连接时运行脚本。
该脚本使用以下参数调用:
$1:添加、更新、删除
$2:客户端 IP 地址
$3:证书上的通用名称
唯一的问题是,似乎只有在用户断开连接后清理时,脚本才会使用 delete 运行,并且服务器需要使用 script-security 2 运行。您还需要确保服务器以任何用户身份运行,都可以执行该脚本(检查 server.conf 中的用户和组指令)