Не спеша настраиваю сервер, который в перспективе должен стать шлюзом на ~200 клиентских машин. Получение интернета должно требовать минимум телодвижений со стороны пользователя (вставил кабель, получил адрес по dhcp и работаешь), без авторизаций, прописывания в разные места прокси, pptp и т.п.
Задался вопросом, чем умные люди собирают статистику по трафику?
Пока настроил squid+ipcad+sams.
ipcad и squid связаны великим самодельным костылем, написанным на коленке за 20 минут, к тому же на shell.
#!/bin/sh
net="192.168"
ttime=`rsh localhost sh ip acco | grep 'Accounting data saved'| awk '{print ($4)}'`
file=/var/lib/iptraf/tmp
log=/var/log/squid/access.log
rsh localhost clear ip accounting > /dev/null
rsh localhost show ip accounting checkpoint | grep $net > $file
strings=`sed -n '$=' $file`
for ((i=1; i<$strings; i++)); do
parseme=`sed -n $i'p' $file`
d=`echo $parseme | awk '{print ($1)}'| cut -c1-7`
s=`echo $parseme | awk '{print ($2)}'| cut -c1-7`
if [ "$s" == "$net" ]; then
if [ "$d" != "$net" ]; then
echo $parseme | awk -v vtime=$ttime '{print (vtime".000",1,$2,"TCP_MISS/200",$4,"CONNECT",$1"/"$5,"-","DIRECT/"$1,"-")}'| sed '/\/0 /d' | sed 's/\/65535/\/other_ports /' | sed '/255.255.255.255\//d' >>$log
fi
else
echo $parseme | awk -v vtime=$ttime '{print (vtime".000",1,$1,"TCP_MISS/200",$4,"CONNECT",$2"/"$6,"-","DIRECT/"$2,"-")}'| sed '/\/0 /d' | sed 's/\/65535/\/other_ports /' | sed '/255.255.255.255\//d' >>$log
fi
done
Это не окончательный вариант, но заканчивать его, наверное, и не стоит. Он вроде как парсит статистику, насчитанную ipcad и пишет все в лог сквида, который читается sams'ом.
На первый взгляд удобно, через одну веб-морду можно и рулить редиректором, и смотреть статистику. Только расчеты похоже будут не очень точными.
Как можно реализовать эту задачу, чтобы оно было гибко, рационально и на свободном ПО?