Warlock
NoDeny
Старожил
Карма: 8
Offline
Сообщений: 367
|
|
« Ответ #45 : 25 Октября 2016, 17:30:05 » |
|
Стас, могу ошибаться, но в доке может быть ошибка, если ты модуль после меня не переделывал, то $coa_disconnect посылается авторизованному клиенту, у которого изменился статус.
|
|
|
Записан
|
|
|
|
sever
Пользователь
Карма: 1
Offline
Сообщений: 82
|
|
« Ответ #46 : 25 Октября 2016, 18:52:11 » |
|
А как правильно выдрать тариф через радиус. mysql> select param from services; $VAR1 = {'script' => '','min_traf' => '','period' => 2592000,'mode' => '2','speed_out4' => '','speed_in4' => '','speed_out1' => 1024000,'speed_in1' => 1024000,'tags' => 'medium','speed_out3' => '','speed_out2' => '','speed_in2' => '','wait_pos_balance' => '0','speed_in3' => ''};
есть такие значение в тарифе 'speed_out1' => 1024000,'speed_in1' => 1024000,'tags' => 'medium' Как правильно в mysql-процедуре radreply передать эти параметры. Нечто, вроде 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; DECLARE s_param VARCHAR(15) DEFAULT 1024;
SELECT users.id,services.param INTO usr_id,s_param FROM users,services 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','='; SELECT NULL,login,'PPPD-Downstream-Speed-Limit','s_param','='; SELECT NULL,login,'PPPD-Upstream-Speed-Limit','s_param','=';
END$$ DELIMITER ;
|
|
« Последнее редактирование: 25 Октября 2016, 19:26:26 от sever »
|
Записан
|
|
|
|
elite
Начальник планеты
NoDeny
Спец
Карма: 52
Offline
Сообщений: 1226
In LAN we trust!
|
|
« Ответ #47 : 25 Октября 2016, 19:35:00 » |
|
А как правильно выдрать тариф через радиус. mysql> select param from services; $VAR1 = {'script' => '','min_traf' => '','period' => 2592000,'mode' => '2','speed_out4' => '','speed_in4' => '','speed_out1' => 1024000,'speed_in1' => 1024000,'tags' => 'medium','speed_out3' => '','speed_out2' => '','speed_in2' => '','wait_pos_balance' => '0','speed_in3' => ''};
есть такие значение в тарифе 'speed_out1' => 1024000,'speed_in1' => 1024000,'tags' => 'medium' Как правильно в mysql-процедуре radreply передать эти параметры. Нечто, вроде 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; DECLARE s_param VARCHAR(15) DEFAULT 1024;
SELECT users.id,services.param INTO usr_id,s_param FROM users,services 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','='; SELECT NULL,login,'PPPD-Downstream-Speed-Limit','s_param','='; SELECT NULL,login,'PPPD-Upstream-Speed-Limit','s_param','=';
END$$ DELIMITER ;
наверное, нужно на perl радиус перевести
|
|
|
Записан
|
|
|
|
Warlock
NoDeny
Старожил
Карма: 8
Offline
Сообщений: 367
|
|
« Ответ #48 : 25 Октября 2016, 20:47:27 » |
|
А как правильно выдрать тариф через радиус. mysql> select param from services; $VAR1 = {'script' => '','min_traf' => '','period' => 2592000,'mode' => '2','speed_out4' => '','speed_in4' => '','speed_out1' => 1024000,'speed_in1' => 1024000,'tags' => 'medium','speed_out3' => '','speed_out2' => '','speed_in2' => '','wait_pos_balance' => '0','speed_in3' => ''};
есть такие значение в тарифе 'speed_out1' => 1024000,'speed_in1' => 1024000,'tags' => 'medium' Как правильно в mysql-процедуре radreply передать эти параметры. Нечто, вроде 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; DECLARE s_param VARCHAR(15) DEFAULT 1024;
SELECT users.id,services.param INTO usr_id,s_param FROM users,services 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','='; SELECT NULL,login,'PPPD-Downstream-Speed-Limit','s_param','='; SELECT NULL,login,'PPPD-Upstream-Speed-Limit','s_param','=';
END$$ DELIMITER ;
Есть модуль радиус аттрибуты. Или же через CoA.
|
|
|
Записан
|
|
|
|
sever
Пользователь
Карма: 1
Offline
Сообщений: 82
|
|
« Ответ #49 : 26 Октября 2016, 03:59:16 » |
|
Как правильно в mysql-процедуре radreply передать эти параметры.
Разобрался, вариант такой годится 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; DECLARE usr_tarif 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 service_id INTO usr_tarif from users_services LIMIT 1;
SELECT NULL,login,'Framed-IP-Address',usr_ip,'='; SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','='; SELECT NULL,login,'Framed-Protocol','PPP','=';
IF usr_tarif = 1 THEN SELECT NULL,login,'PPPD-Downstream-Speed-Limit','1024','='; SELECT NULL,login,'PPPD-Upstream-Speed-Limit','1024','='; END IF;
IF usr_tarif = 2 THEN SELECT NULL,login,'PPPD-Downstream-Speed-Limit','2048','='; SELECT NULL,login,'PPPD-Upstream-Speed-Limit','2048','='; END IF;
IF usr_tarif = 3 THEN SELECT NULL,login,'PPPD-Downstream-Speed-Limit','4096','='; SELECT NULL,login,'PPPD-Upstream-Speed-Limit','4096','='; END IF;
END$$ DELIMITER ; Завтра надо с тегами попробовать Не зря же они в тарифе указаны.
|
|
|
Записан
|
|
|
|
sever
Пользователь
Карма: 1
Offline
Сообщений: 82
|
|
« Ответ #50 : 27 Октября 2016, 11:39:06 » |
|
В тарифе указываем теги тарифа. Конечный вариант таков. 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; DECLARE usr_tarif 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 tags INTO usr_tarif FROM users_services LIMIT 1;
SELECT NULL,login,'Framed-IP-Address',usr_ip,'='; SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','='; SELECT NULL,login,'Framed-Protocol','PPP','='; SELECT NULL,login,'Acct-Interim-Interval','60','=';
IF usr_tarif LIKE '%,medium,%' THEN SELECT NULL,login,'PPPD-Downstream-Speed-Limit','21504','='; SELECT NULL,login,'PPPD-Upstream-Speed-Limit','21504','='; END IF;
IF usr_tarif LIKE '%,fast,%' THEN SELECT NULL,login,'PPPD-Downstream-Speed-Limit','51200','='; SELECT NULL,login,'PPPD-Upstream-Speed-Limit','51200','='; END IF;
IF usr_tarif LIKE '%,ultra,%' THEN SELECT NULL,login,'PPPD-Downstream-Speed-Limit','102400','='; SELECT NULL,login,'PPPD-Upstream-Speed-Limit','102400','='; ELSE SELECT NULL,login,'PPPD-Downstream-Speed-Limit','2048','='; SELECT NULL,login,'PPPD-Upstream-Speed-Limit','2048','='; END IF;
END$$ DELIMITER ; Заметил особенность или глюк При изменении тега тарифа в вебе, в mysql он не меняется до тех пор, пока не переназначишь услугу. К примеру mysql> SELECT tags FROM users_services WHERE tags LIKE '%,speed,%'; +----------------------------------+ | tags | +----------------------------------+ | ,medium,inet,speed,start_traf=0, | +----------------------------------+ 1 row in set (0.00 sec)
Меняем тег в морде на medium_new получаем mysql> SELECT tags FROM users_services WHERE tags LIKE '%,speed,%'; +----------------------------------+ | tags | +----------------------------------+ | ,medium,inet,speed,start_traf=0, | +----------------------------------+ 1 row in set (0.00 sec)
Переназначачем услугу И только теперь получаем изменённый тег. mysql> SELECT tags FROM users_services WHERE tags LIKE '%,speed,%'; +--------------------------------------+ | tags | +--------------------------------------+ | ,medium_new,inet,speed,start_traf=0, | +--------------------------------------+ 1 row in set (0.00 sec)
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #51 : 27 Октября 2016, 13:20:28 » |
|
Заметил особенность или глюк
особенность. Теги и радиус-атрибуты устанавливаются в момент подключения услуги
|
|
|
Записан
|
|
|
|
sever
Пользователь
Карма: 1
Offline
Сообщений: 82
|
|
« Ответ #52 : 28 Октября 2016, 17:29:02 » |
|
Стас, могу ошибаться, но в доке может быть ошибка, если ты модуль после меня не переделывал, то $coa_disconnect посылается авторизованному клиенту, у которого изменился статус. [/quote] У меня disconnect срабатывает при изменении абонента с статуса ON в статус OFF В бебаге сделал меседжи когда ON и OFF OFF => ON sending: = 'NAS-Port-Id=eth0.3001.202, PPPD-Upstream-Speed-Limit=21504, PPPD-Downstream-Speed-Limit=21504,Message=state_ON' ON => OFF sending: = 'NAS-Port-Id=eth0.3001.202,Message="state_disconnect"
|
|
|
Записан
|
|
|
|
fet4
|
|
« Ответ #53 : 29 Октября 2016, 11:37:23 » |
|
Ребята поделитесь опытом, а кто в каком режиме accel-ppp-ipoe использует? Сейчас использую isc-dhcp option82 параллельно с pppoe, хотелось бы и ipoe перевести на accel, т.к. шейперов не хватает.
|
|
|
Записан
|
|
|
|
Pa4ka
|
|
« Ответ #54 : 29 Октября 2016, 14:08:44 » |
|
Ребята поделитесь опытом, а кто в каком режиме accel-ppp-ipoe использует? Сейчас использую isc-dhcp option82 параллельно с pppoe, хотелось бы и ipoe перевести на accel, т.к. шейперов не хватает.
Я использую accel-ppp ipoe, в каком режиме это как я наверно понял связку сказать. Поменял с rlm_sql на rlm_perl для связки NAS->freeradius->база биллинга. Ну а accel-ppp пока что в мод L2 interface=re:bond1\.17[0-35],mode=L2,shared=1,start=dhcpv4,ifcfg=1
Скоро буду на qinq vlan peer user доделывать, ну это изза специфики сети трудновато пока. Или я не верно понял?
|
|
|
Записан
|
|
|
|
fet4
|
|
« Ответ #55 : 29 Октября 2016, 16:42:11 » |
|
Да, в accel-ppp-ipoe есть несколько вариантов использования L2,L3 и другие, я пока что не могу определиться какой мне подходит больше. Поменял с rlm_sql на rlm_perl для связки NAS->freeradius->база биллинга. Зачем поменяли, что конкретно не получалось, вроде все ж возможно и на sql? Для qinq нужна же поддержка коммутатора доступа?
|
|
|
Записан
|
|
|
|
sever
Пользователь
Карма: 1
Offline
Сообщений: 82
|
|
« Ответ #56 : 02 Ноября 2016, 08:46:16 » |
|
Для qinq нужна же поддержка коммутатора доступа?
Да ты же на свиче все вланы будешь заворачивать в влан qinq. А коммутатор доступа это или агрегации - зависит от твоей схемы. На циске этот режим называется mode dot1q-tunnel.
|
|
|
Записан
|
|
|
|
Pa4ka
|
|
« Ответ #57 : 14 Ноября 2016, 12:16:28 » |
|
Да, в accel-ppp-ipoe есть несколько вариантов использования L2,L3 и другие, я пока что не могу определиться какой мне подходит больше. Поменял с rlm_sql на rlm_perl для связки NAS->freeradius->база биллинга. Зачем поменяли, что конкретно не получалось, вроде все ж возможно и на sql? Для qinq нужна же поддержка коммутатора доступа? Можно но мне удобнее в perl менять и отправлять всё/как/когда нужно. Не обязательно, в qinq можно упаковывать уже на агрегации.
|
|
|
Записан
|
|
|
|
fet4
|
|
« Ответ #58 : 05 Декабря 2016, 18:02:23 » |
|
А кто как передает пустой пароль в accel ? У меня не получается, если через radtest то все ок. rad_recv: Access-Request packet from host 172.20.0.2 port 41480, id=202, length=87 User-Name = "74:e5:43:8f:c1:17" User-Password = "" NAS-IP-Address = 127.0.1.1 NAS-Port = 0 Message-Authenticator = 0x4dec5f0c6bc36e1653f0698ffb57f63e # Executing section authorize from file /etc/freeradius/sites-enabled/default +group authorize { rlm_sql (sql): Reserving sql socket id: 31 [sql] expand: call radcheck_dhcp('%{User-Name}') -> call radcheck_dhcp('74:e5:43:8f:c1:17') [sql] User found in radcheck table [sql] expand: call radreply_dhcp('%{User-Name}') -> call radreply_dhcp('74:e5:43:8f:c1:17') rlm_sql (sql): Released sql socket id: 31 ++[sql] = ok +} # group authorize = ok WARNING: Please update your configuration, and remove 'Auth-Type = Local' WARNING: Use the PAP or CHAP modules instead. User-Password in the request is correct. # Executing section post-auth from file /etc/freeradius/sites-enabled/default +group post-auth { [sql] expand: call radupdate_dhcp('%{User-Name}','%{reply:Framed-IP-Address}', 'nas=%{NAS-IP-Address}') -> call radupdate_dhcp('74:e5:43:8f:c1:17','10.194.13.234', 'nas=127.0.1.1') rlm_sql (sql) in sql_postauth: query is call radupdate_dhcp('74:e5:43:8f:c1:17','10.194.13.234', 'nas=127.0.1.1') rlm_sql (sql): Reserving sql socket id: 30 rlm_sql (sql): Released sql socket id: 30 ++[sql] = ok +} # group post-auth = ok Sending Access-Accept of id 202 to 172.20.0.2 port 41480 Framed-IP-Address = 10.194.13.234 Session-Timeout = 600 Finished request 0. Going to the next request Waking up in 4.9 seconds. Cleaning up request 0 ID 202 with timestamp +9
А accel дает reject, если указать password=empty в [ipoe], то User-Password атрибута вообще нет, если password убрать то там мак-устройства в пароле, если password="" то кавычки экранируются слэшами. rad_recv: Access-Request packet from host 172.20.0.2 port 45003, id=1, length=110 User-Name = "74:e5:43:8f:c1:17" NAS-Identifier = "accel-ppp-ipoe" NAS-IP-Address = 172.20.0.2 NAS-Port = 211 NAS-Port-Id = "ipoe0" NAS-Port-Type = Ethernet Calling-Station-Id = "74:e5:43:8f:c1:17" Called-Station-Id = "vlan200" # Executing section authorize from file /etc/freeradius/sites-enabled/default +group authorize { rlm_sql (sql): Reserving sql socket id: 30 [sql] expand: call radcheck_dhcp('%{User-Name}') -> call radcheck_dhcp('74:e5:43:8f:c1:17') [sql] User found in radcheck table [sql] expand: call radreply_dhcp('%{User-Name}') -> call radreply_dhcp('74:e5:43:8f:c1:17') rlm_sql (sql): Released sql socket id: 30 ++[sql] = ok +} # group authorize = ok WARNING: Please update your configuration, and remove 'Auth-Type = Local' WARNING: Use the PAP or CHAP modules instead. No User-Password or CHAP-Password attribute in the request. Cannot perform authentication. Failed to authenticate the user. Using Post-Auth-Type REJECT WARNING: Unknown value specified for Post-Auth-Type. Cannot perform requested action. # Executing group from file /etc/freeradius/sites-enabled/default Delaying reject of request 1 for 1 seconds Going to the next request Waking up in 0.9 seconds. Sending delayed reject for request 1 Sending Access-Reject of id 1 to 172.20.0.2 port 45003 Framed-IP-Address = 10.194.7.128 Session-Timeout = 600 Waking up in 4.9 seconds. Cleaning up request 1 ID 1 with timestamp +10
|
|
|
Записан
|
|
|
|
Pa4ka
|
|
« Ответ #59 : 06 Декабря 2016, 11:14:21 » |
|
А кто как передает пустой пароль в accel ? У меня не получается, если через radtest то все ок. rad_recv: Access-Request packet from host 172.20.0.2 port 41480, id=202, length=87 User-Name = "74:e5:43:8f:c1:17" User-Password = "" NAS-IP-Address = 127.0.1.1 NAS-Port = 0 Message-Authenticator = 0x4dec5f0c6bc36e1653f0698ffb57f63e # Executing section authorize from file /etc/freeradius/sites-enabled/default +group authorize { rlm_sql (sql): Reserving sql socket id: 31 [sql] expand: call radcheck_dhcp('%{User-Name}') -> call radcheck_dhcp('74:e5:43:8f:c1:17') [sql] User found in radcheck table [sql] expand: call radreply_dhcp('%{User-Name}') -> call radreply_dhcp('74:e5:43:8f:c1:17') rlm_sql (sql): Released sql socket id: 31 ++[sql] = ok +} # group authorize = ok WARNING: Please update your configuration, and remove 'Auth-Type = Local' WARNING: Use the PAP or CHAP modules instead. User-Password in the request is correct. # Executing section post-auth from file /etc/freeradius/sites-enabled/default +group post-auth { [sql] expand: call radupdate_dhcp('%{User-Name}','%{reply:Framed-IP-Address}', 'nas=%{NAS-IP-Address}') -> call radupdate_dhcp('74:e5:43:8f:c1:17','10.194.13.234', 'nas=127.0.1.1') rlm_sql (sql) in sql_postauth: query is call radupdate_dhcp('74:e5:43:8f:c1:17','10.194.13.234', 'nas=127.0.1.1') rlm_sql (sql): Reserving sql socket id: 30 rlm_sql (sql): Released sql socket id: 30 ++[sql] = ok +} # group post-auth = ok Sending Access-Accept of id 202 to 172.20.0.2 port 41480 Framed-IP-Address = 10.194.13.234 Session-Timeout = 600 Finished request 0. Going to the next request Waking up in 4.9 seconds. Cleaning up request 0 ID 202 with timestamp +9
А accel дает reject, если указать password=empty в [ipoe], то User-Password атрибута вообще нет, если password убрать то там мак-устройства в пароле, если password="" то кавычки экранируются слэшами. rad_recv: Access-Request packet from host 172.20.0.2 port 45003, id=1, length=110 User-Name = "74:e5:43:8f:c1:17" NAS-Identifier = "accel-ppp-ipoe" NAS-IP-Address = 172.20.0.2 NAS-Port = 211 NAS-Port-Id = "ipoe0" NAS-Port-Type = Ethernet Calling-Station-Id = "74:e5:43:8f:c1:17" Called-Station-Id = "vlan200" # Executing section authorize from file /etc/freeradius/sites-enabled/default +group authorize { rlm_sql (sql): Reserving sql socket id: 30 [sql] expand: call radcheck_dhcp('%{User-Name}') -> call radcheck_dhcp('74:e5:43:8f:c1:17') [sql] User found in radcheck table [sql] expand: call radreply_dhcp('%{User-Name}') -> call radreply_dhcp('74:e5:43:8f:c1:17') rlm_sql (sql): Released sql socket id: 30 ++[sql] = ok +} # group authorize = ok WARNING: Please update your configuration, and remove 'Auth-Type = Local' WARNING: Use the PAP or CHAP modules instead. No User-Password or CHAP-Password attribute in the request. Cannot perform authentication. Failed to authenticate the user. Using Post-Auth-Type REJECT WARNING: Unknown value specified for Post-Auth-Type. Cannot perform requested action. # Executing group from file /etc/freeradius/sites-enabled/default Delaying reject of request 1 for 1 seconds Going to the next request Waking up in 0.9 seconds. Sending delayed reject for request 1 Sending Access-Reject of id 1 to 172.20.0.2 port 45003 Framed-IP-Address = 10.194.7.128 Session-Timeout = 600 Waking up in 4.9 seconds. Cleaning up request 1 ID 1 with timestamp +10
У меня никак не получалось пароль в запросе "опустошить)". Сделал временно в конфиге радиуса, ну и это временно до сих пор работает В секции authorize site-enabled - если NAS-Port-Type не Virtual update request { User-Password = "" } perl }
|
|
|
Записан
|
|
|
|
|