default_vlan Posted July 17, 2018 · Report post Приветствую всех. Не могу подружить сабж. Точнее они дружат, но пользователи не могут залогиниться. Протокол 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 версия даже логин/пароль проверить не может. Может у кого есть готовый конфиг, если не жалко? Спасибо. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
default_vlan Posted July 18, 2018 · Report post Победил. Все что было: 'Password', стало 'Cleartext-Password' '%{SQL-User-Name}' стало '%{User-Name}' '==' стало каким-то хреном ':=' Новый вопрос, чтобы не создавать новую тему. Как скормить ему dictionary.mpd? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
NewUse Posted July 18, 2018 · Report post положить в папку словарей и проверить чтоб формат был корректным. 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. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
default_vlan Posted July 18, 2018 · Report post 4 часа назад, NewUse сказал: из raddb/dictionary положил /usr/local/share/freeradius/ Даже в dictionary пробовал прописывать - не работает. Файл корректен. Суть в том, что скорость назначается запросом authorize_group_reply_query и такое впечатление, что он вообще не заводится. даже в логах о нем ничего. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
NewUse Posted July 18, 2018 · Report post запустите в режиме отладки (параметр -X) Покажите настройки authorize_reply_query и authorize_group_check_query и authorize_group_reply_query Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
default_vlan Posted July 18, 2018 · Report post 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 я не использую. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
NewUse Posted July 18, 2018 · Report post в 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 запроса на примере тестового пользователя. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
default_vlan Posted July 19, 2018 (edited) · Report post 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 July 19, 2018 by default_vlan Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
NewUse Posted July 19, 2018 · Report post radiusd -X смотрите, что происходит. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...