|
|
Рядок 19: |
Рядок 19: |
|
| |
|
| == DHCP == | | == DHCP == |
| | | Настройка описана '''[[mirkotik dhcp|здесь]]''' |
| При использовании dhcp нам доступен механизм регистрации клиентского оборудования. Если мак-адрес компьютера абонента не известен - при открытии браузером любой страницы будет отображено окно с вводом логина и пароля, после заполнения которого, произойдет регистрация мака и в дальнейшей работе логин и пароль запрашиваться не будут пока пользователь не сменить свое оборудование (сетевую карту, роутер и т.д)
| |
| | |
| Настройка Radius описана [[Dhcp+Radius|здесь]] | |
| | |
| ===Настраиваем mikrotik===
| |
| | |
| <pre>
| |
| /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
| |
| </pre>
| |
| | |
| Здесь:
| |
| | |
| * 1.1.1.2 - ip сервера NoDeny, где установлен Radius server
| |
| * 10.0.0.1 - ip микротика, который смотрит в сеть абонентов
| |
| * netmask=16 - маска подсети абонентов (число после слеша в сети, например: 10.0.0.0/16)
| |
| * ether1 - интерфейс микротика, подключенный к сети абонентов
| |
| | |
| В данной конфигурации считается, что dns сервер также запущен на микротике. Если нет, то
| |
| | |
| <pre>
| |
| /ip dns set allow-remote-requests=yes servers=8.8.4.4,8.8.8.8
| |
| </pre>
| |
| | |
| | |
| Включаем тестовый компьютер как абонента, подключенного к микротику. Должны получить ip адрес из пула динамических адресов NoDeny. Поскольку мак-адрес тестового компьютера не известен NoDeny, выданный ip нигде не будет фигурировать (на самом деле он появится в таблице mac_uid). Привязку мака к учетной записи выполняется через веб-заглушку, которую мы настроим позже.
| |
| | |
| <br><br>
| |
| | |
| =Включение/выключение доступа в интернет=
| |
| | |
| На микротик включаем NAT и разрешаем натить только те ip, которые будут в списке goodboys
| |
| | |
| <pre>
| |
| /ip service enable api
| |
| /ip firewall nat add action=masquerade chain=srcnat disabled=no out-interface=ether2 src-address=10.0.0.0/16 src-address-list=goodboys
| |
| </pre>
| |
| | |
| Здесь:
| |
| | |
| * ether2 - интерфейс, который смотрит в интернет
| |
| * 10.0.0.0/16 - сеть абонентов
| |
| | |
| На сервере NoDeny:
| |
| | |
| <source lang="bash">
| |
| cd /usr/local/nodeny/modules
| |
| cat mikrotik/create.cfg.mikrotik.cfg.pm >> MyNetwork/create.mikrotik1.cfg.pm
| |
| ee MyNetwork/create.mikrotik1.cfg.pm
| |
| </source>
| |
| | |
| В первой строке редактируемого файла добавим единичку в mikrotik.cfg.pm:
| |
| | |
| <pre>
| |
| #<ACTION> file=>'cfg/mikrotik1.cfg.pm',hook=>'new'
| |
| </pre>
| |
| | |
| А также изменим параметры подключения к Микротику:
| |
| | |
| <pre>
| |
| $host = '1.1.1.1';
| |
| $user = 'admin';
| |
| $pass = '';
| |
| </pre>
| |
| | |
| Установим новый конфиг:
| |
| | |
| <source lang="bash">
| |
| cd /usr/local/nodeny/
| |
| perl install.pl -x
| |
| </source>
| |
| | |
| Запустим с выводом процесса управления микротиком на консоль:
| |
| | |
| <source lang="bash">
| |
| perl noserver.pl -g=_mikrotik1.cfg.pm -v
| |
| </source>
| |
| | |
| Тестируем. Если все ок, то в автозагрузку:
| |
| | |
| <source lang="bash">
| |
| echo '/usr/bin/perl /usr/local/nodeny/noserver.pl -g=_mikrotik1.cfg.pm -d &' >> /etc/rc.local
| |
| </source>
| |
| | |
| <br>
| |
| | |
| =Заглушка=
| |
| | |
| | |
| На микротике выполним команды:
| |
| | |
| <pre>
| |
| /ip firewall nat
| |
| add action=dst-nat chain=dstnat dst-address=!1.1.1.2 src-address=!1.1.1.2 dst-port=80 fragment=no protocol=tcp src-address-list=!goodboys to-addresses=1.1.1.2 to-ports=8080
| |
| </pre>
| |
| | |
| Здесь 1.1.1.2 - ip сервера с админкой NoDeny
| |
| | |
| Поскольку сервер с админкой не предоставляет доступ в интернет абонентам, необходимо изменить фаервол на следующий:
| |
| | |
| <pre>
| |
| #!/bin/sh -
| |
| f='/sbin/ipfw'
| |
| | |
| ${f} add 100 deny ip from any to not me in
| |
| ${f} add 150 check-state
| |
| ${f} add 200 allow ip from any to any via lo0
| |
| | |
| ${f} add 300 allow icmp from any to any in
| |
| ${f} add 350 allow tcp from any to any 22,80,443,8080 in
| |
| ${f} add 400 allow udp from any to any 53 in
| |
| ${f} add 450 allow udp from 1.1.1.1 to any 1812,1813 in
| |
| ${f} add 500 deny ip from any to any in
| |
| | |
| ${f} add 600 fwd 1.1.1.1 tcp from any 8080 to any
| |
| ${f} add 650 allow udp from any 53 to any
| |
| ${f} add 700 allow tcp from any to any setup keep-state
| |
| ${f} add 750 allow udp from any to any keep-state
| |
| ${f} add 800 allow ip from any to any
| |
| </pre>
| |
| | |
| Здесь 1.1.1.1 - ip микротика.
| |
| | |
| Если сервер с админкой NoDeny не выполняет функции DNS - удаляем правила 400 и 650.
| |
| | |
| Если заглушка не запущена (модуль cap), необходимо записать в автозагрузку (/etc/rc.local) и запустить с консоли:
| |
| | |
| <source lang="bash">
| |
| /usr/bin/perl /usr/local/nodeny/nokernel.pl -m=cap -d &
| |
| </source>
| |
| | |
| <br>
| |
| | |
| =Скорость по Radius=
| |
| | |
| Более оптимальный вариант управления микротик:
| |
| * включение/выключение доступа по API
| |
| * скорость по Radius
| |
| | |
| Для этого необходимо установить модуль "Radius атрибуты" и изменить mysql-процедуры:
| |
| | |
| <pre>
| |
| 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 ;
| |
| </pre>
| |
| | |
| <br>
| |
| | |
| =Если что-то не получается=
| |
| | |
| * Проверяем, что в настройках NoDeny есть пул ip адресов с типом "динамический". При этом ip, указанные в настройках микротика
| |
| <pre>
| |
| dns-server=10.1.0.11 gateway=10.1.0.11 netmask=16
| |
| </pre>
| |
| должны попадать в этот диапазон. Например, мы можем сделать пул 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-запросов
| |