ПЛЗ, ткните где почитать как сделать на FreeBSD VPN-сервер, который должен подключать клиентов к Интернету и вести учет трафика в MySQL.
1.mpd + freeradius + mysql (postgre)
2.poptop + freeradius + mysql (postgre)совсем не vpn
pppoe + freeradius + mysql (postgre)
>1.mpd + freeradius + mysql (postgre)
>2.poptop + freeradius + mysql (postgre)
>
>совсем не vpn
>pppoe + freeradius + mysql (postgre)
Скажите а почему пишут вот такую связку:
mpd + freeradius + FREENIBS+ mysql
Я так почитал и понял что Freeradius и Freenibs - это два радиус сервера.
Так?
>Я так почитал и понял что Freeradius и Freenibs - это два
>радиус сервера.
>Так?
Нет, Freenibs - это модуль для Freeradius (см. http://nibs.net.ua)
>>1.mpd + freeradius + mysql (postgre)
>>2.poptop + freeradius + mysql (postgre)
>>
>>совсем не vpn
>>pppoe + freeradius + mysql (postgre)
>
>
>Скажите а почему пишут вот такую связку:
>mpd + freeradius + FREENIBS+ mysql
>Я так почитал и понял что Freeradius и Freenibs - это два
>радиус сервера.
>Так?там специализированные функции биллинга добавлены.
но вобщем, если привязать простенький скрипт на перле для отключения
пользоватедя по истечению лимита, можно обойтись и без него.
проверено: mpd3.18+freeradius+DropUser+pgsql - работает на ура.
denn
DropUse можно глянуть?
>denn
>DropUse можно глянуть?привожу весь скрипт. из него нужно не все, тк я тут добавил пересчет
трафика из октетов в гривны по курсу доллара, обновление таблицы просмотра своего баланса пользователями и отключение по истечению лимита как
входящего так и исходящего трафика. тоесть это специфика.
главноя строка - это $RAD_REPLY{'Drop-User'} = 'Yes' if ($limB[0]<=$B);#cat DropUser.pl
#!/usr/bin/perl
use strict;
use vars qw(%RAD_REQUEST %RAD_REPLY %RAD_CHECK);
use Data::Dumper;
use DBI;use constant RLM_MODULE_REJECT=> 0;# /* immediately reject the request */
use constant RLM_MODULE_FAIL=> 1;# /* module failed, don't reply */
use constant RLM_MODULE_OK=> 2;# /* the module is OK, continue */
use constant RLM_MODULE_HANDLED=> 3;# /* the module handled the request, so stop. */
use constant RLM_MODULE_INVALID=> 4;# /* the module considers the request invalid. */
use constant RLM_MODULE_USERLOCK=> 5;# /* reject the request (user is locked out) */
use constant RLM_MODULE_NOTFOUND=> 6;# /* user not found */
use constant RLM_MODULE_NOOP=> 7;# /* module succeeded without doing anything */
use constant RLM_MODULE_UPDATED=> 8;# /* OK (pairs modified) */
use constant RLM_MODULE_NUMCODES=> 9;# /* How many return codes there are */sub accounting {
my ($db, $dbh, $sql, $sth, $ref, @limB, $user, $inB, $B, $outB);
$db="dbi:Pg:dbname='vpn'";
$dbh=DBI->connect($db,'vpn','********');
$user="'".$RAD_REQUEST{'User-Name'}."'";
$inB="$RAD_REQUEST{'Acct-Input-Octets'}";
$outB="$RAD_REQUEST{'Acct-Output-Octets'}";
$B=$inB;
$B=$outB if ($inB < $outB);
$sql="select limitoctets from radcheck where username=$user";
$sth=$dbh->prepare($sql);
$sth->execute();
$ref=$sth->fetchrow_arrayref();
@limB=@$ref;
##$limup=int($lim[0]-int($ino);
$dbh->do("update radcheck set active=false where username=$user") if ($limB[0]<=$B);
#$dbh->do("update radcheck set active=false where username=$user") if ($limB[0]<=$inB);
$dbh->do("update radcheck set limitoctets=limitoctets-$B where username=$user") if ($RAD_REQUEST{'Acct-Status-Type'} eq "Stop");
#$dbh->do("update radcheck set limitoctets=limitoctets-$RAD_REQUEST{'Acct-Input-Octets'} where username=$user") if ($RAD_REQUEST{'Acct-Status-Type'} eq "Stop");
$dbh->do("select recalc2($user, 5.4)") if ($RAD_REQUEST{'Acct-Status-Type'} eq "Stop");
$sth->finish();
$dbh->disconnect();
$RAD_REPLY{'Drop-User'} = 'Yes' if ($limB[0]<=$B);
#$RAD_REPLY{'Drop-User'} = 'Yes' if ($limB[0]<=$inB);
return RLM_MODULE_OK;
}