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

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

Карма: 1
Offline Offline

Сообщений: 83


Просмотр профиля
« Ответ #60 : 03 Марта 2018, 17:06:18 »

Ты вообще разобрался как работает модуль?
если вдруг нет, то попробую я.
в create.cfg.coa.cfg.pm есть такие параметры
$coa_connect__state_on - тут указываешь, что нужно послать, когда у пользователя все нормально и он только что подключился.
$coa_connect__state_off - тут указываешь, что нужно послать, когда пользователь заблокирован (нет тарифа или просто заблокирован) - и он только что подключился.
$coa_disconnect - тут указываешь, что нужно послать, когда пользователь УЖЕ подключен.
Расскажу как в моем случае работает $coa_disconnect. Когда пользователь подключен, у него деактивируются 2 профайла (т.к. мы не хотим разбираться, включен ему доступ или нет) а дальше уже в зависимости от его статуса активируется $coa_connect__state_on либо $coa_connect__state_off.

$coa_connect__state_on - прекрасно работает.
$coa_connect__state_off - прекрасно работает.

Два параметра выполняют свои функции.

Но ранее в теме, мне дали процедуру, которая говорит, когда пользователь заблокирован, то при подключении выдавать, ip из динамического пула с тегом block/

И тут все прекрасно работает ( НО появилась не приятная вещь ) а конкретно.

COA - передает параметр $coa_connect__state_off - с новый айпи из пула(block). Естественно такова юзера нету на насе, и мы получаем отпиливания. и клиент дальше сидит и работает как не в чем не бывало. Пока не разорвет сессию. потом при следующем подключении он получит ай-пи из пула block - и его кинет на страницу заглушки.

Дополню.  и вот когда  юзер уходит в заблокированные, nodeny посылает сигнал $coa_disconnect  -- и тут бы все хорошо было бы !

Но мы добавили в таблицу ses= что бы COA постоянно передавал скоростя юзеров которые изменили сесси. И все было бы прекрасно по логике. но $coa_disconnect - работает не от статуса OFF юзера в таблице а от изменений в таблице ))))
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #61 : 03 Марта 2018, 18:02:29 »

Давай по-порядку. Заблокированный абон делает dhcp-запрос. Радиус выдает ему ip из пула blocked. Дальше срабатывает $coa_connect__state_off, в котором есть и ip  и сессия, в чем проблема? Опиши подробней
Записан
warzoni
NoDeny
Пользователь
*

Карма: 1
Offline Offline

Сообщений: 83


Просмотр профиля
« Ответ #62 : 03 Марта 2018, 18:21:56 »

Давай по-порядку. Заблокированный абон делает dhcp-запрос. Радиус выдает ему ip из пула blocked. Дальше срабатывает $coa_connect__state_off, в котором есть и ip  и сессия, в чем проблема? Опиши подробней

Проблема - в том, что когда состояния абона переходить из on - off или из off - on  ( ip меняется ) и не radius передает новый айпи, а COA напрямую в NAS. в насе стоит accel-ppp  и он должен изменить айпи абону.

Радиус - не может активную сессию изменить без отключения.

Так-вот когда айпи меняется, COA передает на NAS новый айпи, а нас говорит что такова айпи нету, и делать я не чего не буду. и абону надо переподключится что бы изменился айпи.
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #63 : 03 Марта 2018, 18:30:52 »

состояния абона переходить из on - off или из off - on  ( ip меняется )
почему меняется ip? Если абон подключен и ты ему просто меняешь параметр "заблокирован" на "да", то ip не меняется. Или у тебя меняется?
Записан
warzoni
NoDeny
Пользователь
*

Карма: 1
Offline Offline

Сообщений: 83


Просмотр профиля
« Ответ #64 : 03 Марта 2018, 18:32:27 »

состояния абона переходить из on - off или из off - on  ( ip меняется )
почему меняется ip? Если абон подключен и ты ему просто меняешь параметр "заблокирован" на "да", то ip не меняется. Или у тебя меняется?

Да меняется.

Код:
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 ;

COA надо когда он заблокирован выдавать IP из пула (динамичиского) с тегом blocked - а когда он оплачивает, возвращать его статистический айпи.
« Последнее редактирование: 03 Марта 2018, 19:26:01 от warzoni » Записан
ivanmfan
Постоялец
***

Карма: 9
Offline Offline

Сообщений: 131


Просмотр профиля Email
« Ответ #65 : 06 Марта 2018, 10:40:32 »

состояния абона переходить из on - off или из off - on  ( ip меняется )
почему меняется ip? Если абон подключен и ты ему просто меняешь параметр "заблокирован" на "да", то ip не меняется. Или у тебя меняется?

Да меняется.

Код:
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 ;

COA надо когда он заблокирован выдавать IP из пула (динамичиского) с тегом blocked - а когда он оплачивает, возвращать его статистический айпи.

Рекомендую переделать на один пул и слать просто l4-redirect или через ipset рулить. Ну вот представь сделают фикс COA. У абонента заканчивается тариф, его блокирует отправляет COA disconect этому юзеру. А юзер то пока не запросит новый IP будет считать что интернет отвалился, начнутся звонки в ТП. Реально не понимаю удобство с разными пулами. Есть уже хорошие рабочие конфиги на форуме под один пул
Записан
warzoni
NoDeny
Пользователь
*

Карма: 1
Offline Offline

Сообщений: 83


Просмотр профиля
« Ответ #66 : 07 Марта 2018, 13:22:58 »

ivanmfan, Да этот вариант приемлем более чем пул.

Помогите разобратся что бы  l4-redirect - добавлял ip клиента в table ipset, в режиме ppptp. я пробывал,  параметр передается, но accel-pppd - не добавляет в таблицу.. Если я не ошибаюсь это фишка для IPOE.
Записан
warzoni
NoDeny
Пользователь
*

Карма: 1
Offline Offline

Сообщений: 83


Просмотр профиля
« Ответ #67 : 07 Марта 2018, 13:48:42 »

ivanmfan, Да этот вариант приемлем более чем пул.

Помогите разобратся что бы  l4-redirect - добавлял ip клиента в table ipset, в режиме ppptp. я пробывал,  параметр передается, но accel-pppd - не добавляет в таблицу.. Если я не ошибаюсь это фишка для IPOE.

Отправляю coa

echo "L4-Redirect=1,User-Name=test,Framed-IP-Address=192.168.26.3" | radclient -x 10.0.0.8:4565 coa hardpass5

на nas приходит пакет

[2018-03-07 06:46:37]:  info: ppp0: recv [RADIUS CoA-Request id=6b <L4-Redirect 1> <User-Name "test"> <Framed-IP-Address 192.168.26.3>]

--
И тишина.

root@debian:~# ipset list
Name: l4-redirect
Type: hash:ip
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 16504
References: 0
Members:


« Последнее редактирование: 07 Марта 2018, 14:10:37 от warzoni » Записан
tom
Постоялец
***

Карма: 2
Offline Offline

Сообщений: 216


Просмотр профиля
« Ответ #68 : 09 Марта 2018, 04:12:33 »

Підкажіть, плз, коли авторизується клієнт, якого немає в базі - як спрацьовує модуль СОА? бо в мене поки зовсім не спрацьовує
Записан
tom
Постоялец
***

Карма: 2
Offline Offline

Сообщений: 216


Просмотр профиля
« Ответ #69 : 09 Марта 2018, 04:48:11 »

Ты вообще разобрался как работает модуль?
если вдруг нет, то попробую я.
в create.cfg.coa.cfg.pm есть такие параметры
$coa_connect__state_on - тут указываешь, что нужно послать, когда у пользователя все нормально и он только что подключился.
$coa_connect__state_off - тут указываешь, что нужно послать, когда пользователь заблокирован (нет тарифа или просто заблокирован) - и он только что подключился.
$coa_disconnect - тут указываешь, что нужно послать, когда пользователь УЖЕ подключен.
Расскажу как в моем случае работает $coa_disconnect. Когда пользователь подключен, у него деактивируются 2 профайла (т.к. мы не хотим разбираться, включен ему доступ или нет) а дальше уже в зависимости от его статуса активируется $coa_connect__state_on либо $coa_connect__state_off.
Або коні п'яні, або лижі не їдуть.
Стас - де правда?
Ось з мануала
В $coa_disconnect атрибуты, которые посылаются когда абонент отключается (перестает быть авторизованным)
Записан
tom
Постоялец
***

Карма: 2
Offline Offline

Сообщений: 216


Просмотр профиля
« Ответ #70 : 09 Марта 2018, 14:51:08 »

І ще, маленький ньюанс. При потраплянні клієнта перший раз в кабінет, коли запитує адресу і телефон, не можливо коректно ввести вулицю, оськільки є ще поле Місто/Район. В якому файлі копатися, щоб привязати НАС, або тег ір - до міста/району? Чи це може Стас зробити?
Записан
warzoni
NoDeny
Пользователь
*

Карма: 1
Offline Offline

Сообщений: 83


Просмотр профиля
« Ответ #71 : 09 Марта 2018, 16:07:59 »

каким боком тут COA ? не там пишите.

Цитировать
Підкажіть, плз, коли авторизується клієнт, якого немає в базі - як спрацьовує модуль СОА? бо в мене поки зовсім не спрацьовує

Если в базе клиента нет то и COA посылать не будет.
Записан
tom
Постоялец
***

Карма: 2
Offline Offline

Сообщений: 216


Просмотр профиля
« Ответ #72 : 10 Марта 2018, 03:31:38 »

Є стандартні засоби білінга, що посилають невідомого клієнта на заглушку, а потім, після привязки ір-мак до уід клієнта, дропає його і далі вже відпрацьовує СОА?
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #73 : 10 Марта 2018, 09:48:05 »

Ты вообще разобрался как работает модуль?
если вдруг нет, то попробую я.
в create.cfg.coa.cfg.pm есть такие параметры
$coa_connect__state_on - тут указываешь, что нужно послать, когда у пользователя все нормально и он только что подключился.
$coa_connect__state_off - тут указываешь, что нужно послать, когда пользователь заблокирован (нет тарифа или просто заблокирован) - и он только что подключился.
$coa_disconnect - тут указываешь, что нужно послать, когда пользователь УЖЕ подключен.
Расскажу как в моем случае работает $coa_disconnect. Когда пользователь подключен, у него деактивируются 2 профайла (т.к. мы не хотим разбираться, включен ему доступ или нет) а дальше уже в зависимости от его статуса активируется $coa_connect__state_on либо $coa_connect__state_off.
Або коні п'яні, або лижі не їдуть.
Стас - де правда?
Ось з мануала
В $coa_disconnect атрибуты, которые посылаются когда абонент отключается (перестает быть авторизованным)
Он прав и дока права. Посылается в обоих случаях. Скрипт noserver постоянно мониторит состояние клиентов и если оно удовлетворяет условиям включения - запускает процедуру обработки включения, если нет - запускает процедуру обработки выключения. Если какие-то данные изменились - запускает сначала процедуру выключения, затем включения.

Чтоб все было четко:
1) я называю процедурой обработки включения/выключения посколько это не обязательно может быть команда включения/выключения чего-либо. Все зависит от функций fw_usr_on и fw_usr_off.
2) fw_usr_off (в данном случае coa_disconnect) вызывается в двух случаях: при дисконнекте абонента, а также при изменении его данных.
Записан
tom
Постоялец
***

Карма: 2
Offline Offline

Сообщений: 216


Просмотр профиля
« Ответ #74 : 10 Марта 2018, 12:45:05 »

Цитировать
и он только что подключился.
Що мається на увазі - був запит від радіуса, наприклад, чи в білінгу пройшла авторизація і зявився зелений ключик?
Чому запитую - бо наприклад при дісконекті, клієнта підключиться швидше чим зникне ключик з ір. Відповідно дропнуть клієнта для отримання нових данних, не сильно виходить (
Записан
Страниц: 1 ... 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!