我有一个 OpenVPN 服务器,我想让它记录每个用户的带宽。我希望记录和bytes_send
。bytes_received
这些信息存储在 OpenVPNstatus
文件中,但我无法轻松读取该文件,因为它总是在变化。
我可以使用client-disconnect
脚本,但我该如何将使用的带宽传递给它?我宁愿不使用它,因为带宽只会在客户端断开连接时更新。如果他从不这样做怎么办?对,那么他可以使用任意数量的带宽。
那么,我如何记录每个客户端使用的带宽?
答案1
你可以为每个用户设置 iptables 规则:
iptables -A FORWARD -i tun0 -s 10.0.0.1 -j ACCEPT
iptables -A FORWARD -o tun0 -d 10.0.0.1 -j ACCEPT
iptables -A FORWARD -i tun0 -s 10.0.0.2 -j ACCEPT
iptables -A FORWARD -o tun0 -d 10.0.0.2 -j ACCEPT
...
并定期(例如每 15 分钟)运行以下命令收集统计信息:
iptables -nvxL FORWARD > stats
并通过以下方式清除它们:
iptables -Z
每次执行后,您都必须解析统计文件并将其保存到数据库。
您可能想要为往返于隧道设备的流量创建单独的链,并让所有 vpn 流量首先通过它。然后,您将仅解析该隧道的统计信息。
还请记住,与使用 conntrack 模块并接受属于已建立的相关连接的所有数据包的情况相比,此解决方案将对您的 CPU 造成额外的开销。