Считаем трафик

Учет трафика при использовании FreeBSD в качестве маршрутизатора.

Небольшие организации для подключения своей сети к Интернет в качестве роутера зачастую используют обычный ПК с операционной системой Unix. При оплате трафика руководству фирмы хочется знать, кто сколько качал. Тема настоящей статьи — организация учета внешнего трафика в такой сети.
И так у нас есть компьютер с двумя сетевыми интерфейсами: для внутренней сети ep0, и для внешней сети ed0. Для подсчета трафика я воспользовался пакетом BPFT, разработанным Владимиром Воробьевым.

И так, скачиваем этот пакет и собираем его (процедура стандартная - make, make install). После этого нам необходимо запустить демон, занимающийся сбором трафика. В файл rc.local добавляем строки: 

/usr/local/bin/trafd -r -i ed0
/usr/local/bin/trafd -r -i ep0 
Отлично, трафик учитывается. Теперь заставим его скидываться в файл. Для этого в crontab прописываем: 
*/10 * * * * /usr/local/bin/trafdump ep0 >/dev/null 2>&1
*/10 * * * * /usr/local/bin/trafdump ed0 >/dev/null 2 >&1 
У нас получились бинарные файлы. Для приведения их в читаемый формат, я воспользовался скриптами неизвестного мне автора. Их запуск также осуществляем из crontab: 
50 23 * * * /usr/local/sbin/traffic-daily.exec ep0
50 23 * * * /usr/local/sbin/traffic-daily.exec ed0 
На выходе у нас получаются текстовые файлы, в которые собран весь дневной трафик. Теперь надо разобрать их по конкретным адресам. Опять же воспользуемся crontab: 
57 23 * * * /usr/local/sbin/traffic_by_host_ep0.exec 
57 23 * * * /usr/local/sbin/traffic_by_host_ed0.exec 
где -- IP-адрес, по которому вы хотите собрать статистику. На выходе в каталоге /var/log/traffic вы получите текстовые файлы с именем. daily.log. Формат их прост: время, дата, входящий трафик и исходящий трафик. 
Для того чтобы не учитывать внутренний трафик, необходимо внести некоторые изменения в файлы /usr/local/sbin/traffic_by_host_ep0.exec и /usr/local/sbin/traffic_by_host_eв0.exec. В них имеются строки типа: 

when (src=ipaddr & justify (dst,9)\= «192.168.0») then ipaddr_traffic_out=ipaddr_traffic_out+all. 
192.168.0 — это некая маска. Обращения к адресам, подпадающим под такую маску, не будут учитываться в результирующем файле. В каждом из скриптов таких мест два (по одному на входящий и исходящий трафик).
Кстати, пока вы еще не запустили всю эту систему в действие, можно поставить туда какие-либо несуществующие адреса — это позволит выявить шум в сети создаваемый, к примеру, неправильными настройками IP на каком-нибудь из компьютеров.

Ну и, напоследок, я прикладываю мою программку под Win32, которая по ftp забирает результирующие файлы и расчитывает стоимость трафика.




В: Где можно взять rexx интерпретатор в Сети?
О: http://www.rpmfind.net
Набираете в поле «search» например rexx и получаете что искали.
Для FreeBSD заходите на сайт http://www.freebsd.org там есть раздел «ports» опять выполняете поиск и получаете.