Mirkotik dhcp: відмінності між версіями
Sv (обговорення | внесок) Немає опису редагування |
Sv (обговорення | внесок) Немає опису редагування |
||
Рядок 32: | Рядок 32: | ||
<br><br> | <br><br> | ||
=Скорость по Radius= | =Скорость по Radius= |
Версія за 09:13, 21 вересня 2018
При использовании dhcp нам доступен механизм регистрации клиентского оборудования. Если мак-адрес компьютера абонента не известен - при открытии браузером любой страницы будет отображено окно с вводом логина и пароля, после заполнения которого, произойдет регистрация мака и в дальнейшей работе логин и пароль запрашиваться не будут пока пользователь не сменит свое оборудование (сетевую карту, роутер и т.д)
Настройка Radius описана здесь
Настраиваем mikrotik
/ip dhcp-server add disabled=no interface=ether1 name=dhcp1 use-radius=yes /ip dhcp-server network add dns-server=10.0.0.1 gateway=10.0.0.1 netmask=16 /radius add address=1.1.1.2 secret=hardpass5 service=dhcp
Здесь:
- 1.1.1.2 - ip сервера NoDeny, где установлен Radius server
- 10.0.0.1 - ip микротика, который смотрит в сеть абонентов
- netmask=16 - маска подсети абонентов (число после слеша в сети, например: 10.0.0.0/16)
- ether1 - интерфейс микротика, подключенный к сети абонентов
В данной конфигурации считается, что dns сервер также запущен на микротике. Если нет, то
/ip dns set allow-remote-requests=yes servers=8.8.4.4,8.8.8.8
Включаем тестовый компьютер как абонента, подключенного к микротику. Должны получить ip адрес из пула динамических адресов NoDeny. Поскольку мак-адрес тестового компьютера не известен NoDeny, выданный ip нигде не будет фигурировать (на самом деле он появится в таблице mac_uid). Привязку мака к учетной записи выполняется через веб-заглушку, которую мы настроим позже.
Скорость по Radius
Более оптимальный вариант управления микротик:
- включение/выключение доступа по API
- скорость по Radius
Для этого необходимо установить модуль "Radius атрибуты" и изменить mysql-процедуры:
DROP FUNCTION IF EXISTS strSplit; CREATE FUNCTION strSplit(x MEDIUMTEXT, delim MEDIUMTEXT, pos int) RETURNS MEDIUMTEXT RETURN TRIM(BOTH '\r' FROM TRIM( REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), LENGTH(SUBSTRING_INDEX(x, delim, pos - 1)) + 1), delim, '') )); DROP PROCEDURE IF EXISTS `radreply`; DELIMITER $$ CREATE PROCEDURE `radreply`(IN login VARCHAR(64)) BEGIN DECLARE usr_mac VARCHAR(12); DECLARE usr_ip VARCHAR(15); DECLARE usr_id INT; DECLARE add_attr MEDIUMTEXT; DECLARE line MEDIUMTEXT; DECLARE i INT DEFAULT 1; SELECT REPLACE(login, ':', '') INTO usr_mac; SELECT uid INTO usr_id FROM mac_uid WHERE mac=usr_mac; 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 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(), 0, 0, 0) ON DUPLICATE KEY UPDATE ip=INET_ATON(usr_ip), time=UNIX_TIMESTAMP(); COMMIT; SELECT INET_NTOA(ip) INTO usr_ip FROM mac_uid WHERE mac=usr_mac; END IF; SELECT NULL, login, 'Framed-IP-Address', usr_ip, '='; SELECT NULL, login, 'Session-Timeout', '600', '='; SELECT radius_attr INTO add_attr FROM users_services WHERE uid=usr_id AND tags LIKE '%,inet,%' LIMIT 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; END$$ DELIMITER ;
Если что-то не получается
- Проверяем, что в настройках NoDeny есть пул ip адресов с типом "динамический". При этом ip, указанные в настройках микротика
dns-server=10.1.0.11 gateway=10.1.0.11 netmask=16
должны попадать в этот диапазон. Например, мы можем сделать пул ip: 10.1.2.100 ... 10.1.9.254 - они попадают в сеть 10.1.0.0/16 так же как и 10.1.0.11
- Запустите radiusd с ключем -X и включите абонентский компьютер. Если radiusd не получит никаких запросов:
- Запустите tcpdump -iem0 -p -n udp 1812. Если никакие запросы на приходят - что-то не так с настройкой микротик
- На время разрешите полностью фаервол (ipfw add 10 allow ip from any to any)
- Если запросы приходят на radius, но он выдает ошибки - обратите внимание на то, какого рода эти ошибки: в настройке radius или ошибки при выполнении sql-запросов