В общем у меня мониторился только трафик, идущий через vpn целиком, для этого в /tmp/local/sbin/post-firewall было добавлено:
Code:
iptables -N ppp_in
iptables -N ppp_out
iptables -I INPUT -i ppp0 -j ppp_in
iptables -I OUTPUT -o ppp0 -j ppp_out
iptables -I FORWARD -o ppp0 -j ppp_out
iptables -I FORWARD -i ppp0 -j ppp_in
iptables -I ppp_in -j RETURN
iptables -I ppp_out -j RETURN
Чтобы видеть трафик по всем ip, предварительно ничего не конфигурируя, написал скриптик:
Code:
#!/bin/sh
datadir="/opt/var/rrd/"
ip=`nvram get dhcp_start | awk -F"." '{print $4}'`
end_ip=`nvram get dhcp_end | awk -F"." '{print $4}'`
net=`nvram get dhcp_end | awk -F"." '{print $1"."$2"."$3}'`
while [ "$ip" != "$end_ip" ]
do
if iptables -L c${ip}in 2>/dev/null;
then
if [ ! -e ${datadir}d${ip}.rrd ]
then
rrdtool create ${datadir}d${ip}.rrd --step 300 \
DS:in:ABSOLUTE:600:U:U DS:out:ABSOLUTE:600:U:U \
RRA:LAST:0.5:1:105120
fi
bytes_in=`iptables -nvxL -Z c${ip}in | grep RETURN | awk '{print $2}'`
bytes_out=`iptables -nvxL -Z c${ip}out | grep RETURN | awk '{print $2}'`
`rrdtool update ${datadir}d${ip}.rrd -t in:out N:"${bytes_in}":"${bytes_out}"`
for arp in `cat /proc/net/arp | grep br0 | awk '{print $1}' | awk -F"." '{print $4}'`
do
err=true
if [[ $arp = $ip ]]
then
err=false
fi
done
if [[ $err = true ]]
then
iptables -D ppp_in -d ${net}.${ip} -j c${ip}in
iptables -D ppp_out -s ${net}.${ip} -j c${ip}out
iptables -F c${ip}in
iptables -F c${ip}out
iptables -X c${ip}in
iptables -X c${ip}out
fi
else
for arp in `cat /proc/net/arp | grep br0 | awk '{print $1}' | awk -F"." '{print $4}'`
do
err=false
if [[ $arp = $ip ]]
then
err=true
fi
done
if [[ $err = true ]]
then
iptables -N c${ip}in
iptables -N c${ip}out
iptables -I ppp_in -d ${net}.${ip} -j c${ip}in
iptables -I ppp_out -s ${net}.${ip} -j c${ip}out
iptables -I c${ip}in -j RETURN
iptables -I c${ip}out -j RETURN
fi
fi
let "ip+=1"
done
и положил его в /opt/etc/cron.5min/
Картинки рисуются скриптом
Code:
#!/bin/sh
datadir="/opt/var/rrd/"
indexdir="/opt/share/www/rrd/"
imagedir="${indexdir}images/"
ip=`nvram get dhcp_start | awk -F"." '{print $4}'`
end_ip=`nvram get dhcp_end | awk -F"." '{print $4}'`
net=`nvram get dhcp_end | awk -F"." '{print $1"."$2"."$3}'`
while [ "$ip" != "$end_ip" ]
do
if [ -e ${datadir}d${ip}.rrd ]
then
rrdtool graph ${imagedir}${ip}day.png -a PNG --start now-1d --step 300 -v "bits/s" -t "Трафик ${net}.${ip} за сутки" \
-w 600 -h 300 --x-grid HOUR:1:HOUR:6:HOUR:6:0:%R \
DEF:ds0=${datadir}d${ip}.rrd:in:LAST DEF:ds1=${datadir}d${ip}.rrd:out:LAST \
CDEF:ds0bps=ds0,8,* CDEF:ds1bps=ds1,8,* \
VDEF:ds0total=ds0,TOTAL VDEF:ds1total=ds1,TOTAL \
VDEF:ds0l=ds0bps,LAST VDEF:ds1l=ds1bps,LAST \
'AREA:ds0bps#00FF0055' 'AREA:ds1bps#0000FF55' \
'LINE1:ds0bps#00FF00:Входящий трафик\n' \
'GPRINT:ds0l:\tСредняя скорость за 5 мин\: %.2lf %sbit/s' \
'GPRINT:ds0total:\tВсего получено\: %.2lf %sbyte\n' \
'LINE1:ds1bps#0000FF:Исходящий трафик\n' \
'GPRINT:ds1l:\tСредняя скорость за 5 мин\: %.2lf %sbit/s' \
'GPRINT:ds1total:\tВсего передано\: %.2lf %sbyte'
rrdtool graph ${imagedir}${ip}mounth.png -a PNG --start now-1m --step 300 -v "bits/s" -t "Трафик ${net}.${ip} за месяц" \
-w 600 -h 300 --x-grid DAY:1:WEEK:1:DAY:7:0:%x \
DEF:ds0=${datadir}d${ip}.rrd:in:LAST DEF:ds1=${datadir}d${ip}.rrd:out:LAST \
CDEF:ds0bps=ds0,8,* CDEF:ds1bps=ds1,8,* \
VDEF:ds0total=ds0,TOTAL VDEF:ds1total=ds1,TOTAL \
VDEF:ds0l=ds0bps,LAST VDEF:ds1l=ds1bps,LAST \
'AREA:ds0bps#00FF0055' 'AREA:ds1bps#0000FF55' \
'LINE1:ds0bps#00FF00:Входящий трафик\n' \
'GPRINT:ds0l:\tСредняя скорость за 5 мин\: %.2lf %sbit/s' \
'GPRINT:ds0total:\tВсего получено\: %.2lf %sbyte\n' \
'LINE1:ds1bps#0000FF:Исходящий трафик\n' \
'GPRINT:ds1l:\tСредняя скорость за 5 мин\: %.2lf %sbit/s' \
'GPRINT:ds1total:\tВсего передано\: %.2lf %sbyte'
fi
let "ip+=1"
done
Понаблюдал пару часов, вроде корректно все показывается.
Чтобы все работало, нужно чтоб были установлены cron, rrdtool и вебсервер, у меня lighttpd стоит, ну и директории /opt/var/rrd/ /opt/share/www/rrd/ и /opt/share/www/rrd/images/ должны существовать.
Картинки рисуются из консоли, чтобы на них посмотреть, надо зайти http://my.router/rrd/images/2day.png например.
Картинка за год пишется по аналогии, а html писать лениво.