|
#1
|
|||
|
|||
|
Версия скрипта от 3 сентября 2010г.
Старую версию перенес сюда. Скрипты немного отличаются, поэтому, если у вас была настроена старая версия, то надо удалить все файлы из каталога /opt/Billing/users (при этом статистика сбросится). Для работы этого скрипта необходимы установленные и настроенные пакеты lighttpd, php и cron. Для чего этот скрипт: Этот скрипт предназначен только для подсчета трафика. Также в нем существует возможность автоматически отключать интернет пользователям, которые превысили лимит трафика за месяц. Настройка подсчета трафика 1.Создаем директории и необходимые файлы Code:
mkdir /opt/Billing mkdir /opt/Billing/users mkdir /opt/share/www/statistic touch /opt/etc/cron.5mins/end chmod +x /opt/etc/cron.5mins/end touch /opt/Billing/limit touch /usr/local/sbin/lst/ip_piring.lst 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 У моего провайдера есть пиринговые зоны для которых я не хочу считать статистику В файл /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 отредактировать файл /opt/Billing/limit формат файла таков 1)ip-адрес пользователя; 2)лимит входящего трафика; 3)лимит исходящего трафика; 4)суммарный лимит трафика. все лимиты задаются в мегабайтах например: Code:
192.168.1.2 10 1.0e+20 500 В этот файл можно не вписывать всех пользователей, если мы не хотим задавать для них лимит. У меня например этот файл пустой. 5.Редактируем файл /opt/etc/cron.5mins/end код скрипта в прикрепленном файле 6.Редактируем файл /opt/share/www/statistic/index.php код скрипта в прикрепленном файле 7.Редактируем файл /usr/local/sbin/post-firewall Добавляем в него Code:
#!/bin/sh
#1
iptables -N MAC_IP
iptables -I FORWARD 1 -o ! br0 -j MAC_IP
awk '{system("iptables -A MAC_IP -s "$2" -m mac --mac-source "$1" -j RETURN")}' < /etc/ethers
iptables -A MAC_IP -j DROP
##
#2
iptables -N STAT_IP
awk '{system("iptables -A STAT_IP -s "$1" -j RETURN");
system("iptables -A STAT_IP -d "$1" -j RETURN") }' < /usr/local/sbin/lst/ip_piring.lst
awk '{system("iptables -A STAT_IP -s "$2" -j RETURN")
system("iptables -A STAT_IP -d "$2" -j RETURN"); }' < /usr/local/etc/ethers
iptables -A STAT_IP -j RETURN
iptables -I FORWARD 1 -j STAT_IP
##
Фильтр работает независимо от того подключен или не подключен у вас жесткий диск/флешка. Вторая добавляет цепочки для подсчетата трафика. Сделаем файл исполняемым Code:
chmod +x /usr/local/sbin/post-firewall Code:
flashfs save && flashfs commit && flashfs enable && reboot сам скрипт у меня находится здесь /user/local/sbin/nshaper чтоб работать независимо от подключенной флешки/жесткого диска В настройках nshaper необходимо прописать путь к уже созданным файлам 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 команда Code:
iptables -nvxL FORWARD Code:
Chain FORWARD (policy ACCEPT 326846 packets, 24104635 bytes)
pkts bytes target prot opt in out source destination
27521220 19455458371 STAT_IP all -- * * 0.0.0.0/0 0.0.0.0/0
12362687 6335486745 MAC_IP all -- * !br0 0.0.0.0/0 0.0.0.0/0
436 108182 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
234746 11317504 TCPMSS tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x17/0x02 TCPMSS clamp to PMTU
27186649 19430124831 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
7289 1120723 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate DNAT
0 0 DROP all -- * br0 0.0.0.0/0 0.0.0.0/0
Статистику смотрим http://192.168.1.1:8081/statistic/ или там где у вас находится роутер и настроен lighttpd. DELTA - трафик за последние 5 минут. Если были заданы лимиты для пользователей, то для этих пользователей будет отображаться графа с остатком (BALANCE). Порядок отображения пользователей в браузере точно такой же, как вы задали в файле ethers. Для поля BALANCE порядок пользователей такой же, как в файле limit. Содержимое страниц обновляется раз в 5 минут. В конце каждого месяца будут удалены файлы "/opt/Billing/users/*" и "/opt/Billing/total". Подсчет статистики за новый месяц начнется "с чистого листа". Все пользователи, заблокированные по лимиту трафика, будут восстановленны. Статистику за прошлые месяцы работы скрипта можно будет посмотреть по адресу http://192.168.1.1:8081/statistic/2010-08.html - август 2010 года (аналогично другие месяцы).
__________________
ASUS wl500gP/300МГц/128MБ RAM fw:1.9.2.7-d-r1445 Last edited by KinoMan; 05-09-2010 at 19:49.. Reason: Новая версия |
|
#1
|
|||
|
|||
|
#2
|
|||
|
|||
|
К этому добавить бы ограничение скорости по IP download/upload
![]()
__________________
D-link DIR-320 (1.9.2.7-d-r1000) rTorrent ... |
|
#3
|
|||
|
|||
|
А зачем жестко резать скорость?
Ведь есть nshaper. Если вам очень надо повысить приоритет для конкретного ip, то посмотрите тут http://wl500g.info/showthread.php?p=175534#post175534
__________________
ASUS wl500gP/300МГц/128MБ RAM fw:1.9.2.7-d-r1445 |
|
#4
|
|||
|
|||
|
Quote:
__________________
D-link DIR-320 (1.9.2.7-d-r1000) rTorrent ... |
|
#5
|
|||
|
|||
|
Неплохо),
Мот кто напишет статистику для 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.. |
|
#6
|
|||
|
|||
|
Не сочтите за придирку, но мне кажется, что вместо:
Quote:
Code:
awk '{system("iptables -A STAT_IP -s "$2" -j RETURN")
system("iptables -A STAT_IP -d "$2" -j RETURN"); }' < /usr/local/etc/ethers
__________________
wl-500gP + 10-ка "от Олега" |
|
#7
|
|||
|
|||
|
#8
|
|||
|
|||
|
Я детально не разбирался и списал это на то, что запускал скрипт end, когда еще не все было настроено. Поэтому тупо грохнул (вместе со статистикой!) файлы:
/opt/share/www/statistic/index.html /opt/Billing/users/* /opt/Billing/total и перезагрузил.... вот.
__________________
wl-500gP + 10-ка "от Олега" |
|
#9
|
|||
|
|||
|
хм.... сейчас сел чтоб подправить и чудо новые сутки пошли без проблем )))
|
|
#10
|
|||
|
|||
|
Строки с нулями появляются при перезагрузке роутера видимо в тот момент когда срабатывает скрипт. За 2 месяца у меня такое было 1 раз.
Как исправить: зайти в /opt/Billing/users/ найти файл с датой, где появились нули открыть его и отредактировать, удалив первые несколько строчек с нулями. Исправил. но это не существенно.
__________________
ASUS wl500gP/300МГц/128MБ RAM fw:1.9.2.7-d-r1445 Last edited by KinoMan; 11-02-2010 at 19:51.. |
|
#11
|
|||
|
|||
|
__________________
wl-500gP + 10-ка "от Олега" |
|
#12
|
|||
|
|||
|
Старый скрипт
Немного переделал найденные на форуме скрипты для подсчета трафика на роутере по ip адресам. Для работы скрипта необходимы установленные и настроенные пакеты lighttpd и cron, gawk. Для чего этот скрипт: Этот скрипт предназначен только для подсчета трафика. Также в нем существует возможность автоматически отключать интернет пользователям, которые привысили лимит трафика за месяц. Настройка подсчета трафика Оригинал тут http://www.wl500g.info/showthread.ph...929#post149929 Он меня не устраивал и поэтому был переписан, но основные идеи остались: 1.Создаем директории и необходимые файлы Code:
mkdir /opt/Billing mkdir /opt/Billing/users mkdir /opt/share/www/statistic touch /opt/etc/cron.5mins/end chmod +x /opt/etc/cron.5mins/end touch /opt/Billing/limit 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 У моего провайдера есть пиринговые зоны для которых я не хочу считать статистику Code:
touch /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 отредактировать файл /opt/Billing/limit формат файла таков 1)ip-адрес пользователя; 2)лимит входящего трафика; 3)лимит исходящего трафика; 4)суммарный лимит трафика. все лимиты задаются в мегабайтах например: Code:
192.168.1.2 10 1.0e+40 500 В этот файл можно не вписывать всех пользователей, если мы не хотим задавать для них лимит. У меня например этот файл пустой. 5.Редактируем файл /opt/etc/cron.5mins/end код скрипта в прикрепленном файле 6.Редактируем файл /usr/local/sbin/post-firewall Добавляем в него Code:
#!/bin/sh
#1
iptables -N MAC_IP
iptables -I FORWARD 1 -o ! br0 -j MAC_IP
awk '{system("iptables -A MAC_IP -s "$2" -m mac --mac-source "$1" -j RETURN")}' < /etc/ethers
iptables -A MAC_IP -j DROP
##
#2
iptables -N STAT_IP
awk '{system("iptables -A STAT_IP -s "$1" -j RETURN");
system("iptables -A STAT_IP -d "$1" -j RETURN") }' < /usr/local/sbin/lst/ip_piring.lst
awk '{system("iptables -A STAT_IP -s "$2" -j RETURN")
system("iptables -A STAT_IP -d "$2" -j RETURN"); }' < /usr/local/etc/ethers
iptables -A STAT_IP -j RETURN
iptables -I FORWARD 1 -j STAT_IP
##
Фильтр в веб-интерфейсе роутера меня не устроил (он отключен) - потому что достаточно прописать в качестве DNS на компьютере ip адреса например opendns и интернет у вас появляется (фильтр веб интерфейса легко обойти). оригинал здесь http://wl500g.info/showthread.php?p=77148#post77148 Фильтр работает независимо от того подключен или не подключен у вас жесткий диск/флешка. Вторая добавляет цепочки для подсчетата трафика. Сделаем файл исполняемым Code:
chmod +x /usr/local/sbin/post-firewall Code:
flashfs save && flashfs commit && flashfs enable && reboot сам скрипт у меня находится здесь /user/local/sbin/nshaper чтоб работать независимо от подключенной флешки/жесткого диска В настройках nshaper необходимо прописать путь к уже созданным файлам 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 команда Code:
iptables -nvxL FORWARD Code:
Chain FORWARD (policy ACCEPT 326846 packets, 24104635 bytes)
pkts bytes target prot opt in out source destination
27521220 19455458371 STAT_IP all -- * * 0.0.0.0/0 0.0.0.0/0
12362687 6335486745 MAC_IP all -- * !br0 0.0.0.0/0 0.0.0.0/0
436 108182 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
234746 11317504 TCPMSS tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x17/0x02 TCPMSS clamp to PMTU
27186649 19430124831 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
7289 1120723 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate DNAT
0 0 DROP all -- * br0 0.0.0.0/0 0.0.0.0/0
Статистику смотрим http://192.168.1.1:8081/statistic/ или там где у вас находится роутер и настроен lighttpd. По адресу http://192.168.1.1:8081/statistic/delta.html можно посмотреть сколько было скачено каждым пользователем за последние 5 минут. Содержимое страниц обновляется раз в 5 минут. В конце каждого месяца будут удалены файлы "/opt/Billing/users/*" и "/opt/Billing/total". Подсчет статистики за новый месяц начнется "с чистого листа". Все пользователи, заблокированные по лимиту трафика, будут восстановленны. Статистику за прошлые месяцы работы скрипта можно будет посмотреть по адресу http://192.168.1.1:8081/statistic/2010-08.html - август 2010 года (аналогично другие месяцы).
__________________
ASUS wl500gP/300МГц/128MБ RAM fw:1.9.2.7-d-r1445 Last edited by KinoMan; 03-09-2010 at 19:52.. |
|
#13
|
|||
|
|||
|
установил статистику и nshaper. В iptables вижу, что подсчёт ведётся. Шейпер режет. Но вот на сайте статистика не обновляется. Куда копать?
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 |
|
#14
|
|||
|
|||
|
gingerino
крон установлен? проверьте, работает ли он. еще для скрипта статистики необходим пакет gawk: ipkg install gawk
__________________
ASUS wl500gP/300МГц/128MБ RAM fw:1.9.2.7-d-r1445 |
|
#14
|
|||
|
|||
|
#15
|
|||
|
|||
|
gawk стоит:
ipkg list_installed | grep gawk gawk - 3.1.7-1 - Gnu AWK interpreter да похоже что cron не запускает задачи... сейчас проверил права на файл end - 755 буду курить крон.... |
![]() |
| Tags |
| биллинг, billing, mac, статистика |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Контроль доступа, ограничение ширины канала | wildDAlex | Russian Discussion - РУССКИЙ (RU) | 2 | 03-01-2009 14:28 |
| Ограничение скорости доступа в интернет для устройств wi-fi | iXen | Russian Discussion - РУССКИЙ (RU) | 0 | 29-08-2008 11:00 |
| Ограничение скорости, количества потоков и по MAC адресу | A-r-t | Russian Discussion - РУССКИЙ (RU) | 2 | 17-04-2008 14:24 |
| MAC адрес,проблема доступа к роутеру! | alkonaftik | Russian Discussion - РУССКИЙ (RU) | 7 | 03-03-2008 15:41 |
| MAC Список ограничение. | Compman | Russian Discussion - РУССКИЙ (RU) | 7 | 12-01-2008 17:49 |