FlySky11
Пользователь
Карма: 1
Offline
Сообщений: 34
Ukraine
|
|
« Ответ #90 : 11 Сентября 2019, 16:09:47 » |
|
Всем привет Прошу у вас помощи
Есть проблема с отображением авторизации по DHCP
Схема: Микротик(дхцп на влан) - радиус - билинг - сателит
абон изначально получает гостевой ип попадает на заглушку автоизируеться и потом получает статический ип.
Загвоздка вот в чем Модуль дхцп не запущен с автозагрузки убран Авторизация с гостевим ип отображаеться нормально и ип по истичению вемени пропадает А вот авторизация со статическим ип не появляеться вообще(при етом еще и нета нет) (роути и прочее прописано) при запуске модуля дхцп авторизация появляеться но не отображаеться каким методом, инет тоже есть, НО при физическом оключении соединение больше не пропадает вообще
Конфиги все с доки по FreeRadius3 с изменьонной процедурой radreply для функции get_ip_by_tag (тоже сделано по доке)
Помогите пожалуйста, работает вся схема кроме етого =((((
|
|
|
Записан
|
Ваш досвід рівно пропорційний кількості зламаного вами обладнання.
|
|
|
NodenY45
NoDeny
Старожил
Карма: 2
Offline
Сообщений: 365
|
|
« Ответ #91 : 12 Ноября 2019, 20:24:30 » |
|
Аккаунтинг есть. (9) sql: EXPAND call radupdate_ipoe('%{User-Name}','%{Framed-IP-Address}','nas=%{NAS-IP-Address}','%{NAS-Identifier}','%{Acct-Session-Id}') (9) sql: --> call radupdate_ipoe('ec086bd996e7-00060012cf7e-1','10.194.12.110','nas=172.19.0.12','accel-ppp-ipoe','586929edd8884b8f') (9) sql: Executing query: call radupdate_ipoe('ec086bd996e7-00060012cf7e-1','10.194.12.110','nas=172.19.0.12','accel-ppp-ipoe','586929edd8884b8f') (9) sql: SQL query returned: success (9) sql: 1 record(s) updated
И ключи есть. Просто долго гаснут когда клиента сессия завершается. поделитесь своими радиус-процедурами для accel, radreply/radupdate_ipoe Спасибо!
|
|
|
Записан
|
|
|
|
skreep
Пользователь
Карма: 2
Offline
Сообщений: 76
|
|
« Ответ #92 : 12 Ноября 2019, 23:43:11 » |
|
поделитесь своими радиус-процедурами для accel, radreply/radupdate_ipoe Спасибо! [/quote] DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `radreply`(IN login VARCHAR(64), IN r_id VARCHAR(64), IN c_id VARCHAR(64)) DETERMINISTIC BEGIN DECLARE usr_id INT; DECLARE usr_ip VARCHAR(15) DEFAULT NULL; DECLARE add_attr MEDIUMTEXT; DECLARE line MEDIUMTEXT; DECLARE i INT DEFAULT 1; DECLARE usr_mac VARCHAR(12); DECLARE c_ID_m VARCHAR(12) DEFAULT NULL; DECLARE r_ID_m VARCHAR(12) DEFAULT NULL; SELECT REPLACE(c_id,'0x', '') INTO c_ID_m; SELECT REPLACE(r_id,'0x', '') INTO r_ID_m; SELECT REPLACE(login, ':', '') INTO usr_mac; SELECT uid INTO usr_id FROM mac_uid WHERE device_mac=r_ID_m AND device_port=c_ID_m AND (mac=usr_mac OR (oneconnect>0 AND device_mac<>'')); SELECT radius_attr INTO add_attr FROM users_services WHERE uid=usr_id AND tags LIKE '%,inet,%' LIMIT 1; IF usr_id IS NOT NULL AND usr_id>0 THEN SELECT get_ip(usr_id) INTO usr_ip; UPDATE mac_uid SET ip=0 WHERE ip=INET_ATON(usr_ip) AND uid<>usr_id; UPDATE mac_uid SET mac=usr_mac, ip=INET_ATON(usr_ip), time=UNIX_TIMESTAMP() WHERE device_mac=r_ID_m AND device_port=c_ID_m AND (mac=usr_mac OR (oneconnect>0 AND device_mac<>'')); SELECT NULL, login, 'Framed-IP-Address', usr_ip, '='; attr_loop: WHILE TRUE DO SELECT strSplit(add_attr, ' ', i) INTO line; IF LENGTH(line) = 0 OR i > 20 THEN LEAVE attr_loop; END IF; IF line LIKE '%+=%' THEN SELECT NULL,login,strSplit(line, '+=', 1),REPLACE (strSplit(line, '+=', 2),'\r',''),'+='; ELSEIF line LIKE '%=%' THEN SELECT NULL,login,strSplit(line, '=', 1),REPLACE (strSplit(line, '=', 2),'\r',''),'='; END IF; SET i = i + 1; END WHILE; ELSE UPDATE mac_uid SET ip=0 WHERE uid=0 AND time<(UNIX_TIMESTAMP()-360); START TRANSACTION; SELECT INET_NTOA(ip) INTO usr_ip FROM ip_pool p WHERE uid=0 AND type='dynamic' AND NOT EXISTS (SELECT ip FROM mac_uid WHERE ip=p.ip) ORDER BY RAND() LIMIT 1 FOR UPDATE; INSERT INTO mac_uid VALUES( NULL, usr_mac, INET_ATON(usr_ip), 0, UNIX_TIMESTAMP(), r_ID_m,c_ID_m , 0, '') ON DUPLICATE KEY UPDATE ip=IF(ip>0,ip,INET_ATON(usr_ip)), time=UNIX_TIMESTAMP(),device_mac=r_ID_m, device_port=c_ID_m; COMMIT; SELECT INET_NTOA(ip) INTO usr_ip FROM mac_uid WHERE mac=usr_mac; SELECT NULL, login, 'Framed-IP-Address', usr_ip, '='; END IF; END$$ DELIMITER ;
DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `radupdate`(IN login VARCHAR(64), IN ipa VARCHAR(16), IN properties VARCHAR(255), IN ses VARCHAR(32), IN r_id VARCHAR(64), IN c_id VARCHAR(64), IN trafin BIGINT(20), IN trafout BIGINT(20)) DETERMINISTIC BEGIN DECLARE usr_id INT; DECLARE usr_mac VARCHAR(12) DEFAULT NULL; DECLARE c_ID_m VARCHAR(12) DEFAULT NULL; DECLARE r_ID_m VARCHAR(12) DEFAULT NULL; SELECT REPLACE(c_id,'0x', '') INTO c_ID_m; SELECT REPLACE(r_id,'0x', '') INTO r_ID_m;
SELECT REPLACE(login, ':', '') INTO usr_mac; SELECT uid INTO usr_id FROM `mac_uid` WHERE device_mac=r_ID_m AND device_port=c_ID_m AND (mac=usr_mac OR (oneconnect>0 AND device_mac<>'')) limit 1;
UPDATE ip_pool SET `release` = UNIX_TIMESTAMP() + 300 WHERE ip = INET_ATON(ipa);
IF( usr_id > 0 ) THEN CALL set_auth(ipa, CONCAT('mod=ipoe;',REPLACE(properties,':',''))); INSERT INTO ses_traf SET ses_id=ses, traf_in=trafin, traf_out=trafout, time=UNIX_TIMESTAMP(), uid=usr_id; END IF; END$$ DELIMITER ;
Ось десь так у мене працює, авторизує по маку ОЛТ та маку ОНУ, freeradius3, трафік через радіус також рахує
|
|
|
Записан
|
|
|
|
fet4
|
|
« Ответ #93 : 13 Ноября 2019, 11:09:48 » |
|
Мой radreply DELIMITER $$ CREATE DEFINER=`nodeny`@`%` PROCEDURE `radreply_ipoe`(IN `login` VARCHAR(64), IN `tag` VARCHAR(64)) BEGIN DECLARE rad_mac VARCHAR(12); DECLARE rad_dev_mac VARCHAR(12); DECLARE rad_port VARCHAR(12); DECLARE usr_id INT; DECLARE usr_ip VARCHAR(15); DECLARE usr_onecon INT; DECLARE usr_onedev INT; DECLARE usr_state VARCHAR(3); DECLARE add_attr MEDIUMTEXT; DECLARE line MEDIUMTEXT; DECLARE i INT DEFAULT 1;
SELECT SUBSTRING_INDEX(login, '-', 1) INTO rad_mac; SELECT SUBSTRING_INDEX(login, '-', -1) INTO rad_port; SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(login, '-', 2), '-', -1) INTO rad_dev_mac; SELECT uid, oneconnect, onedevice INTO usr_id, usr_onecon, usr_onedev FROM mac_uid WHERE (device_mac=rad_dev_mac AND device_mac<>'' AND onedevice>0) OR (device_mac=rad_dev_mac AND device_mac<>'' AND device_port=rad_port AND device_port<>'' AND oneconnect>0 AND onedevice=0) OR (mac=rad_mac AND oneconnect=0 AND onedevice=0) LIMIT 1; IF usr_id IS NOT NULL AND usr_id > 0 THEN SELECT get_ip_by_tag(usr_id, tag) INTO usr_ip; SELECT state INTO usr_state FROM users WHERE id = usr_id; SELECT radius_attr INTO add_attr FROM users_services WHERE uid=usr_id AND tags LIKE '%,inet,%' LIMIT 1; UPDATE mac_uid SET ip=0 WHERE ip=INET_ATON(usr_ip) AND uid<>usr_id; UPDATE mac_uid SET ip=INET_ATON(usr_ip), time=UNIX_TIMESTAMP() WHERE uid=usr_id;
IF usr_onecon > 0 OR usr_onedev > 0 THEN UPDATE mac_uid SET mac=NULL WHERE mac=rad_mac AND oneconnect=0 AND onedevice=0; IF usr_onecon > 0 THEN UPDATE mac_uid SET mac=rad_mac WHERE device_mac=rad_dev_mac AND device_port=rad_port AND oneconnect>0 AND onedevice=0; END IF; IF usr_onedev > 0 THEN UPDATE mac_uid SET mac=rad_mac, device_port=rad_port WHERE device_mac=rad_dev_mac AND onedevice>0; END IF; END IF; IF usr_onecon = 0 AND usr_onedev = 0 THEN UPDATE mac_uid SET device_mac=rad_dev_mac, device_port=rad_port WHERE mac=rad_mac AND uid=usr_id AND oneconnect=0 AND onedevice=0; END IF; ELSE UPDATE mac_uid SET ip=0 WHERE uid=0 AND time<(UNIX_TIMESTAMP()-3600); UPDATE mac_uid SET mac=NULL WHERE mac=rad_mac AND (oneconnect>0 OR onedevice>0); START TRANSACTION; SELECT INET_NTOA(ip) INTO usr_ip FROM ip_pool WHERE uid=0 AND type='dynamic' AND `release` < UNIX_TIMESTAMP() AND tags LIKE CONCAT('%,', tag, ',%') ORDER BY RAND() LIMIT 1 FOR UPDATE; INSERT INTO mac_uid VALUES( NULL, rad_mac, INET_ATON(usr_ip), 0, UNIX_TIMESTAMP(), rad_dev_mac, rad_port, 0, 0) ON DUPLICATE KEY UPDATE ip=IF(ip>0 AND device_mac=rad_dev_mac AND device_port=rad_port, ip, INET_ATON(usr_ip)), uid=0, device_mac=rad_dev_mac, device_port=rad_port, time=UNIX_TIMESTAMP(); COMMIT; SELECT INET_NTOA(ip) INTO usr_ip FROM mac_uid WHERE mac=rad_mac AND device_mac=rad_dev_mac AND device_port=rad_port; END IF; SELECT NULL, login, 'Framed-IP-Address', usr_ip, '='; IF usr_id IS NOT NULL AND usr_id > 0 AND usr_state = 'on' AND add_attr IS NOT NULL THEN SELECT NULL, login, 'L4-Redirect', '1', '='; attr_loop: WHILE TRUE DO SELECT strSplit(add_attr, '\n', i) INTO line; IF LENGTH(line) = 0 OR i > 20 THEN LEAVE attr_loop; END IF; IF line LIKE '%+=%' THEN SELECT NULL,login,strSplit(line, '+=', 1),strSplit(line, '+=', 2),'+='; ELSEIF line LIKE '%=%' THEN SELECT NULL,login,strSplit(line, '=', 1),strSplit(line, '=', 2),'='; END IF; SET i = i + 1; END WHILE; ELSE SELECT NULL, login, 'L4-Redirect', '0', '='; SELECT NULL, login, 'Filter-Id', '1024', '='; END IF; IF usr_id IS NOT NULL AND usr_id > 0 THEN SELECT NULL, login, 'User-Id', usr_id, '='; ELSE SELECT NULL, login, 'User-Id', '0', '='; END IF; END$$ DELIMITER ; Мой radupdate DELIMITER $$ CREATE DEFINER=`nodeny`@`%` PROCEDURE `radupdate_ipoe`(IN `ipa` VARCHAR(16), IN `properties` VARCHAR(255)) BEGIN CALL set_auth(ipa, CONCAT('mod=dhcp;',REPLACE(properties,':',''))); UPDATE mac_uid SET time=UNIX_TIMESTAMP() WHERE ip=INET_ATON(ipa) LIMIT 1; END$$ DELIMITER ;
|
|
|
Записан
|
|
|
|
NodenY45
NoDeny
Старожил
Карма: 2
Offline
Сообщений: 365
|
|
« Ответ #94 : 13 Ноября 2019, 13:52:16 » |
|
поделитесь своими радиус-процедурами для accel, radreply/radupdate_ipoe Спасибо! DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `radreply`(IN login VARCHAR(64), IN r_id VARCHAR(64), IN c_id VARCHAR(64)) DETERMINISTIC BEGIN DECLARE usr_id INT; DECLARE usr_ip VARCHAR(15) DEFAULT NULL; DECLARE add_attr MEDIUMTEXT; DECLARE line MEDIUMTEXT; DECLARE i INT DEFAULT 1; DECLARE usr_mac VARCHAR(12); DECLARE c_ID_m VARCHAR(12) DEFAULT NULL; DECLARE r_ID_m VARCHAR(12) DEFAULT NULL; SELECT REPLACE(c_id,'0x', '') INTO c_ID_m; SELECT REPLACE(r_id,'0x', '') INTO r_ID_m; SELECT REPLACE(login, ':', '') INTO usr_mac; SELECT uid INTO usr_id FROM mac_uid WHERE device_mac=r_ID_m AND device_port=c_ID_m AND (mac=usr_mac OR (oneconnect>0 AND device_mac<>'')); SELECT radius_attr INTO add_attr FROM users_services WHERE uid=usr_id AND tags LIKE '%,inet,%' LIMIT 1; IF usr_id IS NOT NULL AND usr_id>0 THEN SELECT get_ip(usr_id) INTO usr_ip; UPDATE mac_uid SET ip=0 WHERE ip=INET_ATON(usr_ip) AND uid<>usr_id; UPDATE mac_uid SET mac=usr_mac, ip=INET_ATON(usr_ip), time=UNIX_TIMESTAMP() WHERE device_mac=r_ID_m AND device_port=c_ID_m AND (mac=usr_mac OR (oneconnect>0 AND device_mac<>'')); SELECT NULL, login, 'Framed-IP-Address', usr_ip, '='; attr_loop: WHILE TRUE DO SELECT strSplit(add_attr, ' ', i) INTO line; IF LENGTH(line) = 0 OR i > 20 THEN LEAVE attr_loop; END IF; IF line LIKE '%+=%' THEN SELECT NULL,login,strSplit(line, '+=', 1),REPLACE (strSplit(line, '+=', 2),'\r',''),'+='; ELSEIF line LIKE '%=%' THEN SELECT NULL,login,strSplit(line, '=', 1),REPLACE (strSplit(line, '=', 2),'\r',''),'='; END IF; SET i = i + 1; END WHILE; ELSE UPDATE mac_uid SET ip=0 WHERE uid=0 AND time<(UNIX_TIMESTAMP()-360); START TRANSACTION; SELECT INET_NTOA(ip) INTO usr_ip FROM ip_pool p WHERE uid=0 AND type='dynamic' AND NOT EXISTS (SELECT ip FROM mac_uid WHERE ip=p.ip) ORDER BY RAND() LIMIT 1 FOR UPDATE; INSERT INTO mac_uid VALUES( NULL, usr_mac, INET_ATON(usr_ip), 0, UNIX_TIMESTAMP(), r_ID_m,c_ID_m , 0, '') ON DUPLICATE KEY UPDATE ip=IF(ip>0,ip,INET_ATON(usr_ip)), time=UNIX_TIMESTAMP(),device_mac=r_ID_m, device_port=c_ID_m; COMMIT; SELECT INET_NTOA(ip) INTO usr_ip FROM mac_uid WHERE mac=usr_mac; SELECT NULL, login, 'Framed-IP-Address', usr_ip, '='; END IF; END$$ DELIMITER ;
DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `radupdate`(IN login VARCHAR(64), IN ipa VARCHAR(16), IN properties VARCHAR(255), IN ses VARCHAR(32), IN r_id VARCHAR(64), IN c_id VARCHAR(64), IN trafin BIGINT(20), IN trafout BIGINT(20)) DETERMINISTIC BEGIN DECLARE usr_id INT; DECLARE usr_mac VARCHAR(12) DEFAULT NULL; DECLARE c_ID_m VARCHAR(12) DEFAULT NULL; DECLARE r_ID_m VARCHAR(12) DEFAULT NULL; SELECT REPLACE(c_id,'0x', '') INTO c_ID_m; SELECT REPLACE(r_id,'0x', '') INTO r_ID_m;
SELECT REPLACE(login, ':', '') INTO usr_mac; SELECT uid INTO usr_id FROM `mac_uid` WHERE device_mac=r_ID_m AND device_port=c_ID_m AND (mac=usr_mac OR (oneconnect>0 AND device_mac<>'')) limit 1;
UPDATE ip_pool SET `release` = UNIX_TIMESTAMP() + 300 WHERE ip = INET_ATON(ipa);
IF( usr_id > 0 ) THEN CALL set_auth(ipa, CONCAT('mod=ipoe;',REPLACE(properties,':',''))); INSERT INTO ses_traf SET ses_id=ses, traf_in=trafin, traf_out=trafout, time=UNIX_TIMESTAMP(), uid=usr_id; END IF; END$$ DELIMITER ;
Ось десь так у мене працює, авторизує по маку ОЛТ та маку ОНУ, freeradius3, трафік через радіус також рахує [/quote] Спасибо, будем разбираться. Подскажите, еще, какие радиус атрибуты вы передаете? Я планирую, передавать гостевой сервис, с редиректом на заглушку, и через модуль CoA активировать следующий сервис с тарифом. В верную сторону смотрю?
|
|
|
Записан
|
|
|
|
skreep
Пользователь
Карма: 2
Offline
Сообщений: 76
|
|
« Ответ #95 : 13 Ноября 2019, 14:16:40 » |
|
Спасибо, будем разбираться. Подскажите, еще, какие радиус атрибуты вы передаете? Я планирую, передавать гостевой сервис, с редиректом на заглушку, и через модуль CoA активировать следующий сервис с тарифом. В верную сторону смотрю? [/quote] /etc/freeradius/3.0/mods-available# cat sql sql { driver = "rlm_sql_mysql" mysql { warnings = auto } server = "localhost" port = 3306 login = "nodeny" password = "hardpass" radius_db = "nodeny"
authorize_check_query = "call radcheck('%{User-Name}')" authorize_reply_query = "call radreply('%{User-Name}','%{DHCP-Agent-Remote-Id}','%{DHCP-Agent-Circuit-Id}')" ####, '%{User-Password}')"
accounting { reference = "%{tolower:type.%{Acct-Status-Type}.query}" type { start { query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\ 'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}','%{Acct-Session-Id}',\ '%{DHCP-Agent-Remote-Id}','%{DHCP-Agent-Circuit-Id}',\ (%{%{Acct-Input-Gigawords}:-0} * POWER(2, 32)) + %{%{Acct-Input-Octets}:-0},\ (%{%{Acct-Output-Gigawords}:-0} * POWER(2, 32)) + %{%{Acct-Output-Octets}:-0})" } interim-update { query = "${..start.query}" } stop { query = "call radstop('%{User-Name}')" } } }
post-auth { query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\ 'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}','%{Acct-Session-Id}',\ '%{DHCP-Agent-Remote-Id}','%{DHCP-Agent-Circuit-Id}',\ (%{%{Acct-Input-Gigawords}:-0} * POWER(2, 32)) + %{%{Acct-Input-Octets}:-0},\ (%{%{Acct-Output-Gigawords}:-0} * POWER(2, 32)) + %{%{Acct-Output-Octets}:-0})" } }
[ipoe] verbose=1 level=5
username=lua:username password=ipoe unit-cache=0 lua-file=/etc/accel-ppp.lua lease-time=120 #120 #60 renew-time=90 #30 max-lease-time=600 #90 attr-dhcp-client-ip=Framed-IP-Address gw-ip-address=10.111.0.1/20 #### guest ip network #gw-ip-address=172.16.0.1/20 ### redirect attr-l4-redirect=L4-Redirect attr-l4-redirect-ipset=L4-Redirect-ipset #attr-l4-redirect-table=L4-Redirect-table #l4-redirect-ipset=l4 #L4-Redirect-table=4051 #### proxy-arp=1 shared=1 ifcfg=1 mode=L2 start=dhcpv4 interface=re:ens160 vlan-mon=re:ens160,4080 vlan-timeout=60 vlan-name=%I.%N #agent-remote-id=accel-ppp attr-dhcp-opt82=DHCP-Option82 attr-dhcp-opt82-remote-id=DHCP-Agent-Remote-Id attr-dhcp-opt82-circuit-id=DHCP-Agent-Circuit-Id
Я роблю таким чином, всі по замовчуванню заблоковані, відразу іх завертає на заглушку, потім спрацьовує модуль СОА і робить все так як вказано в обліковому запису. як на мене так менше мороки. Модуль СОА запускається таким чином /usr/bin/perl /usr/local/nodeny/noserver.pl -a -i -g=coa.cfg.pm -d & В цьому позитивно, якщо втрачається зв'язок з радіусом то клієнти працюють і не відвалюються, і якщо зв'язок відновлено то відновлюється авторизація, і ніби не виникає момент що сесії на брасі є а в білінгу нема. ось десь так воно робить. Авторизує по маку ону та маку олт
|
|
|
Записан
|
|
|
|
serg
|
|
« Ответ #96 : 27 Ноября 2022, 07:26:28 » |
|
Всем доброго времени суток!
Может кто ни будь может поделится процедурами (radcheck, radreply, radupdate), задача такая: Mikrotik + DHCP + Radius + Option82 Использую BDCOM 3310, BDCOM 3608
Да высше есть процедуры, я пробовал их но не смог решить свою задачу.
Хочу авторизовать абонов по мак ону и мак абона, также зглушка Сейчас у меня все на одном сервере, на данный момент использую make_conf, подключаю нового абона, получает dhcp, идем на заглшка и регим по логину и паролю нового абона, меняю в подключение ip статический и таким оброзом привязываю абона по опции82.
Можно попросить еще поделится конфигами радиуса и настройками Mikrotik.
|
|
|
Записан
|
|
|
|
|