warzoni
NoDeny
Пользователь
Карма: 1
Offline
Сообщений: 83
|
|
« Ответ #15 : 26 Февраля 2018, 00:32:43 » |
|
Еще раз. Нельзя с закрытыми глазами играть в шахматы, если есть вероятность, что кто-то проходя мимо уберет одну из фигур. Позиция поменяется кординально. Этим мой биллинг и отличается от других, в которых ловят непонятные глюки "ну их мало ну и хуй с ними". Если мы хотим получить прочное решение - мы должны либо постоянно синхронизироваться, например, как это делает модуль микротика - он постоянно опрашивает микротик и вносит коррективы. Либо делать действие в режиме "мне ничего не известно, я просто удалю возможные комбинации и установлю то, что мне надо".
Что касается "изменилась сессия" - здесь происходит переподключение, следовательно именно в этот момент нам вообще СОА не нужен, можно атрибуты скорости отдать модулем "радиус-атрибуты" прямо в ответе radreply
Мы говорим о модуле, который не выполняет обычную функцию, когда клиент авторизирован выдавать скорость, авторизация идет по pptp - я отключился ( потом включился ) будь добр выдай скорость, он не пашет ( точнее пашет но 1 раз ) а что бы заработал будь добр выключил vpn на 150 секунд ( по модулю авторизации ) - тогда я тебе выдам скорость.... меня это вело в заблуждения. Получается он не востребован...в данной конструкции с NAS ( Хотя он COA модуль на ходу меняет скорость, в итоге на ходу он только .... не знаю что делает.) И вот надо найти конструктивное решения.
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #16 : 26 Февраля 2018, 01:16:09 » |
|
1) Модуль радиус атрибутов либо: 2) Ключ -a при запуске noserver для coa, при этом нужно настроить процедуры так, чтобы сессия писалась в properties таблицы auth_now - делается элементарно. При изменении параметров в properties происходит передергивание coa
|
|
|
Записан
|
|
|
|
fet4
|
|
« Ответ #17 : 26 Февраля 2018, 10:16:12 » |
|
чтобы сессия писалась в properties таблицы auth_now - делается элементарно. При изменении параметров в properties происходит передергивание coa А как там происходит проверка на изменение параметров? По каждой переменной ? Или изменение всей строки? Стас, ты не вспомнил почему убрал radstop?
|
|
« Последнее редактирование: 26 Февраля 2018, 10:48:01 от fet4 »
|
Записан
|
|
|
|
warzoni
NoDeny
Пользователь
Карма: 1
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
Сообщений: 367
|
|
« Ответ #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
Сообщений: 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
Сообщений: 83
|
|
« Ответ #21 : 26 Февраля 2018, 13:13:29 » |
|
продолжаю по COA ( нужен совет )
Если пациент заблокирован - $coa_connect__state_off - какие есть варианты в заблокированном виде, выдать айпи с другово пулла(статика динамика пофиг) который в админке, или может как-то тегом привязаться. это одно условия в этом состоянии другова делать ему не чего не надо.
|
|
|
Записан
|
|
|
|
warzoni
NoDeny
Пользователь
Карма: 1
Offline
Сообщений: 83
|
|
« Ответ #22 : 26 Февраля 2018, 17:45:17 » |
|
продолжаю по COA ( нужен совет )
Если пациент заблокирован - $coa_connect__state_off - какие есть варианты в заблокированном виде, выдать айпи с другово пулла(статика динамика пофиг) который в админке, или может как-то тегом привязаться. это одно условия в этом состоянии другова делать ему не чего не надо.
Что решений нету ? на простой ноте закончим работу ?
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #23 : 26 Февраля 2018, 20:33:52 » |
|
Какое решение? Захотеть за тебя принять какой-либо из вариантов?
|
|
|
Записан
|
|
|
|
warzoni
NoDeny
Пользователь
Карма: 1
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
|
|
« Ответ #25 : 26 Февраля 2018, 22:30:39 » |
|
Ты пишешь слишком сумбурно, я не все понимаю. Ты хочешь чтобы в СОА в атрибутах передавался ip, который нужно установить абону? Нет. Лучше по СОА его только дисконнектить, затем уже при подключении выдавать ip из гостевого пула, если он заблокирован или по обычной схеме, если включен
|
|
|
Записан
|
|
|
|
warzoni
NoDeny
Пользователь
Карма: 1
Offline
Сообщений: 83
|
|
« Ответ #26 : 26 Февраля 2018, 22:33:24 » |
|
Лучше по СОА его только дисконнектить, затем уже при подключении выдавать ip из гостевого пула, если он заблокирован. Вот это хочу... именно, да мысли дело такое..)
А когда баланс пополнен, выдавать айпи из назначенного абоненту.
но без dhcp ( он не нужен )
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #27 : 26 Февраля 2018, 22:55:45 » |
|
выдавать ip по какому протоколу? Если без dhcp, значит по pppoe? Или по какой технологии?
|
|
|
Записан
|
|
|
|
warzoni
NoDeny
Пользователь
Карма: 1
Offline
Сообщений: 83
|
|
« Ответ #28 : 26 Февраля 2018, 22:57:12 » |
|
выдавать ip по какому протоколу? Если без dhcp, значит по pppoe? Или по какой технологии?
Да pppoe
|
|
|
Записан
|
|
|
|
warzoni
NoDeny
Пользователь
Карма: 1
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. И тогда мы получаем всех блокированных на динамический пул, а не блокированных как обычно, при этом тег который будет на пуле для блокированных исключит пересечения между пулами.
|
|
|
Записан
|
|
|
|
|