Биллинговая система Nodeny
27 Апреля 2024, 03:38:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1] 2 3 ... 7
  Печать  
Автор Тема: DHCP + Opt82 + Radius  (Прочитано 29482 раз)
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 324


Просмотр профиля Email
« : 14 Ноября 2017, 19:54:32 »

Привет всем!
Кто какое имя пользователя передает через радиус в случае авторизации по opt 82 (device_mac+port)?

Записан
Cell
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1407



Просмотр профиля
« Ответ #1 : 14 Ноября 2017, 22:24:19 »

это типа шутки или как?
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 324


Просмотр профиля Email
« Ответ #2 : 15 Ноября 2017, 10:22:48 »

В чем Вы видите шутку?
Допустим при схеме vlan-per-user в качестве username выступает номер vlan.
В моем случае я авторизую клиента по opt82 и тут немного сложней получается.
Можно ли как-то учитывать еще два атрибута прилетающих от радиуса в процедурах mysql
Код:
DHCP-Agent-Circuit-Id
DHCP-Agent-Remote-Id
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #3 : 15 Ноября 2017, 10:24:48 »

Не, я думаю не шутка, в dhcp по дефолту в атрибут username записывается мак-адрес абона. Дальше он передается в процедуру radcheck. Порт и мак устройства никуда не передается. Я думаю можно radcheck изменить, чтобы она принимала и проверяла эти параметры. Надо будет глянуть...
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 324


Просмотр профиля Email
« Ответ #4 : 15 Ноября 2017, 12:16:41 »

Не, я думаю не шутка, в dhcp по дефолту в атрибут username записывается мак-адрес абона. Дальше он передается в процедуру radcheck. Порт и мак устройства никуда не передается. Я думаю можно radcheck изменить, чтобы она принимала и проверяла эти параметры. Надо будет глянуть...
Это будет то что нужно. Готов оплатить Ваш труд. Есть стенд на котором можно проверить.
Записан
Cell
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1407



Просмотр профиля
« Ответ #5 : 15 Ноября 2017, 12:50:12 »

Не, я думаю не шутка, в dhcp по дефолту в атрибут username записывается мак-адрес абона.
Ну я это и имел ввиду.
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 324


Просмотр профиля Email
« Ответ #6 : 15 Ноября 2017, 13:12:54 »

Не, я думаю не шутка, в dhcp по дефолту в атрибут username записывается мак-адрес абона.
Ну я это и имел ввиду.
Ну можно же сделать username например mac+dev_mac+port или dev_mac+port ?  Не красиво конечно получится.
Записан
Cell
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1407



Просмотр профиля
« Ответ #7 : 15 Ноября 2017, 15:24:00 »

Тут не вопрос как можно сделать, а вопрос в том как кодирует опцию то устройство, которое вы в качестве дхцп сервера используете. В соответсвии с этим нужно переработать процедуру обработки и настройки радиус сервера. На самом деле - это только вершина айсберга под названием "авторизация по опции 82". Ягодки начнутся потом, когда вы поймете - что это не совсем то, что вы хотели.... а то что хотели делается слегка другими средствами. Поэтому для начала опишите ЧТО именно вы хотите получить.
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 324


Просмотр профиля Email
« Ответ #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 Offline

Сообщений: 1407



Просмотр профиля
« Ответ #9 : 16 Ноября 2017, 09:16:45 »

И да и нет. Я не зря поросил написать что именно вы хотите а не как вы это хотите сделать. Объясню на примере isc-dhcp. Обычно от дхцп в таких случаях хотят чтобы абонент получал адрес в ответ на запрос с любого мака. Все бы хорошо но в большинстве случаев это прямо противоречит самому протоколу дхцп например в случаях, действующего лизинга. В такие моменты абонент будет получать отказ «но фри лизе». И тут вдруг оказывается что используемый дхцп по другому не умеет. А вы точно уверены что ваш аксель настолько хорош что стоит под него делать новые процедуры? Чем вообще вызвана необходимость использования акселя? Просто тем что у вас линукс?  Или чем?
Записан
elite
Начальник планеты
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1227

In LAN we trust!

358714596
Просмотр профиля
« Ответ #10 : 16 Ноября 2017, 12:55:50 »

Cell
дядька, от тут ты точно не прав
accel - действительно крутая штука
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 324


Просмотр профиля Email
« Ответ #11 : 16 Ноября 2017, 13:10:19 »

Цитировать
Обычно от дхцп в таких случаях хотят чтобы абонент получал адрес в ответ на запрос с любого мака
По-моему так и должно быть, как клиент сможет авторизоваться на порту если у него не будет Ip? А неизвестные маки и их Ip уже редиректить на заглушку авторизации. В случае с радиусом можно можно выдавать Access-Reject и обрабатывать как угодно.

Цитировать
А вы точно уверены что ваш аксель настолько хорош что стоит под него делать новые процедуры?
Думаю если бы были такие процедуры их можно было бы применять где угодно на том же микроте с минимальными правками и со всем остальным что умеет радиус.

Цитировать
Чем вообще вызвана необходимость использования акселя? Просто тем что у вас линукс?  Или чем?
Да. С accel и линуксом я подружился, я знаю их по мере своих потребностей. Тот же микрот я не знаю и мне больше по душе голый линуск. А на фре насколько мне известно dhcp через радиус развернуть нельзя.
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #12 : 16 Ноября 2017, 14:43:46 »

Ладно. Чего вы спорите? Если не учитывать мак свича и порт, то вы эти (http://nodeny.com.ua/wiki/index.php/Dhcp%2BRadius) процедуры используете?
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 324


Просмотр профиля Email
« Ответ #13 : 16 Ноября 2017, 15:26:12 »

Да на тестовом сервере их пробовал, по маку работает без вопросов.
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #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 ;
Записан
Страниц: [1] 2 3 ... 7
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!