brab Posted April 11, 2005 Posted April 11, 2005 Hi All! Понадобился мне VPN с авторизацией через Радиус (FreeRadius) и Mysql. Сначала настроил всё без mysql. Работало и по PAP и по MS-CHAP. Подключил Mysql, использовал PAP. работало. Hо гонять пароли по сети в открытом виде не хочется. Изменяю на MS-CHAP - и всё, болт. Радиус не хочет авторизовывать на основе данных из базы. При этом, если не использовать базу а просто в файде users указать: test Auth-Type:=MS-CHAP, User-Password == "test1" то соединение устанавливается и всё нормально! Есть ощущение что я записываю неправильные данные в таблицу radcheck. Сейчас там так: mysql> SELECT id,UserName,Attribute,Value,op FROM radcheck WHERE Username = 'test' ORDER BY id; +----+----------+---------------+-------+----+ | id | UserName | Attribute | Value | op | +----+----------+---------------+-------+----+ | 1 | test | User-Password | test1 | == | +----+----------+---------------+-------+----+ наверное поля Attribute и Value должны быть для MS-CHAP другие, но какие? перерыл всё, но упоминаний нигде не нашёл. Если будет полезной, вот вывод радиуса при попытке авторизоваться по MS-CHAP Ready to process requests. rad_recv: Access-Request packet from host 127.0.0.1:1049, id=82, length=124 Service-Type = Framed-User Framed-Protocol = PPP User-Name = "test" MS-CHAP-Challenge = 0xf9f08e82531502bf MS-CHAP-Response = 0x51010000000000000000000000000000000000000000000000008900ce5efa095a0d32635536f 8f41ec02fab62c93267 NAS-IP-Address = 192.168.0.4 NAS-Port = 0 rlm_sql (cake_sql): Reserving sql socket id: 29 rlm_sql_mysql: query: SELECT id,UserName,Attribute,Value,op FROM radcheck WHERE Username = 'test' ORDER BY id; rlm_sql (cake_sql): Released sql socket id: 29 Login incorrect: [test/<no User-Password attribute>] (from client localhost port 0) rad_recv: Access-Request packet from host 127.0.0.1:1049, id=82, length=124 Sending Access-Reject of id 82 to 127.0.0.1:1049 Вставить ник Quote
sirmax Posted April 11, 2005 Posted April 11, 2005 У меня работает так | 1| User | Password | == | OpenPass | | 2| User | Auth-Type | := | MS-CHAP | т.е пароль должен быть некриптованный в БД Вставить ник Quote
Guest Posted April 11, 2005 Posted April 11, 2005 У меня работает так | 1| User | Password | == | OpenPass | | 2| User | Auth-Type | := | MS-CHAP | т.е пароль должен быть некриптованный в БД УФ! большое спасибо! заработало. а то целый день убил... ещё два вопроса если можно: вот этот запрос во время работы соединения выполняется автоматически или где-то надо выставлять переодичность его выполнения? accounting_update_query и можно ли сделать так чтобы перед началом сессии radius выдавал бы значение лимита трафика, по превышении которого соединение бы отваливалось? Вставить ник Quote
sirmax Posted April 11, 2005 Posted April 11, 2005 я ограничивал только время. по поводу траффика не подскажу :( Вставить ник Quote
netmonster Posted April 11, 2005 Posted April 11, 2005 Гость, по поводу лимита, каждые пять минус запускать скрипт который проверяет кол-во скаченных данных и закрыть ему впн =) через радиус не как Вставить ник Quote
brab Posted April 12, 2005 Author Posted April 12, 2005 Гость, по поводу лимита, каждые пять минус запускать скрипт который проверяет кол-во скаченных данных и закрыть ему впн =) через радиус не как а можно ли подать команду на разрыв соединения? чтобы радиус записал в базу ту же инфу что и при розрыве соединения со стороны клиента? Вставить ник Quote
Guest Posted April 12, 2005 Posted April 12, 2005 ifdown pppXX ? боюсь, это не выход 1) соединение у клиента не отваливается 2) в базу не скидывается информация о сесии.... а это не есть гуд Вставить ник Quote
brab Posted April 12, 2005 Author Posted April 12, 2005 Всё, сделал. Оказывается есть элегантное автоматическое решение :) отключает само и на ура. :) Вставить ник Quote
Ugnich Anton Posted April 12, 2005 Posted April 12, 2005 Всё, сделал. Оказывается есть элегантное автоматическое решение :)отключает само и на ура. :) И что это за решение ? :) Вставить ник Quote
sirmax Posted April 13, 2005 Posted April 13, 2005 Всё, сделал. Оказывается есть элегантное автоматическое решение :)отключает само и на ура. :) Расскажи расскажи :) Вставить ник Quote
brab Posted April 13, 2005 Author Posted April 13, 2005 Всё, сделал. Оказывается есть элегантное автоматическое решение :)отключает само и на ура. :) Расскажи расскажи :) Рад что кому-то надо :) мож даже опишу где-нибудь как енто всё получилось... а то вроде всё написано - а без напильника не работает Мне нужно было чтобы по превышению какого-то объёма соединение рвалось и не пущало. Сначала думал считать скриптом и ронять интерфейс. Нифига - соединение остаётся и данные о сессии в базу не попадают. Однако если прибить вот такой процесс: /usr/sbin/pppd local file /etc/ppp/options.VPN 115200 192.168.0.212 то всё ок. Но это есть неправильно! Вот как проще/лучше. есть таблицы (я говорю про mysql - до postgresql я не дорос ещё) radcheck и radreply Содержимое первой мне подсказал sirmax за что я ему жутко благодарен. mysql> select * from radcheck; +----+----------+-----------+----+---------+ | id | UserName | Attribute | op | Value | +----+----------+-----------+----+---------+ | 1 | test | Password | == | test | | 2 | test | Auth-Type | := | MS-CHAP | +----+----------+-----------+----+---------+ А вот вторая: +----+----------+----------------------+----+---------------+ | id | UserName | Attribute | op | Value | +----+----------+----------------------+----+---------------+ | 3 | test | Framed-IP-Address | := | 192.168.0.212 | | 4 | test | Session-Octets-Limit | := | 8000 | +----+----------+----------------------+----+---------------+ Session-Octets-Limit - это как раз и есть ограничение на сессию! т. е. когда с/на интерфейс пройдёт 8000 байт - соединение отвалиться само. присчём корректно, с записью всей инфы. в логе это выглядет так: Apr 13 15:01:06 test pppd[16606]: Traffic limit reached. Limit: 8000 Used: 8027 Apr 13 15:01:06 test pppd[16606]: Connection terminated. Apr 13 15:01:06 test pppd[16606]: Connect time 0.9 minutes. Apr 13 15:01:06 test pppd[16606]: Sent 3833 bytes, received 4194 bytes. Я не уверен работает это везде или как-то зависит от версии ppp. Это тестилось на ASP Linux 10. НО! к радиусу нужен файлик dictionary.ppp который и содержит в себе определение Session-Octets-Limit. Там ещё есть другие ограничения - по входящему, исходящему и т. д., но пока с ними я не разобрался. Файлик этот я выдрал из системы Cake http://npj.ru/cake - там кстати вообще хорошо эта тема расписана, но для Postgre. Так что задавая таким образом ограничения можно контролировать трафик и отрубать клиентов. Думаю, аоспользовавшись ещё и Octets-Direction можно обойтись и без дополнительных скриптов. но пока - не проверял. всем ещё раз спасибо :) думаю, мне найдёться ещё что спросить Вставить ник Quote
Ugnich Anton Posted April 13, 2005 Posted April 13, 2005 Плохой вариант. Лучше запускать раз в минуту скрипт, который будет рубить соединения, но как ?! У меня траф считается не через ppp, а ipcad-ом, т.е. все эти "-Limit" будут работать не так, как надо. Как ещё можно рубить соединения ? Причем хотелось бы удаленно. В идеале - snmp или другое стандартное решение. Вставить ник Quote
brab Posted April 13, 2005 Author Posted April 13, 2005 Плохой вариант. Лучше запускать раз в минуту скрипт, который будет рубить соединения, но как ?! У меня траф считается не через ppp, а ipcad-ом, т.е. все эти "-Limit" будут работать не так, как надо. Как ещё можно рубить соединения ? Причем хотелось бы удаленно. В идеале - snmp или другое стандартное решение. Хм... В упор не понимаю чем не нравиться. И зачем считать чем-то другим если сам радиус хорошо считает. да и думается что максимальная перекачка в вашем случае будет больше - на хорошем канале за минуту можно прокачать несколько метров. Ну если сильно надо - рубить можно грохая процесс. или интерфейс. или как угодно. если вы трафик радиусом не считаете, то и корректность завершения сессии вам не важна Вставить ник Quote
sirmax Posted April 13, 2005 Posted April 13, 2005 ИМХО хороший вариант, сегодня прийду домой - проверю Но, мне кажется что Session-Octets-Limit не очень полезно, гораздо полезнее Total-Octets-Limit а лимит на сеесию вычислять... по аналогии с Time Вставить ник Quote
Sheriff(SPb) Posted April 13, 2005 Posted April 13, 2005 Есть модуль для фрирадиуса - FreeNIBS. Умеет как раз то что требуется - отрубает, считает и складывает. Вставить ник Quote
gc Posted April 25, 2005 Posted April 25, 2005 еще можно посылать радиусу alive пакеты, а в качестве обработчика этих пакетов указать какой-нибудь внешний скриптец простенький. Вставить ник Quote
Ugnich Anton Posted April 25, 2005 Posted April 25, 2005 Хм... В упор не понимаю чем не нравиться. И зачем считать чем-то другим если сам радиус хорошо считает. да и думается что максимальная перекачка в вашем случае будет больше - на хорошем канале за минуту можно прокачать несколько метров.Ну если сильно надо - рубить можно грохая процесс. или интерфейс. или как угодно. если вы трафик радиусом не считаете, то и корректность завершения сессии вам не важна Что считает радиус ? Количество байт, прошедшее через интерфейс ? А если нужно сделать некоторые ресурсы бесплатными, а некоторые - со скидкой 50% ?! Вставить ник Quote
Guest Posted August 30, 2005 Posted August 30, 2005 Что считает радиус ? Количество байт, прошедшее через интерфейс ? А если нужно сделать некоторые ресурсы бесплатными, а некоторые - со скидкой 50% ?! Уууу батенька как же вы пииште биллинг если даже РРР не знаете? ;-) У меня РРРое может считать хоть 100 направлений и корректно завершать соединение по истечени лимитов. ИМХО "Фигнёй вы страдаете" :-) Вставить ник Quote
xenomorph Posted September 1, 2005 Posted September 1, 2005 ИМХО хороший вариант, сегодня прийду домой - проверю Но, мне кажется что Session-Octets-Limit не очень полезно, гораздо полезнее Total-Octets-Limit а лимит на сеесию вычислять... по аналогии с Time А если у вас дифференциация траффика? То есть траффик по локалке по одной цене, а инетовский по другой. Да ещё локальный траффик тарифицируется в гигах, а инетовский в метрах. И как тода быть? :) Вставить ник Quote
xenomorph Posted September 1, 2005 Posted September 1, 2005 У меня РРРое может считать хоть 100 направлений и корректно завершать соединение по истечени лимитов. А вот это глупости вы говорте, ибо есть всего 2 направления есть, отправленные на другой коннец туннеля, и полученные с другого конца туннеля! Так что о 100 направлениях тут и речи быть не может. А для того чтобы КОРРЕКТНО вырубать соединение, остаточно послать серверу команду CLOSE. Вставить ник Quote
Axeral Posted September 7, 2005 Posted September 7, 2005 Хм... В упор не понимаю чем не нравиться. И зачем считать чем-то другим если сам радиус хорошо считает. радиус считает только трафик за всю сессию, а с ipcad можно отсмотреть подробную статистику трафика, по времени и по айпишникам. так ведь ? Ну если сильно надо - рубить можно грохая процесс. или интерфейс. или как угодно. а как на счёт файрволла? iptables много чего умеет. Вставить ник Quote
Yuz Posted September 7, 2005 Posted September 7, 2005 ИМХО хороший вариант, сегодня прийду домой - проверюНо, мне кажется что Session-Octets-Limit не очень полезно, гораздо полезнее Total-Octets-Limit а лимит на сеесию вычислять... по аналогии с Time Прально так у всех и делаеться... Некоторые переделывают сам демон чтоб он начинал понимать погоровое значения трафика за сессию exppd :)... а некоторые правят сам радиюс http://nibs.net.ua/... кстати на форуме многое уже перелопачено и доделано Вставить ник Quote
Yuz Posted September 7, 2005 Posted September 7, 2005 ууу Пока я кофе попил.. сколько всего написать успели Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.