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

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: 1 [2] 3 4 ... 8
  Печать  
Автор Тема: freeradius 3  (Прочитано 89179 раз)
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #15 : 18 Октября 2017, 22:47:04 »

Твоя процедура radupdate принимает 4 параметра, а передается 3. Возможно ты намудрил с процедурами (доступы, под каким пользователем были созданы и тд)
Записан
sedo26
Постоялец
***

Карма: 0
Offline Offline

Сообщений: 100


Просмотр профиля Email
« Ответ #16 : 19 Октября 2017, 09:48:10 »

Твоя процедура radupdate принимает 4 параметра, а передается 3. Возможно ты намудрил с процедурами (доступы, под каким пользователем были созданы и тд)

Когда убрал
Код:
post-auth {
        query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}',\
                'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"
        }

- всё запустилось без ошибок, и адрес получил.

Есть ещё вопросы по заглушке. Дабы не ставить насом фряху, решили установить микрот.
Сервер с биллингом является одновременно и сервером доступа, на нём отлично проходит через заглушку регистрация маков.
Но через микрот пока не удалось добиться. При заворачивании
Код:
/ip firewall nat
add action=dst-nat chain=dstnat dst-address=!10.30.40.50 src-address=!10.30.40.50 dst-port=80 fragment=no protocol=tcp src-address-list=!goodboys to-addresses=10.30.40.50 to-ports=8080

Перебрасывает на заглушку по реальному IP, а она в свою очередь на 1.1.1.1/cgi-bin/cap.pl
(но микрот 1.1.1.1 не знает где, и опять перебрасывает на заглушку по реальному IP)
при входе на 10.30.40.50/cgi-bin/cap.pl  - биллинг говорит что мы зашли с реального IP.

Получается биллинг не видит мак и ИП клиента подключенного к микроту.
Куда копать?
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #17 : 19 Октября 2017, 10:32:41 »

А ну правильно, что не работает, то не надо чинить, надо просто убрать. Ну ок, ждем твоего следующего вопроса "почему зеленый ключик пропадает через несколько минут"
Записан
Cell
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1407



Просмотр профиля
« Ответ #18 : 19 Октября 2017, 11:07:18 »

А ну правильно, что не работает, то не надо чинить, надо просто убрать. Ну ок, ждем твоего следующего вопроса "почему зеленый ключик пропадает через несколько минут"
это просто жесть какая то )))
и ничего что нужно радиус для дхцп просто по инструкции настроить )))

Записан
gudwin
NoDeny
Пользователь
*

Карма: 0
Offline Offline

Сообщений: 85



Просмотр профиля Email
« Ответ #19 : 21 Октября 2017, 21:49:34 »

для dhcp
cat /usr/local/etc/raddb/sites-enabled/nodeny

Цитировать
server default {
    listen {
        type = auth
        ipaddr = *
        port = 1812
    }
    listen {
        type = acct
        ipaddr = *
        port = 0
    }
    authorize {
            sql
            pap
            update control {
                             Auth-Type := "Accept"
                            }
    }
    authenticate {
            Auth-Type PAP {
                pap
            }
    }
    preacct {
            acct_unique
            preprocess
    }
    accounting {
            detail
            sql
            exec
    }
    session {
            radutmp
            sql
    }
    post-auth {
            sql
    }
}

cat /usr/local/etc/raddb/mods-enabled/sql
Цитировать
sql {
    driver = "rlm_sql_mysql"
    mysql {
warnings = auto
    }
    server = "localhost"
    port = 3306
    login = "nodeny"
    password = "hardpass"
    radius_db = "nodeny"
        authorize_check_query = "call radcheck('%{User-Name}')"
        authorize_reply_query = "call radreply('%{User-Name}')"
        accounting {
            query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
                    'nas=%{NAS-IP-Address}')"
            type {
                start {
                    query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
                            'nas=%{NAS-IP-Address}')"
                }
            }
        }
        post-auth {
        query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}',\
                'nas=%{NAS-IP-Address}')"
        }
}
Mysql процедуры
Цитировать
ALTER DATABASE nodeny CHARACTER SET utf8 COLLATE utf8_general_ci;

DROP PROCEDURE IF EXISTS `radcheck`;
DELIMITER $$
CREATE PROCEDURE `radcheck` (IN login VARCHAR(64))
BEGIN
  SELECT Null, login, 'Cleartext-Password' AS Attribute, '' AS Value,':=';
END$$
DELIMITER ;

DROP PROCEDURE IF EXISTS `radreply`;
DELIMITER $$
CREATE PROCEDURE `radreply`(IN login VARCHAR(64))
BEGIN
    DECLARE usr_mac VARCHAR(12);
    DECLARE usr_ip VARCHAR(15);
    DECLARE usr_id INT;
    SELECT REPLACE(login, ':', '') INTO usr_mac;
    SELECT uid INTO usr_id FROM mac_uid WHERE mac=usr_mac;
    IF usr_id IS NOT NULL AND usr_id>0 THEN
        SELECT get_ip(usr_id) INTO usr_ip;
        UPDATE mac_uid SET ip=0 WHERE ip=INET_ATON(usr_ip) AND uid<>usr_id;
        UPDATE mac_uid SET ip=INET_ATON(usr_ip), time=UNIX_TIMESTAMP() WHERE uid=usr_id;
    ELSE
        UPDATE mac_uid SET ip=0 WHERE uid=0 AND time<(UNIX_TIMESTAMP()-3600);
        START TRANSACTION;
        SELECT INET_NTOA(ip) INTO usr_ip FROM ip_pool p WHERE uid=0 AND type='dynamic'
            AND NOT EXISTS (SELECT ip FROM mac_uid WHERE ip=p.ip)
            ORDER BY RAND() LIMIT 1 FOR UPDATE;
        INSERT INTO mac_uid VALUES(
            NULL, usr_mac, INET_ATON(usr_ip), 0, UNIX_TIMESTAMP(), 0, 0, 0)
        ON DUPLICATE KEY
            UPDATE ip=IF(ip>0,ip,INET_ATON(usr_ip)), time=UNIX_TIMESTAMP();
        COMMIT;
        SELECT INET_NTOA(ip) INTO usr_ip FROM mac_uid WHERE mac=usr_mac;
    END IF;
    SELECT NULL, login, 'Framed-IP-Address', usr_ip, '=';
    SELECT NULL, login, 'Session-Timeout', '600', '=';
END$$
DELIMITER ;

DROP PROCEDURE IF EXISTS `radupdate`;
DELIMITER $$
CREATE PROCEDURE `radupdate`(
    IN login VARCHAR(64), IN ipa VARCHAR(16), IN properties VARCHAR(255))
BEGIN
    DECLARE usr_mac VARCHAR(16);
    SELECT REPLACE(login, ':', '') INTO usr_mac;
    CALL set_auth(ipa, CONCAT('mod=dhcp;user=', usr_mac, ';', REPLACE(properties,';','')));
    UPDATE mac_uid SET time=UNIX_TIMESTAMP() WHERE ip=INET_ATON(ipa) LIMIT 1;
END$$
DELIMITER ;
Записан
gudwin
NoDeny
Пользователь
*

Карма: 0
Offline Offline

Сообщений: 85



Просмотр профиля Email
« Ответ #20 : 21 Октября 2017, 21:54:49 »

для pppoe
cat /usr/local/etc/raddb/sites-enabled/nodeny
Цитировать
server default {
    listen {
        type = auth
        ipaddr = *
        port = 1812
    }
    listen {
        type = acct
        ipaddr = *
        port = 0
    }
    authorize {
            sql
            pap
    }
    authenticate {
            Auth-Type PAP {
                pap
            }
    }
    preacct {
            acct_unique
            preprocess
    }
    accounting {
            detail
            sql
            exec
    }
    session {
            radutmp
            sql
    }
    post-auth {
            sql
    }
}
cat /usr/local/etc/raddb/mods-enabled/sql
Цитировать
sql {
        driver = "rlm_sql_mysql"
        mysql {
                warnings = auto
        }
        server = "localhost"
        port = 3306
        login = "nodeny"
        password = "hardpass"
        radius_db = "nodeny"
        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}')"
        }
}
Mysql процедуры
Цитировать
ALTER DATABASE nodeny CHARACTER SET utf8 COLLATE utf8_general_ci;

DROP PROCEDURE IF EXISTS `radcheck`;
DELIMITER $$
CREATE PROCEDURE `radcheck` (IN login VARCHAR(64))
BEGIN
  SELECT id,name,'Cleartext-Password' AS Attribute,AES_DECRYPT(passwd,'hardpass') 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 ;
« Последнее редактирование: 21 Октября 2017, 22:15:59 от NoDeny support » Записан
smollmd
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 6


Просмотр профиля Email
« Ответ #21 : 29 Ноября 2017, 09:25:26 »

Привет всем.
Немного не в ту тему, но надеюсь кто-то поможет.

Пробую Nodeny 50.32+ freeradius3 согласно вашим советам:

        authorize_check_query = "call radcheck('%{User-Name}')"
        authorize_reply_query = "call radreply('%{User-Name}')"
        accounting {
            query = "call radupdate('%{User-Name}')"
            type {
                start {
                    query = "call radupdate('%{User-Name}')"
                }
            }
        }
        post-auth {
            query = "call radupdate('%{User-Name}')"
        }

на первый взгляд все работает, но нету информации в базе о том, что клиент отключал сессию(только те что по таймауту)

На первом фрирадиусе  для моей версии биллинга использовалась функция
accounting_stop_query = "call radstop('%{User-Name}')"
тут все попытки ее подключить не дают результатов

Возможно я не совсем понимаю принципа работы, по сколько с ним до этого не работал. Буду рад любой помощи.
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #22 : 29 Ноября 2017, 10:07:59 »

я в н+ отключение по команде stop не использую, честно говоря я забыл почему, возможно чтобы риконнекты не забивали таблицу авторизаций или не высасывали пул ip. Пусть авторизация пропадает по таймауту, 2 минуты таймаута - это разве много?
Записан
smollmd
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 6


Просмотр профиля Email
« Ответ #23 : 29 Ноября 2017, 18:31:54 »

А где именно можно глянуть/сменить таймауты, по которым ядро принимает решение что клиент отключен? Бо по факту больше 10 мин.
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #24 : 29 Ноября 2017, 18:41:28 »

/usr/local/nodeny/kernel/auth.cfg
Записан
smollmd
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 6


Просмотр профиля Email
« Ответ #25 : 29 Ноября 2017, 19:48:13 »

это я так понимаю для nodeny+
на старой версии не нахожу, и не могу понять где в конфиге может быть этот параметр
Записан
gudwin
NoDeny
Пользователь
*

Карма: 0
Offline Offline

Сообщений: 85



Просмотр профиля Email
« Ответ #26 : 29 Ноября 2017, 22:17:11 »

Ну вы же читали ветку, здесь обсуждается все касательно Nodeny plus)
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #27 : 30 Ноября 2017, 00:52:19 »

Вероятно $Kern_t_to_deny
Записан
smollmd
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 6


Просмотр профиля Email
« Ответ #28 : 30 Ноября 2017, 10:45:45 »

$Kern_t_to_deny = 150;
$Kern_t_chk_auth = 5;
$Kern_t_traf = 30;
$Kern_t_usr_reload = 60;

если так, то это 2,5 минуты, а сессию закрывает минут через 10 после дисконекта pppoe.

В mpd5 -> acct-update 45
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #29 : 30 Ноября 2017, 12:17:24 »

Блин, тему засорили, людям понадобится узнать как настроить 3й радиус на н+, а получат историю борьбы в н50
Записан
Страниц: 1 [2] 3 4 ... 8
  Печать  
 
Перейти в:  

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