Jump to content
Калькуляторы

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 версия даже логин/пароль проверить не может.

 

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

Спасибо.

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


Link to post
Share on other sites

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

 

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.

Share this post


Link to post
Share on other sites

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

из raddb/dictionary

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

 

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

Share this post


Link to post
Share on other sites

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

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

 

Share this post


Link to post
Share on other sites

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 я не использую.

Share this post


Link to post
Share on other sites

в 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 запроса на примере тестового пользователя.

 

Share this post


Link to post
Share on other sites

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 передавать имя пользователя также без результатов?

Edited by default_vlan

Share this post


Link to post
Share on other sites

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.