Название: Привязка ip к login
Отправлено: Jovani от 22 Октября 2019, 09:28:05
Установил модуль по инструкции с документации. Сейчас появилось возле каждого IP клиента возможность выбора числа на которое можно привязать IP. Пробую ставить значение, установились, но если обновить страницу все значения становятся пустые. В базе все запросы выполнил. root@localhost [nodeny]> SELECT get_ip_by_num(1, 3); +---------------------+ | get_ip_by_num(1, 3) | +---------------------+ | 172.16.0.100 | +---------------------+ 1 row in set (0.00 sec)
Вывод Radius при авторизации: modules { # Loaded module rlm_sql # Loading module "sql" from file /usr/local/etc/raddb/mods-enabled/sql sql { driver = "rlm_sql_mysql" server = "localhost" port = 3306 login = "root" password = <<< secret >>> radius_db = "nodeny" read_groups = yes read_profiles = yes read_clients = no delete_stale_sessions = yes sql_user_name = "" default_user_profile = "" client_query = "SELECT id,nasname,shortname,type,secret FROM nas" authorize_check_query = "call radcheck('%{User-Name}', 0)" authorize_reply_query = "call radreply('%{User-Name}', '%{User-Password}')" safe_characters = "@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_: /" auto_escape = no accounting { reference = "%{tolower:type.%{Acct-Status-Type}.query}" type { accounting-on { } accounting-off { } start { query = "call radupdate('%{User-Name}','%{Framed-IP-Address}', 'user=%{Calling-Station-Id};nas=%{NAS-IP-Address};ses=%{Acct-Session-Id}')" } interim-update { query = "call radupdate('%{User-Name}','%{Framed-IP-Address}', 'user=%{Calling-Station-Id};nas=%{NAS-IP-Address};ses=%{Acct-Session-Id}')" } stop { query = "call radstop('%{User-Name}', '%{Framed-IP-Address}')" } } } post-auth { reference = ".query" query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}', 'user=%{Calling-Station-Id};nas=%{NAS-IP-Address};ses=%{Acct-Session-Id}')" } } rlm_sql (sql): Driver rlm_sql_mysql (module rlm_sql_mysql) loaded and linked
....................
Ready to process requests (0) Received Access-Request Id 28 from x.x.x.x:34285 to x.x.x.x:1812 length 134 (0) Service-Type = Framed-User (0) Framed-Protocol = PPP (0) NAS-Port = 15728656 (0) NAS-Port-Type = Ethernet (0) User-Name = "vano+0" (0) Calling-Station-Id = "00:5A:0A:3D:07:5D" (0) Called-Station-Id = "nas" (0) NAS-Port-Id = "ether5" (0) CHAP-Challenge = 0x6703b3eda9e156c2c155240e7c419743 (0) CHAP-Password = 0x01c9bc50468195efc3642bcf93f87e055c (0) NAS-Identifier = "nas" (0) NAS-IP-Address = x.x.x.x (0) # Executing section authorize from file /usr/local/etc/raddb/sites-enabled/nodeny (0) authorize { rlm_sql (sql): Reserved connection (0) (0) sql: EXPAND call radcheck('%{User-Name}', 0) (0) sql: --> call radcheck('vano=2B0', 0) (0) sql: Executing select query: call radcheck('vano=2B0', 0) (0) sql: ERROR: rlm_sql_mysql: ERROR 1318 (Incorrect number of arguments for PROCEDURE nodeny.radcheck; expected 1, got 2): 42000 (0) sql: ERROR: Error getting check attributes rlm_sql (sql): Released connection (0) (0) [sql] = fail (0) } # authorize = fail (0) Invalid user (sql: rlm_sql_mysql: ERROR 1318 (Incorrect number of arguments for PROCEDURE nodeny.radcheck; expected 1, got 2): 42000): [vano+0] (from client nas port 15728656 cli 00:5A:0A:3D:07:5D) (0) Using Post-Auth-Type Reject (0) Post-Auth-Type sub-section not found. Ignoring. (0) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny (0) Delaying response for 1.000000 seconds Waking up in 0.3 seconds. (0) (0) Discarding duplicate request from client nas port 34285 - ID: 28 due to delayed response Waking up in 0.6 seconds. (0) (0) Discarding duplicate request from client nas port 34285 - ID: 28 due to delayed response Waking up in 0.3 seconds. (0) Sending delayed response (0) Sent Access-Reject Id 28 from x.x.x.x:1812 to x.x.x.x:34285 length 20 Waking up in 3.9 seconds. (0) Cleaning up request packet ID 28 with timestamp +13 Ready to process requests
Название: Re: Привязка ip к login
Отправлено: Efendy от 22 Октября 2019, 21:34:58
После изменения числа справа должна появится кнопка "ок" и только после ее нажатия сохранится. У тебя она не появляется?
Название: Re: Привязка ip к login
Отправлено: Jovani от 23 Октября 2019, 05:30:24
Кнопка "Ок" есть, я нажимаю. А дальше то что описал в предыдущем посте.
Название: Re: Привязка ip к login
Отправлено: Jovani от 23 Октября 2019, 10:45:39
Проверил несколько раз, после выбора логина с выпадающего списка нажимаю "Ok" установилось значение, но после нажатия Ctrl+F5 поля снова пустые.
Название: Re: Привязка ip к login
Отправлено: Efendy от 23 Октября 2019, 15:37:59
Если переключиться в дебаг режим http://nodeny.com.ua/wiki/index.php/Debug_%D1%80%D0%B5%D0%B6%D0%B8%D0%BC То в дебаге будет ? При нажатии F12 на вкладке console и network есть ошибки?
Название: Re: Привязка ip к login
Отправлено: Jovani от 24 Октября 2019, 06:24:32
UPDATE ip_pool SET tags=',0,' WHERE type='static' AND ip='2886729828' AND uid='1' Строк: 1. Время выполнения sql: 0.0004 сек На вкладке console только это: unreachable code after return statement nody.js:873:8 На вкладке network ошибок нет. Если нажать только на F5 значения в поле остаются, а вот после нажатия Ctrl+F5 становятся пустые. Ошибок нет. Debug включен в stat.pl, я его и не выключал, так как это тестовый тазик.
Название: Re: Привязка ip к login
Отправлено: Efendy от 24 Октября 2019, 08:46:31
На вкладке console только это: unreachable code after return statement nody.js:873:8 Думаю проблема в этом. Javascript делает ajax запросы, если он не работает (с кодом проблема) - нажатие на кнопку "ок" ни к чему не приведет - это еще видно потому, что в дебаге нет обновления ip_pool. Ты nody.js не изменял? Прикрепи его на всякий случай
Название: Re: Привязка ip к login
Отправлено: Jovani от 24 Октября 2019, 09:45:28
Нет, не менял и не изменял. N+ rev.588
Название: Re: Привязка ip к login
Отправлено: Efendy от 24 Октября 2019, 12:06:08
Обнови биллинг, исправил чтоб работало в фаерфоксе
Название: Re: Привязка ip к login
Отправлено: Jovani от 24 Октября 2019, 12:39:49
Обновил. rev 590 Выполнил perl install.pl -x perl install.pl -w=www Никаких результатов. Даже пробую в Chrom тот же результат. Так, если ставлю тег блоку IP... UPDATE ip_pool SET tags=',nas1,0,' WHERE type='static' AND ip='2886729828' AND uid='1' Строк: 1. Время выполнения sql: 0.0003 сек unreachable code after return statement nody.js:873:8 w.focus();
Название: Re: Привязка ip к login
Отправлено: Efendy от 24 Октября 2019, 17:04:40
Так, если ставлю тег блоку IP...
именно блоку или ты его разворачиваешь и напротив каждого ip стоит поле ввода номера? UPDATE ip_pool SET tags=',nas1,0,' WHERE type='static' AND ip='2886729828' AND uid='1' здесь видно, что номер логина устанавливается в 0. Там же в дебаге выше должно быть: a = 'ajUserSetIpLogin' domid = 'mUser_ip_list' ipn = '...' uid = '1' val = 'цифра' цифра равна номеру логина, который ты устанавливаешь? И лучше приведи скриншот с этого места и до UPDATE unreachable code after return statement nody.js:873:8 w.focus(); это нормально и просто предупреждение, что есть код, который никогда не будет выполнен. Там я исключил его из выполнения, пока он не нужен
Название: Re: Привязка ip к login
Отправлено: Jovani от 24 Октября 2019, 17:10:39
Вот это после того как установил логин для первого IP.
Название: Re: Привязка ip к login
Отправлено: Efendy от 24 Октября 2019, 20:11:06
Разобрался. В скрипте переходе с Н50 старая версия вьюхи v_ips. Выполни в консоли mysql: DROP VIEW IF EXISTS v_ips; CREATE ALGORITHM=MERGE VIEW v_ips AS SELECT IF(a.start IS NULL,0,1) AS auth, i.uid, INET_NTOA(i.ip) AS ip, i.ip AS ipn, i.type, i.`release`, IF(a.last<a.start, 0, a.last-a.start) AS tm_auth, a.start, a.last, a.properties, i.tags FROM ip_pool i LEFT JOIN auth_now a ON INET_NTOA(i.ip) = a.ip WHERE i.uid<>0;
Название: Re: Привязка ip к login
Отправлено: Jovani от 24 Октября 2019, 20:35:26
Теперь уже норм. Но радиус говорит что все плохо. (1) Received Access-Request Id 121 from 192.168.52.101:58802 to 192.168.52.100:1812 length 134 (1) Service-Type = Framed-User (1) Framed-Protocol = PPP (1) NAS-Port = 15728682 (1) NAS-Port-Type = Ethernet (1) User-Name = "vano+0" (1) Calling-Station-Id = "B0:50:DA:3D:E7:50" (1) Called-Station-Id = "irsh" (1) NAS-Port-Id = "ether5" (1) CHAP-Challenge = 0x7bf934303d6e2f7400715d45bc93ab62 (1) CHAP-Password = 0x016a8f54b074c530544453e2e605114e04 (1) NAS-Identifier = "irsh" (1) NAS-IP-Address = 192.168.52.102 (1) # Executing section authorize from file /usr/local/etc/raddb/sites-enabled/nodeny (1) authorize { rlm_sql (sql): Reserved connection (1) (1) sql: EXPAND call radcheck('%{User-Name}') (1) sql: --> call radcheck('vano=2B0') (1) sql: Executing select query: call radcheck('vano=2B0') (1) sql: WARNING: Cannot do check groups when group_membership_query is not set rlm_sql (sql): Released connection (1) (1) [sql] = notfound (1) pap: WARNING: No "known good" password found for the user. Not setting Auth-Type (1) pap: WARNING: Authentication will fail unless a "known good" password is available (1) [pap] = noop (1) } # authorize = noop (1) ERROR: No Auth-Type found: rejecting the user via Post-Auth-Type = Reject (1) Failed to authenticate the user (1) Using Post-Auth-Type Reject (1) Post-Auth-Type sub-section not found. Ignoring. (1) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny (1) Delaying response for 1.000000 seconds Waking up in 0.3 seconds. (1) (1) Discarding duplicate request from client irsh port 58802 - ID: 121 due to delayed response Waking up in 0.6 seconds. (1) (1) Discarding duplicate request from client irsh port 58802 - ID: 121 due to delayed response Waking up in 0.4 seconds. (1) Sending delayed response (1) Sent Access-Reject Id 121 from 192.168.52.100:1812 to 192.168.52.101:58802 length 20 Waking up in 3.9 seconds. (1) Cleaning up request packet ID 121 with timestamp +25 Ready to process requests
Название: Re: Привязка ip к login
Отправлено: Efendy от 24 Октября 2019, 21:40:29
call radcheck('vano=2B0') смотрим в документацию к модулю и видим: Также необходимо настроить радиус так, чтобы он не экранировал знак плюса в логине, в sql.conf добавьте:
safe-characters = "@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.+-_: /"
Название: Re: Привязка ip к login
Отправлено: Jovani от 24 Октября 2019, 22:55:57
Я вставил, смотри лог в первом посте. delete_stale_sessions = yes sql_user_name = "" default_user_profile = "" client_query = "SELECT id,nasname,shortname,type,secret FROM nas" authorize_check_query = "call radcheck('%{User-Name}', 0)" authorize_reply_query = "call radreply('%{User-Name}', '%{User-Password}')" safe_characters = "@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_: /" auto_escape = no accounting { reference = "%{tolower:type.%{Acct-Status-Type}.query}" type { accounting-on { } accounting-off { } start { query = "call radupdate('%{User-Name}','%{Framed-IP-Address}', 'user=%{Calling-Station-Id};nas=%{NAS-IP-Address};ses=%{Acct-Session-Id}')" } interim-update { query = "call radupdate('%{User-Name}','%{Framed-IP-Address}', 'user=%{Calling-Station-Id};nas=%{NAS-IP-Address};ses=%{Acct-Session-Id}')" } stop { query = "call radstop('%{User-Name}', '%{Framed-IP-Address}')" } } } post-auth { reference = ".query" query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}', 'user=%{Calling-Station-Id};nas=%{NAS-IP-Address};ses=%{Acct-Session-Id}')" } } rlm_sql (sql): Driver rlm_sql_mysql (module rlm_sql_mysql) loaded and linked
Название: Re: Привязка ip к login
Отправлено: Efendy от 25 Октября 2019, 08:14:48
Плюсика не вижу
Название: Re: Привязка ip к login
Отправлено: Jovani от 25 Октября 2019, 09:16:55
sql { driver = "rlm_sql_mysql" mysql { warnings = auto } server = "localhost" port = 3306 login = "root" password = "hardpass" radius_db = "nodeny" authorize_check_query = "call radcheck('%{User-Name}')" authorize_reply_query = "call radreply('%{User-Name}')" accounting { safe-characters = "@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.+-_: /" query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\ 'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')" type { start { query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\ 'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')" } } } post-auth { query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}',\ 'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')" } }
Название: Re: Привязка ip к login
Отправлено: Efendy от 25 Октября 2019, 10:22:44
Зачем ты добавил в секцию accounting? И видно, что не подхватился параметр радиусом. Ты теряешь время на переписку по таким мелочам. У тебя есть и радиус и тестовая машина и главное ГУГЛ
Название: Re: Привязка ip к login
Отправлено: Jovani от 25 Октября 2019, 14:34:13
Я где только его не ставил, не работает... Последний вариант прикрепил может потому в accounting. А сказать где точно должен быть что так сложно? ;)....
Название: Re: Привязка ip к login
Отправлено: Efendy от 25 Октября 2019, 14:59:12
Ну тогда попробуй использовать в качестве разделителя не плюс, а минус
Название: Re: Привязка ip к login
Отправлено: Redmen от 25 Октября 2019, 15:30:50
не помню с каким насом была такая проблема, но он вместо '+' подставлял '=2B' посмотри здесь: http://forum.nodeny.com.ua/index.php?topic=2310.msg30763#msg30763 (http://forum.nodeny.com.ua/index.php?topic=2310.msg30763#msg30763)
Название: Re: Привязка ip к login
Отправлено: Jovani от 26 Октября 2019, 09:12:01
Ну тогда попробуй использовать в качестве разделителя не плюс, а минус
Сейчас с минусом такая ситуация: конфигурация Radius Файл nodeny server default { listen { type = auth ipaddr = * port = 1812 } listen { type = acct ipaddr = * port = 0 } authorize { sql pap chap mschap } authenticate { Auth-Type PAP { pap } Auth-Type CHAP { chap } Auth-Type MSCHAP { mschap } } preacct { acct_unique preprocess } accounting { sql exec if("%{sql:SELECT IF((SELECT 1 FROM v_ips i JOIN users u ON i.uid=u.id WHERE u.name='%{User-Name}' AND i.ip='%{Framed-IP-Address}'),1,0)}" < 1){ update reply { mpd-drop-user = 1 } } } session { radutmp sql } post-auth { sql } Post-Auth-Type REJECT { sql } } sql authorize_check_query = "call radcheck('%{User-Name}')" authorize_reply_query = "call radreply('%{User-Name}')" accounting { query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\ 'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')" type { start { query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\ 'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')" } } } post-auth { query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}',\ 'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')" } } radcheck DROP PROCEDURE IF EXISTS `radcheck`; DELIMITER $$ CREATE PROCEDURE `radcheck` (IN login VARCHAR(64)) BEGIN DECLARE real_login VARCHAR(64) DEFAULT NULL; SELECT SUBSTRING_INDEX(login, '-', 1) INTO real_login; SELECT id, name, 'Password' AS Attribute, AES_DECRYPT(passwd,'xxxxx') AS Value,'==' FROM users WHERE name=real_login; END$$ DELIMITER ; такой лог Radius (0) # Executing section authorize from file /usr/local/etc/raddb/sites-enabled/nodeny (0) authorize { rlm_sql (sql): Reserved connection (0) (0) sql: EXPAND call radcheck('%{User-Name}') (0) sql: --> call radcheck('vano-1') (0) sql: Executing select query: call radcheck('vano-1') (0) sql: ERROR: Failed to create the pair: Invalid vendor name in attribute name "Password" (0) sql: ERROR: Error parsing user data from database result (0) sql: ERROR: Error getting check attributes rlm_sql (sql): Released connection (0) (0) [sql] = fail (0) } # authorize = fail (0) Invalid user (sql: Failed to create the pair: Invalid vendor name in attribute name "Password"): [vano-1] (from client irsh port 15728764 cli B0:5A:D0:3D:E7:50) (0) Using Post-Auth-Type Reject (0) Post-Auth-Type sub-section not found. Ignoring. (0) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny (0) Delaying response for 1.000000 seconds
Если radcheck такой DROP PROCEDURE IF EXISTS `radcheck`; DELIMITER $$ CREATE PROCEDURE `radcheck` (IN login VARCHAR(64)) BEGIN DECLARE real_login VARCHAR(64) DEFAULT NULL; SELECT SUBSTRING_INDEX(login, '-', 1) INTO real_login; SELECT id, name, 'Cleartext-Password' AS Attribute, AES_DECRYPT(passwd,'xxxxxxx') AS Value,'==' FROM users WHERE name=real_login; END$$ DELIMITER ; тогда лог такой (0) # Executing section authorize from file /usr/local/etc/raddb/sites-enabled/nodeny (0) authorize { rlm_sql (sql): Reserved connection (0) (0) sql: EXPAND call radcheck('%{User-Name}') (0) sql: --> call radcheck('vano-1') (0) sql: Executing select query: call radcheck('vano-1') (0) sql: User found in radcheck table (0) sql: WARNING: Cannot do check groups when group_membership_query is not set rlm_sql (sql): Released connection (0) (0) [sql] = noop (0) pap: WARNING: No "known good" password found for the user. Not setting Auth-Type (0) pap: WARNING: Authentication will fail unless a "known good" password is available (0) [pap] = noop (0) chap: &control:Auth-Type := CHAP (0) [chap] = ok (0) [mschap] = noop (0) } # authorize = ok (0) Found Auth-Type = CHAP (0) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny (0) Auth-Type CHAP { (0) chap: ERROR: &control:Cleartext-Password is required for authentication (0) [chap] = fail (0) } # Auth-Type CHAP = fail (0) Failed to authenticate the user (0) Using Post-Auth-Type Reject (0) Post-Auth-Type sub-section not found. Ignoring. (0) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny (0) Delaying response for 1.000000 seconds Waking up in 0.3 seconds.
Все остальные процедуры такие DROP PROCEDURE IF EXISTS `radreply`; DELIMITER $$ CREATE PROCEDURE `radreply`(IN login VARCHAR(64)) BEGIN DECLARE usr_id INT; DECLARE ip_index INT; DECLARE usr_ip VARCHAR(15) DEFAULT NULL; DECLARE real_login VARCHAR(64) DEFAULT NULL;
SELECT SUBSTRING_INDEX(login, '-', 1) INTO real_login; SELECT CAST(REPLACE(login, real_login, '') AS UNSIGNED) INTO ip_index;
SELECT id INTO usr_id FROM users WHERE name=real_login LIMIT 1; SELECT get_ip_by_num(usr_id, ip_index) INTO usr_ip;
SELECT NULL,login,'Framed-IP-Address',usr_ip,'='; SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','='; SELECT NULL,login,'Framed-Protocol','PPP','='; END$$ DELIMITER ;
DROP PROCEDURE IF EXISTS `radupdate`; DELIMITER $$ CREATE PROCEDURE `radupdate`(IN login VARCHAR(64), IN ip VARCHAR(16), IN properties VARCHAR(255)) BEGIN DECLARE usr_id INT; DECLARE ip_index INT; DECLARE usr_ip VARCHAR(15) DEFAULT NULL; DECLARE real_login VARCHAR(64) DEFAULT NULL;
SELECT SUBSTRING_INDEX(login, '-', 1) INTO real_login; SELECT CAST(REPLACE(login, real_login, '') AS UNSIGNED) INTO ip_index;
SELECT id INTO usr_id FROM users WHERE name=real_login LIMIT 1; SELECT get_ip_by_num(usr_id, ip_index) INTO usr_ip; CALL set_auth(usr_ip, CONCAT('mod=pppoe;',REPLACE(properties,':',''))); END$$ DELIMITER ;
В базе: root@localhost [3newnodeny]> call radreply('vano-1'); +------+--------+-------------------+--------------+---+ | NULL | login | Framed-IP-Address | usr_ip | = | +------+--------+-------------------+--------------+---+ | NULL | vano-1 | Framed-IP-Address | 172.16.0.100 | = | +------+--------+-------------------+--------------+---+ 1 row in set (0.01 sec)
+------+--------+-------------------+-----------------+---+ | NULL | login | Framed-IP-Netmask | 255.255.255.255 | = | +------+--------+-------------------+-----------------+---+ | NULL | vano-1 | Framed-IP-Netmask | 255.255.255.255 | = | +------+--------+-------------------+-----------------+---+ 1 row in set (0.01 sec)
+------+--------+-----------------+-----+---+ | NULL | login | Framed-Protocol | PPP | = | +------+--------+-----------------+-----+---+ | NULL | vano-1 | Framed-Protocol | PPP | = | +------+--------+-----------------+-----+---+ 1 row in set (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
root@localhost [3newnodeny]> call radreply('vano-0'); +------+--------+-------------------+--------------+---+ | NULL | login | Framed-IP-Address | usr_ip | = | +------+--------+-------------------+--------------+---+ | NULL | vano-0 | Framed-IP-Address | 172.16.0.100 | = | +------+--------+-------------------+--------------+---+ 1 row in set (0.00 sec)
+------+--------+-------------------+-----------------+---+ | NULL | login | Framed-IP-Netmask | 255.255.255.255 | = | +------+--------+-------------------+-----------------+---+ | NULL | vano-0 | Framed-IP-Netmask | 255.255.255.255 | = | +------+--------+-------------------+-----------------+---+ 1 row in set (0.00 sec)
+------+--------+-----------------+-----+---+ | NULL | login | Framed-Protocol | PPP | = | +------+--------+-----------------+-----+---+ | NULL | vano-0 | Framed-Protocol | PPP | = | +------+--------+-----------------+-----+---+ 1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
root@localhost [3newnodeny]> call radreply('vano'); +------+-------+-------------------+--------------+---+ | NULL | login | Framed-IP-Address | usr_ip | = | +------+-------+-------------------+--------------+---+ | NULL | vano | Framed-IP-Address | 172.16.0.100 | = | +------+-------+-------------------+--------------+---+ 1 row in set (0.00 sec)
+------+-------+-------------------+-----------------+---+ | NULL | login | Framed-IP-Netmask | 255.255.255.255 | = | +------+-------+-------------------+-----------------+---+ | NULL | vano | Framed-IP-Netmask | 255.255.255.255 | = | +------+-------+-------------------+-----------------+---+ 1 row in set (0.00 sec)
+------+-------+-----------------+-----+---+ | NULL | login | Framed-Protocol | PPP | = | +------+-------+-----------------+-----+---+ | NULL | vano | Framed-Protocol | PPP | = | +------+-------+-----------------+-----+---+ 1 row in set (0.00 sec)
в билинге так root@localhost [3newnodeny]> call radreply('vano-1'); +------+--------+-------------------+--------------+---+ | NULL | login | Framed-IP-Address | usr_ip | = | +------+--------+-------------------+--------------+---+ | NULL | vano-1 | Framed-IP-Address | 172.16.0.100 | = | +------+--------+-------------------+--------------+---+ 1 row in set (0.00 sec)
+------+--------+-------------------+-----------------+---+ | NULL | login | Framed-IP-Netmask | 255.255.255.255 | = | +------+--------+-------------------+-----------------+---+ | NULL | vano-1 | Framed-IP-Netmask | 255.255.255.255 | = | +------+--------+-------------------+-----------------+---+ 1 row in set (0.00 sec)
+------+--------+-----------------+-----+---+ | NULL | login | Framed-Protocol | PPP | = | +------+--------+-----------------+-----+---+ | NULL | vano-1 | Framed-Protocol | PPP | = | +------+--------+-----------------+-----+---+ 1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
root@localhost [3newnodeny]> call radupdate('vano'); ERROR 1318 (42000): Incorrect number of arguments for PROCEDURE 3newnodeny.radupdate; expected 3, got 1 root@localhost [3newnodeny]> call radupdate('vano-0'); ERROR 1318 (42000): Incorrect number of arguments for PROCEDURE 3newnodeny.radupdate; expected 3, got 1 root@localhost [3newnodeny]> call radupdate('vano-1'); ERROR 1318 (42000): Incorrect number of arguments for PROCEDURE 3newnodeny.radupdate; expected 3, got 1
Если sql такой authorize_check_query = "call radcheck('%{User-Name}', 0)" authorize_reply_query = "call radreply('%{User-Name}', '%{User-Password}')" accounting { reference = "%{tolower:type.%{Acct-Status-Type}.query}" type { start { query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\ 'user=%{Calling-Station-Id};nas=%{NAS-IP-Address};ses=%{Acct-Session-Id}')" } interim-update { query = "${..start.query}" } stop { query = "call radstop('%{User-Name}', '%{Framed-IP-Address}')" } } } post-auth { query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}',\ 'user=%{Calling-Station-Id};nas=%{NAS-IP-Address};ses=%{Acct-Session-Id}')" } } то лог такой (0) # Executing section authorize from file /usr/local/etc/raddb/sites-enabled/nodeny (0) authorize { rlm_sql (sql): Reserved connection (0) (0) sql: EXPAND call radcheck('%{User-Name}', 0) (0) sql: --> call radcheck('vano-1', 0) (0) sql: Executing select query: call radcheck('vano-1', 0) (0) sql: ERROR: rlm_sql_mysql: ERROR 1318 (Incorrect number of arguments for PROCEDURE 3newnodeny.radcheck; expected 1, got 2): 42000 (0) sql: ERROR: Error getting check attributes rlm_sql (sql): Released connection (0) (0) [sql] = fail (0) } # authorize = fail (0) Invalid user (sql: rlm_sql_mysql: ERROR 1318 (Incorrect number of arguments for PROCEDURE 3newnodeny.radcheck; expected 1, got 2): 42000): [vano-1] (from client irsh port 15728766 cli B0:50:DA:3D:E7:50) (0) Using Post-Auth-Type Reject (0) Post-Auth-Type sub-section not found. Ignoring. (0) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny (0) Delaying response for 1.000000 seconds
Название: Re: Привязка ip к login
Отправлено: Jovani от 31 Октября 2019, 08:00:21
Прошу подсказать по данному вопросу, как решить авторизацию. Всем кто поможет буду очень благодарен.
Название: Re: Привязка ip к login
Отправлено: Efendy от 31 Октября 2019, 12:21:17
Ну так тебе ж пишет прямым текстом ошибку: [3newnodeny]> call radupdate('vano'); ERROR 1318 (42000): Incorrect number of arguments for PROCEDURE 3newnodeny.radupdate; expected 3, got 1 идем в гугл переводчик, переводим, получаем: Неверное количество аргументов для ПРОЦЕДУРЫ 3newnodeny.radupdate; ожидается 3, получил 1 Тут написано, что процедура принимает 3 параметра, а передается один. Что совершенно очевидно ибо в доке: CREATE PROCEDURE `radupdate`(IN login VARCHAR(64), IN ip VARCHAR(16), IN properties VARCHAR(255)) тут интуитивно понятно, что передается три параметра: В основной доке по радиусу 2 (http://nodeny.com.ua/wiki/index.php/PPPoE) в этой процедуре тоже 3 параметра. Если посмотреть в поставку биллинга в файл sql.conf, там при вызове radupdate передается 3 параметра: accounting_update_query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\ 'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')" Но при этом ты тестируешь передачей одного параметра: стопудова лучше подождать несколько дней чем увидеть, что вместо radupdate нужно написать radcheck. И в radcheck передается один параметр, а не несколько как ты пробуешь. Рандомно нет смысла. Там все просто, достаточно вникнуть как оно работает. radcheck принимает логин. Делит его на 2 части, первая - настоящий логин, вторая - номер ip в списке
Название: Re: Привязка ip к login
Отправлено: Jovani от 01 Ноября 2019, 10:52:12
Я понял что radcheck должен делить на две части. Сейчас использую минус вместо плюс. Но не понимаю сейчас что и где нужно в radcheck добавить. Сейчас ожидает 1, получил 2 параметра... Ни как не могу разобраться. Туго доходит, извините. (0) sql: --> call radcheck('vano-1', 0) (0) sql: Executing select query: call radcheck('vano-1', 0) (0) sql: ERROR: rlm_sql_mysql: ERROR 1318 (Incorrect number of arguments for PROCEDURE 3newnodeny.radcheck; expected 1, got 2): 42000 (0) sql: ERROR: Error getting check attributes rlm_sql (sql): Released connection (0) (0) [sql] = fail (0) } # authorize = fail (0) Invalid user (sql: rlm_sql_mysql: ERROR 1318 (Incorrect number of arguments for PROCEDURE 3newnodeny.radcheck; expected 1, got 2): 42000): [vano-1] (from client irsh port 15728839 cli B0:5A:DA:3D:E7:5D) (0) Using Post-Auth-Type Reject (0) Post-Auth-Type sub-section not found. Ignoring. (0) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny (0) Delaying response for 1.000000 seconds
root@localhost [3newnodeny]> SELECT get_ip_by_num(1, 1); +---------------------+ | get_ip_by_num(1, 1) | +---------------------+ | 172.16.0.100 | +---------------------+ 1 row in set (0.00 sec)
root@localhost [3newnodeny]> SELECT get_ip_by_num(1, 0); +---------------------+ | get_ip_by_num(1, 0) | +---------------------+ | 172.16.0.102 | +---------------------+ 1 row in set (0.00 sec)
root@localhost [3newnodeny]> call radcheck('vano-1'); +----+------+--------------------+----------+----+ | id | name | Attribute | Value | == | +----+------+--------------------+----------+----+ | 1 | vano | Cleartext-Password | xxxxxx | == | +----+------+--------------------+----------+----+ 1 row in set (0.00 sec)
root@localhost [3newnodeny]> call radreply('vano-1'); +------+--------+-------------------+--------------+---+ | NULL | login | Framed-IP-Address | usr_ip | = | +------+--------+-------------------+--------------+---+ | NULL | vano-1 | Framed-IP-Address | 172.16.0.102 | = | +------+--------+-------------------+--------------+---+ 1 row in set (0.00 sec)
+------+--------+-------------------+-----------------+---+ | NULL | login | Framed-IP-Netmask | 255.255.255.255 | = | +------+--------+-------------------+-----------------+---+ | NULL | vano-1 | Framed-IP-Netmask | 255.255.255.255 | = | +------+--------+-------------------+-----------------+---+ 1 row in set (0.00 sec)
+------+--------+-----------------+-----+---+ | NULL | login | Framed-Protocol | PPP | = | +------+--------+-----------------+-----+---+ | NULL | vano-1 | Framed-Protocol | PPP | = | +------+--------+-----------------+-----+---+ 1 row in set (0.00 sec)
Не понимаю почему IP vano-0 тоже 172.16.0.102 root@localhost [3newnodeny]> call radreply('vano-0'); +------+--------+-------------------+--------------+---+ | NULL | login | Framed-IP-Address | usr_ip | = | +------+--------+-------------------+--------------+---+ | NULL | vano-0 | Framed-IP-Address | 172.16.0.102 | = | +------+--------+-------------------+--------------+---+ 1 row in set (0.00 sec)
+------+--------+-------------------+-----------------+---+ | NULL | login | Framed-IP-Netmask | 255.255.255.255 | = | +------+--------+-------------------+-----------------+---+ | NULL | vano-0 | Framed-IP-Netmask | 255.255.255.255 | = | +------+--------+-------------------+-----------------+---+ 1 row in set (0.00 sec)
+------+--------+-----------------+-----+---+ | NULL | login | Framed-Protocol | PPP | = | +------+--------+-----------------+-----+---+ | NULL | vano-0 | Framed-Protocol | PPP | = | +------+--------+-----------------+-----+---+ 1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
DROP PROCEDURE IF EXISTS `radcheck`; DELIMITER $$ CREATE PROCEDURE `radcheck` (IN login VARCHAR(64)) BEGIN DECLARE real_login VARCHAR(64) DEFAULT NULL; SELECT SUBSTRING_INDEX(login, '-', 1) INTO real_login; SELECT id, name, 'Cleartext-Password' AS Attribute, AES_DECRYPT(passwd,'xxxxxxx') AS Value,'==' FROM users WHERE name=real_login; END$$ DELIMITER ; authorize_check_query = "call radcheck('%{User-Name}', 0)" authorize_reply_query = "call radreply('%{User-Name}', '%{User-Password}')" accounting { reference = "%{tolower:type.%{Acct-Status-Type}.query}" type { start { query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\ 'user=%{Calling-Station-Id};nas=%{NAS-IP-Address};ses=%{Acct-Session-Id}')" } interim-update { query = "${..start.query}" } stop { query = "call radstop('%{User-Name}', '%{Framed-IP-Address}')" } } } post-auth { query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}',\ 'user=%{Calling-Station-Id};nas=%{NAS-IP-Address};ses=%{Acct-Session-Id}')" } }
Название: Re: Привязка ip к login
Отправлено: Efendy от 01 Ноября 2019, 12:14:23
зачем ты добавил ноль? authorize_check_query = "call radcheck('%{User-Name}', 0)"
Название: Re: Привязка ip к login
Отправлено: Jovani от 04 Ноября 2019, 07:56:00
Если без нуля то лог такой (0) # Executing section authorize from file /usr/local/etc/raddb/sites-enabled/nodeny (0) authorize { rlm_sql (sql): Reserved connection (0) (0) sql: EXPAND call radcheck('%{User-Name}') (0) sql: --> call radcheck('vano-1') (0) sql: Executing select query: call radcheck('vano-1') (0) sql: User found in radcheck table (0) sql: WARNING: Cannot do check groups when group_membership_query is not set rlm_sql (sql): Released connection (0) (0) [sql] = noop (0) pap: WARNING: No "known good" password found for the user. Not setting Auth-Type (0) pap: WARNING: Authentication will fail unless a "known good" password is available (0) [pap] = noop (0) chap: &control:Auth-Type := CHAP (0) [chap] = ok (0) [mschap] = noop (0) } # authorize = ok (0) Found Auth-Type = CHAP (0) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny (0) Auth-Type CHAP { (0) chap: ERROR: &control:Cleartext-Password is required for authentication (0) [chap] = fail (0) } # Auth-Type CHAP = fail (0) Failed to authenticate the user (0) Using Post-Auth-Type Reject (0) Post-Auth-Type sub-section not found. Ignoring. (0) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny (0) Delaying response for 1.000000 seconds
Название: Re: Привязка ip к login
Отправлено: Efendy от 04 Ноября 2019, 11:19:17
Настройка без разделения логина работает? Настрой сначала так. Иначе будет очень долго: ты будешь допускать ошибку, я буду тыкать в документацию и так бесконечно
Название: Re: Привязка ip к login
Отправлено: Jovani от 04 Ноября 2019, 16:57:38
Без разделения работает. Но при других процедурах.
Название: Re: Привязка ip к login
Отправлено: Redmen от 04 Ноября 2019, 17:31:29
Без разделения работает. Но при других процедурах.
Надоело! >:( Выложи процедуры, которые работают! проще самому сделать, чем это терпеть
Название: Re: Привязка ip к login
Отправлено: Jovani от 04 Ноября 2019, 18:38:31
С такими без разделителя работает. PPPOE Mikrotik DROP PROCEDURE IF EXISTS `radcheck`; DELIMITER $$ CREATE PROCEDURE `radcheck` (IN login VARCHAR(64)) BEGIN SELECT id,name,'Cleartext-Password' AS Attribute,AES_DECRYPT(passwd,'xxxxxxx') AS Value,':=' FROM users WHERE name=login; END$$ DELIMITER ;
DROP PROCEDURE IF EXISTS `radreply`; DELIMITER $$ CREATE PROCEDURE `radreply`(IN login VARCHAR(64)) BEGIN DECLARE usr_id INT; DECLARE usr_ip VARCHAR(15) DEFAULT NULL;
SELECT id INTO usr_id FROM users WHERE name=login LIMIT 1; SELECT get_ip(usr_id) INTO usr_ip;
SELECT NULL,login,'Framed-IP-Address',usr_ip,'='; SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','='; SELECT NULL,login,'Framed-Protocol','PPP','='; END$$ DELIMITER ;
DROP PROCEDURE IF EXISTS `radupdate`; DELIMITER $$ CREATE PROCEDURE `radupdate`(IN login VARCHAR(64), IN ip VARCHAR(16), IN properties VARCHAR(255)) BEGIN DECLARE usr_id INT; DECLARE usr_ip VARCHAR(15) DEFAULT NULL; SELECT id INTO usr_id FROM users WHERE name=login LIMIT 1; SELECT get_ip(usr_id) INTO usr_ip; CALL set_auth(usr_ip, CONCAT('mod=pppoe;',REPLACE(properties,':',''))); END$$ DELIMITER ;
DROP PROCEDURE IF EXISTS `radstop`; DELIMITER $$ CREATE PROCEDURE `radstop`(IN login VARCHAR(64)) BEGIN DECLARE usr_id INT; SELECT id INTO usr_id FROM users WHERE name=login LIMIT 1; DELETE FROM auth_now WHERE ip = get_ip(usr_id) LIMIT 1; END$$ DELIMITER ; И такими без разделителя работает MPD5 BEGIN SELECT id, name, 'Cleartext-Password' AS Attribute, AES_DECRYPT(passwd, 'xxxxxxx') AS Value,':=' FROM users u WHERE name=login AND IF(only_one_session < 1, true, NOT EXISTS (SELECT 1 FROM v_ips WHERE uid=u.id AND auth=1 AND last>(UNIX_TIMESTAMP() - 300) LIMIT 1) ); END BEGIN DECLARE usr_id INT; DECLARE usr_ip VARCHAR(15) DEFAULT NULL; SELECT id INTO usr_id FROM users WHERE name=login AND password=AES_DECRYPT(passwd, 'xxxxxxxx') LIMIT 1; IF( usr_id IS NOT NULL ) THEN SELECT get_ip(usr_id) INTO usr_ip; SELECT NULL,login,'Framed-IP-Address',usr_ip,'='; SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','='; SELECT NULL,login,'Framed-Protocol','PPP','='; END IF; END BEGIN DECLARE usr_id INT; DECLARE auth_prop VARCHAR(255); DECLARE start_auth INT UNSIGNED; SELECT u.id, i.properties, i.start INTO usr_id, auth_prop, start_auth FROM v_ips i JOIN users u ON i.uid=u.id WHERE u.name=login AND i.ip=usr_ip AND i.auth=1; IF( usr_id IS NOT NULL ) THEN INSERT INTO auth_log (uid, ip, start, end, properties) VALUES (usr_id, INET_ATON(usr_ip), start_auth, UNIX_TIMESTAMP(), auth_prop); DELETE FROM auth_now WHERE ip=usr_ip LIMIT 1; END IF; END BEGIN IF( SELECT 1 FROM v_ips i JOIN users u ON i.uid=u.id WHERE u.name=login AND i.ip=usr_ip ) THEN CALL set_auth(usr_ip, CONCAT('mod=pppoe;',REPLACE(properties,':',''))); END IF; UPDATE users SET name=login WHERE name=login LIMIT 1; END
Название: Re: Привязка ip к login
Отправлено: Efendy от 04 Ноября 2019, 23:30:28
Как я вижу, ты используешь 3й радиус, но замечания по его настойке не учтены. Ознакомься: - http://forum.nodeny.com.ua/index.php?topic=3004.msg35123#msg35123
- документация (http://nodeny.com.ua/wiki/index.php/Pppoe_(mpd5_%2B_freeradius_3))
в частности: Я нашел причину, почему не получилось проверить пароль - новый радиус в ответе процедуры radcheck требует :=, а не == Радиус 2 и 3 сильно отличаются, я не могу написать стопицот настроек и под тот и тот вариант, надо самому смотреть отличия и вносить коррективы P.S. Вот я и понял откуда в radcheck у тебя в конце 0 - это фича биллинга чисто для 3го радиуса. Ты ее тоже можешь заюзать. Если не получится, я попробую перевести под 3й радиус завтра и этот модуль.
Название: Re: Привязка ip к login
Отправлено: Jovani от 05 Ноября 2019, 07:20:09
Да у меня Radius3. Стас я это читал. В самом начале когда с этим модулем тр***ся, пробовал ставить :=, кажется тогда логинюсь даже с неправильным паролем. И оставил так ==. Уже столько вариантов попробовал, что путаюсь если честно... Если не получится, я попробую перевести под 3й радиус завтра и этот модуль. Буду тебе очень благодарен за помощь.
Название: Re: Привязка ip к login
Отправлено: Redmen от 05 Ноября 2019, 11:07:44
Пробуй: # Для некоторых насов нужно поменять разделитель с '+' на '=2B'
DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `radcheck`(IN `login` VARCHAR(64)) BEGIN DECLARE real_login VARCHAR(64) DEFAULT NULL; SELECT SUBSTRING_INDEX(login, '+', 1) INTO real_login; SELECT id, name, 'Cleartext-Password' AS Attribute, AES_DECRYPT(passwd,'xxxxxxxxxx') AS Value,':=' FROM users WHERE name=real_login; END$$ DELIMITER ;
DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `radreply`(IN `login` VARCHAR(64)) BEGIN DECLARE usr_id INT; DECLARE ip_index INT ; DECLARE usr_ip VARCHAR(15) DEFAULT NULL; DECLARE real_login VARCHAR(64) DEFAULT NULL;
SELECT SUBSTRING_INDEX(login, '+', 1) INTO real_login; IF login REGEXP '[+][0-9]+$' THEN SELECT CAST(REPLACE(REPLACE(login, real_login, ''),'+','') AS UNSIGNED) INTO ip_index; ELSE SET ip_index=0;END IF;
SELECT id INTO usr_id FROM users WHERE name=real_login LIMIT 1; SELECT get_ip_by_num(usr_id, ip_index) INTO usr_ip;
SELECT NULL,login,'Framed-IP-Address',usr_ip,'='; SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','='; SELECT NULL,login,'Framed-Protocol','PPP','='; END$$ DELIMITER ;
DROP FUNCTION IF EXISTS `get_ip_by_num`; DELIMITER $$ CREATE FUNCTION `get_ip_by_num` ( user_id INTEGER UNSIGNED, num INTEGER ) RETURNS VARCHAR(15) NO SQL BEGIN DECLARE user_ip VARCHAR(15); DECLARE real_ip VARCHAR(15);
SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool WHERE uid = user_id AND type = 'static' AND tags LIKE CONCAT('%,', num, ',%') LIMIT 1; IF( user_ip IS NOT NULL ) THEN RETURN user_ip; END IF;
SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool WHERE uid = user_id AND type='static' LIMIT 1; IF( user_ip IS NOT NULL ) THEN RETURN user_ip; END IF;
SELECT 1 INTO real_ip FROM users_services WHERE uid = user_id AND tags LIKE '%,realip,%'; UPDATE ip_pool SET uid = user_id, `release` = UNIX_TIMESTAMP() + 300 WHERE id = (SELECT id FROM ( ( SELECT id, uid FROM ip_pool WHERE uid = 0 AND type = 'dynamic' AND realip = IF(real_ip>0,1,0) LIMIT 1 ) UNION ( SELECT id, uid FROM ip_pool WHERE uid = user_id AND type = 'dynamic' AND realip = IF(real_ip>0,1,0) LIMIT 1 ) ) AS tbl ORDER BY uid DESC LIMIT 1);
SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool WHERE uid = user_id LIMIT 1; RETURN user_ip; END$$ DELIMITER ;
DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `radupdate`(IN `login` VARCHAR(64), IN `ip` VARCHAR(16), IN `properties` VARCHAR(255)) BEGIN DECLARE usr_id INT; DECLARE usr_ip VARCHAR(15) DEFAULT NULL; DECLARE real_login VARCHAR(64) DEFAULT NULL; DECLARE ip_index INT ; SELECT SUBSTRING_INDEX(login, '+', 1) INTO real_login; IF login REGEXP '[+][0-9]+$' THEN SELECT CAST(REPLACE(REPLACE(login, real_login, ''),'+','') AS UNSIGNED) INTO ip_index; ELSE SET ip_index=0;END IF; SELECT id INTO usr_id FROM users WHERE name=real_login LIMIT 1; SELECT get_ip_by_num(usr_id, ip_index) INTO usr_ip; CALL set_auth(ip, CONCAT('mod=pppoe;',REPLACE(properties,':',''))); END$$ DELIMITER ;
Название: Re: Привязка ip к login
Отправлено: Jovani от 05 Ноября 2019, 15:52:27
Пробовал разные варианты, вот логи С + такая ошибка (0) # Executing section authorize from file /usr/local/etc/raddb/sites-enabled/nodeny (0) authorize { rlm_sql (sql): Reserved connection (0) (0) sql: EXPAND call radcheck('%{User-Name}') (0) sql: --> call radcheck('vano=2B1') (0) sql: Executing select query: call radcheck('vano=2B1') (0) sql: WARNING: Cannot do check groups when group_membership_query is not set rlm_sql (sql): Released connection (0) (0) [sql] = notfound (0) pap: WARNING: No "known good" password found for the user. Not setting Auth-Type (0) pap: WARNING: Authentication will fail unless a "known good" password is available (0) [pap] = noop (0) chap: &control:Auth-Type := CHAP (0) [chap] = ok (0) [mschap] = noop (0) } # authorize = ok (0) Found Auth-Type = CHAP (0) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny (0) Auth-Type CHAP { (0) chap: ERROR: &control:Cleartext-Password is required for authentication (0) [chap] = fail (0) } # Auth-Type CHAP = fail (0) Failed to authenticate the user (0) Using Post-Auth-Type Reject (0) Post-Auth-Type sub-section not found. Ignoring. (0) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny (0) Delaying response for 1.000000 seconds Заменил + на =2B 0) # Executing section authorize from file /usr/local/etc/raddb/sites-enabled/nodeny (0) authorize { rlm_sql (sql): Reserved connection (0) (0) sql: EXPAND call radcheck('%{User-Name}') (0) sql: --> call radcheck('vano=2B1') (0) sql: Executing select query: call radcheck('vano=2B1') (0) sql: User found in radcheck table (0) sql: Conditional check items matched, merging assignment check items (0) sql: Cleartext-Password := "1111111" (0) sql: EXPAND call radreply('%{User-Name}','%{User-Password}') (0) sql: --> call radreply('vano=2B1','') (0) sql: Executing select query: call radreply('vano=2B1','') (0) sql: ERROR: rlm_sql_mysql: ERROR 1318 (Incorrect number of arguments for PROCEDURE 3newnodeny.radreply; expected 1, got 2): 42000 (0) sql: ERROR: SQL query error getting reply attributes rlm_sql (sql): Released connection (0) (0) [sql] = fail (0) } # authorize = fail (0) Invalid user (sql: rlm_sql_mysql: ERROR 1318 (Incorrect number of arguments for PROCEDURE 3newnodeny.radreply; expected 1, got 2): 42000): [vano+1] (from client irsh port 15728865 cli B0:5A:DA:3D:E7:5D) (0) Using Post-Auth-Type Reject (0) Post-Auth-Type sub-section not found. Ignoring. (0) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny
С такой процедурой
DROP PROCEDURE IF EXISTS `radreply`; DELIMITER $$ CREATE PROCEDURE `radreply`(IN login VARCHAR(64)) BEGIN DECLARE usr_id INT; DECLARE ip_index INT ; DECLARE usr_ip VARCHAR(15) DEFAULT NULL; DECLARE real_login VARCHAR(64) DEFAULT NULL;
SELECT SUBSTRING_INDEX(login, '=2B', 1) INTO real_login; IF login REGEXP '[=2B][0-9]+$' THEN SELECT CAST(REPLACE(REPLACE(login, real_login, ''),'=2B','') AS UNSIGNED) INTO ip_index; ELSE SET ip_index=0;END IF;
SELECT id INTO usr_id FROM users WHERE name=real_login LIMIT 1; SELECT get_ip_by_num(usr_id, ip_index) INTO usr_ip;
SELECT NULL,login,'Framed-IP-Address',usr_ip,'='; SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','='; SELECT NULL,login,'Framed-Protocol','PPP','='; END$$ DELIMITER ; Заменил + на - 0) # Executing section authorize from file /usr/local/etc/raddb/sites-enabled/nodeny (0) authorize { rlm_sql (sql): Reserved connection (0) (0) sql: EXPAND call radcheck('%{User-Name}') (0) sql: --> call radcheck('vano-1') (0) sql: Executing select query: call radcheck('vano-1') (0) sql: User found in radcheck table (0) sql: Conditional check items matched, merging assignment check items (0) sql: Cleartext-Password := "111111" (0) sql: EXPAND call radreply('%{User-Name}','%{User-Password}') (0) sql: --> call radreply('vano-1','') (0) sql: Executing select query: call radreply('vano-1','') (0) sql: ERROR: rlm_sql_mysql: ERROR 1318 (Incorrect number of arguments for PROCEDURE 3newnodeny.radreply; expected 1, got 2): 42000 (0) sql: ERROR: SQL query error getting reply attributes rlm_sql (sql): Released connection (0) (0) [sql] = fail (0) } # authorize = fail (0) Invalid user (sql: rlm_sql_mysql: ERROR 1318 (Incorrect number of arguments for PROCEDURE 3newnodeny.radreply; expected 1, got 2): 42000): [vano-1] (from client irsh port 15728866 cli B0:5A:DA:3D:E7:5D) (0) Using Post-Auth-Type Reject (0) Post-Auth-Type sub-section not found. Ignoring. (0) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny (0) Delaying response for 1.000000 seconds
С такой процедурой
DROP PROCEDURE IF EXISTS `radreply`; DELIMITER $$ CREATE PROCEDURE `radreply`(IN login VARCHAR(64)) BEGIN DECLARE usr_id INT; DECLARE ip_index INT ; DECLARE usr_ip VARCHAR(15) DEFAULT NULL; DECLARE real_login VARCHAR(64) DEFAULT NULL;
SELECT SUBSTRING_INDEX(login, '-', 1) INTO real_login; IF login REGEXP '[-][0-9]+$' THEN SELECT CAST(REPLACE(REPLACE(login, real_login, ''),'-','') AS UNSIGNED) INTO ip_index; ELSE SET ip_index=0;END IF;
SELECT id INTO usr_id FROM users WHERE name=real_login LIMIT 1; SELECT get_ip_by_num(usr_id, ip_index) INTO usr_ip;
SELECT NULL,login,'Framed-IP-Address',usr_ip,'='; SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','='; SELECT NULL,login,'Framed-Protocol','PPP','='; END$$ DELIMITER ;
Название: Re: Привязка ip к login
Отправлено: Efendy от 15 Ноября 2019, 18:56:17
Я что-то не пойму, ты снова пытаешься на угад настраивать? Incorrect number of arguments for PROCEDURE 3newnodeny.radreply; expected 1, got 2 мы же обсуждали эту ошибку. call radreply('%{User-Name}','%{User-Password}') в доке для 3-го радиуса это используется в процедуре, ты не использовал
Название: Re: Привязка ip к login
Отправлено: Jovani от 19 Ноября 2019, 10:43:11
Все, разобрались. Большое спасибо Redmen за помощь в решении.
Название: Re: Привязка ip к login
Отправлено: k291 от 22 Ноября 2019, 13:34:57
Что надо сделать, чтобы модуль работать с DHCP+Mikrotik ? Может есть процедуры "Mikrotik+Radius+DHCP+Привязка ip к login"
На сейчас, В билинге клиенту прописываю несколько МАСов и IP. В настройках МАСа, назначаю разные статические IP. Но при авторизации клиента в админке у всех МАСов становится одинаковый IP.
|