Freeradius accounting

Технические вопросы по UTM 5.0
Ответить
prx
Сообщения: 139
Зарегистрирован: Чт дек 01, 2005 18:44

Freeradius accounting

Сообщение prx »

Долго искал но ничего не нашел.

Можно ли сделать учет трафика пользователя через radius accounting freeradius?

prx
Сообщения: 139
Зарегистрирован: Чт дек 01, 2005 18:44

Сообщение prx »

Придумал как сделать, при каждом аккаунтинг стопе генерим netflow пакет с длиной данных и IP-адресом взятым из аккаунтинг-стоп пакета.

Теперь вопрос как сделать тоже самое только с interim-update'ом?
Ведь присылается количество данных всей сессии а нужно только после предыдущего апдейта.

Аватара пользователя
Magnum72
Сообщения: 1947
Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:

Сообщение Magnum72 »

prx писал(а):Придумал как сделать, при каждом аккаунтинг стопе генерим netflow пакет с длиной данных и IP-адресом взятым из аккаунтинг-стоп пакета.

Теперь вопрос как сделать тоже самое только с interim-update'ом?
Ведь присылается количество данных всей сессии а нужно только после предыдущего апдейта.
У тебя классов трафика сколько?

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

считать разницу между текущим и предыдущим?
Только вот незадача, как обстоят дела в вашем сервере с gigawords? а то будете нетфлоу с отрицательным объемом вливать. Да и решение корявое, на самом деле.

prx
Сообщения: 139
Зарегистрирован: Чт дек 01, 2005 18:44

Сообщение prx »

Классов трафика 2 - incoming outgoing
Если считать разницу между текущим и предыдущим значит надо где-то предыдущий хранить (для каждой сесси).

А какие проблемы могут быть с gigawords?
Да и interim-update у меня 5 min стоит.

По поводу корявости решения - а netflow для клиентов ШПД не коряво?

UPDATE:
По поводу gigaword - NAS шлет :) И freeradius принимает :)

prx
Сообщения: 139
Зарегистрирован: Чт дек 01, 2005 18:44

Сообщение prx »

Если кому надо - функция accounting для rlm_perl:
Генерит temp-файлы в /tmp/radflow
Использует utm5_flowgen из папки /usr/local/bin
Написана функция была сегодня, так что могут быть косяки

Код: Выделить всё

sub accounting {
my $b_in;
my $b_out;
my $b_in_tmp;
my $b_out_tmp;
my $file;
my @bytes;
my $ip;
$b_in = ((2 ** 32) * $RAD_REQUEST{'Acct-Input-Gigawords'}) + $RAD_REQUEST{'Acct-Input-Octets'};
$b_out = ((2 ** 32) * $RAD_REQUEST{'Acct-Output-Gigawords'}) + $RAD_REQUEST{'Acct-Output-Octets'};
$ip = $RAD_REQUEST{'Framed-IP-Address'};
$file = '/tmp/radflow/' . $RAD_REQUEST{'Acct-Unique-Session-Id'} . "_" . $RAD_REQUEST{'Framed-IP-Address'};
if ($RAD_REQUEST{'Acct-Status-Type'} =~ /Start/) 
{ 
    open (TMPFILE, ">".$file);
    print TMPFILE $b_in."\n";
    print TMPFILE $b_out."\n";
    $b_in_tmp = $b_in;
    $b_out_tmp = $b_out;
    close(TMPFILE);
} 
elsif ($RAD_REQUEST{'Acct-Status-Type'} =~ /Stop/) 
{ 
    if (-e $file) {
	open (TMPFILE, $file);
	@bytes = <TMPFILE>;
	$b_in_tmp = $b_in - $bytes&#91;0&#93;;
	$b_out_tmp = $b_out - $bytes&#91;1&#93;;
	close&#40;TMPFILE&#41;;
	unlink&#40;$file&#41;;
    &#125;
&#125; 
elsif &#40;$RAD_REQUEST&#123;'Acct-Status-Type'&#125; =~ /Interim-Update/&#41; 
&#123; 
    if &#40;-e $file&#41; &#123;
	open &#40;TMPFILE, $file&#41;;
	@bytes = <TMPFILE>;
        $b_in_tmp = $b_in - $bytes&#91;0&#93;;
        $b_out_tmp = $b_out - $bytes&#91;1&#93;;
	close&#40;TMPFILE&#41;;
    &#125; else &#123;
    $b_in_tmp = $b_in;
    $b_out_tmp = $b_out;
    &#125;
    open &#40;TMPFILE, ">".$file&#41;;
    print TMPFILE $b_in."\n";
    print TMPFILE $b_out."\n";
    close&#40;TMPFILE&#41;;
&#125;
while &#40;$b_in_tmp>0&#41; &#123;
    if &#40;$b_in_tmp>2000000000 &#41; &#123;
        $b_in_tmp = $b_in_tmp - 2000000000;
        system "/usr/local/bin/utm5_flowgen -h billing -c 1 -b 2000000000 -s 1.2.3.4 -d ".$ip;
    &#125; else &#123;
        system "/usr/local/bin/utm5_flowgen -h billing -c 1 -b ".$b_in_tmp." -s 1.2.3.4 -d ".$ip;
        $b_in_tmp=0;
    &#125;
&#125;
while &#40;$b_out_tmp>0&#41; &#123;
    if &#40;$b_out_tmp>2000000000 &#41; &#123;
        $b_out_tmp = $b_out_tmp - 2000000000;
        system "/usr/local/bin/utm5_flowgen -h billing -c 1 -b 2000000000 -d 1.2.3.4 -s ".$ip;
    &#125; else &#123;
        system "/usr/local/bin/utm5_flowgen -h billing -c 1 -b ".$b_out_tmp." -d 1.2.3.4 -s ".$ip;
        $b_out_tmp=0;
    &#125;
&#125;
return RLM_MODULE_OK;
&#125;


Ответить