Делим Интернет или QoS на Mikrotik
Принцип деления есть во всем, что нас окружает. В большинстве случаев объекты делятся в равных пропорциях, ведь доставшаяся кому-то неравная часть может стать причиной недовольства остальных участников процесса. Это можно отнести и к современным информационным технологиям передачи данных, в которых также можно применять алгоритмы деления и не дать устройствам возможности взять больше дозволенного.
Самым ярким представителем информационных технологий в сфере передачи данных является интернет, который за последние годы для большинства людей превратился во что-то простое и обыденное, хотя поначалу был удивительным и редким. Далее мы расскажем, как организовать деление интернет канала в операционной системе RouterOS Mikrotik. В статье будет подробно рассказано о настройках данной системы, чтобы администраторы могли избежать ошибок и им легче было разобраться в алгоритмах работы.
Теоретические основы
Перед тем, как перейти к описанию практических случаев, рассмотрим теоретические основы технологии, ограничивающей скорость и качество доступа в интернет (шейпинга), а также важных понятий, которые пригодятся нам в дальнейшем.
Шейпер – алгоритм управления очередностью пакетов, позволяющий отсеивать пакеты, которые не удовлетворяют определенным условиям.
Schedulers – алгоритм для управления движением пакетов внутри шейпера. Его принцип действия основан на формировании очередей по приоритету пакетов, адресам источников и другим параметрам. PFIFO, BFIFO,SFQ, PCQ, RED как раз являются такими алгоритмами.
Подочередь – сформированная из пакетов по разным признакам очередь.
Queuing discipline (qdisc – дисциплина очереди) – алгоритм для захвата пакетов и определения точного порядка их передвижения.
HTB
Основой шейпинга в Mikrotik служит HTB – дисциплина очереди, которая реализована во многих Linux-системах. Важно изучить ее, чтобы умело управляться с данным алгоритмом.
Можно выделить основные возможности управления трафиком в Mikrotik, основанные на данной дисциплине.
- Ограничение скорости по разным параметрам, включая порты, время суток, подсети, IP-адреса и другое.
- Ограничение P2P-трафика с выставлением приоритетов одних потоков пакетов над другими.
- Применение пиковых скоростей, что позволяет поддерживать быстрый WEB-браузинг.
- Разделение канала на равные или неравные пропорции между пользователями.
- Задание гарантированного показателя скорости потока.
В дисциплине HTB ключевым понятием является класс (правило). Схематический пример иерархии классов представлен на изображении ниже. В данном случае из файервола (Filter) поступают пакеты с данными, которые распределяются в локальные очереди (Self Feed) или отправляются в очереди родительских классов (Inner Feed), что зависит от приоритета, загрузки канала и параметров классов. Отметим, что обычно на нулевом уровне иерархии находятся классы , не имеющие дочерних правил, их можно назвать клиентами. Именно такими классами в первую очередь захватывается трафик, которые затем передается родительским классам. У двух или более классов с одним прямым родителем одинаковый уровень и подсоединение к одной локальной выходной очереди.
Схематическое изображение структуры HTB
У каждого из классов могут быть следующие параметры:
limit-at – гарантированная скорость;
max-limit – ограничение скорости;
priority – приоритет класса.
Также у них есть три разных состояния.
Зеленый, при котором верхней границей для пропускной способности правила является параметр limit-at и движение пакетов осуществляется согласно приоритетам сразу в выходной поток своего уровня, без движения вверх по иерархии.
Желтый, при котором у пропускной способности правила значение превышает limit-at, но находится ниже уровня max-limit. В данном случае выполняется отключение правила от выходного потока его уровня с подключением к родительскому классу.
Красный, при котором идет превышение значения пропускной способности правила в сравнении с параметром max-limit и отключение правила от родительского класса с подключением к локальной очереди.
Есть в Mikrotik еще и два типа правил, которые разнесены на различные закладки в утилите Winbox, позволяющей настраивать конфигурацию операционной системы из под Windows – Simple Queues и Queue Trees.
Про эти правила пойдет речь чуть позже, а сейчас приведем примеры работы НТВ с созданием нескольких правил.
[admin@MikroTik] queue tree> add name=ClassA parent=Local max-limit=2048000
3 name=Leaf2 parent=ClassB packet-mark=packet_mark2 limit-at=256000
4 name=Leaf3 parent=ClassB packet-mark=packet_mark3 limit-at=768000 |
1. В первом случае передача данных клиентами 1 и 2 осуществляется с меньшей скоростью, чем значение параметра limit-at, а клиент 3 не работает. В этом случае пакеты с данными от клиентов 1 и 2 выстраиваются в локальную очередь по своим приоритетам, не передавая данные в родительские классы.
2. В данном случае при передаче данных клиентом leaf2 данные передаются с высшей скоростью в сравнении с limit-at, нос меньшей скоростью в сравнении с max-limit в его параметрах и меньше, чем параметр limit-at для родительского класса ClassB. У leaf1 передача данных осуществляется на скорости не выше собственного limit-at. В данной ситуации у leaf1 больший приоритет в сравнении с leaf2, несмотря на указание большего приоритета для последнего в параметрах. Дело в том, что при передаче данных с превышающей limit-at скоростью клиент 2 подключается к родительскому классу с приоритетом 8. В то же время действует правило, согласно которому приоритет пакетов на нижних уровнях при одинаковых условиях выше, чем на верхних.
3. В данном случае есть превышение скорости передачи данных клиента 1 в сравнении с допустимым max-limit, а у клиента 2 данные передаются со скоростью в диапазоне больше limit-at и меньше max-limit. У третьего клиента скорость передачи данных ниже значения limit-at. В такой ситуации получается, что ClassA перегружается данными от первого клиента, из-за чего у ClassB нет разрешения на передачу и работоспособным остается только третий клиент, который подключается к локальной очереди на нулевом уровне.
4. Возможен и такой вариант, когда данные одновременно передаются клиентами leaf1, leaf2, leaf3, ClassB становится желтым, а ClassA – зеленым. В такой ситуации первым в очереди на втором уровне по праву наибольшего приоритета становится leaf2. Для клиентов 1 и 3 при этом устанавливается случайный выбор, определяющий порядок следования.
Гибкость и универсальность алгоритма работы НТВ позволяют создавать на его основе любые иерархии правил с точным разграничением и управлением потоками данных.
Bursts
Не редки ситуации, когда требуется выдача пиковой скорости клиенту на заданный временной интервал. Либо необходимо с максимальной скоростью осуществлять отправку запросов и принимать данные. В таких случаях требуется защитить остальных пользователей от проблем в работе интернета, для чего в Mikrotik есть все необходимые инструменты.
burst-limit – параметр, задающий скорость, доступную сразу при подключении.
burst-threshold – показывает среднюю скорость за последние burst-time секунд;
burst-time – время, необходимое для подсчета burst-threshold.
С этими параметрами и, используя limit-at с max-limit, можно задать правила для выдачи клиенту максимальной скорости. Например, установим limit-at=128000/128000, max-limit=256000/256000, burst-limit=512000/512000, burst-treshold=192000/192000, burst-time=8 и понаблюдаем за графиком загрузки канала от одного клиента, который характерен для случаев с закачкой больших файлов по протоколу http.
После первой секунды показатель средней загрузки канала равен (0+0+0+0+0+0+0+512)/8=64 kbps, что не превышает параметр burst-threshold. После второй секунды средняя скорость будет равна (0+0+0+0+0+0+512+512)/8=128kbps. После третьей секунды показатель средней скорости уже выше burst-threshold, и она резко падает до max-limit, удерживаясь на этом уровне до достижения меньшего значения средней скорости загрузки канала в сравнении с параметром burst-threshold. Как только это произойдет, burst снова выдается скорость.
Schedulers
Алгоритмы Schedulers обычно используются вместе с шейперами, но они так же могут обладать функциями ограничения скорости. По сути, Scheduler является предшественником шейпера, предоставляя ему уже подготовленную очередь из пакетов с заданием соответствующих ограничений.
PFIFO/BFIFO
Packet/Bytes (FIFO) – основанный на принципе первенства (первый пришел – первый ушел) алгоритм. Для его конфигурирования используется только один параметр pfifo-limit (bfifo-limit), указывающий на количество байт, допустимых для хранения в выходном буфере. Если пакеты в буфер не попали, они разрушаются. Ниже приведена графическая схема работы данного алгоритма.
SFQ
SFQ (Stochastic Fairness Queuing) – алгоритм для предоставления всем TCP/UDP-подключениям одинаковой возможность по передаче данных. Данный алгоритм применим для случаев с сильной загрузкой канала, когда необходимо предоставить приложениям одинаковые возможности по передаче данных. Но на практике он почти не используется, поэтому не будет рассматривать его подробно.
Есть еще и частный случай SFQ в виде алгоритма PCQ (Per Connection Queuing), который отвечает за формирование потоков в подочереди по заданным правилам. В теории, такой алгоритм мог бы равномерно распределять скорость между участниками, независимо от числа открытых подключений, разделяя пропускную способность в равных пропорциях между классами или клиентами, что дает возможность организации динамического шейпинга. Но эффективная реализация такого алгоритма именно с точки зрения динамического шейпинга пока еще не была придумана. Тем не менее, благодаря PCQ можно с помощью всего пары правил разделить в равных пропорциях и входящий, и исходящий канал.
RED (Random Early Detection) – алгоритм, предназначенный для выравнивания пропускной способности и сглаживания скачков с контролем среднего размера очереди. При достижении размера очереди значения red-min-threshold происходит удаление случайно выбранного пакета. Чем больше средний размер очереди, тем больше будет случайно удаленных пакетов. При достижении значения red-max-threshold происходит удаление всех пакетов. Такой алгоритм используется редко, а при UDP-трафике его применение крайне нежелательно, так как данные при передаче могут не доходить до адресата.
Практическое применение
Теоретическое введение закончено, теперь давайте перейдем к практике.
Для начала остановимся на особом типе очередей Queue Trees, с помощью которого можно выстраивать иерархию правил и управлять пакетами на самом низком уровне.
Рассмотрим основные элементы управления в Queue Trees:
burst-limit (целое) – параметр, отвечающий за максимальную burst-скорость;
burst-threshold (целое) – отвечающий за среднюю загрузка канала параметр, при котором разрешается выдавать burst-limit;
burst-time (время) – используемый для подсчета средней загрузки канала элемент;
flow (text) – поток, маркированный в /ip firewall mangle;
limit-at (целое) – значение гарантированной скорости;
max-limit (целое) – показатель максимальной скорости;
name (text) – имя очереди;
parent (text) – родитель в иерархии классов HTB;
priority (целое: 1..8) – приоритет очереди;
queue (text) – тип очереди. Задается в /queue type.
Примеры.
I. Создадим правило, по которому клиенты локальной или виртуальной сети подключаются к условному сайту www.test.ru с максимальной скоростью и минимальным временем отклика, при этом скорость делится между ними в равной мере.
1. Сначала помечаются все пакеты, идущие от пользователей на условный адрес сайта 11.222.33.44 и обратно, для чего необходимо создание 4 правил. Два из них будут помечать прямые и обратные подключения, а еще два будут помечать непосредственно пакеты в данных подключениях. Важно помнить, что очереди выстраиваются именно из пакетов, а не работают с помеченными подключениями. Поэтому, чтобы все заработало, правила должны выглядеть следующим образом:
/ip firewall mangle add chain=forward src-address=192.168.11.0/24 dst-address=11.222.33.44/32 action=mark-connection new-connection-mark=users-con-up
/ip firewall mangle add connection-mark=users-con-up action=mark-packet
/ip firewall mangle add connection-mark=users-con-down action=mark-packet |
2. Затем создается два типа PCQ очередей, с классификацией по входящему и исходящему адресу:
/queue type add name=pcq-download kind=pcq pcq-classifier=dst-address |
3. После этого создаются очереди, отвечающие за входящий и исходящий трафик:
/queue tree add name=Download parent=Local max-limit=10240000 burst-limit=200000 burst-time=10 |
Из примера видно, что всего нескольких правил хватило для реализации столь сложной задачи, как динамический шейпинг для определенных адресов, которым предоставляется пиковая скорость. В большинстве случаев, на практике все происходит сложнее с большим числом сочетающихся между собой правил.
В Queue Trees, фактически, все действия выстраиваются на ограничении скорости, а адреса источников, порты, протоколы и другие параметры заносятся в раздел Mangle-фаервола. Этот способ позволяет обеспечить хороший пинг на определенные адреса даже в тех случаях, когда есть серьезная загрузка канала.
Приведем пример таких правил для условного сервера www.ptimer.ru.
В Firewall необходимо прописать четыре правила, в первом из которых именем primer-connection-up помечаются все подключения с адресом получателя 111.333.22.44. Второе правило помечает пакеты в подключениях primer-connection-up именем primer-packet.up. Также пометим все подключения с адресом источника 111.333.22.44 именем primer-connection-from и пакеты в этих подключениях именем primer-packet-from.
/ip firewall mangle add chain=prerouting dst-address=111.333.22.44 action=mark-connection new-connection-mark= primer-connection-up passthrough=yes/ip firewall mangle add chain=forward connection-mark= primer-connection-up action=mark-packet new-packet-mark= primer-packet-up passthrough=yes
/ip firewall mangle add chain=forward connection-mark= primer-connection-from action=mark-packet new-packet-mark= primer-packet-from passthrough=yes |
Затем создается два правила в Queue Trees для входящего и исходящего потоков
/queue tree add name=queue1 parent=global-out packet-mark= primer-packet limit-at=0 |
Благодаря таким правилам приходящие и уходящие с адреса 111.333.22.44 пакеты направляются в приоритетные очереди и всегда имеют гарантированную скорость 50 Kbit/s. С помощью такой схемы, например, можно установить фиксированную гарантированную скорость для онлайн-игр, распределив пропускную способность в равной мере между всеми участниками сети.
Simple Queues
Очереди Simple Queues являются упрощенными, так как при их использовании не требуется применение помеченных пакетов из Firewall. Но и высокая гибкость в настройках теряется. Основными параметрами для создания правил здесь выступают адреса источника и получателя.
Можно выделить список основных возможностей простых очередей.
· Возможность работы с Р2Р-трафиком.
· Использование очередей для определенных временных интервалов.
· Возможность задавать приоритеты потокам.
· Использование в виде параметров нескольких цепочек пакетов, отмеченных в /ip firewall mangle.
· Создание одного правила для исходящего и входящего потока.
Также в Simple Queues можно указывать параметр Parent, что позволяет строить иерархию классов почти такую же, как и в Queue Trees. Разница в том, что здесь используются адреса, а не пакеты и потоки. При этом Simple Queues всегда были и остаются частным случаем Queue Trees. А значит, при создании новых правил в простых очередях, следует проверять наличие подобных правил с теми же портами, адресами или другими параметрами в Queue Trees. При сходстве правил приоритет остается за Queue Trees и простые очереди не работают.
Когда вы приступаете к созданию правил в Simple Queues, помните, что есть исходящий и входящий трафик для клиентов, роутера и провайдера. Приведем схематически на рисунке направление потоков трафика от провайдера к роутеру, от роутера к клиенту и в обратную сторону. Получается, что исходящий трафик клиента является входящим для роутера и наоборот.
Ниже представлен список параметров для конфигурации простых очередей в Mikrototik:
burst-limit (целое) – максимальная burst-скорость;
burst-threshold (целое) – средняя загрузка канала при которой разрешено выдать burst-limit;
burst-time (время) – используется для подсчета средней загрузки канала;
dst-address (IP адрес/маска) – адрес назначения;
dst-netmask (netmask) – маска подсети для dst-address;
interface (text) – интерфейс, для которого предназначается правило;
limit-at (целое/целое) – гарантированный канал;
max-limit (целое/целое) – максимальная величина канала;
name (text) – имя правила;
p2p (any | all-p2p | bit-torrent | blubster | direct-connect | edonkey | fasttrack | gnutella | soulseek | winmx) – тип P2P-трафика;
packet-marks (name; по умолчанию: «») – цепочка пакетов, промаркированных в /ip firewall mangle;
parent (name) – имя родительской очереди;
priority (целое: 1..8) – приоритет. 1- больший, 8-самый маленький;
queue (name/name; default: default/default) – имя очереди из /queue type;
target-addresses (IP address/netmask) – исходный адрес;
time (time-time,sat | fri | thu | wed | tue | mon | sun{+}; по умолчанию: «») – применить очередь к временному интервалу;
total-burst-limit (целое) – максимальная burst скорость в очереди global-total;• total-burst-threshold (целое) – средняя скорость в очереди global-total;
total-burst-time (time) – используется для подсчета средней загрузки канала в очереди global-total;
total-limit-at (целое) – гарантированная скорость в очереди global-total (входящий+исходящий каналы);
total-max-limit (целое) – максимальная скорость передачи данных в очереди global-total.
Отметим, что наличие возможности управлять входящим и исходящим трафиком позволяет клиентам максимально эффективно использовать канал.
Примеры
Представим канал для клиента со скоростью 128/64 kbit/s, при гарантированной скорости 64/32 kbit/s в будние дни. А также канал со скоростью 512/256 kbit/s с гарантированной скоростью 128/128 kbit/s в выходные.
Результатом нашей работы будет два правила:
/queue simple add target-addresses=192.168.11.1/32 limit-at=64000/32000 max-limit=128000/64000 time=00:00:00-00:00:00,mon,tue,wed,thu,fri/queue simple add target-addresses=192.168.11.1/32 limit-at=128000/128000 max-limit=512000/256000 time=00:00:00-00:00:00,sat,sun |
В паре 32000/32000 первая цифра отвечает за входящий канал для клиента, а вторая за исходящий. Если хотите обеспечить быстрое открытие страниц, добавляете burst-limit и burst-time.
Также возможно видоизменение данного правила с целью разделения указанной скоростью между всей сетью 192.168.11.0.24. В данной ситуации параметру queue необходимо указать тип очереди pcq-download, который приводился выше в примере с Queue Trees.
Благодаря простым очередям легко можно реализовать предоставление на определенные адреса неограниченной скорости. Например, согласно следующему правилу клиент с адресом 192.168.11.1 получает на скорости от 1 до 2 мегабит доступ к адресу 88.205.221.123
/queue simple add target-addresses=192.168.11.1/32 dst-address=88.205.221.123 limit-at=1024000/1024000 max-limit=2048000/2048000 |
Если выделяется гарантированная пропускная способность для отдельного клиента, следует помнить о том, что сумма limit-at всех клиентов не может превышать значение пропускной способности всего канала.
Можно отметить наличие в Mikrotik встроенной возможности синхронизировать время с внешним источником, что актуально для случаев с неправильно установленными часами или севшей батарейкой на материнской плате.
Также нет возможности напрямую прописывать URI-адрес в поле ввода IP-адреса, хотя в этом появляется необходимость из-за наличия динамических адресов у сайтов. Данная проблема решается с помощью прописывания требуемого адреса ресурса в разделе /ip firewall address-list с присвоением ему имени, по которому в будущем можно обращаться.
Заключение
В Mikrotik реализованы большие возможности по управлению трафиком, что позволяет данной системе встать в один ряд с популярными аппаратными решениями от Cisco, а в чем-то даже превзойти их. Благодаря объединению Mikrotik и биллинга с поддержкой протокола Radius получается мощная система, которая может работать и в качестве раздающего интернет сервера внутри локальной сети, и в сети среднего провайдера. Благодаря описанным в статье возможностям шейпинга можно не только разделять доступ в интернет, но и создавать резервные каналы связи. Добавление беспроводных технологий RouterOS позволяет превратить несколько беспроводных сетевых карт и немного «железа» в мощную систему Wi-Fi, предоставляющую гарантированную полосу пропускания клиентам с разделением доступа.