Перейти к содержимому
Калькуляторы

Freeradius3 + MPD5

Приветствую всех.
Не могу подружить сабж. Точнее они дружат, но пользователи не могут залогиниться. Протокол pptp, в первой и второй версии Freeradius использовал не его собственную СУБД, а СУБД биллинга, изменяя только запросы.
 

authorize_check_query = "SELECT abonent.id AS id, username AS login, 'Password', password, '==' FROM abonent INNER JOIN service_by_abonent ON abonent.id = service_by_abonent.id_abonent WHERE username = '%{SQL-User-Name}' AND status = 0 AND ('%{Calling-Station-Id}'=access_ip OR '%{Calling-Station-Id}' REGEXP access_ip) "

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

 

3 версия даже логин/пароль проверить не может.

 

Может у кого есть готовый конфиг, если не жалко?

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Победил.
Все что было:

'Password', стало 'Cleartext-Password'
'%{SQL-User-Name}' стало '%{User-Name}'
'==' стало каким-то хреном ':='

 

Новый вопрос, чтобы не создавать новую тему. Как скормить ему dictionary.mpd?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

положить в папку словарей и проверить чтоб формат был корректным.

 

http://freeradius.org/radiusd/man/dictionary.html

из raddb/dictionary

Цитата
# This is the local dictionary file which can be
# edited by local administrators. It will be loaded
# AFTER the main dictionary files are loaded.
#
# As of version 3.0.2, FreeRADIUS will automatically
# load the main dictionary files from
#
# ${prefix}/share/freeradius/dictionary
#
# It is no longer necessary for this file to $INCLUDE
# the main dictionaries. However, if the $INCLUDE
# line is here, nothing bad will happen.
#
# Any new/changed attributes MUST be placed in this file.

# The pre-defined dictionaries SHOULD NOT be edited.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

4 часа назад, NewUse сказал:

из raddb/dictionary

положил /usr/local/share/freeradius/
Даже в dictionary пробовал прописывать - не работает. Файл корректен.

 

Суть в том, что скорость назначается запросом authorize_group_reply_query и такое впечатление, что он вообще не заводится. даже в логах о нем ничего.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

запустите в режиме отладки (параметр -X)

Покажите настройки   authorize_reply_query и authorize_group_check_query и  authorize_group_reply_query

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1 час назад, NewUse сказал:

Покажите настройки   

authorize_check_query = "SELECT abonent.id AS id, username AS login, 'Cleartext-Password', password, ':=' FROM abonent INNER JOIN service_by_abonent ON abonent.id = service_by_abonent.id_abonent WHERE username = '%{User-Name}' AND status = 0 AND ('%{Calling-Station-Id}'=access_ip OR '%{Calling-Station-Id}' REGEXP access_ip) AND service_by_abonent.id_service=1 AND service_by_abonent.is_deleted=0"

authorize_reply_query = "SELECT id,username,'Framed-IP-Address',INET_NTOA(mod((ext_ip+0x100000000), 0x100000000)) AS ip,'=' FROM abonent WHERE username = '%{User-Name}' ORDER BY id DESC"

authorize_group_reply_query = "SELECT abonent.id, 'shape', 'mpd-limit', IF (GREATEST(abonent.special_speed, abonent.reserved) > 0, CONCAT('in#1=all shape ', GREATEST(abonent.special_speed, abonent.reserved), ' pass'), CONCAT('in#1=all shape ', IF (tariff.special_speed > 0 && current_time() BETWEEN '00:00:00' AND '06:00:00', tariff.special_speed, tariff.speed), ' pass')) AS speed, '+=' FROM abonent INNER JOIN tariff ON abonent.id_tariff = tariff.id WHERE abonent.username = '%{User-Name}' AND abonent.status=0 UNION ALL SELECT -abonent.id, 'shape', 'mpd-limit', IF (GREATEST(abonent.special_speed, abonent.reserved) > 0, CONCAT('out#1=all shape ', GREATEST(abonent.special_speed, abonent.reserved), ' pass'), CONCAT('out#1=all shape ', IF (tariff.special_speed > 0 && current_time() BETWEEN '00:00:00' AND '06:00:00', tariff.special_speed, tariff.speed), ' pass')) AS speed, '+=' FROM abonent INNER JOIN tariff ON abonent.id_tariff = tariff.id WHERE abonent.username = '%{User-Name}' AND abonent.status=0"

 authorize_group_check_query я не использую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

в reply вроде вместо '=' должно быть '=='

 

 
Цитата

 

You can use any query/tables
# you want, but the return data for each row MUST
# be in the following order:
#
# 0. Row ID (currently unused)
# 1. UserName/GroupName
# 2. Item Attr Name
# 3. Item Attr Value

# 4. Item Attr Operation

 

 

 

mpd-limit точно такой атрибут есть в словаре?

 

Выполните оба sql reply запроса на примере тестового пользователя.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

13 часов назад, NewUse сказал:

в reply вроде вместо '=' должно быть '=='

если =, то ответ передается на NAS, == - ответ будет сравниваться. Передача IP для соединения работает без проблем.

 

 

13 часов назад, NewUse сказал:

Выполните оба sql reply запроса на примере тестового пользователя

+--------+-------+-----------+-------------------------------+----+
| id     | shape | mpd-limit | speed                         | += |
+--------+-------+-----------+-------------------------------+----+
|  77936 | shape | mpd-limit | in#1=all shape 20000000 pass  | += |
| -77936 | shape | mpd-limit | out#1=all shape 20000000 pass | += |
+--------+-------+-----------+-------------------------------+----+

вот такой ответ.

 

Словарь mpd

 

#
# dictionary.mpd

VENDOR		mpd		12341

#BEGIN-VENDOR	mpd

ATTRIBUTE	mpd-rule	1	string		mpd
ATTRIBUTE	mpd-pipe	2	string		mpd
ATTRIBUTE	mpd-queue	3	string		mpd
ATTRIBUTE	mpd-table	4	string		mpd
ATTRIBUTE	mpd-table-static	5	string		mpd
ATTRIBUTE	mpd-filter	6	string		mpd
ATTRIBUTE	mpd-limit	7	string		mpd
ATTRIBUTE	mpd-input-octets	8	string		mpd 
ATTRIBUTE	mpd-input-packets	9	string		mpd 
ATTRIBUTE	mpd-output-octets	10	string		mpd 
ATTRIBUTE	mpd-output-packets	11	string		mpd 
ATTRIBUTE	mpd-link	12	string		mpd 
ATTRIBUTE	mpd-bundle	13	string		mpd 
ATTRIBUTE	mpd-iface	14	string		mpd 
ATTRIBUTE	mpd-iface-index	15	integer		mpd 
ATTRIBUTE	mpd-input-acct	16	string		mpd 
ATTRIBUTE	mpd-output-acct	17	string		mpd 
ATTRIBUTE	mpd-drop-user	154	integer		mpd

#END-VENDOR	mpd

 

Словарь перестал работать с Freeradius 2. Если вместо shape передавать имя пользователя также без результатов?

Изменено пользователем default_vlan

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.