Владимир Попов
2006.01.13
Раздельный учёт трафика - довольно актуальная для Украины задача. Практически все провайдеры трафик внутри собственной сети не тарифицируют вообще, а трафик сегмента UAIX тарифицируют раз в 10..30 дешевле трафика за его пределами. (UAIX - в первом приближении - Украина, хотя, если быть точным - альянс держателей ресурсов, трафик между которыми бесплатен (или: почти бесплатен; инициатива Киевского госуниверситета).
Откуда следует, что как только организация или "домовая" сеть покупают выделенку и предлагают доступ через неё более чем одному клиенту - им нужно считать трафик, поскольку отдельный клиент обычно предпочитает оплачивать счета свои, а не соседа по офису или дому.
Для провайдера недостатка средств в решении этой задачи нет: от Cisco, до ПО для любой ОС. И решает он эту задачу в зависимости от масштаба бизнеса и компетенции. Но я-то - не провайдер. В связи с разделяемым доступом к Сети мне всего-то время от времени случается консультировать друзей-знакомых. Причём тех из них, которые Cisco, почему-то, покупать не собираются.
Задача, таким образом, конкретизировалась: нужны средства учёта попроще, да поуниверсальнее. А то: на каждый отдельный случай "не напасёшься".
Философия UNIX и здравый смысл подсказывают, что задачу нужно делить на части. Так, выдавать отчёты нужно, очевидно, через http-сервер, а формировать их с помощью perl или php - личное дело каждого. Данные для отчётов хранить, очевидно, лучше в БД, а будет это MySQL или SQLight - опять-таки: дело хозяйское. С этим, как будто, трудностей не предвидится.
Для задачи разделения учтённого трафика тоже, наверное, специальные средства искать не стоит: уж больно велико разнообразие. Существуют счётчики с фильтрами и существует возможность запуска нескольких таких счётчиков. То есть три счётчика с соответствующими фильтрами могли бы решить задачу. Но фильтр из тысячи записей, описывающий UAIX, да ещё с необходимостью его оперативного контроля... от лукавого. Причём не от того, что живёт в BSD. Не нравится. Принимаем "волевое решение": разделение учтённого трафика будем делать сами, поскольку об условиях разделения только нам и судить. Ну, а средства... bash, perl, python, c - кому что ближе. И вновь: не вижу препятствий.
Не "выясненными" остались средства собственно учёта. Причём круг их, ограниченный заявленными пожеланиями (*-nix пригодность, без излишеств в виде самостоятельной записи в БД и т.п) не так и велик. В результате сравнительно непродолжительных экспериментов предпочтения определились: trafd от Владимира Воробьёва из Новосибирска.
Достоинства:
Недостатки:
Где взять.
В дистфайлах BSD. Или ещё где-нибудь в Сети. По адресу, указанному в README, искать не стоит - информация устарела. Возможно, программа где-то и имеет собственную страничку, но я об этом не знаю: нужды искать не случилось.
Особенности.
Под BSD собирается без проблем. Для Linux есть INSTALL.linux, но поможет не сразу: потребуются исправления в adduser.sh, поскольку форматы groupadd и useradd в Linux и BSD несколько отличаются.
Кроме того, Makefile ищет bpf.h в /usr/include/net/, тогда как во многих Linux-дистрибутивах его там нет. На самом деле bpf.h - только ещё одно название /usr/include/pcap-bpf.h Переписать, или создать симлинк (второе, разумеется, изящнее).
Опыт.
В отсутствие структурированной документации, осмелюсь дать несколько советов:
/etc/trafctl.conf-sample конфигурационный файл /etc/trafctl.conf (см. комментарии внутри файла). Тогда:
/var/trafd/run/trafd.iface). Следствие: если при загрузке обнаружен pid-файл trafd (остался, например, при аварийном выключении PC), то trafd запущен не будет. Лучше самому позаботиться об удалении pid-файла trafd при загрузке, чем позднее убедиться, что после сбоя питания трафик не регистрируется;
Вот, собственно, и всё. 3-х килобайтный Perl-овый Скрипт парсинга plain-text лога, переносящего данные о трафике в БД, и выполняющего операции "конца месяца", не привожу - тривиально. C web-интерфейсом - аналогично.