Микротик: відмінності між версіями
Sv (обговорення | внесок) |
Sv (обговорення | внесок) Немає опису редагування |
||
Рядок 54: | Рядок 54: | ||
</source> | </source> | ||
=DCHP= | |||
На микротике выполним команды: | |||
<pre> | |||
/ip dhcp-server | |||
add disabled=no interface=ether1 name=dhcp1 use-radius=yes | |||
/ip dhcp-server network | |||
add dns-server=10.1.0.11 gateway=10.1.0.11 netmask=16 | |||
/radius | |||
add address=10.1.0.1 secret=hardpass5 service=dhcp | |||
</pre> | |||
Здесь: | |||
* 10.1.0.1 - ip сервера NoDeny, где установлен Radius server | |||
* 10.1.0.11 - ip микротика | |||
* netmask=16 - маска подсети абонентов (число после слеша в сети, например: 10.1.0.0/16) | |||
* ether1 - интерфейс микротика, смотрящий на абонентов | |||
Установим Radius | |||
<source lang="bash"> | |||
rm /usr/local/etc/raddb/sites-enabled/default | |||
ee /usr/local/etc/raddb/sites-enabled/nodeny | |||
</source> | |||
Вставляем следующий текст: | |||
<pre> | |||
authorize { | |||
sql | |||
} | |||
authenticate { | |||
Auth-Type PAP { | |||
pap | |||
} | |||
} | |||
preacct { | |||
acct_unique | |||
preprocess | |||
} | |||
accounting { | |||
detail | |||
sql | |||
exec | |||
} | |||
session { | |||
radutmp | |||
sql | |||
} | |||
post-auth { | |||
sql | |||
} | |||
</pre> | |||
В mysql создадим следующие процедуры: | |||
<pre> | |||
DROP PROCEDURE IF EXISTS `radcheck`; | |||
DELIMITER $$ | |||
CREATE PROCEDURE `radcheck` (IN login VARCHAR(64)) | |||
BEGIN | |||
SELECT Null, login, 'Cleartext-Password' AS Attribute, '' AS Value,':='; | |||
END$$ | |||
DELIMITER ; | |||
</pre> | |||
<pre> | |||
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; | |||
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; | |||
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=IF(ip>0,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 NULL, login, 'Acct-Interim-Interval', 60, '='; | |||
SELECT NULL, login, 'Acct-Status-Type', 'Accounting-On', '='; | |||
END$$ | |||
DELIMITER ; | |||
</pre> | |||
=Заглушка= | =Заглушка= | ||
Рядок 90: | Рядок 191: | ||
</pre> | </pre> | ||
Здесь 10.1.0.11 - ip | Здесь 10.1.0.11 - ip микротика. | ||
Если сервер с админкой NoDeny не выполняет функции DNS - удалите правила 400 и 650. | Если сервер с админкой NoDeny не выполняет функции DNS - удалите правила 400 и 650. |
Версія за 06:59, 23 серпня 2015
Включение/выключение доступа в интернет
На Микротик включаем NAT и разрешаем натить только те ip, которые будут в списке goodboys
/ip service enable api /ip firewall nat add action=masquerade chain=srcnat disabled=no out-interface=ether2 src-address=10.1.0.0/16 src-address-list=goodboys
Здесь:
- ether2 - интерфейс, который смотрит в интернет
- 10.1.0.0/16 - сеть абонентов
На сервере NoDeny:
cd /usr/local/nodeny/modules
cat mikrotik/create.cfg.mikrotik.cfg.pm >> MyNetwork/create.mikrotik1.cfg.pm
ee MyNetwork/create.mikrotik1.cfg.pm
В первой строке редактируемого файла добавим единичку в mikrotik.cfg.pm:
#<ACTION> file=>'cfg/mikrotik1.cfg.pm',hook=>'new'
А также изменим параметры подключения к Микротику:
$host = '10.1.0.11'; $user = 'admin'; $pass = '';
Установим новый конфиг:
cd /usr/local/nodeny/
perl install.pl -x
Запустим с выводом процесса управления микротиком на консоль:
perl noserver.pl -g=_mikrotik1.cfg.pm -v
Тестируем. Если все ок, то в автозагрузку:
echo '/usr/bin/perl /usr/local/nodeny/noserver.pl -g=_mikrotik1.cfg.pm -d &' >> /etc/rc.local
DCHP
На микротике выполним команды:
/ip dhcp-server add disabled=no interface=ether1 name=dhcp1 use-radius=yes /ip dhcp-server network add dns-server=10.1.0.11 gateway=10.1.0.11 netmask=16 /radius add address=10.1.0.1 secret=hardpass5 service=dhcp
Здесь:
- 10.1.0.1 - ip сервера NoDeny, где установлен Radius server
- 10.1.0.11 - ip микротика
- netmask=16 - маска подсети абонентов (число после слеша в сети, например: 10.1.0.0/16)
- ether1 - интерфейс микротика, смотрящий на абонентов
Установим Radius
rm /usr/local/etc/raddb/sites-enabled/default
ee /usr/local/etc/raddb/sites-enabled/nodeny
Вставляем следующий текст:
authorize { sql } authenticate { Auth-Type PAP { pap } } preacct { acct_unique preprocess } accounting { detail sql exec } session { radutmp sql } post-auth { sql }
В mysql создадим следующие процедуры:
DROP PROCEDURE IF EXISTS `radcheck`; DELIMITER $$ CREATE PROCEDURE `radcheck` (IN login VARCHAR(64)) BEGIN SELECT Null, login, 'Cleartext-Password' AS Attribute, '' AS Value,':='; END$$ DELIMITER ;
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; 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; 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=IF(ip>0,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 NULL, login, 'Acct-Interim-Interval', 60, '='; SELECT NULL, login, 'Acct-Status-Type', 'Accounting-On', '='; END$$ DELIMITER ;
Заглушка
На микротике выполним команды:
/ip firewall nat add action=dst-nat chain=dstnat dst-address=!10.1.0.1 dst-port=80 fragment=no protocol=tcp src-address-list=!goodboys to-addresses=10.1.0.1 to-ports=8080
Здесь 10.1.0.1 - ip сервера с админкой NoDeny
Поскольку сервер с админкой не предоставляет доступ в интернет абонентам, необходимо изменить фаервол на следующий:
#!/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 10.1.0.11 to any 1812,1813 in ${f} add 500 deny ip from any to any in ${f} add 600 fwd 10.1.0.11 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
Здесь 10.1.0.11 - ip микротика.
Если сервер с админкой NoDeny не выполняет функции DNS - удалите правила 400 и 650.