Новый скрипт (февраль 2011)
Старую версию перенес сюда.
Для работы этого скрипта необходимы установленные и настроенные пакеты lighttpd, php и cron.
Для чего этот скрипт:
Этот скрипт предназначен только для подсчета трафика. Также в нем существует возможность автоматически отключать интернет пользователям, которые превысили лимит трафика за месяц.
Настройка подсчета трафика
1.Создаем директории и необходимые файлы
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
распаковываем содержимое statistic.zip в DocumentRoot lighttpd (/opt/share/www/)
2.Создаем таблицу пользователей
Code:
touch /usr/local/etc/ethers
в этот файл (/usr/local/etc/ethers) вписываем MAC и IP адреса пользователей для которых хотим открыть доступ к интернету и считать статистику
Пример:
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 пишем пиринговые зоны провайдера.
Мой файл выглядит так (провайдер Домолинк-Тамбов):
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
178.75.64.0/18
4.Редактируем crontab
Добавляем строчку
Code:
4-59/5 * * * * root cd /opt/share/www/statistic/ && /opt/bin/php ./billing.php > /dev/null 2>&1
Будьте внимательны: если у вас имя пользователя отличается от root и DocumentRoot отличается от /opt/share/www/, то пропишите свои значения.
5.Редактируем файл /usr/local/sbin/post-firewall
Добавляем в него
Code:
#!/bin/sh
/usr/local/sbin/makefilter
- ограничение доступа в интернет по mac и ip.
Фильтр работает независимо от того подключен или не подключен у вас жесткий диск/флешка.
6.Редактируем файл /usr/local/sbin/makefilter
код скрипта в прикрепленном файле
7.Добавляем цепочки для подсчетата трафика:
В файл /usr/local/sbin/post-boot добавим строчки:
Code:
#!/bin/sh
/usr/local/sbin/makestat
8.Редактируем файл /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МБ суммарного трафика (входящий+исходящий). При достижении пользователем хотя бы одного из ограничений он будет отключен.
В этот файл можно не вписывать всех пользователей, если мы не хотим задавать для них лимит.
+ Необходимо настроить кроны:
В кронтаб добавить:
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
Будьте внимательны: если у вас имя пользователя отличается от root и DocumentRoot отличается от /opt/share/www/, то пропишите свои значения.
Первого числа каждого месяца все пользователи, заблокированные по лимиту трафика, будут разблокированы.
Дополнительно у меня работает nshaper http://wl500g.info/showpost.php?p=161206&postcount=138
сам скрипт у меня находится здесь /user/local/sbin/nshaper чтоб работать независимо от подключенной флешки/жесткого диска
В настройках nshaper необходимо прописать путь к уже созданным файлам
Code:
# zone IP files search path
ZONE_PATH="/usr/local/sbin/lst/ip_%ZONE%.lst"
В /usr/local/sbin/post-firewall добавить строчку
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 года (аналогично другие месяцы).