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

Исходное сообщение
"OpenNews: Организация подсчета трафика под FreeBSD при помощи ng_ipacct "

Отправлено opennews , 23-Авг-05 08:01 
Посетитель под ником Skif прислал подробную статью (http://www.opennet.ru/base/net/ng_billing_letter.txt.html) с описанием настройки пакета ng_ipacct (ftp://ftp.wuppy.net.ru/pub/FreeBSD/local/kernel/ng_ipacct/) и детальный разбор процесса написания Perl скриптов для учета трафика, записывающих данные в MySQL базу.

URL: http://www.opennet.ru/base/net/ng_billing_letter.txt.html
Новость: http://www.opennet.ru/opennews/art.shtml?num=5954


Содержание

Сообщения в этом обсуждении
"Организация подсчета трафика под FreeBSD при помощи ng_ipacct "
Отправлено Аноним , 23-Авг-05 08:01 
>config SKIF - конфигурирование файла ядра,

эта статья о настройке ng_ipacct или о том как правильно собирать ядро?


>&& make clean && rehash

rehash тут нафик не нужен


>После всех этих манипуляций перезагрузим сервер.

ставить модулем или вкомпилить в ядро никакой разницы кроме той что в первом случае не нужно никаких ребутов, а значит первый - лучше.


>В RELENG_5 ядро многонитевое(multithreads)
и далее по тексту до
>Что ж, скачиваем и распаковываем.

это что, введение в архитектуру ядра или способ налить больше воды для придания статье объемистости? гонорар больше кстати.

>/usr/local/script . Если у вас такой нет, рекомендую
создать.

рекомендую почитать man hier и держать скрипты в ~/bin


>Объясним конструкцию if ... else : если вначале строки присутствует

эта статья о настройке ng_ipacct, о том как правильно собирать ядро или о программировании на perl?


>Загрузка необходимого модуля ng_ether
>Загрузка необходимого модуля ng_socket
>Загрузка необходимого модуля ng_tee

что-то я не понял, зачем грузить модули если они уже вкомпилированы в ядро?


>/usr/local/script/ng_stat/log/ng.log

man hier до просветления


>Пятое: Графический или web-интерфейс, для удобоваримого отображения статистики.

ну и где?


"Организация подсчета трафика под FreeBSD при помощи ng_ipacc..."
Отправлено Alexander , 23-Авг-05 10:48 
Да уж вата полная - но кому что...

>> ipfw отрабатывает не все пакеты, поступившие в bpf - пакетный фильтр
>> системы.

Че правда? Может ненароком net.inet.ip.fastforwarding=1.


"Организация подсчета трафика под FreeBSD при помощи ng_ipacc..."
Отправлено ganduras , 24-Авг-05 12:33 
>Да уж вата полная - но кому что...
>
>>> ipfw отрабатывает не все пакеты, поступившие в bpf - пакетный фильтр
>>> системы.
>
>Че правда? Может ненароком net.inet.ip.fastforwarding=1.

ну вообще бывает трафик на одном правиле считается два раза, вместо одного. И это происходит даже с использованием конструкции:
<rule body> in recv <interface name>
или
<rule body> out xmit <interface name>
.

На то, что трафик считается у провайдера немного не так, как у подключенного к нему абоненту, может быть несколько причин:
- провайдер может считать ВСЕ пакеты с/на данный MAC адрес или порт абонента;
- если подключение через ethernet, провайдер может считать пакеты с MAC заголовком, а не чистые IP пакеты;
- вы в курсе, что реальный размер пакета может быть больше, чем указан в заголовке IP пакета ? Разные счетчики по разному относятся к данному факту;
- несоответствие размерности килобайта/мегабайта/etc у пользователя и провайдера :) ;
- борзые терялщики трафика, в качестве счетчика;
- невероятные стечения обстоятельств и способностей отдельных личностей ;)

Автору этой статьи большой поклон. База знаний у каждого из читателей далеко не одинакова. Лучше было бы, если статья после своего выхода обзаводилась флеймом "а что это значит ?" и "как это сделать ?" ?


"Организация подсчета трафика под FreeBSD при помощи ng_ipacc..."
Отправлено Skif , 23-Авг-05 11:48 
>>config SKIF - конфигурирование файла ядра,
>
>эта статья о настройке ng_ipacct или о том как правильно собирать ядро?
>

Если прочитать ман - там и настравать нечего. Это статья всего лиш способ показать, что считалки траффика можно писать и очень просто имея под рукой всего лишь перл и мускул.

>ставить модулем или вкомпилить в ядро никакой разницы кроме той что в
>первом случае не нужно никаких ребутов, а значит первый - лучше.

:)

>
>>В RELENG_5 ядро многонитевое(multithreads)
>и далее по тексту до
>>Что ж, скачиваем и распаковываем.
>

:)
Во первых это не придание объемистости, а пояснение принципов работы нетграфа на разных ветках FreeBSD, во вторых требование редактора ввести сии пояснения
Кстати, а вы сами представляете себе как работает netgraph и ng_ipacct  в частности?

>>/usr/local/script . Если у вас такой нет, рекомендую
>создать.
>
>рекомендую почитать man hier и держать скрипты в ~/bin

Первое, прочтите внимательно статью. Второе, папка /usr/local/script создана для расположения ВСЕХ лично написанных мною скриптов и призвана не захламлять системные папки.
Как по мне это правильный подход для любого админа. Он должен четко знать, где стоит чего-то самопальное. Я этому приучил уже не одного администратора.

>
>
>>Объясним конструкцию if ... else : если вначале строки присутствует
>
>эта статья о настройке ng_ipacct, о том как правильно собирать ядро или
>о программировании на perl?

Внимательно вчитайтесь в название статьи. О системе сбора траффика и ее (системы) написании

>
>
>>Загрузка необходимого модуля ng_ether
>>Загрузка необходимого модуля ng_socket
>>Загрузка необходимого модуля ng_tee
>
>что-то я не понял, зачем грузить модули если они уже вкомпилированы в
>ядро?

А вы внимательностью отличаетесь? Идет проверка наличиствуют ли вкомпиленные опции в ядре, если нет, то выдается информация и происходит загрузка необходимых
>
>
>>/usr/local/script/ng_stat/log/ng.log
>
>man hier до просветления
>
>
>>Пятое: Графический или web-интерфейс, для удобоваримого отображения статистики.
>
>ну и где?

А что реально надо?


"Организация подсчета трафика под FreeBSD при помощи ng_ipacc..."
Отправлено Pbl6a , 23-Авг-05 13:28 

>А что реально надо?


да
;)


"Организация подсчета трафика под FreeBSD при помощи ng_ipacc..."
Отправлено Merlin , 28-Авг-05 01:19 
>
>>А что реально надо?
>
>
>да
>;)
Да, если не трудно, можно где-то выложить эти скрипты?



"Организация подсчета трафика под FreeBSD при помощи ng_ipacc..."
Отправлено AMDmi3 , 23-Авг-05 17:22 
>папка /usr/local/script создана для расположения ВСЕХ лично
>написанных мною скриптов и призвана не захламлять системные папки.
>Как по мне это правильный подход для любого админа. Он должен четко
>знать, где стоит чего-то самопальное. Я этому приучил уже не одного
>администратора.

~/bin именно для этого и придумали


"Организация подсчета трафика под FreeBSD при помощи ng_ipacc..."
Отправлено Skif , 23-Авг-05 18:29 
>~/bin именно для этого и придумали

Все же останусь при своем мнении. :)
Именно так, а не иначе. ИМХО, гораздо правильнее подход


"Организация подсчета трафика под FreeBSD при помощи ng_ipacc..."
Отправлено Артур , 23-Авг-05 20:15 
>>папка /usr/local/script создана для расположения ВСЕХ лично

>~/bin именно для этого и придумали

Поддерживаю Скифа, со своим барохлом обслуживающих скриптов в /usr/local/мое гораздо удобнее поддерживать, бэкапить, работать.
Когда все в одной куче с портами в /usr/local/bin - хрен что найдешь с первого захода.


"Организация подсчета трафика под FreeBSD при помощи ng_ipacc..."
Отправлено Аноним , 24-Авг-05 06:44 
Уважаемые доны не знают что такое ~/ ?
Да не в /bin, не в /usr/bin и не в /usr/local/bin, разуйте глаза! В ~/,  домашнем каталоге пользователя, от которого эти скрипты запускаются, создается каталог bin. Имхо, именно это unix-way, ибо не захламляются потенциально экспортируемые каталоги.

А вот держать логи в /usr/local/script/бла-бла - вообще руки оторвать надо.

>>>папка /usr/local/script создана для расположения ВСЕХ лично
>
>>~/bin именно для этого и придумали
>
>Поддерживаю Скифа, со своим барохлом обслуживающих скриптов в /usr/local/мое гораздо удобнее поддерживать,
>бэкапить, работать.
>Когда все в одной куче с портами в /usr/local/bin - хрен что
>найдешь с первого захода.



"Организация подсчета трафика под FreeBSD при помощи ng_ipacc..."
Отправлено Аноним , 24-Авг-05 22:24 
>Уважаемые доны не знают что такое ~/ ?

Доны посчитали сие за опечатку, ибо трудно поверить, что кто-то пихает системные скрипты в /home.

>Да не в /bin, не в /usr/bin и не в /usr/local/bin, разуйте
>глаза! В ~/,  домашнем каталоге пользователя, от которого эти скрипты
>запускаются, создается каталог bin. Имхо, именно это unix-way, ибо не захламляются
>потенциально экспортируемые каталоги.

Речь про системные скрипты, которые запускаются не только одним пользователем и выполняют _системные_ функции.

>А вот держать логи в /usr/local/script/бла-бла

Вместо /usr/local/script использую /usr/local/имя_проекта (например, /usr/local/traf_acct), со своими etc, bin и share внутри.

>вообще руки оторвать надо.


За ~/bin нужно оторвать, ибо нефиг хранить системные скрипты в /home, который у многих и бэкапится иначе, и лежит на отдельном разеделее с квотами, и exec на нем запрещен, и пути править геморой при переносе и смене пользователя, и юзера убить можно вместе с домашней директорией, и вообще те скрипты из крона не под одним пользователем работают, и...


"Организация подсчета трафика под FreeBSD при помощи ng_ipacc..."
Отправлено Аноним , 25-Авг-05 07:27 
>системные скрипты в /home.
не смешите мои тапочки, прикладные костыли это коим самое место в ~/bin

да, для непонятливых танкистов, ~/bin не обязательно /home/bin это может быть и /usr/local/имя_проекта/bin ;)

>и exec на нем запрещен,
ну вы батенька садист. или мазохист.


"Организация подсчета трафика под FreeBSD при помощи ng_ipacc..."
Отправлено Аноним , 25-Авг-05 22:08 
>>системные скрипты в /home.
>не смешите мои тапочки, прикладные костыли это коим самое место в ~/bin

~/bin какого пользователя, у нас, батенька, давно не однопольщзовательские системы и скриптами пользуется не один человек.

>да, для непонятливых танкистов, ~/bin не обязательно /home/bin это может быть и
>/usr/local/имя_проекта/bin ;)

Симлинки каждому ставить ? И после этого кто из нас мазохист ? :-)

>>и exec на нем запрещен,
>ну вы батенька садист. или мазохист.


"Организация подсчета трафика под FreeBSD при помощи ng_ipacc..."
Отправлено Skif , 26-Авг-05 14:20 
Пальцы веером, сопли пузырями. Все равно все останутся при своем ИМХО. Я делаю так, только так и не иначе. Мне это удобно. У меня это кочует с сервака на сервак.
Да.. И маны почитываем. Так что не надо сарказма... "доны"

"Организация подсчета трафика под FreeBSD при помощи ng_ipacct "
Отправлено gauss , 23-Авг-05 12:29 
хорошая статья. один из лучших способов биллить под фрей, не имея умного железа. критика думаю не к месту

"Организация подсчета трафика под FreeBSD при помощи ng_ipacct "
Отправлено Аноним , 23-Авг-05 12:37 
кроме как
print "Фатальная ошибка ветвления!\n.................\n";
        die "Разделение на процессы не возможно.\n Принудительный выход из дочернего процесса: $!\n";
трудно что то полезное разглядеть

"Организация подсчета трафика под FreeBSD при помощи ng_ipacc..."
Отправлено Skif , 23-Авг-05 18:26 
что мешает заменить на более детальный вывод? Писал под себя посему и вывод такой, который понятен мне.
А код здесь разжеван от и до.

"Организация подсчета трафика под FreeBSD при помощи ng_ipacct "
Отправлено Rastler , 23-Авг-05 12:50 
Статья неплохая, воды конечно много... и самое гланое непонятно назначение всмысле что это и не матчасть, и не рукоыодство к действию, а смесь и того и другово. Если уж автору хотелось осветить теорию, то можно было бы разбить на 2 части и в первой расказать как все это работает теоретичестки. А в общем статья хорошая и слишком то уж наезжать нестоило бы.

"Организация подсчета трафика под FreeBSD при помощи ng_ipacct "
Отправлено Аноним , 23-Авг-05 13:22 
Ребята у меня это делается 2 скриптами:
1)
#!/bin/sh
. /usr/local/stat/etc/stat.conf
ym=`date '+%Y%m'`

${ipacc} c
${ipacc} s a c f $filter >> $last

case $1 in
    'to_billing')

        $quant -c $collector_id -q $quant_size -t ${ym}Details $last > ${last}.sql

        ( echo "CREATE TABLE IF NOT EXISTS ${ym}Details (
            collector tinyint unsigned not null,
            id int unsigned not null default '0',
            source int unsigned not null,
            dest int unsigned not null,
            type tinyint unsigned not null default '0',
            bytes int unsigned not null,
            time int unsigned not null,
            new tinyint unsigned not null default '1',
            PRIMARY KEY (collector,source,dest,bytes,time),
            KEY (collector),
            KEY (source),
            KEY (dest),
            KEY (time),
            KEY (type),
            KEY (id)
        ) TYPE=MyISAM;" ;

        cat ${last}.sql ) | $mysql_program --host=${mysql_host} --port=${mysql_port} \
        --user=${mysql_user} --password="${mysql_password}" ${stat_db}

        if [ $? -eq 0 ]; then
            rm ${last} ${last}.sql
            $good
        else
            $bad
        fi;
        ;;
    *)
        ;;
esac

2)
#!/usr/bin/perl
$collector=1;
$quant_size=100;
$action="INSERT IGNORE";
$table_name=sprintf('%02d%02dDetails',(localtime)[5]+1900,(localtime)[4]+1);
foreach $name (split('\/',$0)) { $basename=$name };

$i=0;
foreach $arg (@ARGV) {
if ($arg=~/-/) {
  $param=$arg;
  $i++;
  if ($param eq "-r") {  $i=0; $action="REPLACE"; }
}
else {
  if ($i>0) {
   $table_name=$arg if ($param eq "-t");
   $quant_size=$arg if ($param eq "-q");
   $collector=$arg if ($param eq "-c");
  }
  else {
   $file=$arg;
  }
  $i=0;
}
}

if (!$file) {
    print "Usage: $basename [options] file\n";
    print "Options:\n\t-c - collector id (default=$collector)\n\t-q - quant size (default=$quant_size)\n\t-t - table name (default=$table_name)\n\t-r - sql: replace (default=insert ignore)\n\n";
    exit 1;
}

open (STAT,"<$file") || die "Can't open file: $!\n";
$i=1;
$entries=0;
while (chomp($_=<STAT>)) {
next if !($_=~'^[0-9 \t]+$');
($src,$dst,$p,$bytes,$time)=split;
$entries++;
if ($i==1 || $quant_size==1) {
  print ("$action INTO $table_name (collector,source,dest,bytes,time) VALUES ($collector,$src,$dst,$bytes,$time)");
  $i++;
  next;
}
print (",($collector,$src,$dst,$bytes,$time)") if ($i<=$quant_size);
if ($i==$quant_size) { printf (";\n"); $i=1; next; }
$i++;
}
print ";" if ($quant_size!=1);
print "INSERT INTO log.UploadLog VALUES (unix_timestamp(),$collector,$entries);";
close STAT;

+ переделанный ipacc под 4.11 c добавлением unix_timestamp первого пакета, выводом ip в виде inet_ntoa и возвращением условленного кода ошибки при вызове ipacc s s в случае 85% заполнения таблицы. Для последнего по крону раз в 1 минуту:
#!/bin/sh
$ipacc s s > /dev/null
if [ $? -eq 10 ]; then
    $statsave
fi

Итого у меня стоит пара-тройка таких считалок, что по сети (через stunnel) заливают статистику на центральную биллинговую машинку. А там работает простенький скрипт на основе запросов, что разделяет трафики на типы в зависимости от адресов получателя-отправителя и подводит итоги в другой табличке уже по моим ip.

ЗЫ: скрипт квант вставляет делает по несколько сотен строк в один insert, что значительно ускоряет процесс :)


"Организация подсчета трафика под FreeBSD при помощи ng_ipacc..."
Отправлено Alexander , 23-Авг-05 13:30 
Забыл сказать, $good/$bad - скрипты, что в случае удачи/неудачи засыла данных на сервачок, убирают/выполняют ахтунг действия - такие как посыл письма мне, зарезание скорости абонентам, переодическое перестукивание морзянкой на спикере считалок международного морского кода об отсутствии связи с сервером и всякая всячина в подобном духе

Александр В.


"Организация подсчета трафика под FreeBSD при помощи ng_ipacc..."
Отправлено Аноним , 23-Авг-05 15:28 
чем решение проще тем оно лучше, молодец! Кстати можно полностью обойтись ОДНИМ скриптом на sh
  

"Организация подсчета трафика под FreeBSD при помощи ng_ipacc..."
Отправлено Spider , 23-Авг-05 18:39 
А слабо этот скипт сюда положить ?

"OpenNews: Организация подсчета трафика под FreeBSD при помощ..."
Отправлено Insane , 24-Авг-05 06:45 
Еще бы postgresql.......

"OpenNews: Организация подсчета трафика под FreeBSD при помощ..."
Отправлено Аноним , 24-Авг-05 12:55 
Господа, взгляните вы наконец на
ng_netflow из портов + http://sourceforge.net/projects/nnfc

Собирается элементарно, настраивается за пять минут, пишет в mysql, postgres, bin, txt файлы.. В отличие от предложенного в статье "агент+коллектор -> база" решение получается не зависимое от агента, писюк это или циска: "агент(ы) -> коллектор+база", масштабируемое, гетерогенное, стандартное.

А такие поделки как в статье, имхо, в сад.


"OpenNews: Организация подсчета трафика под FreeBSD при помощ..."
Отправлено Abu , 26-Авг-05 03:30 
А чтобы с двух интерфейсов собирал статистику - как быть?

"OpenNews: Организация подсчета трафика под FreeBSD при помощ..."
Отправлено Skif , 26-Авг-05 14:21 
>А чтобы с двух интерфейсов собирал статистику - как быть?


перечислить через запятую. Это в статье указано.


"OpenNews: Организация подсчета трафика под FreeBSD при помощ..."
Отправлено Аноним , 25-Авг-05 07:39 
в такой схеме соединений netgraph узлов трафик считается два раза, пакет при входе считается и когда выходит еще раз учитывается

"OpenNews: Организация подсчета трафика под FreeBSD при помощ..."
Отправлено crypt , 25-Авг-05 14:12 
Тема, связанная с топиком. Как обычно организован у людей подсчет трафик для локальных пользователей? Скажем, чтобы считала входящий веб, фтп, почту для клиентов, которым предоставили хостинг?

"OpenNews: Организация подсчета трафика под FreeBSD при помощ..."
Отправлено ganduras , 25-Авг-05 20:44 
>в такой схеме соединений netgraph узлов трафик считается два раза, пакет при
>входе считается и когда выходит еще раз учитывается

Это да ! Кстати беда не только Netgraph-а. Но и BPF и Firewall-а.
Но даже это можно обойти. Правда приходится патчить ядро, но BPF
начинает отделять входящие пакетики от исходящих. Единственно
где они для него всегда исходящие - это lo0 :) На основе этого
патчика в нашей конторе сделанна система обсчета, которая хранит
данные компактней, чем netflow файлы, и обсчет раз в десять быстрее
(если не в большее число раз). Вообщем пакет аналогичен trafd
(см. в портах). Но получился куда более эффективным :) И не страдает
болезнью двойного обсчета, если трафик приходит и уходит с одного и
того же интерфейса.


"OpenNews: Организация подсчета трафика под FreeBSD при помощ..."
Отправлено reaper , 29-Авг-05 07:49 
>На основе этого
>патчика в нашей конторе сделанна система обсчета, которая хранит
>данные компактней, чем netflow файлы, и обсчет раз в десять быстрее
>(если не в большее число раз). Вообщем пакет аналогичен trafd
>(см. в портах). Но получился куда более эффективным :) И не страдает
>болезнью двойного обсчета, если трафик приходит и уходит с одного и
>того же интерфейса.

ну так покажи свой патчик, например статью напиши, а то достали авторизации сквида. или просто выложи, может кто другой из него статью сделает :)


"OpenNews: Организация подсчета трафика под FreeBSD при помощ..."
Отправлено ganduras , 01-Сен-05 12:37 

>ну так покажи свой патчик, например статью напиши, а то достали авторизации
>сквида. или просто выложи, может кто другой из него статью сделает
>:)

сейчас пытаюсь найти коммитера из FreeBSD, кому эта фича была бы интересна
и кто бы его проверил.

Если ничего не получится, тогда да, придется другим путем действовать :)


"OpenNews: Организация подсчета трафика под FreeBSD при помощ..."
Отправлено butcher , 01-Сен-05 12:40 
>сейчас пытаюсь найти коммитера из FreeBSD, кому эта фича была бы интересна
>и кто бы его проверил.

send-pr оформи, если кому-то будет интересно, тебе найдут.


"OpenNews: Организация подсчета трафика под FreeBSD при помощ..."
Отправлено Skif , 26-Авг-05 14:24 
>в такой схеме соединений netgraph узлов трафик считается два раза, пакет при
>входе считается и когда выходит еще раз учитывается


Объяснить можете? Было бы интересно, ибо такого (двойного подсчета)незамечено.


"OpenNews: Организация подсчета трафика под FreeBSD при помощ..."
Отправлено ganduras , 01-Сен-05 11:47 
>>в такой схеме соединений netgraph узлов трафик считается два раза, пакет при
>>входе считается и когда выходит еще раз учитывается
>
>
>Объяснить можете? Было бы интересно, ибо такого (двойного подсчета)незамечено.


Это возникает не всегда, а только когда происходит прием/передача с одного
и того же интерфейса. Например на одном ethernet-е есть две сети
10.0.0.1/24 и 10.0.1.1/24. Если потребуется передать пакет с адреса,
скажем 10.0.0.50 на 10.0.1.50, тут и возникает эта ерунда. Сперва
пакет попадает на счетчик трафика как входящий, и тут же снова
обсчитывается как исходящий. При этом в большенстве случаев неизвестно,
каким является пакет, поступивший на обработку в систему учета трафика -
входящим или исходящим. Все данные, которые есть - это адрес отправителя,
и адрес получателя. Зафиксировать факт того, что пакет был дважды
посчитан, невозможно.

Единственно где это еще можно узнать - это на уровне ядра. Но даже там
нет нормального интерфейса для простого определения данного факта.


"OpenNews: Организация подсчета трафика под FreeBSD при помощ..."
Отправлено Skif , 01-Сен-05 16:24 
>
>Это возникает не всегда, а только когда происходит прием/передача с одного
>и того же интерфейса. Например на одном ethernet-е есть две сети
>10.0.0.1/24 и 10.0.1.1/24. Если потребуется передать пакет с адреса,
>скажем 10.0.0.50 на 10.0.1.50, тут и возникает эта ерунда. Сперва
>пакет попадает на счетчик трафика как входящий, и тут же снова
>обсчитывается как исходящий. При этом в большенстве случаев неизвестно,
>каким является пакет, поступивший на обработку в систему учета трафика -
>входящим или исходящим. Все данные, которые есть - это адрес отправителя,
>и адрес получателя. Зафиксировать факт того, что пакет был дважды
>посчитан, невозможно.
>
>Единственно где это еще можно узнать - это на уровне ядра. Но
>даже там
>нет нормального интерфейса для простого определения данного факта.

Интренесно, а почему это называется багой? Это нормально.Теперь представьте на секунду, что у вас две сети, каждой из которых вам нужно выставить счет. Если этот трафик не будет просчитан вы потеряете деньги или просчитается только одной из них, но все-равно теряете деньги...


"OpenNews: Организация подсчета трафика под FreeBSD при помощ..."
Отправлено ganduras , 01-Сен-05 17:06 

>
>Интренесно, а почему это называется багой? Это нормально.Теперь представьте на секунду, что
>у вас две сети, каждой из которых вам нужно выставить счет.
>Если этот трафик не будет просчитан вы потеряете деньги или просчитается
>только одной из них, но все-равно теряете деньги...

а теперь представим реакцию абонента, когда вместо реального трафика
(причем локального) 1Gb ему выставляется счет на 2Gb. И это не только
ему, а еще тому, с кого он его скачал, но уже в качестве исходящего.
Вот это - коМММерция !

Можно конечно вычислить все роутинги, которые проходят через один
и тот же интерфейс, и делить весь трафик, который там проходит, на 2.

И надо заметить, что я не говорил, что в случае использования патча,
трафик будет потерян, а то, что будет корректно посчитан ! Причем он
все равно отправиться в фильтр два раза, но один раз с пометкой, как
входящий, а во второй, с пометкой как исходящий. По этой информации
можно разобрать пакеты для правильного обсчета всего трафика.