Jump to content

Recommended Posts

Posted

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

Posted
У меня работает так

| 1| User | Password  | == | OpenPass |

| 2| User | Auth-Type | := | MS-CHAP |

т.е пароль должен быть  некриптованный в БД

 

УФ! большое спасибо! заработало. а то целый день убил...

 

ещё два вопроса если можно: вот этот запрос во время работы соединения выполняется автоматически или где-то надо выставлять переодичность его выполнения? accounting_update_query

 

и можно ли сделать так чтобы перед началом сессии radius выдавал бы значение лимита трафика, по превышении которого соединение бы отваливалось?

Posted

Гость,

по поводу лимита, каждые пять минус запускать скрипт который проверяет кол-во скаченных данных и закрыть ему впн =)

через радиус не как

Posted
Гость,

по поводу лимита, каждые пять минус запускать скрипт который проверяет кол-во скаченных данных и закрыть ему впн =)

через радиус не как

 

а можно ли подать команду на разрыв соединения? чтобы радиус записал в базу ту же инфу что и при розрыве соединения со стороны клиента?

Posted
ifdown pppXX ?

 

боюсь, это не выход

 

1) соединение у клиента не отваливается

2) в базу не скидывается информация о сесии.... а это не есть гуд

Posted
Всё, сделал. Оказывается есть элегантное автоматическое решение :)

отключает  само и на ура. :)

Расскажи расскажи :)

 

Рад что кому-то надо :) мож даже опишу где-нибудь как енто всё получилось... а то вроде всё написано - а без напильника не работает

Мне нужно было чтобы по превышению какого-то объёма соединение рвалось и не пущало.

Сначала думал считать скриптом и ронять интерфейс. Нифига - соединение остаётся и данные о сессии в базу не попадают. Однако если прибить вот такой процесс:

/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 можно обойтись и без дополнительных скриптов. но пока - не проверял.

 

всем ещё раз спасибо :) думаю, мне найдёться ещё что спросить

Posted

Плохой вариант. Лучше запускать раз в минуту скрипт, который будет рубить соединения, но как ?! У меня траф считается не через ppp, а ipcad-ом, т.е. все эти "-Limit" будут работать не так, как надо.

 

Как ещё можно рубить соединения ? Причем хотелось бы удаленно. В идеале - snmp или другое стандартное решение.

Posted
Плохой вариант. Лучше запускать раз в минуту скрипт, который будет рубить соединения, но как ?! У меня траф считается не через ppp, а ipcad-ом, т.е. все эти "-Limit" будут работать не так, как надо.

 

Как ещё можно рубить соединения ? Причем хотелось бы удаленно. В идеале - snmp или другое стандартное решение.

 

Хм... В упор не понимаю чем не нравиться. И зачем считать чем-то другим если сам радиус хорошо считает. да и думается что максимальная перекачка в вашем случае будет больше - на хорошем канале за минуту можно прокачать несколько метров.

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

Posted

ИМХО хороший вариант, сегодня прийду домой - проверю

Но, мне кажется что Session-Octets-Limit не очень полезно, гораздо полезнее Total-Octets-Limit а лимит на сеесию вычислять... по аналогии с Time

  • 2 weeks later...
Posted

еще можно посылать радиусу alive пакеты, а в качестве обработчика этих пакетов указать какой-нибудь внешний скриптец простенький.

Posted
Хм... В упор не понимаю чем не нравиться. И зачем считать чем-то другим если сам радиус хорошо считает. да и думается что максимальная перекачка в вашем случае будет больше - на хорошем канале за минуту можно прокачать несколько метров.

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

Что считает радиус ? Количество байт, прошедшее через интерфейс ? А если нужно сделать некоторые ресурсы бесплатными, а некоторые - со скидкой 50% ?!

  • 4 months later...
Posted
Что считает радиус ? Количество байт, прошедшее через интерфейс ? А если нужно сделать некоторые ресурсы бесплатными, а некоторые - со скидкой 50% ?!

Уууу батенька как же вы пииште биллинг если даже РРР не знаете? ;-) У меня РРРое может считать хоть 100 направлений и корректно завершать соединение по истечени лимитов. ИМХО "Фигнёй вы страдаете" :-)

Posted
ИМХО хороший вариант, сегодня прийду домой - проверю  

Но, мне кажется что Session-Octets-Limit не очень полезно, гораздо полезнее Total-Octets-Limit а лимит на сеесию вычислять... по аналогии с Time

А если у вас дифференциация траффика? То есть траффик по локалке по одной цене, а инетовский по другой. Да ещё локальный траффик тарифицируется в гигах, а инетовский в метрах. И как тода быть? :)

Posted
У меня РРРое может считать хоть 100 направлений и корректно завершать соединение по истечени лимитов.

А вот это глупости вы говорте, ибо есть всего 2 направления есть, отправленные на другой коннец туннеля, и полученные с другого конца туннеля! Так что о 100 направлениях тут и речи быть не может. А для того чтобы КОРРЕКТНО вырубать соединение, остаточно послать серверу команду CLOSE.

Posted
Хм... В упор не понимаю чем не нравиться. И зачем считать чем-то другим если сам радиус хорошо считает.

радиус считает только трафик за всю сессию, а с ipcad можно отсмотреть подробную статистику трафика, по времени и по айпишникам.

так ведь ?

Ну если сильно надо - рубить можно грохая процесс. или интерфейс. или как угодно.

а как на счёт файрволла? iptables много чего умеет.

Posted
ИМХО хороший вариант, сегодня прийду домой - проверю

Но, мне кажется что Session-Octets-Limit не очень полезно, гораздо полезнее Total-Octets-Limit а лимит на сеесию вычислять... по аналогии с Time

Прально так у всех и делаеться...

Некоторые переделывают сам демон чтоб он начинал понимать погоровое значения трафика за сессию exppd :)... а некоторые правят сам радиюс http://nibs.net.ua/... кстати на форуме многое уже перелопачено и доделано

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.