warzoni
NoDeny
Пользователь
Карма: 1
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
|
|
« Ответ #61 : 03 Марта 2018, 18:02:29 » |
|
Давай по-порядку. Заблокированный абон делает dhcp-запрос. Радиус выдает ему ip из пула blocked. Дальше срабатывает $coa_connect__state_off, в котором есть и ip и сессия, в чем проблема? Опиши подробней
|
|
|
Записан
|
|
|
|
warzoni
NoDeny
Пользователь
Карма: 1
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
|
|
« Ответ #63 : 03 Марта 2018, 18:30:52 » |
|
состояния абона переходить из on - off или из off - on ( ip меняется )
почему меняется ip? Если абон подключен и ты ему просто меняешь параметр "заблокирован" на "да", то ip не меняется. Или у тебя меняется?
|
|
|
Записан
|
|
|
|
warzoni
NoDeny
Пользователь
Карма: 1
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
|
|
« Ответ #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
Сообщений: 83
|
|
« Ответ #66 : 07 Марта 2018, 13:22:58 » |
|
ivanmfan, Да этот вариант приемлем более чем пул.
Помогите разобратся что бы l4-redirect - добавлял ip клиента в table ipset, в режиме ppptp. я пробывал, параметр передается, но accel-pppd - не добавляет в таблицу.. Если я не ошибаюсь это фишка для IPOE.
|
|
|
Записан
|
|
|
|
warzoni
NoDeny
Пользователь
Карма: 1
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
|
|
« Ответ #68 : 09 Марта 2018, 04:12:33 » |
|
Підкажіть, плз, коли авторизується клієнт, якого немає в базі - як спрацьовує модуль СОА? бо в мене поки зовсім не спрацьовує
|
|
|
Записан
|
|
|
|
tom
|
|
« Ответ #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
|
|
« Ответ #70 : 09 Марта 2018, 14:51:08 » |
|
І ще, маленький ньюанс. При потраплянні клієнта перший раз в кабінет, коли запитує адресу і телефон, не можливо коректно ввести вулицю, оськільки є ще поле Місто/Район. В якому файлі копатися, щоб привязати НАС, або тег ір - до міста/району? Чи це може Стас зробити?
|
|
|
Записан
|
|
|
|
warzoni
NoDeny
Пользователь
Карма: 1
Offline
Сообщений: 83
|
|
« Ответ #71 : 09 Марта 2018, 16:07:59 » |
|
каким боком тут COA ? не там пишите. Підкажіть, плз, коли авторизується клієнт, якого немає в базі - як спрацьовує модуль СОА? бо в мене поки зовсім не спрацьовує Если в базе клиента нет то и COA посылать не будет.
|
|
|
Записан
|
|
|
|
tom
|
|
« Ответ #72 : 10 Марта 2018, 03:31:38 » |
|
Є стандартні засоби білінга, що посилають невідомого клієнта на заглушку, а потім, після привязки ір-мак до уід клієнта, дропає його і далі вже відпрацьовує СОА?
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #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
|
|
« Ответ #74 : 10 Марта 2018, 12:45:05 » |
|
и он только что подключился. Що мається на увазі - був запит від радіуса, наприклад, чи в білінгу пройшла авторизація і зявився зелений ключик? Чому запитую - бо наприклад при дісконекті, клієнта підключиться швидше чим зникне ключик з ір. Відповідно дропнуть клієнта для отримання нових данних, не сильно виходить (
|
|
|
Записан
|
|
|
|
|