FreeRadius + pppoe + Simultaneous-Use

12
Romka_Kharkov
На сайте с 08.04.2009
Offline
485
#11

Я уже частично разобрался в проблеме, сейчас изучаю последствия нововведений.... Думаю через пару дней отпишусь с результатом который таки для многих решит эту проблему ибо на толковые документации я не набрел , а долго искал.....

Есть около 15.000 ipv4 !!! (http://onyx.net.ua/price.php#ipv4) Качественный хостинг с 2005 года - лучшее клиентам! (http://onyx.net.ua/)
Romka_Kharkov
На сайте с 08.04.2009
Offline
485
#12

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

Использую:

FreeRADIUS Version 2.0.1 (версия не супер новая, но согласно bugfix листу, до последней никаких изменений касающихся Simul там нет)

SQL: 5.0.33

Проблемы выглядела следующим образом, как я уже описывал выше, на циске я вижу например 10 сессий под одним логином в radacct вижу всего 1 сессию для этого пользователя. Т.е по факту ни какая Simul проверка не срабатывает вовсе и ей даже не пахнет.

Основная проблема оказалась в том, что в checkrad сценарии использовался cisco_l2tp вид NAS, а он в свою очередь совсем на мой взгляд не верно вынимает SNMP OID из моей циски, я не буду грешить на разработчика этого модуля, вполне может быть разность Иосов на железке или время написания сценария вовсе..... по факту ни "cisco" и "cisco_l2tp" мне не подошли для проверки. Пришлось писать свою, писака из меня не очень но и задача не сложная, сделал собственную процедуру проверки наличия клиентов Cisco.

Первый вариант проверки включал в себя обращение по SNMP к Cisco, вытягивания оттуда кол-ва сессий согласно $username. (В моем случае из аргументов подаваемых на checkrad вообще кроме $username ничего выходит не надо.) Данный пример хоть и увенчался успехом чуть посже был признан не работающим, так как при обращении к SNMP я для каждого чека выгребал около 3-4к записей, соответственно чек занимал от 5 до 15 секунд в зависимости от погодных условий на промежутке Cisco <-> Radius. И в итоге я получал TS-Timeout ошибку и клиента повторно пускало на линию, так как проверка не возвращала результата или возвращала его достаточно поздно.

Второй вариант, пришедший на замену первому нес в себе более легкие и для меня по сути странные изминения, я переписал процедуру исключив из нее SNMP вовсе и теперь я сверяю кол-во открытых сессий в radacct путем SQL запроса в локальный SQL сервер, как вы понимаете проверка происходит за считанные секунды.... а иногда и быстрее ))) соответственно нет больше таймаутов, и нет больше повторных авторизаций, в логи по честному стало валить что-то типа:


Fri Apr 20 10:59:23 2012 : Auth: Multiple logins (max 1) [MPP attempt]: [username@realm] (from client ...... bla bla)

Как это выглядит сейчас:

"users"


DEFAULT NAS-IP-Address == x.x.x.x, Pool-Name := mypoolname
Fall-Through = Yes

DEFAULT Simultaneous-Use := 1
Idle-Timeout := 900,
Fall-Through = Yes

"clients.conf"


# OUR ADSL NAS 2
client x.x.x.x {
secret = SECRET
shortname = NASNAME
nastype = myown_type
}

Далее модификация для checkrad.pl


sub myown_type {
use DBI;
$username = $ARGV[3];

my $dsn = 'DBI:mysql:xxxxx:localhost';
my $db_user_name = 'xxxxx';
my $db_password = 'xxxxx';
my ($count);
my $dbh = DBI->connect($dsn, $db_user_name, $db_password);

my $sth = $dbh->prepare(qq{SELECT count(*) from radacct where username = '$username' and AcctStopTime = 0});
$sth->execute();

($count) = $sth->fetchrow_array();
$sth->finish();

if ($count >= 1) { $ret = 1; }
if ($count < 1) { $ret = 0; }
$ret;
}

А так же в самом низу надо объявить:


} elsif ($ARGV[0] eq 'cisco_l2tp'){
$ret = &cisco_l2tp_snmp;

} elsif ($ARGV[0] eq 'myown_type'){
$ret = &myown_type;


} elsif ($ARGV[0] eq 'mikrotik'){
$ret = &mikrotik_telnet;

После таких вот изменений, у меня все заработало, как многие успели заметить моя проверка мало чем отличается от стандартного simul_count_query.... но какого-то хрена, этот самый count_query никак не выполнялся при любых шаманских танцах и прочем..... Пояснения я пока искать не стал, но думаю скоро найду :D

В итоге то, чего я планировал добиться случилось, теперь я вижу кучу попыток повторной авторизации от клиентов которые или что-то мутят или криво настроены роутеры .... но уже на самой Cisco я вижу по одной сессии для каждого. Не мало важным является параметр Idle-Timeout , он помогает рубать сессии которые более 15 минут в простое находятся, ибо в момент реконекта, все равно допускается появление 2х сессий на Cisco, но вторая умирает в течении короткого времени.

Ну и не забываем, в моем случае у меня на радиусе всего 1 тип клиентов, если у вас их более одного надо использовать Group в "user" и radgroupcheck табличку для указанной группы. Так же вместо clients.conf описание наса может содержаться в файлике "naslist" но я его так же не использую.

Вот такие танцы с бубном ребята, если что пишите :D

pupseg
На сайте с 14.05.2010
Offline
364
#13

О! ТС, ты вовремя.

щас как раз есть проектик на 2000+ авторизаций как раз с твоими проблемами.

попробую, отпишусь. только там NASом 2821,набитая памятью.

Качественная помощь в обслуживании серверов. (/ru/forum/661100) Бесплатных консультаций не даю, не помогаю, не обучаю. Минималка от 100$. Как пропатчить KDE-просьба не спрашивать. Есть форумы (http://linux.org.ru) и полезные сайты (http://www.opennet.ru/).
Romka_Kharkov
На сайте с 08.04.2009
Offline
485
#14
pupseg:
О! ТС, ты вовремя.
щас как раз есть проектик на 2000+ авторизаций как раз с твоими проблемами.
попробую, отпишусь. только там NASом 2821,набитая памятью.

Глаголю истину :D

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий