URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 259
[ Назад ]

Исходное сообщение
"Подсчет трафика. Новое(?) решение или полная ерунда."

Отправлено da , 12-Ноя-01 16:30 
Возникла "вечная" проблема подсчета "внешнего" трафика при следующих условиях:
Система FreeBSD 4.3, два 10Mb "внешних" интерфейса (к разным провайдерам), 10Mb интерфейс
в локалку и Granch SBNI - выделенка. Из локальной сети во внешний мир выходят через natd и ipfw.
Трафик небольшой - немного "густо", затем долго "пусто".

Попробовал для этого ipacctd и trafd - цифры полученные и от того и от другого мягко говоря
совсем  похожи на выдаваемыми ipfw count from any to any via ep0 и ipfw count from any to any via ep1.
Кроме того оба пакета сбрасывают в лог информацию уже _после_ диверта, т.е. не видно с какой локальной
машины пошел запрос.

Теперь чтоже я сделал и собственно из-за чего весь сыр-бор.
Почитав ман на ipfw, порывшись в исходниках ядра и немного поэкспериментировав, пришел к следующему:
1. в ipfw на все divert'ные правила добавляю log logamount 0
2. в syslog.conf  security.*     /var/log/security заменяю на
   security.notice   /var/log/security
   security.=info    /var/log/traffic
3. в /sys/netinet/ip_fw.c изменяю функцию ipfw_report (добавлен вывод ip->ip_len):
   log(LOG_SECURITY | LOG_INFO, "%s %s %s %d out via %s%d%s\n", name, action, proto, ip->ip_len, oif->if_name, oif->if_unit, fragment);
   log(LOG_SECURITY | LOG_INFO, "%s %s %s %d in via %s%d%s\n", name, action, proto, ip->ip_len, oif->if_name, oif->if_unit, fragment);
4. в crontab добавляю
   0  *  *  *  *  traflog.sh
   где traflog.sh (не привожу текст, т.к. в свернутом виде неудобочитаем, а в развернутом - слишком велик)
   выполняет следующие функции:
   1. переносит /var/log/traffic во временный файл и создает пустой /var/log/traffic
   2. с помощью awk суммирует размер подряд идущих пакетов с одинаковыми адресами/портами src/dest,
      а так же разворачивает записи типа last message repeated 3 times
   3. сортирует получившийся файл
   4. и повторяет процедуру объединения размеров подряд идущих пакетов

Что я с этого имею?
Я имею записи типа: TCP 10.0.0.14:1063 64.12.25.51:5190 out via ep1
Я имею точную цифру которая сходится с ipfw count и со счетом провайдера.

Вот только гложет меня сомнение можно ли так делать и почему до сих пор никто нигде не выступил
с подобным решением? Может быть таким образом я уменьшил устойчивость системы? Может быть...


Содержание

Сообщения в этом обсуждении
"RE: Подсчет трафика. Новое(?) решение или полная ерунда."
Отправлено Тошик , 26-Май-02 16:09 
Вообще-то интересно!  А можешь прислать сам текст traflog.sh ?

"RE: Подсчет трафика. Новое(?) решение или полная ерунда."
Отправлено Gara , 31-Май-02 14:28 
http://www.opennet.me/openforum/vsluhforumID3/327.html

посомтри тут может тебе что понравится, раз ты любитель ковырять ядро:)