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

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

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #30 : 27 Февраля 2018, 09:57:39 »

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

Карма: 1
Offline Offline

Сообщений: 83


Просмотр профиля
« Ответ #31 : 27 Февраля 2018, 11:07:30 »

Может дадите процедуру,  попробую, по тестирую.
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #32 : 27 Февраля 2018, 15:33:47 »

Код:
DROP FUNCTION IF EXISTS `get_ip`;
DELIMITER $$
CREATE FUNCTION `get_ip` ( user_id INTEGER UNSIGNED )
    RETURNS VARCHAR(15) NO SQL
BEGIN
    DECLARE user_ip VARCHAR(15);
    DECLARE real_ip VARCHAR(15) DEFAULT 0;
    DECLARE row_cnt INTEGER;
    DECLARE ip_id INTEGER;
    DECLARE tries INTEGER DEFAULT 30;
    DECLARE id_min INTEGER;
    DECLARE id_max INTEGER;
    DECLARE blocked INTEGER DEFAULT 0;

    SELECT 1 INTO blocked FROM users WHERE state='off' AND id=user_id LIMIT 1;

    SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool
        WHERE uid = user_id AND type = 'static' AND blocked = 0 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,%';

    SELECT id, INET_NTOA(ip) INTO ip_id, user_ip FROM ip_pool
        WHERE uid = user_id AND type = 'dynamic' AND realip = IF(real_ip>0,1,0)
            AND IF(blocked>0, tags LIKE '%,blocked,%', tags NOT LIKE '%,blocked,%')
        LIMIT 1;

    IF( ip_id IS NOT NULL) THEN
        UPDATE ip_pool SET `release` = UNIX_TIMESTAMP() + 3600
            WHERE id = ip_id AND uid = user_id;
        SELECT ROW_COUNT() INTO row_cnt;
        IF( row_cnt > 0 ) THEN RETURN user_ip; END IF;
    END IF;

    SELECT MAX(id), MIN(id) INTO id_max, id_min
        FROM ip_pool
        WHERE type = 'dynamic' AND realip = IF(real_ip>0,1,0);

    sel_ip: WHILE tries > 0 DO
        SELECT id, INET_NTOA(ip) INTO ip_id, user_ip
            FROM ip_pool
            WHERE uid = 0
                AND id >= (CEIL(RAND() * (id_max - id_min)) + id_min)
                AND id <= id_max
                AND IF(blocked>0, tags LIKE '%,blocked,%', tags NOT LIKE '%,blocked,%')
                LIMIT 1;
        IF( user_ip IS NOT NULL) THEN
            UPDATE ip_pool SET uid = user_id, `release` = UNIX_TIMESTAMP() + 3600
                WHERE id = ip_id AND uid = 0;
            SELECT ROW_COUNT() INTO row_cnt;
            IF( row_cnt > 0 ) THEN RETURN user_ip; END IF;
            SET tries = tries - 5;
        END IF;
        SET tries = tries - 1;
    END WHILE;

END$$
DELIMITER ;
Записан
warzoni
NoDeny
Пользователь
*

Карма: 1
Offline Offline

Сообщений: 83


Просмотр профиля
« Ответ #33 : 27 Февраля 2018, 16:56:34 »

На первый взгляд все завелось и работает. и даже так как надо работает.

Буду пока тестировать.  отпишусь по результатам.
Записан
tom
Постоялец
***

Карма: 2
Offline Offline

Сообщений: 216


Просмотр профиля
« Ответ #34 : 27 Февраля 2018, 19:42:24 »

Можна в тему питання.
Тестово просто дропаю сесію
$coa_connect__state_off = {
    type     => 'disconnect',
    template => 'Framed-IP-Address={{ip}}',
};
але модуль чому відправляє ір здвоєним. Де я міг накосячити?
  sending:  = 'Framed-IP-Address=10.1.1.35,10.1.1.35'
  to:       = '/usr/local/bin/radclient -x 10.254.254.208:3799 disconnect nas11'


Походу саме змінна ip - такий параметр отримує..
Записан
warzoni
NoDeny
Пользователь
*

Карма: 1
Offline Offline

Сообщений: 83


Просмотр профиля
« Ответ #35 : 27 Февраля 2018, 20:17:45 »

у тебя переменная {{ip}} выдает значения два ip,ip - так быть не должно.
Записан
tom
Постоялец
***

Карма: 2
Offline Offline

Сообщений: 216


Просмотр профиля
« Ответ #36 : 27 Февраля 2018, 20:27:57 »

я це розумію.. але чому.. не розумію
Записан
warzoni
NoDeny
Пользователь
*

Карма: 1
Offline Offline

Сообщений: 83


Просмотр профиля
« Ответ #37 : 27 Февраля 2018, 22:20:41 »

Ну вот и смотрите - что от радиуса прилетает, может где-то допустили ошибку в конфигах радиуса,еще раз мануал прочтите.

Радиус смотрите в дебаг режиме.
Записан
tom
Постоялец
***

Карма: 2
Offline Offline

Сообщений: 216


Просмотр профиля
« Ответ #38 : 27 Февраля 2018, 23:25:15 »

Ну все норм прилітає, ір видає як треба, з пула. Все гуд.
Записан
tom
Постоялец
***

Карма: 2
Offline Offline

Сообщений: 216


Просмотр профиля
« Ответ #39 : 27 Февраля 2018, 23:44:24 »

Ось і причина
mysql> SELECT u.id, u.balance, u.name, u.state, a.auth_start, a.ip, a.properties FROM ( SELECT INET_NTOA(i.ip) AS ip, '' as properties, UNIX_TIMESTAMP() AS auth_start FROM users u JOIN ip_pool i ON i.uid=u.id WHERE u.lstate=1 UNION ALL SELECT ip, properties, start AS auth_start FROM auth_now ) a JOIN ip_pool i ON INET_ATON(a.ip)=i.ip JOIN users u ON i.uid=u.id WHERE TRUE  AND (i.tags LIKE '%,NAS1,%');
+-------+---------+--------+-------+------------+-----------+-----------------------------------------------+
| id    | balance | name   | state | auth_start | ip        | properties                                    |
+-------+---------+--------+-------+------------+-----------+-----------------------------------------------+
| 30478 |    0.00 | 304782 | off   | 1519767803 | 10.1.1.57 |                                               |
| 30478 |    0.00 | 304782 | off   | 1519737772 | 10.1.1.57 | mod=ipoe;user=000c42de54bd;nas=10.254.254.208 |

тепер тре зрозуміти нафіга воно два рази записує в таблиую?! одну й ту ж звязку
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #40 : 28 Февраля 2018, 06:32:29 »

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

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #41 : 28 Февраля 2018, 09:36:33 »

Стас, ты не вспомнил почему убрал radstop?
Кажется нашел почему. radstop удаляет запись из таблицы текущих авторизаций auth_now - это норм, но он не сохраняет запись в логе авторизаций auth_log. Можно добавить сохранение, но у нас получается 2 места где это осуществляется - в модуле ядра и в процедуре. А это плохо в каком плане - каждый раз, когда мы захотим добавить какую-то фичу при завершении авторизации, например, сохранить в логе температуру администратора - нам придется это делать в двух местах. Если таких мест немного, то ок, но если постоянно размазывать функционал - мы просто концы с концами не сведем и запутаемся. Уже такое наблюдается - целый зоопарк радиус процедур для пппое, дхцп, с тегами и без и т.д.
Записан
tom
Постоялец
***

Карма: 2
Offline Offline

Сообщений: 216


Просмотр профиля
« Ответ #42 : 28 Февраля 2018, 12:11:55 »

У абона "всегда онлайн" учетка? Выключи это. "Всегда онлайн" означает, что абон не использует авторизацию и она эмулируется
Стас - світла ти голова!! ))
Може варто придумати якусь перевірку на "дурака". Ато той хто поставить завжди онлайн і СОА перестає працювати у клієнта..
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #43 : 28 Февраля 2018, 12:27:12 »

Подумаю как
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 324


Просмотр профиля Email
« Ответ #44 : 28 Февраля 2018, 12:43:03 »

Стас, ты не вспомнил почему убрал radstop?
Кажется нашел почему. radstop удаляет запись из таблицы текущих авторизаций auth_now - это норм, но он не сохраняет запись в логе авторизаций auth_log. Можно добавить сохранение, но у нас получается 2 места где это осуществляется - в модуле ядра и в процедуре. А это плохо в каком плане - каждый раз, когда мы захотим добавить какую-то фичу при завершении авторизации, например, сохранить в логе температуру администратора - нам придется это делать в двух местах. Если таких мест немного, то ок, но если постоянно размазывать функционал - мы просто концы с концами не сведем и запутаемся.

Теперь понятно, radstop нужная вещь, будет реально видно когда сессия на брасе передергивается.

Цитировать
Уже такое наблюдается - целый зоопарк радиус процедур для пппое, дхцп, с тегами и без и т.д.

Ну а как по другому? У всех разные потребности. Я рад бы использовать штатные инструменты не выдумывая другого, которые решали бы задачи сети
Записан
Страниц: 1 2 [3] 4 5 6
  Печать  
 
Перейти в:  

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