fet4
|
|
« : 14 Ноября 2017, 19:54:32 » |
|
Привет всем! Кто какое имя пользователя передает через радиус в случае авторизации по opt 82 (device_mac+port)?
|
|
|
Записан
|
|
|
|
Cell
NoDeny
Спец
Карма: 52
Offline
Сообщений: 1407
|
|
« Ответ #1 : 14 Ноября 2017, 22:24:19 » |
|
это типа шутки или как?
|
|
|
Записан
|
|
|
|
fet4
|
|
« Ответ #2 : 15 Ноября 2017, 10:22:48 » |
|
В чем Вы видите шутку? Допустим при схеме vlan-per-user в качестве username выступает номер vlan. В моем случае я авторизую клиента по opt82 и тут немного сложней получается. Можно ли как-то учитывать еще два атрибута прилетающих от радиуса в процедурах mysql DHCP-Agent-Circuit-Id DHCP-Agent-Remote-Id
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #3 : 15 Ноября 2017, 10:24:48 » |
|
Не, я думаю не шутка, в dhcp по дефолту в атрибут username записывается мак-адрес абона. Дальше он передается в процедуру radcheck. Порт и мак устройства никуда не передается. Я думаю можно radcheck изменить, чтобы она принимала и проверяла эти параметры. Надо будет глянуть...
|
|
|
Записан
|
|
|
|
fet4
|
|
« Ответ #4 : 15 Ноября 2017, 12:16:41 » |
|
Не, я думаю не шутка, в dhcp по дефолту в атрибут username записывается мак-адрес абона. Дальше он передается в процедуру radcheck. Порт и мак устройства никуда не передается. Я думаю можно radcheck изменить, чтобы она принимала и проверяла эти параметры. Надо будет глянуть...
Это будет то что нужно. Готов оплатить Ваш труд. Есть стенд на котором можно проверить.
|
|
|
Записан
|
|
|
|
Cell
NoDeny
Спец
Карма: 52
Offline
Сообщений: 1407
|
|
« Ответ #5 : 15 Ноября 2017, 12:50:12 » |
|
Не, я думаю не шутка, в dhcp по дефолту в атрибут username записывается мак-адрес абона.
Ну я это и имел ввиду.
|
|
|
Записан
|
|
|
|
fet4
|
|
« Ответ #6 : 15 Ноября 2017, 13:12:54 » |
|
Не, я думаю не шутка, в dhcp по дефолту в атрибут username записывается мак-адрес абона.
Ну я это и имел ввиду. Ну можно же сделать username например mac+dev_mac+port или dev_mac+port ? Не красиво конечно получится.
|
|
|
Записан
|
|
|
|
Cell
NoDeny
Спец
Карма: 52
Offline
Сообщений: 1407
|
|
« Ответ #7 : 15 Ноября 2017, 15:24:00 » |
|
Тут не вопрос как можно сделать, а вопрос в том как кодирует опцию то устройство, которое вы в качестве дхцп сервера используете. В соответсвии с этим нужно переработать процедуру обработки и настройки радиус сервера. На самом деле - это только вершина айсберга под названием "авторизация по опции 82". Ягодки начнутся потом, когда вы поймете - что это не совсем то, что вы хотели.... а то что хотели делается слегка другими средствами. Поэтому для начала опишите ЧТО именно вы хотите получить.
|
|
|
Записан
|
|
|
|
fet4
|
|
« Ответ #8 : 15 Ноября 2017, 22:51:53 » |
|
В данный момент используется модуль dhcp на основе isc-dhcp-server. Пользователи авторизуются по option82, часть из них по mac+dev_mac+port, другая часть по dev_mac+port (один на порту). Есть задача перенести авторизацию через freeradius, в качестве dhcp сервера выступает accel-ppp что в принципе не столь важно кто им будет, главное чтобы радиус отдавал то что нужно. Разобравшись в вопросе я понял что мне не хватает всего-лишь правильных mysql процедур в которых бы учитывался не только mac адрес клиента. Вот пример прилетающих атрибутов через радиус. Скорей всего они передаются в не измененном виде которые приходят с коммутаторов. <Relay-Agent {Agent-Circuit-ID _000400720019} {Agent-Remote-ID _ 0006ec228025b5e0}> Если в чем-то я не прав поправьте.
|
|
|
Записан
|
|
|
|
Cell
NoDeny
Спец
Карма: 52
Offline
Сообщений: 1407
|
|
« Ответ #9 : 16 Ноября 2017, 09:16:45 » |
|
И да и нет. Я не зря поросил написать что именно вы хотите а не как вы это хотите сделать. Объясню на примере isc-dhcp. Обычно от дхцп в таких случаях хотят чтобы абонент получал адрес в ответ на запрос с любого мака. Все бы хорошо но в большинстве случаев это прямо противоречит самому протоколу дхцп например в случаях, действующего лизинга. В такие моменты абонент будет получать отказ «но фри лизе». И тут вдруг оказывается что используемый дхцп по другому не умеет. А вы точно уверены что ваш аксель настолько хорош что стоит под него делать новые процедуры? Чем вообще вызвана необходимость использования акселя? Просто тем что у вас линукс? Или чем?
|
|
|
Записан
|
|
|
|
elite
Начальник планеты
NoDeny
Спец
Карма: 52
Offline
Сообщений: 1226
In LAN we trust!
|
|
« Ответ #10 : 16 Ноября 2017, 12:55:50 » |
|
Cell дядька, от тут ты точно не прав accel - действительно крутая штука
|
|
|
Записан
|
|
|
|
fet4
|
|
« Ответ #11 : 16 Ноября 2017, 13:10:19 » |
|
Обычно от дхцп в таких случаях хотят чтобы абонент получал адрес в ответ на запрос с любого мака По-моему так и должно быть, как клиент сможет авторизоваться на порту если у него не будет Ip? А неизвестные маки и их Ip уже редиректить на заглушку авторизации. В случае с радиусом можно можно выдавать Access-Reject и обрабатывать как угодно. А вы точно уверены что ваш аксель настолько хорош что стоит под него делать новые процедуры? Думаю если бы были такие процедуры их можно было бы применять где угодно на том же микроте с минимальными правками и со всем остальным что умеет радиус. Чем вообще вызвана необходимость использования акселя? Просто тем что у вас линукс? Или чем? Да. С accel и линуксом я подружился, я знаю их по мере своих потребностей. Тот же микрот я не знаю и мне больше по душе голый линуск. А на фре насколько мне известно dhcp через радиус развернуть нельзя.
|
|
|
Записан
|
|
|
|
|
fet4
|
|
« Ответ #13 : 16 Ноября 2017, 15:26:12 » |
|
Да на тестовом сервере их пробовал, по маку работает без вопросов.
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #14 : 16 Ноября 2017, 17:44:53 » |
|
Попробуй: DROP PROCEDURE IF EXISTS `radreply`; DELIMITER $$ CREATE PROCEDURE `radreply`(IN login VARCHAR(64), IN dev_mac VARCHAR(64), IN port VARCHAR(64)) BEGIN DECLARE usr_mac VARCHAR(12); DECLARE usr_ip VARCHAR(15); DECLARE usr_id INT; SELECT REPLACE(login, ':', '') INTO usr_mac; SELECT REPLACE(dev_mac, ':', '') INTO dev_mac; SELECT uid INTO usr_id FROM mac_uid WHERE mac=usr_mac AND device_mac=dev_mac AND device_port=port; 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 ip=INET_ATON(usr_ip), time=UNIX_TIMESTAMP() WHERE uid=usr_id; ELSE UPDATE mac_uid SET ip=0 WHERE uid=0 AND time<(UNIX_TIMESTAMP()-3600); 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(), dev_mac, port, 0) ON DUPLICATE KEY UPDATE uid=0, ip=INET_ATON(usr_ip), device_mac=dev_mac, device_port=port, time=UNIX_TIMESTAMP(); COMMIT; SELECT INET_NTOA(ip) INTO usr_ip FROM mac_uid WHERE mac=usr_mac AND device_mac=dev_mac AND device_port=port; END IF; SELECT NULL, login, 'Framed-IP-Address', usr_ip, '='; SELECT NULL, login, 'Session-Timeout', '600', '='; END$$ DELIMITER ;
|
|
|
Записан
|
|
|
|
|