К этому добавить бы ограничение скорости по IP download/upload
Новый скрипт (февраль 2011)
Старую версию перенес сюда.
Для работы этого скрипта необходимы установленные и настроенные пакеты lighttpd, php и cron.
Для чего этот скрипт:
Этот скрипт предназначен только для подсчета трафика. Также в нем существует возможность автоматически отключать интернет пользователям, которые превысили лимит трафика за месяц.
Настройка подсчета трафика
1.Создаем директории и необходимые файлы
распаковываем содержимое statistic.zip в DocumentRoot lighttpd (/opt/share/www/)Code:touch /usr/local/sbin/lst/ip_piring.lst touch /usr/local/sbin/makestat touch /usr/local/sbin/makefilter chmod +x /usr/local/sbin/makestat chmod +x /usr/local/sbin/makefilter
2.Создаем таблицу пользователей
в этот файл (/usr/local/etc/ethers) вписываем MAC и IP адреса пользователей для которых хотим открыть доступ к интернету и считать статистикуCode:touch /usr/local/etc/ethers
Пример:
После последнего пользователя необходимо ставить перевод строки.Code:00:00:1c:1c:1a:00 192.168.1.2 00:00:11:11:11:00 192.168.1.11 00:00:1a:1a:1a:00 192.168.1.15
3.Создаем файл с пиринговыми сетями провайдера
У моего провайдера есть пиринговые зоны для которых я хочу отдельно считать статистику
В файл /usr/local/sbin/lst/ip_piring.lst пишем пиринговые зоны провайдера.
Мой файл выглядит так (провайдер Домолинк-Тамбов):
4.Редактируем crontabCode:78.132.128.0/17 213.135.128.0/19 193.203.60.0/22 93.186.96.0/20 193.33.62.0/23 91.202.20.0/22 193.34.12.0/22 82.179.144.0/20 195.19.96.0/19 178.75.64.0/18
Добавляем строчку
Будьте внимательны: если у вас имя пользователя отличается от root и DocumentRoot отличается от /opt/share/www/, то пропишите свои значения.Code:4-59/5 * * * * root cd /opt/share/www/statistic/ && /opt/bin/php ./billing.php > /dev/null 2>&1
5.Редактируем файл /usr/local/sbin/post-firewall
Добавляем в него
- ограничение доступа в интернет по mac и ip.Code:#!/bin/sh /usr/local/sbin/makefilter
Фильтр работает независимо от того подключен или не подключен у вас жесткий диск/флешка.
6.Редактируем файл /usr/local/sbin/makefilter
код скрипта в прикрепленном файле
7.Добавляем цепочки для подсчетата трафика:
В файл /usr/local/sbin/post-boot добавим строчки:
8.Редактируем файл /usr/local/sbin/makestatCode:#!/bin/sh /usr/local/sbin/makestat
код скрипта в прикрепленном файле
Сделаем файлы исполняемыми
Code:chmod +x /usr/local/sbin/post-firewall chmod +x /usr/local/sbin/post-bootМожно запустить подсчет трафика не перезагружая роутер запустив:Code:flashfs save && flashfs commit && flashfs enableДополнительноCode:/usr/local/sbin/makefilter /usr/local/sbin/makestat
Если у вас не безлимитный трафик и необходимо отключать интернет пользователям при достижении определенного лимита внешнего трафика, делаем следующие:
Разархивируйте limit.php (из архива limit.zip) в каталог со статистикой (/opt/share/www/statistic/).
В каталоге billing (/opt/share/www/statistic/billing) создайте файл limit
с таким форматом
1)ip-адрес пользователя; 2)лимит входящего трафика; 3)лимит исходящего трафика; 4)суммарный лимит трафика.
все лимиты задаются в мегабайтах
например:
Все лимиты задаются целыми числами.Code:192.168.100.97 1750 275 2010
пользователю дано 1750МБ входящего, 275МБ исходящего трафик и 2010МБ суммарного трафика (входящий+исходящий). При достижении пользователем хотя бы одного из ограничений он будет отключен.
В этот файл можно не вписывать всех пользователей, если мы не хотим задавать для них лимит.
+ Необходимо настроить кроны:
В кронтаб добавить:
Будьте внимательны: если у вас имя пользователя отличается от root и DocumentRoot отличается от /opt/share/www/, то пропишите свои значения.Code:*/5 * * * * root cd /opt/share/www/statistic/ && /opt/bin/php ./limit.php > /dev/null 2>&1 1 0 1 * * root /user/local/sbin/makefilter
Первого числа каждого месяца все пользователи, заблокированные по лимиту трафика, будут разблокированы.
Дополнительно у меня работает nshaper http://wl500g.info/showpost.php?p=161206&postcount=138
сам скрипт у меня находится здесь /user/local/sbin/nshaper чтоб работать независимо от подключенной флешки/жесткого диска
В настройках nshaper необходимо прописать путь к уже созданным файлам
В /usr/local/sbin/post-firewall добавить строчкуCode:# zone IP files search path ZONE_PATH="/usr/local/sbin/lst/ip_%ZONE%.lst"
для сохранения настроек выполнитьCode:/usr/local/sbin/nshaper start
Code:flashfs save && flashfs commit && flashfs enable && reboot
Немного о работе скрипта:
Статистику смотрим http://192.168.1.1:8081/statistic/ или там где у вас находится роутер и настроен lighttpd.
Скрипт считает весь трафик проходящий через роутер к пользователям прописанным в /usr/local/etc/ethers и внешний трафик самого роутера.
World - внешний трафик (Интернет).
City - пиринговый трафик (заданный в файле ip_piring.lst).
DELTA - трафик за последние 5 минут.
Содержимое страниц обновляется раз в 5 минут.
Подсчет статистики за новый месяц будет начнется "с чистого листа". Статистику за прошлые месяцы работы скрипта можно будет посмотреть по адресу http://192.168.1.1:8081/statistic/2010-08.html - август 2010 года (аналогично другие месяцы).
Last edited by KinoMan; 28-02-2011 at 16:13. Reason: UPDATE
ASUS wl500gP/300МГц/128MБ RAM + HDD Hitachi 160GB fw:1.9.2.7-d-r2624 Статистика потребляемого трафика по ip
К этому добавить бы ограничение скорости по IP download/upload
D-link DIR-320 (1.9.2.7-d-r1000) rTorrent ...
А зачем жестко резать скорость?
Ведь есть nshaper.
Если вам очень надо повысить приоритет для конкретного ip, то посмотрите тут http://wl500g.info/showthread.php?p=175534#post175534
ASUS wl500gP/300МГц/128MБ RAM + HDD Hitachi 160GB fw:1.9.2.7-d-r2624 Статистика потребляемого трафика по ip
D-link DIR-320 (1.9.2.7-d-r1000) rTorrent ...
Неплохо),
Мот кто напишет статистику для tc на shell-e?
чтоб из этого такаяжа краста получилась. а то мои мысли заши в тупик.Code:tc -s class ls dev imq1 class htb 1:11 parent 1:1 leaf 11: prio 1 rate 320Kbit ceil 1900Kbit burst 1499b cburst 4031b Sent 155843415 bytes 131248 pkts (dropped 0, overlimits 0) rate 137794bps 114pps lended: 26123 borrowed: 105125 giants: 0 tokens: -57391 ctokens: 19449 class htb 1:1 root rate 2000Kbit ceil 2000Kbit burst 15Kb cburst 4159b Sent 176398358 bytes 150395 pkts (dropped 0, overlimits 0) rate 176660bps 149pps lended: 110878 borrowed: 0 giants: 0 tokens: 94915 ctokens: 13567 class htb 1:13 parent 1:1 leaf 13: prio 5 rate 320Kbit ceil 1900Kbit burst 1499b cburst 4031b Sent 10200866 bytes 7304 pkts (dropped 0, overlimits 0) rate 11652bps 8pps lended: 5563 borrowed: 1741 giants: 0 tokens: -20903 ctokens: 19279 class htb 1:12 parent 1:1 leaf 12: prio 1 rate 6Kbit ceil 6Kbit burst 1499b cburst 1606b Sent 0 bytes 0 pkts (dropped 0, overlimits 0) lended: 0 borrowed: 0 giants: 0 tokens: 3631591 ctokens: 3890643 class htb 1:15 parent 1:1 leaf 15: prio 5 rate 320Kbit ceil 1900Kbit burst 1499b cburst 4031b Sent 10353988 bytes 11842 pkts (dropped 0, overlimits 0) rate 23987bps 23pps lended: 7831 borrowed: 4011 giants: 0 tokens: -14343 ctokens: 22696 class htb 1:14 parent 1:1 leaf 14: prio 0 rate 320Kbit ceil 1900Kbit burst 1499b cburst 4031b Sent 0 bytes 0 pkts (dropped 0, overlimits 0) lended: 0 borrowed: 0 giants: 0 tokens: 68092 ctokens: 30824
вот то что есть:
Code:cat stat #!/bin/sh TC="tc -s class ls dev" $TC imq1 | awk ' BEGIN{user=0;rate=0} { #if(user != 0){rate=0;user=0} if($1 == "class"){ if($3 == "1:1"){user="common"} if($3 == "1:11"){user="user1"} if($3 == "1:12"){user="user2"} if($3 == "1:13"){user="user3"} if($3 == "1:14"){user="user4"} if($3 == "1:15"){user="user5"} } if($1 == "rate"){rate=$2} if(rate != 0){ print(user,rate) user=0 rate=0 } } END{}' | sort
Last edited by lsd_wiz; 18-01-2010 at 20:45.
Не сочтите за придирку, но мне кажется, что вместо:
Вы хотели написать:
Я детально не разбирался и списал это на то, что запускал скрипт end, когда еще не все было настроено. Поэтому тупо грохнул (вместе со статистикой!) файлы:Code:awk '{system("iptables -A STAT_IP -s "$2" -j RETURN") system("iptables -A STAT_IP -d "$2" -j RETURN"); }' < /usr/local/etc/ethers
/opt/share/www/statistic/index.html
/opt/Billing/users/*
/opt/Billing/total
и перезагрузил.... вот.
Last edited by Omega; 20-11-2011 at 14:28. Reason: fixed
WL500gp-1.9.2.7-d-r2624
Строки с нулями появляются при перезагрузке роутера видимо в тот момент когда срабатывает скрипт. За 2 месяца у меня такое было 1 раз.
Как исправить:
зайти в /opt/Billing/users/
найти файл с датой, где появились нули
открыть его и отредактировать, удалив первые несколько строчек с нулями.
Исправил. но это не существенно.
Last edited by KinoMan; 11-02-2010 at 19:51.
ASUS wl500gP/300МГц/128MБ RAM + HDD Hitachi 160GB fw:1.9.2.7-d-r2624 Статистика потребляемого трафика по ip
Старый скрипт
(ноябрь 2010)
Для работы этого скрипта необходимы установленные и настроенные пакеты lighttpd, php, cron и gawk.
Для чего этот скрипт:
Этот скрипт предназначен только для подсчета трафика. Также в нем существует возможность автоматически отключать интернет пользователям, которые превысили лимит трафика за месяц.
Настройка подсчета трафика
1.Создаем директории и необходимые файлы
2.Создаем таблицу пользователейCode:mkdir /opt/etc/billing mkdir /opt/etc/billing/city mkdir /opt/etc/billing/world mkdir /opt/etc/billing/router mkdir /opt/share/www/statistic touch /opt/etc/cron.5mins/billing chmod +x /opt/etc/cron.5mins/billing touch /opt/etc/billing/limit touch /usr/local/sbin/lst/ip_piring.lst touch /usr/local/sbin/makestat touch /usr/local/sbin/makefilter chmod +x /usr/local/sbin/makestat chmod +x /usr/local/sbin/makefilter
в этот файл (/usr/local/etc/ethers) вписываем MAC и IP адреса пользователей для которых хотим открыть доступ к интернету и считать статистикуCode:touch /usr/local/etc/ethers
Пример:
После последнего пользователя необходимо ставить перевод строки.Code:00:00:1c:1c:1a:00 192.168.1.2 00:00:11:11:11:00 192.168.1.11 00:00:1a:1a:1a:00 192.168.1.15
3.Создаем файл с пиринговыми сетями провайдера
У моего провайдера есть пиринговые зоны для которых я хочу отдельно считать статистику
В файл /usr/local/sbin/lst/ip_piring.lst пишем пиринговые зоны провайдера.
Мой файл выглядит так (провайдер Домолинк-Тамбов):
4.Для того чтобы задать лимиты трафика пользователям необходимо:Code:78.132.128.0/17 213.135.128.0/19 193.203.60.0/22 93.186.96.0/20 193.33.62.0/23 91.202.20.0/22 193.34.12.0/22 82.179.144.0/20 195.19.96.0/19
отредактировать файл /opt/etc/billing/limit
формат файла таков
1)ip-адрес пользователя; 2)лимит входящего трафика; 3)лимит исходящего трафика; 4)суммарный лимит трафика.
все лимиты задаются в мегабайтах
например:
После последнего пользователя необходимо ставить перевод строки.Code:192.168.1.2 10 1.0e+20 500
пользователю дано 10МБ входящего, практически не ограниченный исходящий трафик и 500МБ суммарного трафика (входящий+исходящий). При достижении пользователем хотя бы одного из ограничений он будет отключен.
В этот файл можно не вписывать всех пользователей, если мы не хотим задавать для них лимит. У меня например этот файл пустой.
5.Редактируем файл /opt/etc/cron.5mins/billing
код скрипта в прикрепленном файле
6.Редактируем файл /opt/share/www/statistic/index.php
код скрипта в прикрепленном файле
7.Редактируем файл /usr/local/sbin/post-firewall
Добавляем в него
- ограничение доступа в интернет по mac и ip.Code:#!/bin/sh /usr/local/sbin/makefilter
Фильтр работает независимо от того подключен или не подключен у вас жесткий диск/флешка.
8.Редактируем файл /usr/local/sbin/makefilter
код скрипта в прикрепленном файле
9.Добавляем цепочки для подсчетата трафика:
В файл /usr/local/sbin/post-boot добавим строчки:
10.Редактируем файл /usr/local/sbin/makestatCode:#!/bin/sh /usr/local/sbin/makestat
код скрипта в прикрепленном файле
Сделаем файлы исполняемыми
Code:chmod +x /usr/local/sbin/post-firewall chmod +x /usr/local/sbin/post-bootДополнительно у меня работает nshaper http://wl500g.info/showpost.php?p=161206&postcount=138Code:flashfs save && flashfs commit && flashfs enable && reboot
сам скрипт у меня находится здесь /user/local/sbin/nshaper чтоб работать независимо от подключенной флешки/жесткого диска
В настройках nshaper необходимо прописать путь к уже созданным файлам
В /usr/local/sbin/post-firewall добавить строчкуCode:# zone IP files search path ZONE_PATH="/usr/local/sbin/lst/ip_%ZONE%.lst"
для сохранения настроек выполнитьCode:/usr/local/sbin/nshaper start
Немного о работе скрипта:Code:flashfs save && flashfs commit && flashfs enable && reboot
Статистику смотрим http://192.168.1.1:8081/statistic/ или там где у вас находится роутер и настроен lighttpd.
Скрипт считает весь трафик проходящий через роутер к пользователям и внешний трафик самого роутера.
World - внешний трафик (Интернет).
City - пиринговый трафик (заданный в файле ip_piring.lst).
DELTA - трафик за последние 5 минут.
Если были заданы лимиты для пользователей, то для этих пользователей будет отображаться графа с остатком (BALANCE).
Порядок отображения пользователей в браузере точно такой же, как вы задали в файле ethers. Для поля BALANCE порядок пользователей такой же, как в файле limit.
Содержимое страниц обновляется раз в 5 минут.
Подсчет статистики за новый месяц будет начнется "с чистого листа". Все пользователи, заблокированные по лимиту трафика, будут восстановлены. Статистику за прошлые месяцы работы скрипта можно будет посмотреть по адресу http://192.168.1.1:8081/statistic/2010-08.html - август 2010 года (аналогично другие месяцы).
Last edited by KinoMan; 23-02-2011 at 08:24.
ASUS wl500gP/300МГц/128MБ RAM + HDD Hitachi 160GB fw:1.9.2.7-d-r2624 Статистика потребляемого трафика по ip
установил статистику и nshaper. В iptables вижу, что подсчёт ведётся. Шейпер режет. Но вот на сайте статистика не обновляется. Куда копать?
в то же время файл total представляет собойCode:iptables -nxvL | grep STAT -A 15 408398 192348821 STAT_IP all -- * * 0.0.0.0/0 0.0.0.0/0 199999 37466458 MAC_IP all -- * !br0 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- br0 br0 0.0.0.0/0 0.0.0.0/0 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID 6859 361636 TCPMSS tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x17/0x02 TCPMSS clamp to PMTU 387259 190737467 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 DROP all -- !br0 ppp0 0.0.0.0/0 0.0.0.0/0 0 0 DROP all -- !br0 vlan1 0.0.0.0/0 0.0.0.0/0 0 0 SECURITY all -- !br0 * 0.0.0.0/0 0.0.0.0/0 state NEW 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate DNAT -- Chain STAT_IP (1 references) pkts bytes target prot opt in out source destination 21319 4332932 RETURN all -- * * 192.168.0.39 0.0.0.0/0 22721 10732361 RETURN all -- * * 0.0.0.0/0 192.168.0.39 11519 1245372 RETURN all -- * * 192.168.0.3 0.0.0.0/0 12509 15281613 RETURN all -- * * 0.0.0.0/0 192.168.0.3 11739 667399 RETURN all -- * * 192.168.0.5 0.0.0.0/0 13060 14931916 RETURN all -- * * 0.0.0.0/0 192.168.0.5 6072 1872269 RETURN all -- * * 192.168.0.21 0.0.0.0/0 5251 3716919 RETURN all -- * * 0.0.0.0/0 192.168.0.21 8649 3163000 RETURN all -- * * 192.168.0.200 0.0.0.0/0 6509 3408964 RETURN all -- * * 0.0.0.0/0 192.168.0.200 0 0 RETURN all -- * * 192.168.0.202 0.0.0.0/0 0 0 RETURN all -- * * 0.0.0.0/0 192.168.0.202 432 22736 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Code:cat /opt/Billing/total 192.168.0.39 0 192.168.0.3 0 192.168.0.5 0 192.168.0.21 0 192.168.0.200 0 192.168.0.202 0
gingerino
крон установлен? проверьте, работает ли он.
еще для скрипта статистики необходим пакет gawk: ipkg install gawk
ASUS wl500gP/300МГц/128MБ RAM + HDD Hitachi 160GB fw:1.9.2.7-d-r2624 Статистика потребляемого трафика по ip
gawk стоит:
ipkg list_installed | grep gawk
gawk - 3.1.7-1 - Gnu AWK interpreter
да похоже что cron не запускает задачи...
сейчас проверил права на файл end - 755
буду курить крон....
В файле /opt/etc/cron.5mins/end прописан параметр USRS="/opt/Billing/users/*" но такого файла "*" в указанном каталоге не лежит...
крон вроде работает, так как rrd крутится и график трафика обновляет...
Last edited by Omega; 20-11-2011 at 14:31. Reason: fixed
ASUS wl500gP/300МГц/128MБ RAM + HDD Hitachi 160GB fw:1.9.2.7-d-r2624 Статистика потребляемого трафика по ip
ASUS wl500gP/300МГц/128MБ RAM + HDD Hitachi 160GB fw:1.9.2.7-d-r2624 Статистика потребляемого трафика по ip