Биллинговая система Nodeny
22 Ноября 2024, 07:04:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: 1 2 [3]
  Печать  
Автор Тема: Привязка ip к login  (Прочитано 25224 раз)
Redmen
NoDeny
Ветеран
*

Карма: 62
Offline Offline

Сообщений: 546


Подяку в КАРМУ


Просмотр профиля WWW
« Ответ #30 : 04 Ноября 2019, 17:31:29 »

Без разделения работает. Но при других процедурах.
Надоело! Злой
Выложи процедуры, которые работают!
проще самому сделать, чем это терпеть
Записан

Приймаю подяку у вигляді карми... та/або грошей Подмигивающий
t.me/MrMethod
Jovani
NoDeny
Постоялец
*

Карма: -9
Offline Offline

Сообщений: 234


Просмотр профиля
« Ответ #31 : 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
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #32 : 04 Ноября 2019, 23:30:28 »

Как я вижу, ты используешь 3й радиус, но замечания по его настойке не учтены. Ознакомься:

в частности:

Цитировать
Я нашел причину, почему не получилось проверить пароль - новый радиус в ответе процедуры radcheck требует :=, а не ==

Радиус 2 и 3 сильно отличаются, я не могу написать стопицот настроек и под тот и тот вариант, надо самому смотреть отличия и вносить коррективы

P.S. Вот я и понял откуда в radcheck у тебя в конце 0 - это фича биллинга чисто для 3го радиуса. Ты ее тоже можешь заюзать. Если не получится, я попробую перевести под 3й радиус завтра и этот модуль.
Записан
Jovani
NoDeny
Постоялец
*

Карма: -9
Offline Offline

Сообщений: 234


Просмотр профиля
« Ответ #33 : 05 Ноября 2019, 07:20:09 »

Да у меня Radius3. Стас я это читал. В самом начале когда с этим модулем тр***ся, пробовал ставить  :=, кажется тогда логинюсь даже с неправильным паролем.
И оставил так ==. Уже столько вариантов попробовал, что путаюсь если честно...

Цитировать
Если не получится, я попробую перевести под 3й радиус завтра и этот модуль.
Буду тебе очень благодарен за помощь.
Записан
Redmen
NoDeny
Ветеран
*

Карма: 62
Offline Offline

Сообщений: 546


Подяку в КАРМУ


Просмотр профиля WWW
« Ответ #34 : 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 ;
Записан

Приймаю подяку у вигляді карми... та/або грошей Подмигивающий
t.me/MrMethod
Jovani
NoDeny
Постоялец
*

Карма: -9
Offline Offline

Сообщений: 234


Просмотр профиля
« Ответ #35 : 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 ;

Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #36 : 15 Ноября 2019, 18:56:17 »

Я что-то не пойму, ты снова пытаешься на угад настраивать?

Цитировать
Incorrect number of arguments for PROCEDURE 3newnodeny.radreply; expected 1, got 2

мы же обсуждали эту ошибку.

Цитировать
call radreply('%{User-Name}','%{User-Password}')

в доке для 3-го радиуса это используется в процедуре, ты не использовал
Записан
Jovani
NoDeny
Постоялец
*

Карма: -9
Offline Offline

Сообщений: 234


Просмотр профиля
« Ответ #37 : 19 Ноября 2019, 10:43:11 »

Все, разобрались.
Большое спасибо Redmen за помощь в решении.
Записан
k291
Старожил
****

Карма: -10
Offline Offline

Сообщений: 455


Просмотр профиля
« Ответ #38 : 22 Ноября 2019, 13:34:57 »

Что надо сделать, чтобы модуль работать с DHCP+Mikrotik ? Может есть процедуры "Mikrotik+Radius+DHCP+Привязка ip к login"

На сейчас, В билинге клиенту прописываю несколько МАСов и IP. В настройках МАСа, назначаю разные статические IP. Но при авторизации клиента в админке у всех МАСов становится одинаковый IP.
Записан
Страниц: 1 2 [3]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!