Александр Чагадаев
Если пользователи жалуются, что Интернет «тормозит», а начальство
ругается, что счета от провайдера слишком большие, покупка готового биллинга –
не единственный выход.
В настоящее время большинство юридических лиц – пользователей Интернета –
оплачивают услуги исходя из количества принятого (и/или переданного) трафика.
Для небольших организаций плата за трафик не
является такой уж незначительной, и остро встаёт вопрос учета трафика,
израсходованного конкретным пользователем, и целей, на которые этот трафик был
потрачен. Проще говоря, руководству организации нужна информация о посещённых
сайтах в случае использования протокола http, скачанных файлах в случае
использования протокола ftp и т. д. Причём некоторых сотрудников бывает сложно
убедить, что большой трафик – результат их собственных действий, если не
предоставить подробного списка ресурсов с данными о трафике.
По тем или иным причинам (забота организации об
информационной безопасности, дефицит реальных IP-адресов у провайдера)
подключение внутренней ЛВС организации к Интернету обычно происходит через роутер,
установленный на границе между внутренней ЛВС организации и Интернетом.
В качестве роутера может использоваться ПК с 2 сетевыми
картами и специальным образом настроенной (включён сервис NAT) сетевой ОС (FreeBSD,
Linux, Windows, Solaris и т. д.). Или же это может быть специально
разработанное устройство (нередко также использующее одну из перечисленных выше
ОС). Возможны и другие варианты, я рассмотрю наиболее распространенный.
В своё время передо мной была именно такая задача
– учёт и ограничение трафика. В качестве роутера использовался ПК с 2 сетевыми
картами и установленной ОС FreeBSD. Несмотря на кажущуюся распространённость –
почти банальность – задачи, полностью устраивающее готовое решение найти не
удалось. (Рассматривались только бесплатные системы.) В результате было принято
решение писать собственную биллинговую систему.
Используемое ПО
Для сбора трафика используется BPFT (http://bpft4.sourceforge.net).
Система построена на основе библиотеки libpcap и использует механизм BPF (Berkley
Packet Filter «pseudo-device») для захвата IP-трафика.
При выборе СУБД я выбирал между MySQL
и Firebird. За Firebird было:
n мой большой опыт работы с ним;
n наличие очень удобного инструмента IBExpert (http://www.ibexpert.com).
Против:
n работа текущей на тот момент версии (1.5)
только из-под inetd. На сервере этот демон не использовался и поднимать его
только ради биллинга не хотелось;
n поддержка транзакций, обеспечивающих большую
надёжность в ущерб скорости, что для нашей системы совершенно неоправданно.
В конечном счёте, я остановился на MySQL (4-я или
5-я версии, но, думаю, будет работать и с 3-й).
Язык программирования для общения с базой данных
– PHP, за C-подобный синтаксис, возможность использования программ на нём как
просто в системе, так и внутри HTML-страниц.