Страница 1 из 1
Неправильно считает MPD (или Radius)
Добавлено: 2010-05-12 17:29:00
kolossus
Установлен VPN-сервер mpd 5.3 + freeradius-1.1.7_3. + mysql 5.1.33
Написана биллинговая программа на Си для ext-acct.
В ней считываются radius-пары, обсчитывается трафик и т.д.
Для подсчета объема трафика используются следующие пары: "ACCT_INPUT_OCTETS" и "ACCT_OUTPUT_OCTETS".
MPD работает, биллинг считает. Все работает уже около года, все ок.
конфиг ядра, mpd не привожу, т.к. считаю что это неактуально
Потом было решено, что трафик в различных направлениях будет считаться по разным тарифам.
Чтобы не мешать пользователям, на тестовую машинку был установлен mpd 5.5(решил попробовать soa) + freeradius-2.1.8_1. + mysql 5.5.4.
Перенесен биллинг, все проверено, все работает как и на боевом сервере.
Для разделения трафика было введено следующее:
Код: Выделить всё
mpd-filter += 1#1=match dst host 86.57.151.3
mpd-filter += 2#1=match src host 86.57.151.3
mpd-limit += in#1#Local=flt1 pass
mpd-limit += in#2#Biz=all pass
mpd-limit += out#1#Local=flt2 pass
mpd-limit += out#2#Biz=all pass
адрес 86.57.151.3 введен для пробы - качались файлы с него и с других адресов (чтобы сработали два фильтра).
Теперь для трафика выдаются следующие пары:
Код: Выделить всё
ACCT_INPUT_OCTETS:330804344
ACCT_OUTPUT_OCTETS:196578245
и
MPD_INPUT_OCTETS:Local:3583708
MPD_INPUT_OCTETS:Biz:326701694
MPD_OUTPUT_OCTETS"Local:184372655
MPD_OUTPUT_OCTETS:Biz:11923448
Т.е общий трафик и трафик по направлениям (Local, Biz).
Проблема в том, что сумма трафика по направлениям меньше общего трафика.
3583708+326701694=330285402 - 330804344 = -
518942
184372655+11923448=196296103 - 196578245 = -
282142
Вопрос: куда девается трафик?
При большом объеме трафика разница может быть ощутимой.
Может кто-нибудь что-то дельное подскажет?
А то нет уверенности в том, что ты считаешь в своей программе...
Re: Неправильно считает MPD (или Radius)
Добавлено: 2010-05-12 17:37:14
kolossus
Попробовал не качать с local:
Код: Выделить всё
ACCT_INPUT_OCTETS 730810644
ACCT_OUTPUT_OCTETS 23023305
MPD_INPUT_OCTETS Local 0
MPD_INPUT_OCTETS Biz 730014023
MPD_OUTPUT_OCTETS Local 0
MPD_OUTPUT_OCTETS Biz 22670530
Разница :
input: 796621
output:352775
Re: Неправильно считает MPD (или Radius)
Добавлено: 2010-05-12 21:18:11
Гость
а с чего вдруг оно должно сходиться?
вы сели на дырявую трубу и
капает с краника
а
Код: Выделить всё
MPD_INPUT_OCTETS
MPD_INPUT_OCTETS Biz,Local
со всех остальных прогнивших дырочек
Re: Неправильно считает MPD (или Radius)
Добавлено: 2010-05-13 9:05:02
kolossus
Типа сострил...
Если не можешь помочь - лучше помолчи.
Мне нужна помощь а не приколы

Re: Неправильно считает MPD (или Radius)
Добавлено: 2010-05-13 10:32:52
Al
Возможно, в первом случае считается только тсп-удп, а во втором все (+исмп и т.п.). Возможно, в первом случае считается по потокам, а во втором по пакетам.
Я думаю, проще будет отписаться разработчикам. Они либо объяснят, че к чему, либо занесут в баглист. Ну, или забьют)
Отпишись, чем закончится.
Re: Неправильно считает MPD (или Radius)
Добавлено: 2010-05-13 11:01:20
kolossus
Al писал(а):Возможно, в первом случае считается только тсп-удп, а во втором все (+исмп и т.п.). Возможно, в первом случае считается по потокам, а во втором по пакетам.
Я думаю, проще будет отписаться разработчикам. Они либо объяснят, че к чему, либо занесут в баглист. Ну, или забьют)
Отпишись, чем закончится.
Нет, в первом случает также считает все.
Но, в любом случает, отписался разработчикам, как ответят - проинформирую...
Re: Неправильно считает MPD (или Radius)
Добавлено: 2010-05-21 11:03:09
kolossus
kolossus писал(а):Al писал(а):Возможно, в первом случае считается только тсп-удп, а во втором все (+исмп и т.п.). Возможно, в первом случае считается по потокам, а во втором по пакетам.
Я думаю, проще будет отписаться разработчикам. Они либо объяснят, че к чему, либо занесут в баглист. Ну, или забьют)
Отпишись, чем закончится.
Нет, в первом случает также считает все.
Но, в любом случает, отписался разработчикам, как ответят - проинформирую...
Motin написл:
Трафик по типам считается на уровне фильтра - на уровне IP. Общий трафик считается на физическом интерфейсе. Разница возможна за счет фрагментации и overhead'а - в плюс, или за счет сжатия - в минус.
. . .
Если вы продаете полезный трафик - используйте счетчики фильтров. Если продаете тунель - используйте общие счетчики.
В общем, ситуация понятна. Более правильно - считать фильтровый трафик (что скачано - за то и заплачено)

Re: Неправильно считает MPD (или Radius)
Добавлено: 2010-05-23 14:34:28
Al
Слушай, если не затруднит, черкани в 2-х словах, как делал сбор по фильтрам.
Re: Неправильно считает MPD (или Radius)
Добавлено: 2010-05-24 9:11:27
kolossus
Al писал(а):Слушай, если не затруднит, черкани в 2-х словах, как делал сбор по фильтрам.
Есть таблица
radgroupreply:
Код: Выделить всё
CREATE TABLE IF NOT EXISTS `radgroupreply` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`GroupName` varchar(64) NOT NULL DEFAULT '',
`Attribute` varchar(32) NOT NULL DEFAULT '',
`op` char(2) NOT NULL DEFAULT '=',
`Value` varchar(253) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `GroupName` (`GroupName`(32))
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=119 ;
Заносим в нее следующее (пример):
Код: Выделить всё
INSERT INTO `radgroupreply` (`id`, `GroupName`, `Attribute`, `op`, `Value`) VALUES
(105, 'admin_4m', 'mpd-filter', '+=', '1#1=match dst host 86.57.151.3'),
(106, 'admin_4m', 'mpd-filter', '+=', '2#1=match src host 86.57.151.3'),
(107, 'admin_4m', 'mpd-limit', '+=', 'in#1#Local=flt1 pass'),
(108, 'admin_4m', 'mpd-limit', '+=', 'in#2#Biz=all rate-limit 4194304 786432 1572864'),
(109, 'admin_4m', 'mpd-limit', '+=', 'out#1#Local=flt2 pass'),
(110, 'admin_4m', 'mpd-limit', '+=', 'out#2#Biz=all rate-limit 4194304 786432 1572864')
И назначаем пользователю группу
admin_4m.
Теперь при вызове внешнего скрипта помимо пар:
ACCT_INPUT_OCTETS:значение
ACCT_OUTPUT_OCTETS:значение
имеем еще и
MPD_INPUT_OCTETS:
Local:значение
MPD_INPUT_OCTETS:
Biz:значение
MPD_OUTPUT_OCTETS:
Local:значение
MPD_OUTPUT_OCTETS:
Biz:значение
Соответственно парсишь входные строки и получаешь
MPD_INPUT_OCTETS
:(ИМЯ ФИЛЬТРА - )Local
: значение
и т.п.
А дальше в таблицу - и считай...
Re: Неправильно считает MPD (или Radius)
Добавлено: 2010-05-24 10:29:28
Al
Меня вот как раз сбор в мускуль интересует.
Т.е. данные эти можно взять только из лога радиуса? Подобие радаккта на это дело не прикрутить без парсера?
ЗЫ. что есть внешний скрипт? Запрос клиента к радиусу?
Re: Неправильно считает MPD (или Radius)
Добавлено: 2010-05-24 11:32:07
kolossus
Al писал(а):Меня вот как раз сбор в мускуль интересует.
Т.е. данные эти можно взять только из лога радиуса? Подобие радаккта на это дело не прикрутить без парсера?
ЗЫ. что есть внешний скрипт? Запрос клиента к радиусу?
в mpd.conf:
Код: Выделить всё
set auth enable ext-acct
set auth extacct-script /usr/local/etc/mpd5/account
где
/usr/local/etc/mpd5/account - программа собственно аккаунтинга, написанная на си.
Re: Неправильно считает MPD (или Radius)
Добавлено: 2010-05-24 12:06:31
Al
Ну, я имел ввиду средствами радиуса.
Т.е. вкратце
в групреплай добавляем фильтры
в логах парсим значения по этим фильтрам
?
Re: Неправильно считает MPD (или Radius)
Добавлено: 2010-05-24 12:14:56
kolossus
Al писал(а):Ну, я имел ввиду средствами радиуса.
Т.е. вкратце
в групреплай добавляем фильтры
в логах парсим значения по этим фильтрам
?
Я делал через ext-acct, на мой взгляд реализация при помощи программы на Си будет более гибкой, что захочешь - то и будешь в ней делать.
Но это МОЕ мнение, а так - как кому удобнее и привычнее..

Re: Неправильно считает MPD (или Radius)
Добавлено: 2010-05-24 12:31:52
Al
Ну, я так понимаю, туда можно любой шеловский или перловый скрипт запузырить. Скорость -, правда. Возвращаемых значений в нем нет, наск. я понял?
В доках написано,что он альтернатива радаккаунтингу. Вместе не работают?
Re: Неправильно считает MPD (или Radius)
Добавлено: 2010-05-24 13:07:18
Al
Кстате, кому интересно..
В доках мпд написано, что эти параметры (трафик по фильтрам) мпд передает в радус. А в радиусе апдейт скульной базы выведен в прямом виде в конфиге. В виде sql-запроса. Я думаю, создав соотв. структуру базы и дописав в запрос апдейт интересующих параметров должно заработать. Т.е. информация по трафику по фильтрам должна складываться в радакте.
Единственный минус - введение новых фильтров будет предполагать апдейт структуры таблицы.
Может, кто-нть попробует, кому невпадлу?)
Re: Неправильно считает MPD (или Radius)
Добавлено: 2010-05-24 15:25:25
kolossus
Al писал(а):Ну, я так понимаю, туда можно любой шеловский или перловый скрипт запузырить. Скорость -, правда. Возвращаемых значений в нем нет, наск. я понял?
В доках написано,что он альтернатива радаккаунтингу. Вместе не работают?
Отлично работают вместе.
Радиус сохраняет в
radacct, мпд вызывает внешний скрипт и передает ему параметры.
Я, например, модифицировал
radacct и сохраняю в дополнительные поля свои значения.
Re: Неправильно считает MPD (или Radius)
Добавлено: 2010-05-25 7:16:54
Al
Т.е. идея с модификацией радакта работает?
Все можно писать сразу в него, в т.ч. и трафик по фильтрам?
Re: Неправильно считает MPD (или Radius)
Добавлено: 2010-05-25 9:27:19
kolossus
Al писал(а):Т.е. идея с модификацией радакта работает?
Все можно писать сразу в него, в т.ч. и трафик по фильтрам?
Конечно, а почему бы и нет?
Не удаляй поля, которыми пользуется радиус, а в остальном - это обычная таблица (у меня - mysql).