У меня есть сервер OpenVPN, и я хочу, чтобы он регистрировал пропускную способность каждого пользователя. Я хочу записать bytes_send
и bytes_received
. Это хранится в OpenVPN. status
файл, но я не могу легко прочитать этот файл, так как он всегда меняется.
Я мог бы использовать client-disconnect
скрипт, но как передать ему используемую полосу пропускания? Я бы предпочел не использовать это, поскольку пропускная способность будет обновляться только при отключении клиента. Что, если он просто никогда этого не сделает? Верно, тогда он может использовать столько пропускной способности, сколько захочет.
Итак, как я могу зарегистрировать полосу пропускания, используемую каждым клиентом?
вы можете настроить правила 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'ed через него. тогда вы будете анализировать статистику только для этого туннеля.
также имейте в виду, что это решение вызовет дополнительные накладные расходы на ваш процессор по сравнению с ситуацией, когда вы используете модуль conntrack и принимаете все пакеты, принадлежащие установленным связанным соединениям.