<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="uk">
	<id>https:///index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D1%82%D0%B8%D0%BA</id>
	<title>Микротик - Історія редагувань</title>
	<link rel="self" type="application/atom+xml" href="https:///index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D1%82%D0%B8%D0%BA"/>
	<link rel="alternate" type="text/html" href=""/>
	<updated>2026-05-05T12:24:04Z</updated>
	<subtitle>Історія редагувань цієї сторінки в вікі</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id></id>
		<title>Sv: /* Скорость по Radius для варианта DHCP */</title>
		<link rel="alternate" type="text/html" href=""/>
		<updated>2018-09-21T10:03:50Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Скорость по Radius для варианта DHCP&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова сторінка&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Краткий обзор ==&lt;br /&gt;
&lt;br /&gt;
Связь Микротика с NoDeny осуществляется по radius-протоколу. Вам необходимо поставить на сервер биллинга программу radius-сервер (установка описана ниже). Эта программа будет принимать запросы от Микротика, проверять параметры авторизации и возвращать Микротику ip адрес абонента.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Mikrotik_radius.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Микротик может предоставлять доступ в интернет по двум технологиям: посредством DHCP или PPPoE. Настройка радиус-сервера и процедур mysql отличаются у этих технологий - будте внимательны.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее вам необходимо определиться каким образом будет устанавливаться скорость:&lt;br /&gt;
&lt;br /&gt;
* через радиус-атрибуты (в радиус ответе, кроме ip будут присутствовать данные по скорости)&lt;br /&gt;
* через модуль биллинга, который будет &amp;quot;заходить&amp;quot; на микротик и устанавливать скорость&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установка скорости через атрибуты более производительна, но теряется возможность динамичного изменения скорости - скорость может быть изменена только в момент, когда Микротик сделает запрос на radius-сервер. Это происходит с интервалом в 50 секунд для PPPoE  и гораздо бОльшим интервалом в случае DHCP (пока не истечет время аренды ip). Таким образом, для PPPoE можно применить данный способ, а для DHCP мы бы не рекомендовали.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==PPPoE==&lt;br /&gt;
Настройка описана '''[[pppoe|здесь]]'''&lt;br /&gt;
&lt;br /&gt;
== DHCP ==&lt;br /&gt;
Настройка описана '''[[mirkotik dhcp|здесь]]'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Включение/выключение доступа в интернет=&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что вне зависимости от того, заблокирован ли доступ в интернет, подключен ли тариф и т.д - NoDeny всегда разрешает создавать соединение. Благодаря этому у пользователя появляется возможность зайти в личный кабинет, произвести оплату или написать что-либо в техподдержку. Блокировка доступа в интернет осуществляется на уровне сервера доступа. В микротике мы будем это делать путем разрешения NAT только для тех ip, которые находятся в таблице goodboys:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/ip service enable api&lt;br /&gt;
/ip firewall nat add action=masquerade chain=srcnat disabled=no out-interface=ether2 src-address=10.0.0.0/16 src-address-list=goodboys&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь:&lt;br /&gt;
&lt;br /&gt;
* ether2 - интерфейс, который смотрит в интернет&lt;br /&gt;
* 10.0.0.0/16 - сеть абонентов&lt;br /&gt;
&lt;br /&gt;
На сервере NoDeny необходимо запустить модуль, который будет управлять таблицей goodboys. Создадим его конфиг на основе базового (сделаем копию и отредактируем):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /usr/local/nodeny/modules&lt;br /&gt;
cat mikrotik/create.cfg.mikrotik.cfg.pm &amp;gt;&amp;gt; MyNetwork/create.mikrotik1.cfg.pm&lt;br /&gt;
ee MyNetwork/create.mikrotik1.cfg.pm&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В первой строке редактируемого файла добавим единичку в &amp;quot;mikrotik.cfg.pm&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&amp;lt;ACTION&amp;gt; file=&amp;gt;'cfg/mikrotik1.cfg.pm',hook=&amp;gt;'new'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А также изменим параметры подключения к микротику:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$host = '1.1.1.1';&lt;br /&gt;
$user = 'admin';&lt;br /&gt;
$pass = '';&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установим новый конфиг:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /usr/local/nodeny/&lt;br /&gt;
perl install.pl -x&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запустим с выводом процесса управления микротиком на консоль:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
perl noserver.pl -g=_mikrotik1.cfg.pm -v&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тестируем. Если все ок, то в автозагрузку:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo '/usr/bin/perl /usr/local/nodeny/noserver.pl -g=_mikrotik1.cfg.pm -d &amp;amp;' &amp;gt;&amp;gt; /etc/rc.local&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Заглушка=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На микротике выполним команды:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/ip firewall nat&lt;br /&gt;
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&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь 1.1.1.2 - ip сервера с админкой NoDeny&lt;br /&gt;
&lt;br /&gt;
Поскольку сервер с админкой не  предоставляет доступ в интернет абонентам, необходимо изменить фаервол на следующий:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -&lt;br /&gt;
f='/sbin/ipfw'&lt;br /&gt;
&lt;br /&gt;
${f} add 100 deny ip from any to not me in&lt;br /&gt;
${f} add 150 check-state&lt;br /&gt;
${f} add 200 allow ip from any to any via lo0&lt;br /&gt;
&lt;br /&gt;
${f} add 300 allow icmp from any to any in&lt;br /&gt;
${f} add 350 allow tcp from any to any 22,80,443,8080 in&lt;br /&gt;
${f} add 400 allow udp from any to any 53 in&lt;br /&gt;
${f} add 450 allow udp from 1.1.1.1 to any 1812,1813 in&lt;br /&gt;
${f} add 500 deny ip from any to any in&lt;br /&gt;
&lt;br /&gt;
${f} add 600 fwd 1.1.1.1 tcp from any 8080 to any&lt;br /&gt;
${f} add 650 allow udp from any 53 to any&lt;br /&gt;
${f} add 700 allow tcp from any to any setup keep-state&lt;br /&gt;
${f} add 750 allow udp from any to any keep-state&lt;br /&gt;
${f} add 800 allow ip from any to any&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь 1.1.1.1 - ip микротика.&lt;br /&gt;
&lt;br /&gt;
Если сервер с админкой NoDeny не выполняет функции DNS - удаляем правила 400 и 650.&lt;br /&gt;
&lt;br /&gt;
Если заглушка не запущена (модуль  cap), необходимо записать в автозагрузку (/etc/rc.local) и запустить с консоли:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/bin/perl /usr/local/nodeny/nokernel.pl -m=cap -d &amp;amp;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Скорость по Radius=&lt;br /&gt;
&lt;br /&gt;
Более оптимальный вариант управления микротик:&lt;br /&gt;
* включение/выключение доступа по API&lt;br /&gt;
* скорость по Radius&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо установить модуль &amp;quot;Radius атрибуты&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Скорость по Radius для варианта DHCP==&lt;br /&gt;
&lt;br /&gt;
Меняем mysql-процедуры:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DROP FUNCTION IF EXISTS strSplit;&lt;br /&gt;
CREATE FUNCTION strSplit(x MEDIUMTEXT, delim MEDIUMTEXT, pos int) RETURNS MEDIUMTEXT&lt;br /&gt;
RETURN &lt;br /&gt;
    TRIM(BOTH '\r' FROM TRIM(&lt;br /&gt;
        REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),&lt;br /&gt;
                LENGTH(SUBSTRING_INDEX(x, delim, pos - 1)) + 1), delim, '')&lt;br /&gt;
    ));&lt;br /&gt;
&lt;br /&gt;
DROP PROCEDURE IF EXISTS `radreply`;&lt;br /&gt;
DELIMITER $$&lt;br /&gt;
CREATE PROCEDURE `radreply`(IN login VARCHAR(64))&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE usr_mac VARCHAR(12);&lt;br /&gt;
    DECLARE usr_ip VARCHAR(15);&lt;br /&gt;
    DECLARE usr_id INT;&lt;br /&gt;
    DECLARE add_attr MEDIUMTEXT;&lt;br /&gt;
    DECLARE line MEDIUMTEXT;&lt;br /&gt;
    DECLARE i INT DEFAULT 1;&lt;br /&gt;
    SELECT REPLACE(login, ':', '') INTO usr_mac;&lt;br /&gt;
    SELECT uid INTO usr_id FROM mac_uid WHERE mac=usr_mac;&lt;br /&gt;
    IF usr_id IS NOT NULL AND usr_id&amp;gt;0 THEN&lt;br /&gt;
        SELECT get_ip(usr_id) INTO usr_ip;&lt;br /&gt;
        UPDATE mac_uid SET ip=0 WHERE ip=INET_ATON(usr_ip) AND uid&amp;lt;&amp;gt;usr_id;&lt;br /&gt;
        UPDATE mac_uid SET ip=INET_ATON(usr_ip), time=UNIX_TIMESTAMP() WHERE uid=usr_id;&lt;br /&gt;
    ELSE&lt;br /&gt;
        START TRANSACTION;&lt;br /&gt;
        SELECT INET_NTOA(ip) INTO usr_ip FROM ip_pool&lt;br /&gt;
            WHERE uid=0 AND type='dynamic' AND `release` &amp;lt; UNIX_TIMESTAMP()&lt;br /&gt;
            ORDER BY RAND() LIMIT 1 FOR UPDATE;&lt;br /&gt;
        INSERT INTO mac_uid VALUES(&lt;br /&gt;
            NULL, usr_mac, INET_ATON(usr_ip), 0, UNIX_TIMESTAMP(), 0, 0, 0, '')&lt;br /&gt;
        ON DUPLICATE KEY&lt;br /&gt;
            UPDATE ip=IF(ip&amp;gt;0,ip,INET_ATON(usr_ip)), time=UNIX_TIMESTAMP();&lt;br /&gt;
        COMMIT;&lt;br /&gt;
        SELECT INET_NTOA(ip) INTO usr_ip FROM mac_uid WHERE mac=usr_mac;&lt;br /&gt;
        UPDATE ip_pool SET `release` = UNIX_TIMESTAMP() + 3600&lt;br /&gt;
            WHERE ip = INET_ATON(usr_ip);&lt;br /&gt;
    END IF;&lt;br /&gt;
    SELECT NULL, login, 'Framed-IP-Address', usr_ip, '=';&lt;br /&gt;
    SELECT NULL, login, 'Session-Timeout', '600', '=';&lt;br /&gt;
&lt;br /&gt;
    SELECT radius_attr INTO add_attr FROM users_services&lt;br /&gt;
        WHERE uid=usr_id AND tags LIKE '%,inet,%' LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
    attr_loop: WHILE TRUE DO&lt;br /&gt;
        SELECT strSplit(add_attr, '\n', i) INTO line;&lt;br /&gt;
        IF LENGTH(line) = 0 OR i &amp;gt; 20 THEN LEAVE attr_loop; END IF;&lt;br /&gt;
        IF line LIKE '%+=%' THEN&lt;br /&gt;
            SELECT NULL,login,strSplit(line, '+=', 1),strSplit(line, '+=', 2),'+=';&lt;br /&gt;
        ELSEIF line LIKE '%=%' THEN&lt;br /&gt;
            SELECT NULL,login,strSplit(line, '=', 1),strSplit(line, '=', 2),'=';&lt;br /&gt;
        END IF;&lt;br /&gt;
        SET i = i + 1;&lt;br /&gt;
    END WHILE;&lt;br /&gt;
END$$&lt;br /&gt;
DELIMITER ;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Если что-то не получается=&lt;br /&gt;
&lt;br /&gt;
* Проверяем, что в настройках NoDeny есть пул ip адресов с типом &amp;quot;динамический&amp;quot;. При этом ip, указанные в настройках микротика &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dns-server=10.1.0.11 gateway=10.1.0.11 netmask=16&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
должны попадать в этот диапазон. Например, мы можем сделать пул ip: 10.1.2.100 ... 10.1.9.254 - они попадают в сеть 10.1.0.0/16 так же как и 10.1.0.11&lt;br /&gt;
&lt;br /&gt;
* Запустите radiusd с ключем -X и включите абонентский компьютер. Если radiusd не получит никаких запросов:&lt;br /&gt;
** Запустите tcpdump -iem0 -p -n udp 1812. Если никакие запросы на приходят - что-то не так с настройкой микротик&lt;br /&gt;
** На время разрешите полностью фаервол (ipfw add 10 allow ip from any to any)&lt;br /&gt;
** Если запросы приходят на radius, но он выдает ошибки - обратите внимание на то, какого рода эти ошибки: в настройке radius или ошибки при выполнении sql-запросов&lt;/div&gt;</summary>
		<author><name>Sv</name></author>
	</entry>
</feed>