Новый скрипт (февраль 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 года (аналогично другие месяцы).


Reply With Quote

