如何记录 OpenVPN 使用的带宽?

如何记录 OpenVPN 使用的带宽?

我有一个 OpenVPN 服务器,我想让它记录每个用户的带宽。我希望记录和bytes_sendbytes_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 造成额外的开销。

相关内容