Efendy
|
|
« Ответ #30 : 27 Февраля 2018, 09:57:39 » |
|
Да
|
|
|
Записан
|
|
|
|
warzoni
NoDeny
Пользователь
Карма: 1
Offline
Сообщений: 83
|
|
« Ответ #31 : 27 Февраля 2018, 11:07:30 » |
|
Может дадите процедуру, попробую, по тестирую.
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #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
Сообщений: 83
|
|
« Ответ #33 : 27 Февраля 2018, 16:56:34 » |
|
На первый взгляд все завелось и работает. и даже так как надо работает.
Буду пока тестировать. отпишусь по результатам.
|
|
|
Записан
|
|
|
|
tom
|
|
« Ответ #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
Сообщений: 83
|
|
« Ответ #35 : 27 Февраля 2018, 20:17:45 » |
|
у тебя переменная {{ip}} выдает значения два ip,ip - так быть не должно.
|
|
|
Записан
|
|
|
|
tom
|
|
« Ответ #36 : 27 Февраля 2018, 20:27:57 » |
|
я це розумію.. але чому.. не розумію
|
|
|
Записан
|
|
|
|
warzoni
NoDeny
Пользователь
Карма: 1
Offline
Сообщений: 83
|
|
« Ответ #37 : 27 Февраля 2018, 22:20:41 » |
|
Ну вот и смотрите - что от радиуса прилетает, может где-то допустили ошибку в конфигах радиуса,еще раз мануал прочтите.
Радиус смотрите в дебаг режиме.
|
|
|
Записан
|
|
|
|
tom
|
|
« Ответ #38 : 27 Февраля 2018, 23:25:15 » |
|
Ну все норм прилітає, ір видає як треба, з пула. Все гуд.
|
|
|
Записан
|
|
|
|
tom
|
|
« Ответ #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
|
|
« Ответ #40 : 28 Февраля 2018, 06:32:29 » |
|
У абона "всегда онлайн" учетка? Выключи это. "Всегда онлайн" означает, что абон не использует авторизацию и она эмулируется
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #41 : 28 Февраля 2018, 09:36:33 » |
|
Стас, ты не вспомнил почему убрал radstop?
Кажется нашел почему. radstop удаляет запись из таблицы текущих авторизаций auth_now - это норм, но он не сохраняет запись в логе авторизаций auth_log. Можно добавить сохранение, но у нас получается 2 места где это осуществляется - в модуле ядра и в процедуре. А это плохо в каком плане - каждый раз, когда мы захотим добавить какую-то фичу при завершении авторизации, например, сохранить в логе температуру администратора - нам придется это делать в двух местах. Если таких мест немного, то ок, но если постоянно размазывать функционал - мы просто концы с концами не сведем и запутаемся. Уже такое наблюдается - целый зоопарк радиус процедур для пппое, дхцп, с тегами и без и т.д.
|
|
|
Записан
|
|
|
|
tom
|
|
« Ответ #42 : 28 Февраля 2018, 12:11:55 » |
|
У абона "всегда онлайн" учетка? Выключи это. "Всегда онлайн" означает, что абон не использует авторизацию и она эмулируется
Стас - світла ти голова!! )) Може варто придумати якусь перевірку на "дурака". Ато той хто поставить завжди онлайн і СОА перестає працювати у клієнта..
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #43 : 28 Февраля 2018, 12:27:12 » |
|
Подумаю как
|
|
|
Записан
|
|
|
|
fet4
|
|
« Ответ #44 : 28 Февраля 2018, 12:43:03 » |
|
Стас, ты не вспомнил почему убрал radstop?
Кажется нашел почему. radstop удаляет запись из таблицы текущих авторизаций auth_now - это норм, но он не сохраняет запись в логе авторизаций auth_log. Можно добавить сохранение, но у нас получается 2 места где это осуществляется - в модуле ядра и в процедуре. А это плохо в каком плане - каждый раз, когда мы захотим добавить какую-то фичу при завершении авторизации, например, сохранить в логе температуру администратора - нам придется это делать в двух местах. Если таких мест немного, то ок, но если постоянно размазывать функционал - мы просто концы с концами не сведем и запутаемся. Теперь понятно, radstop нужная вещь, будет реально видно когда сессия на брасе передергивается. Уже такое наблюдается - целый зоопарк радиус процедур для пппое, дхцп, с тегами и без и т.д. Ну а как по другому? У всех разные потребности. Я рад бы использовать штатные инструменты не выдумывая другого, которые решали бы задачи сети
|
|
|
Записан
|
|
|
|
|