PDA

Bekijk de volledige versie : Подсчет трафика по IP с передачей данных на сервер, Реализация.



kpush
31-10-2012, 08:01
пытаюсь настроить программу установив php и lighttpd из нового репозитория
возникает ошибка php при запуске:

<b>Fatal error</b>: Call to undefined function bcadd() in <b>/opt/share/www/IptablesExtractor.php</b> on line <b>94</b><br />
написал в соответствующую ветку: http://wl500g.info/showthread.php?12746-%C2%EE%EF%F0%EE%F1%FB-%EF%EE-%F0%E0%E1%EE%F2%E5-PHP-%ED%E0-%F0%EE%F3%F2%E5%F0%E5&p=255930#post255930

В итоге это оказалось преодалимым с помощью двух самописных функций: bcadd и bcdiv .
их реализации содрал с интернета, поиск по bcadd.php, bcdiv.php, bcmath.php сами функции не проверял,
т.к. уперся в более важную проблемму.

Не подсчитывается входящий траффик на RT-N16 ставил интерфейсы, как:

iptables -t mangle -I FORWARD -i vlan2 -j selector
iptables -t mangle -I FORWARD -o vlan2 -j selector
Нашел исходную статью, где описано подробно про подсчет цепочками: http://topola.unity.net/trafcoll

Сделал пример: подлючил к сетке роутер и мой компьютеркомпьютер к нему.
Получился такой скрипт добавления пользователских цепочек:

iptables -t mangle -N worldin
iptables -t mangle -N worldout
iptables -t mangle -A worldin -d 192.168.1.2 -j RETURN
iptables -t mangle -A worldout -s 192.168.1.2 -j RETURN

iptables -t mangle -N trafin
iptables -t mangle -N trafout
iptables -t mangle -I FORWARD -i vlan2 -j trafin
iptables -t mangle -I FORWARD -o vlan2 -j trafout

iptables -t mangle -A trafout -j worldout
iptables -t mangle -A trafout -j RETURN
iptables -t mangle -A trafin -j worldin
iptables -t mangle -A trafin -j RETURN
Проверял накопленные данные командой:

iptables -nvxL -t mangle
Проблема в том, что цепочки вели подстчет только исходящего трафика
для моего компа (192.168.1.2), а был и входящий, и его было гораздо больше.

Посоветуйте, как изменить скрипт, для RT-N16 (WAN = vlan2) без испольования VPN соединения?
(если испльзовать VPN и интерфейс ppp0 то все работает, я проверил)

kpush
11-02-2013, 16:01
набор из 5ти скриптов создан по мотивам темы: Статистика и ограничение доступа по ip и mac

т.к. задача была скромнее: определить "почему сейчас интернет работает медленно?",
то результаты я мог проанализировать и в Excel на отдельной машине.

1. заготавливаем необходимые цепочки:



#!/bin/sh
USERS="/tmp/local/root/usersmac"

iptables -t mangle -N world
iptables -t mangle -I FORWARD -i vlan2 -j world
iptables -t mangle -I FORWARD -o vlan2 -j world


cat $USERS | while read MACCL IPCL
do
iptables -t mangle -A world -s $IPCL -j RETURN
iptables -t mangle -A world -d $IPCL -j RETURN
done

iptables -t mangle -A world -j RETURN


(привожу только world, но можно добавить любые интересные "направления")

2 обрубаем всех, кто не в списке пользователей от услуг подключения
к интернет (так они быстрее прибегут, что бы дополнить список)



#!/bin/sh
USERS="/tmp/local/root/usersmac"

iptables -F MAC_IP

iptables -N MAC_IP
iptables -I FORWARD 1 ! -o br0 -j MAC_IP


cat $USERS | while read MACL IPCL
do
iptables -A MAC_IP -s $IPCL -m mac --mac-source $MACL -j RETURN
done

iptables -A MAC_IP -j DROP


- с этого момента начинает подсчитываться трафик, но смотреть командой iptables -nvxL -t mangle
не удобно, да и счетчики, как мне показалось "забиваются".

3. скрипт для периодического сброса информации и обнуления счетчиков,
т.к. нужно смотеть в Excel то я скидываю в csv, формат данных можете подстроить под свои нужды:



#!/bin/sh
wdir=/tmp/local/root/
timeshtamp=$(date +"%Y-%m-%d %H:%M:%S")
datafile=$(date +"%Y%m%d%H%M%S")"iptr.log"
read timeshtampold<$wdir"reporttime"

chain=world

getChainRes()
{
/usr/sbin/iptables -t mangle -nvxL $chain|grep RETURN| grep -v grep|/usr/bin/tail -n 200|while read _pkts _bytes _target _prot _opt _in _out _source _destination; do
echo ${timeshtampold}";"${timeshtamp}";"$chain";"$_bytes";"$_source";"$_destination>>$wdir"log/"$datafile

done
/usr/sbin/iptables -t mangle -Z $chain
}

if [[ `df | grep opt | awk '{print $4}'` -gt 2048 ]]

then

getChainRes;
echo ${timeshtamp}>$wdir"reporttime";

else

echo ${timeshtamp}" disk full">$wdir"reporttime";

fi


сейчас это запускается раз в 5 минут cronом.

4. Передаем накопленные файлы на сервер:

(т.к. заставить scp запускаясь по cron отправлять файлы не получилось,
мне пришлось rsync, а для этого запустить rsync --daemon на сервере)



#!/bin/sh
/opt/bin/rsync -avz --remove-source-files --password-file=/tmp/local/root/iplog.pw /tmp/local/root/log rsync://rsynccl@192.168.3.104:873/logfiles


Тут замечу, что в --password-file на клиенте записывается только пароль!!!,
в отличие от rsyncd сервера, где список пользователей идет с паролями, я потерял на этом 1час.

5. ну и на сервере, все это закладывается в базу mysql скриптом:



#!/bin/sh
LOGPATH=/home/admin/log

find $LOGPATH -name '*iptr.log'|while read FILENAME; do
mv $FILENAME $LOGPATH"/route.csv"
mysqlimport -v --local --columns=time0,time1,chain,traff,srs,dst --fields-enclosed-by='' --fields-terminated-by=';' --lines-terminated-by='\n' -u iplog -ppassword iplog $LOGPATH"/route.csv"
rm $LOGPATH"/route.csv"
done


В общем скрипт не претендует на точность,
но теперь, я в курсе, кто виноват за "клин" в интернете.

Все излагал кратко, все, что нужно есть на этом форуме и в сети.

Буду рад услышать критику.

P.S. первым был пойман CIO за открытием по сети 5Gb архива, уже осознал.

TaEk
04-03-2013, 10:08
А насколько сильно этот скрипт загружает роутер?
У меня стоит 500gpv2, на нем порядка 30 пользователей, потянет ли роутер этот скрипт?

TaEk
15-03-2013, 13:42
Роуер asus-500gp прошивка стоит последняя из ветки rtn.
Изначально на роутер устанавливается скрипт Для Чайников из этой ветки http://wl500g.info/showthread.php?27615-%D1%EA%F0%E8%EF%F2-quot-%D3%F1%F2%E0%ED%EE%E2%EA%E0-%EF%F0%EE%E3%F0%E0%EC%EC-%E4%EB%FF-%F7%E0%E9%ED%E8%EA%E0-quot-(%CD%EE%E2%E0%FF-%F0%E5%E4%E0%EA%F6%E8%FF)
После чего точно следуя инструкциям устанавливаю приведенный скрипт, но в /statistic/ не отображаются заведенные ip и все по нулям (вебформа совершенно пустая)


iptables -nvxL -t mangle
Chain PREROUTING (policy ACCEPT 8910 packets, 733961 bytes)
pkts bytes target prot opt in out source destination

Chain INPUT (policy ACCEPT 4573 packets, 431887 bytes)
pkts bytes target prot opt in out source destination
0 0 r_selector_input all -- ppp0 * 0.0.0.0/0 0.0.0.0/0

Chain FORWARD (policy ACCEPT 3728 packets, 246521 bytes)
pkts bytes target prot opt in out source destination
0 0 selector all -- * ppp0 0.0.0.0/0 0.0.0.0/0
0 0 selector all -- ppp0 * 0.0.0.0/0 0.0.0.0/0

Chain OUTPUT (policy ACCEPT 2128 packets, 1097658 bytes)
pkts bytes target prot opt in out source destination
0 0 r_selector_output all -- * ppp0 0.0.0.0/0 0.0.0.0/0

Chain POSTROUTING (policy ACCEPT 2497 packets, 1121762 bytes)
pkts bytes target prot opt in out source destination

Chain city (0 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- * * 0.0.0.0/0 192.168.1.2
0 0 RETURN all -- * * 192.168.1.2 0.0.0.0/0
0 0 RETURN all -- * * 0.0.0.0/0 192.168.1.11
0 0 RETURN all -- * * 192.168.1.11 0.0.0.0/0
0 0 RETURN all -- * * 0.0.0.0/0 192.168.1.15
0 0 RETURN all -- * * 192.168.1.15 0.0.0.0/0
0 0 RETURN all -- * * 0.0.0.0/0 192.168.1.246
0 0 RETURN all -- * * 192.168.1.246 0.0.0.0/0

Chain r_city_input (0 references)
pkts bytes target prot opt in out source destination
0 0 all -- * * 0.0.0.0/0 0.0.0.0/0

Chain r_city_output (0 references)
pkts bytes target prot opt in out source destination
0 0 all -- * * 0.0.0.0/0 0.0.0.0/0

Chain r_selector_input (1 references)
pkts bytes target prot opt in out source destination
0 0 r_world_input all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0

Chain r_selector_output (1 references)
pkts bytes target prot opt in out source destination
0 0 r_world_output all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0

Chain r_world_input (1 references)
pkts bytes target prot opt in out source destination
0 0 all -- * * 0.0.0.0/0 0.0.0.0/0

Chain r_world_output (1 references)
pkts bytes target prot opt in out source destination
0 0 all -- * * 0.0.0.0/0 0.0.0.0/0

Chain selector (2 references)
pkts bytes target prot opt in out source destination
0 0 world all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0

Chain world (1 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- * * 0.0.0.0/0 192.168.1.2
0 0 RETURN all -- * * 192.168.1.2 0.0.0.0/0
0 0 RETURN all -- * * 0.0.0.0/0 192.168.1.11
0 0 RETURN all -- * * 192.168.1.11 0.0.0.0/0
0 0 RETURN all -- * * 0.0.0.0/0 192.168.1.15
0 0 RETURN all -- * * 192.168.1.15 0.0.0.0/0
0 0 RETURN all -- * * 0.0.0.0/0 192.168.1.246
0 0 RETURN all -- * * 192.168.1.246 0.0.0.0/0


Я так понимаю что частично скрипт выполняется, т.к. ip которые не были занесены в список не имеют доступа в интернет.

TaEk
20-03-2013, 18:09
Ищу пакет для подсчета трафика по ip/mac, то есть мне нужен отдельный подсчет трафика для каждого устройства, а не общий.
Поиск по пакетам не помог найти что-либо подходящее.
Если не по теме, заранее извиняюсь.

pzp-5
21-04-2016, 07:43
Имею связку Asus wl-520gu (прошивка tomato-1.28) + UM150.
Интертелеком, "Вiльний доступ".
Все настроено и работает отлично.
Подскажите скрипт, который бы подсчитывал суммарный траффик за сутки и, до приближения к порогу 500 МБ изменил бы до конца суток стандартные логин/пароль для подключения к Интертелекому (IT/IT) на тестовые (IT_TEST/IT_TEST) .