Перейти до

Изменение механизма подсчета трафика в STG1.


Рекомендованные сообщения

Сначала предыстория.

Имеется сервер на Linux RH9, процессор P3-800, 256 оперативы. Стоит все это дело на 100МБит канале. У нас в городе такая ситуация - бесплатный трафик по городу и платный за пределы области, его тут называют "внешка". Выбор в свое время (2 года назад) был сделан в пользу stargazer - функционально законченная и очень удобная система. Навороты в плане тарифных планов не требовались - у нас на весь город один тарифный план :) Единственное, что насторожило сразу - довольно большая загрузка процессора.

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

Вариантов было собственно два - либо отказаться от stargazer, либо его доработать. Я склонился ко второму, т.к. система все-таки очень удобная, и пользователям нравится, что трафик можно видеть практически в реальном времени.

Для реализации подсчета трафика было решено использовать счетчики iptables. За основу был взят stargazer 1.1.4.2 beta 4. Вторую версию решил не трогать, т.к., во-первых, необкатанная, а во-вторых, как сказано выше, навороты в плане тарифных планов не требовались.

Взаимодействие с ядром частично сделал с помощью libiptc, а частично вызовами собственно iptables, используя функцию system - как добавлять правила в цепочки с помощью libiptc, пока не разобрался, в будущем, надеюсь, получится ;)

Пришлось подновить авторизатор - старый почему-то не хотел коннектится, хотя тот код я вроде не трогал. С версией 1.0.0.16 все в порядке.

Пока что все в стадии тестирования. Если будут какие-то изменения или баги - сообщу.

Есть желание базу с юзверями запихать в MySQL. Непонятно, почему автор сделал все на текстовых файлах, может, чтобы упростить установку и настройку?

Если кому интересно - пишите, кину код.

P.S. Меня можно найти в IRC сети RUSNet, канал #ultranet

Ссылка на сообщение
Поделиться на других сайтах

В ближайшем билде постараюсь сделать альтернативный вариант захвата пакетов. На выбор захват пакетов наподобие libcap (есть сейчас) и с помощью divert socets (т.е. с помощью файрвола). Второй вариант, как мне кажется, будет сложнее в настройке, но зато гарантированно не будет пропусков пакетов.

 

Всё это отностися к стг-2.

Ссылка на сообщение
Поделиться на других сайтах

Кстати, тут такой трабл может быть, если считать каунтеры iptables (Linux) то тогда прийдётся много переделывать для ipfw (FreeBSD) ... или я не прав?

Ссылка на сообщение
Поделиться на других сайтах
Кстати, тут такой трабл может быть, если считать каунтеры iptables (Linux) то тогда прийдётся много переделывать для ipfw (FreeBSD) ... или я не прав?

Divert sockets есть и под Линукс и под Фрю. Каунтеры считать никто не будет. Всё будет по старому, только изменится источник получения данных о проходящих пакетах.

Ссылка на сообщение
Поделиться на других сайтах

Да, ДА, скорей бы а то я тут уже 5 скриптов напсал которые статистику с каунтеров ipfw снимают и потом в файл stat для каждого пользователя добавляют, я писал уже пост на эту тему но никто не откликнулся....

пост:

http://local.com.ua/forum/index.php?showtopic=963

Ссылка на сообщение
Поделиться на других сайтах
Divert sockets есть и под Линукс и под Фрю. Каунтеры считать никто не будет. Всё будет по старому, только изменится источник получения данных о проходящих пакетах.

Т.е. на примере ipfw будет так: divert порт ip from тырыпыры to вот?

Т.е. нужно будет дивертить или тиить(tee) пакеты старгазеру?

Это, конечно, неплохо.

Но я за bpf'ом ошибок в подсчете не замечал.

Ссылка на сообщение
Поделиться на других сайтах
Divert sockets есть и под Линукс и под Фрю. Каунтеры считать никто не будет. Всё будет по старому, только изменится источник получения данных о проходящих пакетах.

Т.е. также на каждом пакете будет поиск по массиву с юзверями и куча вычислений с плавающей точкой? А если не успеет? Будет пропускать пакеты или будет тормозить скорость передачи?

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...