В статье подробно описано, как настроить на Микротике ограничение скорости по отдельному ip или на целую сеть, ограничение на интерфейсе и физическом порту. А также настройка приоритета трафика (QoS), для sip, tv и других сервисов. Все настройки будут производиться через программу winbox.
Если у Вас версия RouterOS выше 6.29, то перед настройкой шейпера убедитесь. что в firewall отключен fasttrack, эта технология позволяет увеличить производительность маршрутизатора, но если она включена, то шейпить скорость не получится. Заходим в меню на вкладке Filter Rules, ищем правило fasttrack connection. Если такое правило существует, то отключаем или удаляем его.

Содержание
- Ограничение скорости интернета на все ip адреса в подсети.
- Ограничение на интерфейсе
- Ограничение скорости с помощью маркировки пакетов и Queues Tree на всю сеть
- Simple Queues
- Приоритезация трафика на Mikrotik
Ограничение скорости интернета на все ip адреса в подсети.
Предположим, провайдер предоставляет нам интернет канал 50 Мбит/сек. Стоит задача: для каждого пользователя ограничить канал до 5 Мбит/с.
Создадим новый тип. Для этого заходим в меню Queue вкладка Queue Types. И нажимаем на кнопку «+» добавить.

Type Name – имя нового типа
Kind – тип, принимает следующие значения
bfifo – тип основанный на алгоритме First-In First-Out, Первый-пришел первый ушел, размер очереди определяется в байтах параметром queue size, если очередь переполнена, то остальные пакеты отбрасываются.
pfifo – то же самое что и bfifo, только размер не в байтах, а в пакетах
mq pfifo – тот же pfifo с поддержкой нескольких очередей
red — Random Early Drop — это механизм очередей, который пытается избежать перегрузки сети, контролируя средний размер очереди. Средний размер сравнивается с двумя порогами: минимальным (минимальным) и максимальным (максимальным) порогом. Если средний размер (avgq) меньше минимального порога, пакеты не отбрасываются. Когда средний размер очереди больше максимального порога, все входящие пакеты удаляются.
sfq — Stochastic Fairness Queuing (SFQ) обеспечивается хешированием и циклическими алгоритмами. Трафик может быть однозначно идентифицирован с помощью 4 параметров (src-адрес, dst-адрес, src-порт и dst-порт), поэтому эти параметры используются алгоритмом хэширования SFQ для классификации пакетов в один из 1024 возможных подпотоков. Затем алгоритм round-robin начнет распространять доступную пропускную
способность для всех подпотоков, причем каждый раунд дает байты трафика sfq-allot. Вся очередь SFQ может содержать 128 пакетов и доступно 1024 подпотока.
pcq – то же что sfq, но с возможностью ограничить скорость потоков
Для ограничения ширины канала выбираем тип pcq, в поле Rate указываем значение скорости. В нашем случае 3M. Нам нужно ограничить 3 Мбит/c на вход и на выход, поэтому ставим галочки напротив Dst. Address и Src.Address. Если нам нужно не симметрично ограничить канал, скажем на загрузку 3Мбит/c, а на отдачу 5Мбит/c, то нужно создать два типа, на загрузку и на отдачу с соответствующими параметрами. Остальные поля оставляем как есть.
Остальные поля pcq типа
Limit — размер одного подпотока
Total limit — максимальное количество данных в во всех подпотоках
Burst Rate, Burst Threshold, Burst Time — довольно интересные параметры, рассмотрим их более подробно.
Burst Rate – дословно «взрыв скорости» если мы сделаем настройки как показаны на рисунке.

То это будет работать так: если пользователь допустим начнет закачку файла, то сначала канал у него будут 10Мбит/c, параметр Burst Rate, и такая скорость будет в течении 3-х минут, параметр Burst Time, далее скорость вернется к значению Rate. Если пользователь не будет некоторое время скачивать и у него использование интернет канала опустится меньше 512 Кбит/c, значение Burst Threshold , то при следующем использовании интернета, первые 3 минуты пользователь будет пользоваться каналом со значением Burst Rate. Это бывает очень полезно, скажем когда пользователи просто ходят по страницам в интернете, то скорость загрузки страниц у них будет 10 Мбит, а если они начнут качать большие файлы, то через три минуты скачивание будет всего 5 Мбит/c.
Поля раздела Classifer думаю понятны без объяснений, это адрес, порт источника и назначения, а также маски адресов. Более подробно о типе pcq читайте здесь https://wiki.mikrotik.com/wiki/Manual:Queues_-_PCQ.
Следующим шагом применим наши созданные правила. Заходим на вкладку Simple Queues и добавляем очередь.

Name – имя нашей очереди
Target – цель. Здесь прописываем нашу подсеть
Остальные поля не заполняем, если вы встречали статьи где нужно прописывать Max Limit, то могу сказать что это не обязательно, работать будет и с параметром unlimited. Далее переходим на вкладку advanced и выбираем в качестве Queue type. Созданные выше типы.

Нажимаем кнопку ОК. На этом настройки закончены. Теперь любой компьютер c ip адресом из подсети 192.168.7.0/24 будет ограничен шириной канала в 3Мбит/с.
Ограничение на интерфейсе
Для ограничения на порту зайдите на вкладку Interface Queue, выберите нужный интерфейс и примените к нему созданное выше правило.

В примере на порту eth6 будет применено ограничение в 3Мбит/с
Ограничение скорости с помощью маркировки пакетов и Queues Tree на всю сеть
Если нужно ограничить ширину канала на одну или несколько сетей, а также на отдельные ip адреса то этот можно сделать с помощью маркировки пакетов .
Заходим в меню IP-Firewall, вкладка Address Lists создаем новый адрес лист с нашей сетью. 
Также в этот лист можно добавить и отдельные ip адреса, а не сеть, скажем если они идут не по порядку, допустим 192.168.7.11, 192.168.7.87, 192.168.7.199.
Далее переходим на вкладку Mangle , здесь добавляем два правила. На вкладке General, поле Chain выбираем forward

Переходим в advanced и в поле Src. Address List выбираем лист созданный на первом шаге

Идем на вкладку Action. Здесь в поле action выбираем маркировку пакетов mark packet и пишем как будем маркировать, например upload. 
Аналогично создаем еще одно правило на download. Только уже будет Dst. Address List и маркировка download.


Нажимаем Ок. Теперь все пакеты идущие из сети 192.168.7.0/24 будут маркироваться как upload, а пакеты идущие в эту сеть как download.
Теперь идем в меню Queues, вкладка Queues tree и добавляем правило.

Name – имя
Parent – выбираем global
Packet Marks – выбираем маркировку созданную ранее upload
Limit AT – гарантированная скорость, т.е если у нас скажем общий канал 10 Мбит/c и мы создаем две очереди с максимальной шириной канала по 10 Мбит. То если вторая очередь заняла скажем канал на 8 Мбит, то нашей остается всего 2 Мбит, параметром Limit AT мы указываем, что гарантируем канал в 5 Мбит. т.е если в нашей очереди начнут интенсивно использовать интернет, то приоритет у нашей очереди увеличится, а у второй очереди уменьшится и скорость поделится по 5 Мбит
Max Limit – максимальная скорость. Это и есть наше ограничение скорости.
Нажимаем ОК и аналогично создаем очередь на загрузку

Если все сделали правильно, то мы увидим наши созданные queue и загрузку по ним.

Этот способ удобно использовать когда список сетей или адресов на ограничение часто меняется, тогда их просто можно добавлять или удалять в адресных листах. Если же адреса для ограничения меняются не часто, то удобнее использовать simple queus.
Simple Queues
Более простой способ ограничения скорости делается через вкладку Simple Queues. Заходим на эту вкладку нажимаем добавить
В поле name пишем имя в target нашу сеть. Max Limit ограничения на загрузку и на отдачу

Нажимаем ОК, На этом настройка завершена, теперь вся сеть 192 .168.7.0/24 ограничена в 10Мбит, про Burst Limit я писал выше, здесь это работает также. Если нам нужно ограничить скорость не на всю сеть, а на отдельный ip адрес, то просто в поле target прописываем этот ip.

Приоритезация трафика на Mikrotik
Если нужно настроить приоритизацию трафика на Mikrotik то это делается через параметр Priority в настройка Queues tree.

Или на вкладке Advanced в Simple Queues.

Приоритет принимает значение от 1 до 8. Чем меньше значение, тем выше приоритет, т.е очередь с priority 1 будет обрабатываться самой первой, а с 8 последней. Например если у вас есть сервер ip телефонии asterisk с ip 192.168.7.10, то для него лучше сделать настройки такие.


Если нам нужно настроить приоритет определенного типа трафика, например SIP, VoIP или IpTV не привязываясь к ip адресам. То сделать это можно с помощью Mangle и Queues Tree, как это сделать я писал выше, только маркируем пакеты не по ip а по протоколу и порту. Например для маркировки пакетов на порт 5060 будет выглядеть так.

Комбинируя выше указные способы можно очень гибко настроить шейпинг скорости и приоритет трафика. Также надо отметить что настройки в Queue Tree имеют больший приоритет чем в simple Queues.
Обучающий курс по настройке MikroTik
Нужно разобраться с MikroTik, но не определились с чего начать? В курсе «Настройка оборудования MikroTik» все по порядку. Подойдет и для начала работы с этим оборудованием, и для того, чтобы систематизировать знания. Это видеокурс из 162 уроков и 45 лабораторных работ, построен на официальной программе MTCNA. Проходить можно, когда удобно и пересматривать по необходимости – материалы курса выдаются бессрочно. Также есть 30 дней на личные консультации с автором. На пробу выдают 25 уроков бесплатно, заказать их можно на странице курса.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
В небольших организациях необходимо не столько резать скорость, сколько приоритизировать нужный трафик.
Для построения дерева очередей сначала необходимо промаркировать соединения и на их основе пакеты.
За основу я возьму сконфигурированный в прошлой статье микрот.
Я ни в коем случае не претендую на звание ГУРУ. То, что я здесь излагаю является не более, чем записной книжкой и пособием по быстрой настройке оборудования. Если это послужит кому-нибудь подспорьем, то добро пожаловать.
1. Маркировка трафика
Начнём с управляющего трафика
Добавляем правило, которое в цепочке prerouting маркирует новые соединения по протоколу tcp , идущие на порты 8391 (Winbox) и 22 (ssh)
IP -> Firewall -> Mangle -> Плюсик


Затем правило, которое в цепочке prerouting маркирует пакеты в соединениях, промаркированных Manage_conn
IP -> Firewall -> Mangle -> Плюсик


В текущей настройке я исключу из диапазона раздаваемых внутри сети адресов адреса с 10.10.10.2 по 10.10.10.100 и впоследствии буду назначать их вручную (серверам и т.д.).
IP -> Pool -> Вкладка Pools -> Двойной клик по строке с диапазоном
Исправляем 2 на 100


Если у нас будет/есть SIP-телефония, то сначала нужно создать список IP-адресов серверов телефонии стоящих "снаружи" и добавить в их список SIP-Servers-Outside , а IP-адреса серверов "внутри" в список SIP-Servers-Inside.
Я для примера добавлю 2 адреса: 1.1.1.1 в список внешних серверов SIP-Servers-Outside и адрес 10.10.10.10 в список SIP-Servers-Inside
У вас, конечно же, будут свои адреса, которые и нужно подставить вместо указанных для примера.
IP -> Firewall -> Вкладка Address Lists -> Плюсик


Маркируем соединения для SIP
IP -> Firewall -> Mangle -> Плюсик



IP -> Firewall -> Mangle -> Плюсик



Маркируем пакеты внутри соединений.
IP -> Firewall -> Mangle -> Плюсик


Маркируем DNS-запросы по протоколу tcp и по протоколу udp.
IP -> Firewall -> Mangle -> Плюсик






Маркируем HTTP/HTTPS-трафик.
IP -> Firewall -> Mangle -> Плюсик




Маркируем RDP-трафик.
IP -> Firewall -> Mangle -> Плюсик




Маркируем весь остальной трафик.
IP -> Firewall -> Mangle -> Плюсик




То же в терминале (не забудьте поменять адреса серверов телефонии перед копи/пастом):
2. Настройка очередей
Queues -> Вкладка Queue Tree -> Плюсик
Последовательно добавляем правила с параметрами, приведенными в таблице.

Кратко о параметрах:
Parent — родительская очередь
Packet Marks — маркировка обрабатываемых пакетов
Priority — приоритет (максимальный или высший- 1, минимальный или низший — 8)
Limit At — гарантированная скорость
Max Limit — максимальная скорость
Burst Limit — максимальная скорость в режиме вспышка (Burst)
Burst Threshold> и Burst Time — параметры для расчета длительности режима вспышка
То же в терминале:
На этом приоритизацию трафика можно считать настроенной. В данном примере подразумевается, что провайдер выдает вам максимально 50M.
При других вводных расчет скоростей, лимитов и т.д. вам нужно будет произвести самостоятельно
3. В терминале одним блоком
Традиционно настройка из терминала (все вышеописанное одним блоком вставить в терминал).
Надеюсь, что у вас всё получилось.
Если же нет, то добро пожаловать в раздел КОНТАКТЫ
1" :pagination="pagination" :callback="loadData" :options="paginationOptions">
В интернете есть масса статей, посвященная ограничению скорости и делению трафика на оборудовании MikroTik, но практически во всех рассматривают исключительно Queue Tree, которые требует глубокого понимания и во многих задачах являются избыточными и могут быть заменены Simple Queues.
Упрощенные очереди — механизм деления пропускной способности канала и приоритеризации трафика привязанный к определенной цели (target). Входящий и исходящий трафик рассчитывается относительно цели.
Есть три варианта целей: ip, подсеть, интерфейс. Можно добавить несколько target для одного правила.
Теоретическая часть
Шейперы, Планировщики и Очереди
Скорость передачи данных измеряется в отношении переданной информации в битах за секунду времени — bit/sec. Бит единица небольшая, поэтому используют приставки кило (kbit/sec), мега (Mbit/sec), гига (Gbit/sec).
Скорость передачи пакетов по сетям связи всегда равна скорости передачи среды (например 100Mbit/sec для Ethernet 100BASE-TX). Если необходимо данную скорость уменьшить, то промежуточное устройство, например маршрутизатор, получая пакеты с одного интерфейса на максимальной скорости отправляет их с другого с определенной задержкой, если пакеты превышают установленный лимит скорости, они хранятся в очереди и отправляются по принципу First In, First Out (FIFO), если очередь заполнена (отсутствует или имеет нулевой размер), роутер отбрасывает пакеты.
Лимит(Limit) — административное ограничение скорости для трафика исходящего с интерфейса.
Шейпер(Shaper) — программный алгоритм задерживающий и отбрасывающий лишние пакеты.
Планировщик(Sheduler) — алгоритм, который решает каким образом хранить и отправлять пакеты выходящие за рамки лимита.
Очереди(Queues) — алгоритмы хранения и приоритизации для проходящего трафика.
Графические примеры работы шейпера и планировщика.
Использование шейпера без очереди

Использование шейпера с планировщиком

Simple Queues на Packet Flow
Simple Queues идут после Queues Tree, иногда простые очереди используют для быстрого ограничения трафика одному (или нескольким) пользователям, без вмешательства в Queues Tree.

Механика работы очередей: none, pfifo, pcq
none — очередь отсутствует, при превышении лимита все новые пакеты отбрасываются.
pfifo — алгоритм fifo ориентированный на пакеты. Хранит указанное в настройках число пакетов. Используется по умолчанию в Simple Queues.

pcq (Per Connection Queuing) — весь трафик разбивается на под-очереди в зависимости от набора условий. Из каждой под-очереди поочередно отправляется часть трафика. Освободившееся место занимает вновь прибывший трафик. Если место в под-очереди заканчивается, то пакеты предназначенные для нее отбрасываются.

Рассмотрим небольшую часть настроек:
Rate: лимит скорости для каждой из под-очередей.
Limit: размер под-очереди в килобайтах.
Total limit: суммарный размер всех под-очередей в килобайтах.
Соотношение Limit/Total limit подбирается исходя из ситуации. По умолчанию 40 очередей(2000/50), при условии их максимального заполнения трафиком.
Burst: про него будет ниже.
Classifier: на основе чего разделять трафик по очередям.
Классификатор делить по очередям различные соединения (connections), если зайти [IP]->[Firewall]->[Connections], то можно отметить что большинство из соединений содержит адрес и порт отправителя (src. address, src. port) и получателя (dst. address, dst. port).
Мы обсуждаем простые очереди, так что для простоты будем считать что фильтруем только трафик исходящий с wan интерфейса, в таком случае относительно target исходящий (upload) трафик будет классифицироваться по src. address, а входящий (download) по dst. address.
Классификация по порту поможет избежать ситуации с забиванием очереди трафиком от одного приложения, если одно приложение плодит множество исходящий соединений(например torrent или web. browser с кучей вкладок), то у них будет отличаться src. port и трафик так же будет разбить по очередям.
Динамический шейпинг средствами PCQ
Если Rate задан жестко, то каждый под-поток будет иметь заданную скорость и не сможет ее превысить, пока суммарная скорость всех под-потоков не превысит вышестоящее ограничении(в Simple Queues это Total Limit), в таком случае скорость всех под-потоков будет уменьшаться пропорционально.

Если Rate задан как 0, то вышестоящее ограничение будет делиться между всеми под-потоками. Фактически это и есть динамический шейпинг.

Если Rate задан как 0 и не указан Total Limit для Simple Queues, то скорость между под-потоками будет делиться исходя из более вышестоящего лимита, если очереди не вложены, то это ограничение физического интерфейса. Если ваш тарифный план ниже, то часть трафика будет зарезаться на оборудовании провайдера и пользы от очередей не будет.

У оставшихся типов очередей (SFQ, RED) есть свои особенности и сферы применения и их можно использовать в том числе для Simple Queues, но сейчас они нас не интересуют.
Маркировка пакетов
Да, в простых очередях можно использовать маркированный трафик. Это не обязательное условие (в отличии от Queue Tree), но позволяет отойти от ограничений target.
Маркировка трафика происходит в [IP]->[Firewall]->[Mangle], всего существует три типа меток: Connection, Packet, Route. Каждый пакет может содержать по одной метке каждого типа. Попадая в mangle, пакет проходит поочередно по всем правилам, если встречается два плавила устанавливающее метку, то более нижнее правило перезапишет метку от более верхнего. Для предотвращения перезаписи можно в первом правиле отключить прохождение пакета ниже по цепочке ( passtrought=no ).
При настройке очередей можно использовать только метки пакетов ( action=mark-packet ). Но для повышения производительности (метки соединений проверяются быстрее, чем изучение условий в каждом из пакетов) рекомендуется сначала маркировать соединения ( action=mark-connection ), а потом пакеты в данном соединении ( action=mark-package ). Правило с предварительной маркировкой соединений не всегда верно, но если вы дошли до этого понимания при построении очередей, то вам пора использовать Queue Tree.
Маркировать транзитный трафик можно в любой из цепочек Packet Flow, но в большинстве случаев я предпочитаю использовать forward, т.к. на данном этапе известны адреса получателя с отправителем и имена входящего и исходящего интерфейсов.

Что такое Burst
Обычно под ограничением скорости понимается некое статическое значение лимита в секунду при достижения которого пакеты отбрасываются или ставятся в очередь. Burst оперирует средним значением за единицу времени, это дает возможность использовать более высокие (пиковые) скорости в короткие промежутки времени и ограничивает скорость при постоянной нагрузке на канал.
Max Limit — основное ограничение.
Burst Limit — пиковая скорость, имеет приоритет над Max Limit при соблюдении заданной средней скорости.
Burst Threshold — скорость срабатывания ограничения.
Burst Time — время.
Target получает скорость из Burst Limit, но каждую секунду будет высчитываться средняя скорость за Burst time. Если средняя скорость за заданное время превысит Burst Threshold, то пользователь будет ограничен до Max Limit, если средняя скорость вернется в норму, то target опять получит Burst Limit.

Блок-схема отображающая изменение скорости target:

И как выглядит изменение скорости у target:

Если вас заинтересовала тема Burst, то рекомендую почитать информацию на wiki, там есть графики и таблицы исходя из которых станет лучше понятно как значения Threshold и Time влияют на ограничение скорости.
Различие Limit at и Max Limit

Limit at — гарантированная скорость для правила. Желательно, что-бы сумма всех Limit at не превышала пропускную способность канала. Всегда меньше максимального.
Max Limit — максимальная скорость для правила. Если "бюджет" очереди позволяет, то будет выделена максимальная пропускная способность.
Обычно в упрощенных очередях указывают только Max Limit и работает это нормально, но в конфигурации с каскадными очередями следует указать оба лимита.
Практическая часть
Простые очереди настраиваются в [Queues]->[Simple Queues].
Правила обрабатываются поочередно сверху-вниз, к проходящему пакету применяется первое подходящее правило. Фактически из любого правила можно сделать "исключение" поместив более конкретное правило выше.
Ограничение скорости для конкретного хоста/подсети/интерфейса
Обычно используется когда надо зарезать скорость конкретному пользователю.
Name: любое имя
Target: адрес, подсеть или интерфейс.
Target Upload: лимит исходящей скорости.
Targer Download: лимит входящей скорости.
Ограничение скорости до 1Mbit/sec:

В Statistics можно посмотреть на текущую скорость для target, число пакетов в очереди и число отброшенных пакетов.
Ограничение скорости для удаленного ресурса
Вариант без маркировки пакетов.
В поле dst аналогично target могут быть указаны: ip, подсеть, интерфейс. В условиях современного интернета этого мало, но может пригодиться для небольших компаний и ограничения скорости между офисами.

Равноценное деление канала между участниками подсети (pcq)
Одно правило, которое спасет вашу домашнюю или офисную подсеть от монопольного захвата канала(в примере 50Mb/sec, подстроить под свой канал) одним пользователем.

Указанные pcq очереди присутствуют в базовой конфигурации, но прикладываю скриншоты, на случай изменений.

На вкладке Statistics можно посмотреть сколько pcq потоков сейчас в очереди.

Маркированный трафик
Опция dst довольно ограничена и если хочется использовать доменные имена, либо списки адресов то придется прибегнуть к маркировке трафика. Например отменим ограничения для домена yandex.ru (да, там подключена куча cdn’ок и прочего и для нормальной работы потребуется добавить и их).
В одной из недавних версий появилась возможность добавлять а списки адресов доменные имена, mikrotik их автоматически резолвит и добавляет динамические записи.

Маркировка http/https трафика (соединение и пакеты в соединении) для указанных адресов:



Правило в Simple Queue:

Каскадные очереди
Все что сказано выше относится к ограничению и делению скорости между участниками сети, пришло время затронуть тему приоретизации трафика. Обычно она требуется для интерактивного трафика(voip, vcs, ssh, rdp, . ) в условиях ограниченного и загруженного канала.
За каскадные очереди отвечает параметр Parent, который ссылается на "родительскую" очередь. Для работы весь трафик из "дочерних" очередей должен захватываться родительской.
Параметр Priority отвечает за то какой трафик будет раньше добавлен в очередь, он работает только в дочерних очередях (либо в "родительских", если у них нет "дочерних"), может принимать значения от 1 (наивысший приоритет) до 8 и не имеет ничего общего с QoS (DSCP; TOS) метками.
Предварительная маркировка трафика:

Очереди в SimpleQueue:





Теперь, если понадобиться сделать ограничение для одного IP, просто поставьте правило перед каскадом очередей.
Послесловие
Simple Queues — это довольно интересный и функциональный инструмент для домашних и SOHO конфигураций, одним правилом (не прибегая к маркировке трафика) можно решить проблему с захватом канала одним устройством. Но, если вы используете FastTrack, то забудьте про очереди — трафик пойдет мимо них.
Для более сложных конфигураций есть Queues tree (деревья HTB).





