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

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

Карма: 1
Offline Offline

Сообщений: 83


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

Еще раз. Нельзя с закрытыми глазами играть в шахматы, если есть вероятность, что кто-то проходя мимо уберет одну из фигур. Позиция поменяется кординально. Этим мой биллинг и отличается от других, в которых ловят непонятные глюки "ну их мало ну и хуй с ними". Если мы хотим получить прочное решение - мы должны либо постоянно синхронизироваться, например, как это делает модуль микротика - он постоянно опрашивает микротик и вносит коррективы. Либо делать действие в режиме "мне ничего не известно, я просто удалю возможные комбинации и установлю то, что мне надо".

Что касается "изменилась сессия" - здесь происходит переподключение, следовательно именно в этот момент нам вообще СОА не нужен, можно атрибуты скорости отдать модулем "радиус-атрибуты" прямо в ответе radreply

Мы говорим о модуле, который не выполняет обычную функцию, когда клиент авторизирован выдавать скорость, авторизация идет по pptp - я отключился ( потом включился ) будь добр выдай скорость, он не пашет ( точнее пашет но 1 раз ) а что бы заработал будь добр выключил vpn на 150 секунд ( по модулю авторизации ) - тогда я тебе выдам скорость.... меня это  вело в заблуждения. Получается он не востребован...в данной конструкции с NAS ( Хотя он COA модуль на ходу меняет скорость, в итоге на ходу он только .... не знаю что делает.)

И вот надо найти конструктивное решения. 
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #16 : 26 Февраля 2018, 01:16:09 »

1) Модуль радиус атрибутов
либо:
2) Ключ -a  при запуске noserver для coa, при этом нужно настроить процедуры так, чтобы сессия писалась в properties таблицы auth_now - делается элементарно. При изменении параметров в properties происходит передергивание coa
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 324


Просмотр профиля Email
« Ответ #17 : 26 Февраля 2018, 10:16:12 »

Цитировать
чтобы сессия писалась в properties таблицы auth_now - делается элементарно. При изменении параметров в properties происходит передергивание coa
А как там происходит проверка на изменение параметров? По каждой переменной ? Или изменение всей строки?

Стас, ты не вспомнил почему убрал radstop?
« Последнее редактирование: 26 Февраля 2018, 10:48:01 от fet4 » Записан
warzoni
NoDeny
Пользователь
*

Карма: 1
Offline Offline

Сообщений: 83


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

1) Модуль радиус атрибутов
либо:
2) Ключ -a  при запуске noserver для coa, при этом нужно настроить процедуры так, чтобы сессия писалась в properties таблицы auth_now - делается элементарно. При изменении параметров в properties происходит передергивание coa

1) Это всегда успеем есть кабинет. Спасибо большое.  Улыбающийся

Тут тоже вопрос на засыпку.  ну получил я новую сессию через радиус атрибутив, а кто сравнивать будет её с старой сессией. И снова приехали... ?

2) - Если это элементарно то дайте наброски - я бы оттестировал работу.

С ключем "-a" запускаю это я видил в  noserver - Но вот процедуру хранения и сравнивания в базе это я не осилю.


Я так понимаю  формирования, происходит тут.

Код:
my $sql_get_auth_usr = <<SQL;
    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
SQL

Но еще надо помимо отладки кода, передать параметры от радиуса сессии что бы писались в properties.

Тут мы имеем  в sql.conf

Код:
        authorize_check_query = "call radcheck('%{User-Name}')"
        authorize_reply_query = "call radreply('%{User-Name}')"
        postauth_query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}','user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"
        accounting_update_query = "call radupdate('%{User-Name}','%{Framed-IP-Address}','user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"

Код:
mysql> SELECT * FROM auth_now;
+-----+-------------+------------+------------+----------------------------------------+
| id  | ip          | start      | last       | properties                             |
+-----+-------------+------------+------------+----------------------------------------+
| 417 | 192.168.3.5 | 1519632363 | 1519632408 | mod=pppoe;user=10.1.6.252;nas=10.0.0.8 |
+-----+-------------+------------+------------+----------------------------------------+
1 row in set (0.00 sec)

Есть параметр start - last -  надо так-же сделать сесиии.... если одинакова не трогать если изменилась трогать этого юзера.
« Последнее редактирование: 26 Февраля 2018, 10:46:55 от warzoni » Записан
Warlock
NoDeny
Старожил
*

Карма: 8
Offline Offline

Сообщений: 369


Просмотр профиля
« Ответ #19 : 26 Февраля 2018, 10:56:07 »

1) Модуль радиус атрибутов
либо:
2) Ключ -a  при запуске noserver для coa, при этом нужно настроить процедуры так, чтобы сессия писалась в properties таблицы auth_now - делается элементарно. При изменении параметров в properties происходит передергивание coa

1) Это всегда успеем есть кабинет. Спасибо большое.  Улыбающийся

Тут тоже вопрос на засыпку.  ну получил я новую сессию через радиус атрибутив, а кто сравнивать будет её с старой сессией. И снова приехали... ?

2) - Если это элементарно то дайте наброски - я бы оттестировал работу.

С ключем "-a" запускаю это я видил в  noserver - Но вот процедуру хранения и сравнивания в базе это я не осилю.


Я так понимаю  формирования, происходит тут.

Код:
my $sql_get_auth_usr = <<SQL;
    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
SQL

Но еще надо помимо отладки кода, передать параметры от радиуса сессии что бы писались в properties.

Тут мы имеем  в sql.conf

Код:
        authorize_check_query = "call radcheck('%{User-Name}')"
        authorize_reply_query = "call radreply('%{User-Name}')"
        postauth_query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}','user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"
        accounting_update_query = "call radupdate('%{User-Name}','%{Framed-IP-Address}','user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"

Код:
mysql> SELECT * FROM auth_now;
+-----+-------------+------------+------------+----------------------------------------+
| id  | ip          | start      | last       | properties                             |
+-----+-------------+------------+------------+----------------------------------------+
| 417 | 192.168.3.5 | 1519632363 | 1519632408 | mod=pppoe;user=10.1.6.252;nas=10.0.0.8 |
+-----+-------------+------------+------------+----------------------------------------+
1 row in set (0.00 sec)

Есть параметр start - last -  надо так-же сделать сесиии.... если одинакова не трогать если изменилась трогать этого юзера.

в радиусе в sql.conf в postauth_query и accounting_update_query добавляешь ses=%{Acct-Session-Id}
Записан
warzoni
NoDeny
Пользователь
*

Карма: 1
Offline Offline

Сообщений: 83


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

Код:
        postauth_query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}','user=%{Calling-Station-Id};nas=%{NAS-IP-Address};ses=%{Acct-Session-Id}')"
        accounting_update_query = "call radupdate('%{User-Name}','%{Framed-IP-Address}','user=%{Calling-Station-Id};nas=%{NAS-IP-Address};ses=%{Acct-Session-Id}')"


Имеем такое в добовлении в радиус.


в базе получаем сесии.

Код:
mysql> SELECT * FROM auth_now;
+-----+-------------+------------+------------+-------------------------------------------------------------+
| id  | ip          | start      | last       | properties                                                  |
+-----+-------------+------------+------------+-------------------------------------------------------------+
| 468 | 192.168.3.5 | 1519635668 | 1519636968 | mod=pppoe;user=10.1.6.252;nas=10.0.0.8;ses=1e51614f183fc2ec |
| 477 | 192.168.3.3 | 1519636014 | 1519636981 | mod=pppoe;user=10.0.0.10;nas=10.0.0.8;ses=1e51614f183fc2eb  |
+-----+-------------+------------+------------+-------------------------------------------------------------+

Срабатывает COA при разных манипуляциях и скорость передается на лету. все хорошо.

p.s Warlock спасибо, и в правду элементарно.
Записан
warzoni
NoDeny
Пользователь
*

Карма: 1
Offline Offline

Сообщений: 83


Просмотр профиля
« Ответ #21 : 26 Февраля 2018, 13:13:29 »

продолжаю по COA ( нужен совет )

Если пациент заблокирован - $coa_connect__state_off  - какие есть варианты в заблокированном виде, выдать айпи с другово пулла(статика динамика пофиг) который в админке, или   может как-то тегом привязаться. это одно условия в этом состоянии другова делать ему не чего не надо.
Записан
warzoni
NoDeny
Пользователь
*

Карма: 1
Offline Offline

Сообщений: 83


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

продолжаю по COA ( нужен совет )

Если пациент заблокирован - $coa_connect__state_off  - какие есть варианты в заблокированном виде, выдать айпи с другово пулла(статика динамика пофиг) который в админке, или   может как-то тегом привязаться. это одно условия в этом состоянии другова делать ему не чего не надо.

Что решений нету ?  на простой ноте закончим работу ?Улыбающийся
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #23 : 26 Февраля 2018, 20:33:52 »

Какое решение? Захотеть за тебя принять какой-либо из вариантов?
Записан
warzoni
NoDeny
Пользователь
*

Карма: 1
Offline Offline

Сообщений: 83


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

Когда клиент заблокирован отправлял запрос, из пула адресов. Например по тегам. Создал я пул например 172.1.1.1/24 ( динамичиский с тегом block )  и когда клиент блокируется, его отсоединяет COA дисконектом, и уже при следующем подключении, у него статус заблокированный , Я так понимаю тут должен срабатывать $coa_connect__state_off  - и вот мне бы  отправлять один из адресов из динамичиского пула, например который с тегом.

А когда  проведется оплата, сработает $coa_connect__state_on - и coa отошлет данные из формы клиента, фиксированный айпи.

Efendy

1) выше сесии нужны для поддержки контроля, это отсеяло многие проблемы - это целесообразно даже тем кто будет внедрять COA

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

3) я думаю тут завязана проблемма с радиус с отдачей айпи от NAS, ну и хер сним пусть отваливается по таймауту, будут понимать, что нету инета и заглушка будет это показывать, пока идет время тамайута.

В итоге получаю не вмешивания в систему билинга и в принципе рабочий COA ))) для обычных целей.
« Последнее редактирование: 26 Февраля 2018, 21:41:54 от warzoni » Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



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

Ты пишешь слишком сумбурно, я не все понимаю. Ты хочешь чтобы в СОА в атрибутах передавался ip, который нужно установить абону? Нет. Лучше по СОА  его только дисконнектить, затем уже при подключении выдавать ip из гостевого пула, если он заблокирован или по обычной схеме, если включен
Записан
warzoni
NoDeny
Пользователь
*

Карма: 1
Offline Offline

Сообщений: 83


Просмотр профиля
« Ответ #26 : 26 Февраля 2018, 22:33:24 »

 Лучше по СОА  его только дисконнектить, затем уже при подключении выдавать ip из гостевого пула, если он заблокирован.
Вот это хочу... именно, да мысли дело такое..)

А когда баланс пополнен, выдавать айпи из назначенного абоненту.

но без dhcp ( он не нужен )
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



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

выдавать ip по какому протоколу? Если без dhcp, значит по pppoe? Или по какой технологии?
Записан
warzoni
NoDeny
Пользователь
*

Карма: 1
Offline Offline

Сообщений: 83


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

выдавать ip по какому протоколу? Если без dhcp, значит по pppoe? Или по какой технологии?

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

Карма: 1
Offline Offline

Сообщений: 83


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

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

Я так понимаю в этой процедуре,  надо отдавать при статусе заблокирован динамический айпи, из пула, с тегом например block.

И тогда мы получаем всех блокированных на динамический пул, а не блокированных как обычно, при этом тег который будет на пуле для блокированных исключит пересечения между пулами.
Записан
Страниц: 1 [2] 3 4 ... 6
  Печать  
 
Перейти в:  

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