Настройка QOS (приоритет трафика) в Mikrotik с помощью QUEUE

Хочу сегодня рассмотреть полезный и востребованный функционал популярных роутеров известной латвийской компании. Я расскажу, как настроить ограничение трафика и приоритизацию, используя функции QOS в виде очередей (queues) в Mikrotik. Как обычно все покажу на конкретных примерах, чтобы смогли без проблем их повторить и подстроить под себя.

Углубленный онлайн-курс по MikroTik

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Настройка QOS в Mikrotik

Данная статья является частью единого цикла статьей про Mikrotik.

Введение

Для начала поясню, о чем вообще пойдет речь. Quality of Service (QoS) - технология представления различным классам трафика различных приоритетов в обслуживании. Условная классификация трафика может проводиться по разным признакам:

  • IP адрес
  • MAC адрес
  • Протокол
  • TCP порт
  • Маркировка и т.д.

Чаще всего под QOS подразумевают настройку приоритезации трафика (задержка при передачи пакета) и ограничение максимальной скорости канала. Как следствие этих возможностей, можно настраивать временное превышение заданного ограничения, гарантию заданной полосы пропускания, равномерное распределение ширины канала между пользователями и т.д. Реже управляют потерями пакетов, но лично я с этим не сталкивался и не настраивал.

Приведу простой и наглядный пример использования QOS. С его помощью вы можете настроить максимальный приоритет для трафика по протоколу SIP. Далее разделить поровну между пользователями пропускную способность интернет канала. Так же сильно ограничить в скорости соединения пользователей, качающих файлы через торренты.

Сейчас существует распространенное заблуждение, что так как скорости интернета стали очень высокими, а траффик в основном безлимитный, QOS стал не нужен. Очевидно, что это не так, потому что с ростом скоростей выросло и потребление траффика в виде просмотра потокового видео и закачки файлов через торренты.

Далее расскажу, как настроить все эти ограничения и приоритеты в Mikrotik. За основу возьму информацию из официальной wiki по теме Queue. А так же данные, которые получил на обучении по Микротику, которое я проходил.

В интернете есть много информации по теме настройки миркотиков и в частности qos на этих устройствах. Я сам много читал различных статей. В своем материале я не претендую на истину и best practice. Я просто постараюсь взять наиболее важные моменты и описать их как можно подробнее и максимально понятно, чтобы вы смогли повторить. Я хоть и не плохо разбираюсь в микротиках, но изучать данную тему на основе доступных материалов мне было не просто. Потратил много времени и сил, поэтому собрав свой опыт, хочу по возможности упростить вам эту задачу.

Если вы новичок в микротиках, или еще не сделали базовую настройку, рекомендую мою статью на эту тему - настройка mikrotik.

Возможности QOS в Микротике

Для начала кратко рассмотрим, какие основные возможности QOS есть в Микротике.

  • Ограничение скорости и приоритезация на основании ip, mac, порта и интерфейса (например wifi), подсети, протокола и др.
  • Возможности кратковременного увеличения скорости.
  • Настройка различных лимитов по времени суток.
  • Распределение ширины канала между пользователями равномерно или по каким-то правилам.
  • И многое другое.

Вся настройка qos производится в отдельном разделе интерфейса управления под названием Queues (очереди).

Настройка QOS (приоритет трафика) в Mikrotik

В Микротике существуют несколько типов очередей, о которых мы поговорим далее.

Типы очередей (queue type) в Mikrotik

Операционная система в Mikrotik - RouterOS поддерживает следующие типы очередей:

  1. FIFO - BFIFO, PFIFO, MQ PFIFO. Алгоритм FIFO (first in — first out, первый пришёл - первый ушёл) подразумевает, что данные, попадающие в очередь первыми, будут первыми переданы на дальнейшую обработку. Тот, кто пришел позже, ждет окончания обработки поступивших ранее. Подобный алгоритм применяется для ethernet интерфейсов.
  2. RED (random early drop) - случайное превентивное отбрасывание. Управление потоком данных осуществляется на основе заданных порогов. При выходе за эти пороги, пакеты могут отбрасываться. Данный алгоритм способен выравнивать пропускную способность и сглаживать резкие скачки нагрузки.
  3. SFQ (Stochastic fairness queuing) - стохастическая честная очередь. Условно можно считать этот алгоритм наиболее честным в том плане, что всем входящим подключениям предоставляется равная возможность по передаче данных. Пакеты распределяются в одну из очередей и обрабатываются по алгоритму round-robin.
  4. PCQ (Per Connection Queuing) - распределение очередей по соединениям. Это частный случай предыдущего алгоритма sfq. В нем добавляется возможность задавать различные условия для очередей, в которые попадают пакеты. Этот алгоритм является основным, когда надо поровну разделить канал между клиентами. Так же с его помощью можно организовывать динамический шейпинг.

На практике, алгоритмы RED и SFQ используются редко. Для настройки приоритезации трафика и ограничения скорости канала используют очередь PCQ. У нее много параметров для гибкого конфигурирования, примеры которого я покажу далее.

Simple queue vs Queue Tree

В Mikrotik присутствуют 2 типа очередей:

  • Simple Queues - простой тип очередей.
  • Queue Tree - очереди из иерархических деревьев с правилами.

Simple queue vs Queue Tree

Отличий у этих очередей много. Показываю наиболее значимые в виде таблицы. Автор этой таблицы - Дмитрий Скоромнов. По крайней мере я ее увидел у него.

Разница между Simple queue и Queue Tree
Опция Simple Queue Queue Tree
Порядок правил играет роль не играет роль
Маркировка трафика возможна обязательная
Время действия правила возможно не возможно
График загрузки есть нет

В целом, настройка Simple Queues более простая и очевидная, в то время как Queue Tree позволяют строить более сложные конфигурации QOS с обязательным использованием маркировки в Mangle. В случае же с Simple Queues в простых ситуациях достаточно будет информации об адресах источника и получателя. Маркировать ничего не придется.

Что же выбрать для настройки QOS - Simple queue или Queue Tree? Я советую начать с простых очередей. Если ваша задача не решается с их помощью, переходите на иерархические деревья правил с маркировкой. И еще нужно понимать, что Simple queue это частный случай Queue Tree, поэтому при использовании обоих типов очередей нужно внимательно смотреть на то, чтобы правила не пересекались в разных очередях.

Настройка Simple queue в Mikrotik

Давайте потихоньку переходить к практике. Но перед этим необходимо проверить важную деталь. Для того, чтобы в Mikrotik работали очереди, необходимо обязательно отключить fasttrack. Для начала настроим равномерное распределение трафика между клиентами. Их у меня будет два:

  • 192.168.88.195 - ubuntu18.
  • 192.168.88.196 - centos7.
  • 10.20.1.23 - сервер в "интернете", к которому будем подключаться и проверять скорость соединения.

Адрес Микротика - 192.168.88.1. Измерять скорость буду с помощью программы iperf. Канал в интернет - 100 Мбит/c. Для начала посмотрим, как будет распределяться канал между клиентами без настройки qos. Для этого просто запускаю iperf на обоих клиентах с разницей в 10 секунд.

Тестирование канала без настроенной приоритизации трафика

Я сначала запустил проверку скорости на ubuntu18, а через 10 секунд на centos7. Видно, что ubuntu сначала качала на полной скорости 100 Мбит/c, а потом, при запуске параллельного теста на centos, снизила скорость на треть. По факту получилось, что кто раньше запустил тест, тот и забрал себе больше канала. Средняя скорость загрузки разных клиентов отличается - 51.9 Mbits/sec у того, кто начал позже, против 79.4 Mbits/sec. Если бы тут работал какой-нибудь торрент клиент, он бы забрал большую часть канала себе.

А теперь сделаем так, чтобы скорость между клиентами распределялась равномерно. Для этого идем в очереди и создаем simple queue.

Настройка Simple queue в Mikrotik Параметры Simple queue в микротиках

Я сделал минимально необходимые настройки. Все остальное оставил в дефолте. Это самый простой путь справедливого распределения канала между клиентами. Теперь повторим то же самое тестирование.

Проверка равномерного распределения канала

Работает четкое равномерное деление скорости интернет канала. В настройке Target у меня указан bridge, в который объединены все интерфейсы локальной сети. Там можно указать адрес или подсеть, например 192.168.88.0/24. Все зависит от того, что конкретно вы хотите сделать и между кем и кем поделить поровну интернет. Если у вас выход из этой локальной сети есть не только в интернет, но и в другие подсети, то укажите в Dst свой wan интерфейс, иначе скорость будет резаться всегда для всех адресов назначения.

Разберу основные параметры, которые есть в simple queue. Напомню, что все это можно посмотреть в документации.

Target Как я уже сказал, источник, к которому будет применено queue правило. Можно указать интерфейс или ip адрес.
Dst (destination) Интерфейс или адрес, куда будет направлен поток с ограничением по queue. Обычно какой-то внешний адрес.
Max Limit Максимально разрешенная скорость upload/download для данной очереди.
Burst Limit Максимально разрешенная скорость upload/download для включенного режима Burst.
Burst Threshold Граница средней скорости, превышение которой выключает режим burst.
Burst Time Интервал времени, в течении которого выполняется оценка средней скорости передачи данных (average-rate), которая используется для управления режимом burst.
Packet Marks Здесь выбираются промаркированные пакеты, если используется маркировка.
Limit At Скорость, которая выделяется очереди гарантированно.
Priority Приоритет для потоков данной очереди. 1 - максимальный приоритет, 8 - самый низкий.
Queue Type Выбор типа очереди, перечисленной в Queue Types.
Parent Очередь, являющейся родителем по отношению к текущей.

Теперь некоторые комментарии к перечисленным параметрам.

  1. Трафик с более высоким приоритетом будет иметь преимущество в достижении скорости, указанной в max-limit. Отсюда следствие - очень важно корректно указывать и следить за max-limit. Обычно его указывают на 5% ниже реальной скорости канала. Сумма параметров max-limit дочерних очередей может превышать лимит родительской очереди, но не может быть меньше limit-at. Приоритет работает только для дочерних очередей, не родительских. Очереди c наивысшим приоритетом будут иметь максимальный шанс на достижение указанного в них max-limit.
  2. С помощью Dst удобно управлять очередями в случае использования нескольких каналов wan. Достаточно указывать их интерфейсы в правилах очередей.
  3. Приоритизировать можно только исходящий трафик! Не все это понимают и пытаются настраивать приоритеты для входящего.
  4. Параметр limit at используется, чтобы гарантировать очереди заданную скорость, если это возможно. При этом он имеет преимущество перед приоритетом. То есть с его помощью можно гарантировать какую-то полосу пропускания трафику с низким приоритетом. Если данный канал не используется полностью, то он доступен другим очередям.

В целом, настройка simple queue в Микротике не представляет какой-то особой сложности и интуитивно понятна. Исключение только параметр Burst. Рассмотрим его отдельно.

Режим Burst

В переводе с английского burst - вспышка, взрыв. В общем случае режим Burst используется для кратковременного увеличения полосы пропускания. С его помощью можно по определенным правилам превышать значение max-limit своего правила. При этом не могут быть превышены значения max-limit вышестоящего правила или pcq-rate типа очереди. С помощью настроек burst превышение скорости может быть как очень редким, так и частым.

Ранее я уже упоминал параметры очереди, которые относятся к режиму burst:

  • burst-limit
  • burst-time
  • burst-threshold

С их помощью происходит настройка активации этого режима. Я попробую своими словами рассказать, как работает Burst. Не обещаю, что получится понятно всем, но я постараюсь донести информацию. С помощью параметра burst-limit задается максимальный порог скорости при работе burst. Этот порог должен быть больше max-limit, иначе теряется его смысл. С помощью параметра burst-time задается время, в течении которого учитывается текущая средняя скорость (average-rate). Важно!!! Это не время работы Burst, как я видел в некоторых описаниях в интернете. Значение average-rate рассчитывается каждую 1/16 интервала burst-time. Если у вас указано 10 секунд, средняя скорость будет рассчитываться каждую 0,625 секунды. Учтите, что на все это расходуются ресурсы процессора.

Дальше с помощью burst-threshold вы указываете порог average-rate, после превышения которого режим burst отключается. Таким образом, когда вы начинаете что-то качать, получаете максимальную скорость, указанную в burst-limit. Через некоторое время ваша средняя скорость возрастет до значения burst-threshold и режим burst будет отключен. Скорость будет равна значению max-limit. После того, как вы закончите закачку, режим burst не включится обратно сразу. Должно пройти немного времени, чтобы average-rate за интервал burst-time стал ниже burst-threshold и тогда burst включится обратно.

Рассмотрим условный пример. Это не точный расчет, я просто покажу принцип и примерные последствия, просчитанные на глазок по ходу написания статьи. Допустим, у вас указаны следующие параметры simple queue в вашем mikrotik:

  • max-limit = 20M;
  • burst-threshold = 15M;
  • burst-time = 16s;
  • burst-limit = 50M.

Вы начали качать большой файл. Первое время загрузка равна 50M (burst-limit), примерно на 5-й секунде средняя скорость за интервал в 16 (burst-time) секунд будет выше 15M (burst-threshold) (5 секунд на скорости 50M и 11 секунд 0M, пока вы еще ничего не качали, 50M*5сек + 0M*10сек)/16=15,625M, что больше 15M) и режим burst отключается. Вы продолжаете качать со скоростью 20M (max-limit), пока не загрузите весь файл. После окончания загрузки должно пройти примерно 4 секунды, чтобы у вас обратно включился burst ((20M*12сек + 0M*4сек)/16=15M). За это время у вас средняя скорость на интервале последних 16 секунд станет ниже 15M (burst-threshold). Это при условии, что вы не будете больше продолжать что-то скачивать.

Надеюсь, понятно объяснил :) Я в свое время очень крепко надо всем этим корпел, пока пытался разобраться. Здесь по хорошему надо график и табличку значений сделать, но мне не хочется этим заниматься. Ниже будет еще один конкретный пример, так что если не поняли, как работает burst, посмотрите его.

Ограничение скорости по IP

Продолжим изучать функционал qos в mikrotik на основе simple queue. Добавим к нашей предыдущей настройке ограничение максимальной скорости доступа в интернет для конкретного ip. Для этого создаем зависимую queue для ip 192.168.88.197 со следующими параметрами.

Ограничение скорости по IP Приоритет канала на основе ip

Должно получиться вот так, если отсортировать список по #.

Список queue с ограничением по конкретному ip

Проверяем скорость доступа в интернет с помощью iperf.

Проверка лимитированного канала в микротике

Как мы видим, ограничение скорости по ip работает. При этом скорость режется сразу, так как режим burst не настроен и не активирован. Теперь добавим к этому правилу настройку Burst и посмотрим, как она в реальности будет влиять на полосу пропускания. Для этого добавляем несколько параметров Burst. Я специально указал достаточно низкий burst-time, чтобы наглядно было видно результат работы burst.

Настройка Burst

Смотрим, что получилось.

Проверка режима работы burst

Загрузка начинается на максимальной скорости. Потом отключается burst и скорость падает до max-limit. Через некоторое время падает average-rate и burst включается снова. И так несколько раз в течении всей загрузки канала.

Приоритет трафика по IP

Продолжим настройку qos на основе очередей, создав несколько правил, одно из которых будет давать приоритет трафику от конкретного IP. Для этого создаем 3 simple queue - одна основная и две зависимые. Как я уже говорил ранее, приоритеты работают только в дочерних очередях, не родительских.

Настройка приоритета трафика по ip Родительская очередь для настройки qos в Mikrotik

Общая родительская очередь. Дальше идут потомки.

Очередь с высоким приоритетом Приоритет 7

Указываем ip адрес источника, для которого увеличиваем приоритет, и выбираем родителя. Остальное все то же самое, что в первом правиле.

Общая очередь для всего трафика Настройка limit-at

Здесь мы дополнительно указываем limit-at, чтобы для этого потока оставалось немного пропускной способности даже в то время, когда весь канал будет занят более приоритетным трафиком.

Должен получиться такой набор иерархически упорядоченных правил.

Список queues в mikrotik

/queue simple
add dst=ether1-wan1 max-limit=98M/98M name=wan1 target=""
add max-limit=98M/98M name=IP-196-hi-Ppriority parent=wan1 priority=7/7 target=192.168.88.196/32
add limit-at=10M/10M max-limit=98M/98M name=all parent=wan1 target=192.168.88.0/24
Важно следить за нумерацией правил. Пакеты попадают в правила по порядку. Как только подходящее правило найдено, пакет идет по нему. Поэтому правила с более узкими сегментами надо всегда поднимать выше общих правил, захватывающих весь остальной трафик.

Теперь запускаем тестирование приоритета трафика по ip. Сначала я запустил проверку скорости на машине с ip адресом, для которого приоритет не настроен. Загрузка началась на максимальной скорости для этой очереди. Через 6 секунд я стартовал такой же тест на машине с ip - 192.168.88.196, для которой мы увеличили приоритет с 8 до 7. Напомню, что меньше значение приоритета, тем он выше по факту. Нет необходимости ставить числа сильно ниже дефолта. Достаточно разницы на одну единицу, чтобы один трафик получил приоритет над другим.

Проверка работы приоритета трафика на основе ip адреса

В итоге мы видим, что сначала была максимальная загрузка трафика на первой машине, потом приоритет был отдан второй, а у первой осталась скорость из значения limit-at. После того, как более приоритетный трафик кончился, вся доступная полоса пропускания опять досталась первому ip.

Приоритет HTTP трафика для максимально быстрого серфинга

Давайте теперь к нашим правилам добавим еще одно - приоритет http трафика. Благодаря этому, серфинг интернета будет всегда комфортным, даже если весь канал занят чем-нибудь другим. Причем мы сделаем так, чтобы http трафик не смог занять весь канал, так как с максимальным приоритетом это будет сделать не сложно. Особенно, если качать что-то объемное. Для этого мы его ограничим через max-limit и кратковременно ускорим через burst, чтобы серфить было комфортно.

Начнем настройку приоритета для http трафика. Для этого его надо промаркировать. Идем в IP -> Firewall -> Mangle и добавляем 2 правила маркировки.

Маркировка http трафика Маркировка http пакетов

То же самое делаем для https трафика, просто указав порт 443. Вот оба правила.

/ip firewall mangle
add action=mark-packet chain=forward comment=HTTP new-packet-mark=HTTP passthrough=yes port=80 protocol=tcp
add action=mark-packet chain=forward comment=HTTPS new-packet-mark=HTTP passthrough=yes port=443 protocol=tcp

Теперь идем добавлять новую очередь с более высоким приоритетом для веб трафика.

Настройка приоритета http трафика Высокий приоритет www трафика

add burst-limit=50M/50M burst-threshold=15M/15M burst-time=16s/16s limit-at=10M/10M max-limit=20M/20M name=http_hi_Priority packet-marks=HTTP parent=wan1 priority=6/6 target=""

В итоге имеем следующий набор правил:

Набор правил для организации приоритизации web трафика

Не забываем про порядок правил в простых очередях. Он имеет значение, в отличие от queue tree.

Теперь проверяем, насколько заметно и корректно в итоге работает приоритизация http трафика. Я, как обычно, запущу iperf на двух других машинах в сети и параллельно с этим запущу веб серфинг на еще одном компьютере. Вот какая картина будет в списке очередей.

Загрузка канала в интернет с http трафиком

Если посмотреть статистику очереди с приоритетом http трафика, то там будет такая картинка.

Работа режима burst для ускорения сёрфинга в интернете

Напоминаю, что при этом канал в интернет забит полностью другим трафиком, но из-за более высокого приоритета, www трафик бегает с заданными лимитами на ширину канала.

Приоритет http трафика на остальным

Я заметил небольшую особенность, причину которой не понял. Во время теста на ip 195, что на картинке справа, четко действует лимит в 10М, оставляя указанную полосу, даже если канал забивает более приоритетный трафик с сервера 196 слева. Но когда я запускают тест http трафика, он работает на максимальной скорости, но при этом у ip 195 полоса увеличивается примерно на 3-4М и становится в районе 13-14M, что выше указанного limit-at для этой очереди. Я сначала думал, что это просто погрешность какая-то, но эффект стабильно воспроизводится. Как только заканчивается http тест, скорость четко опускается до лимита в 10M. С чем это связано, я не понял.

Надеюсь, общая идея понятна. По такому принципу можно маркировать любой трафик и встраивать в дерево очередей на основе маркировки.

Приоритет SIP трафика для VOIP

Настроить приоритет SIP трафика можно как минимум двумя принципиально разными способами:

  1. Самый простой случай, когда вам нужно настроить приоритет SIP трафика с вашего сервера VOIP в интернет. Для этого можно воспользоваться предыдущим примером с настройкой приоритета по ip, явно создав правило с высоким приоритетом для ip адреса сервера телефонии. Этого будет достаточно, если у вас в сети свой сервер, а все клиенты звонят через него.
  2. Если же у вас в сети много sip клиентов, которые напрямую подключаются к voip серверу через интернет и выделить их в отдельную подсеть не представляется возможным, то придется действовать по-другому. Нужно маркировать весь sip трафик и отдавать приоритет на основе этой маркировки. Такой случай разобран выше на примере http трафика.

Так что в зависимости от своей ситуации, подбирайте реализацию приоритета конкретно под ваш случай. Я покажу пример второго способа с маркировкой. Снова идем в IP -> Firewall -> Mangle и добавляем правило маркировки для sip трафика.

Маркировка sip трафика Маркировка пакетов sip

add action=mark-packet chain=forward comment=SIP new-packet-mark=SIP passthrough=yes port=5060,5061,10000-20000 protocol=udp

И как обычно, добавляем еще одну simple queue с более высоким приоритетом промаркированного sip трафика.

Настройка приоритизации sip трафика Максимальный приоритет для sip и voip

Думаю, что для sip трафика burst не нужен. Я не могу себе представить ситуацию, когда возможен какой-то резкий скачек трафика у отдельно взятого абонента. Не забывайте про порядок правил очередей. С более высоким приоритетом правила ставим выше.

На практике показать работу приоритета для sip трафика затруднительно. Я не знаю, как практически это сделать. В итоге проверил так. Взял утилиту sipp, которая есть для linux. Далее запустил ее и нагенерировал sip трафик. Убедился, что он попал в правила маркировки, а так же в указанную очередь. Если счетчики пакетов там растут, значит все сделали правильно и приоритезация будет работать. Ведь работу самих очередей мы уже проверили ранее.

Ограничение скорости на интерфейсе

В заключении статьи про qos в mikrotik рассмотрим пример с ограничением скорости на конкретном интерфейсе. Если у вас все получилось с очередями ранее, думаю, проблем с лимитированием скорости интерфейса не возникнет. Для этого достаточно создать отдельную очередь в simple queue, у которой в параметре Target указать нужный интерфейс. Причем это может быть как физический интерфейс, так и бридж, либо какое-то виртуальное соединение (pptp, l2tp и т.д.).

Итак, включаем ограничение скорости физического интерфейса микротика. Идем в Queues и добавляем правило.

Ограничение скорости на интерфейсе микротика

Важно понимать один нюанс. Если у вас порт находится в bridge, то данное ограничение работать не будет. Необходимо в качестве Target указывать весь бридж. Если же вам это не подходит и хочется ограничить скорость интерфейса в бридже, но не убирать его оттуда, то надо маркировать пакеты. Для этого в Mangle надо делать маркировку по признаку In / Out Bridge Port. Чтобы она заработала, в свойствах бриджа необходимо включить Use Ip Firewall.

Use IP Firewall на Bridge в Микротике

Ну и дальше в queue указывать маркировку пакетов из бриджа, как мы уже делали ранее. Я на практике это не проверял, так как не смог смоделировать на своем тестовом стенде. У меня все абоненты подключены к одному сетевому интерфейсу микротика.

Заключение

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

На этом у меня по настройке qos в Микротик все. Постарался рассмотреть основные моменты на простых примерах и разложить все по полочкам, чтобы на основе этого можно было настраивать более сложные конфигурации. Лично я никогда не использовал Queue Tree, так как все вопросы по приоритезации трафика удавалось решить возможностями Simple Queues.

Важное замечание по написанному. Я не являюсь большим специалистом по сетям и по мироктикам в частности. Мои статьи это мой небольшой опыт и мои старания по изучению документации и другого пользовательского опыта. Я могу в чем-то заблуждаться, где-то ошибаться и советовать плохие практики. Если видите это, то говорите, как сделать лучше, правильнее, удобнее. В следующей редакции статьи я обязательно это учту. Я регулярно обновляю статьи в том числе и по мотивам замечаний в комментариях.

То же самое касается вопросов и дополнений. Если вам кажется, что я не рассмотрел какую-то важную настройку или конфигурацию по теме qos в микротиках, скажите об этом. В следующий раз я постараюсь рассмотреть и этот вопрос. Например, моя статья про настройку firewall в mikrotik претерпела уже 3 редакции.

Другие мои статьи на тему Микротиков:

И многие другие в разделе, полностью посвящённому Mikrotik.

Углубленный онлайн-курс по MikroTik

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

61 комментарий

  1. Добрый день! А эта система работает в hotspot+Capsman? Достаточно настроить на главном роутере это всё или на каждом в роутере в capsman сети?

    • Это нужно настраивать на шлюзе, через который осуществляется выход в другие сети или интернет. Настройки могут быть разные. Надо смотреть, как у вас ходит трафик и настраивать на соответствующем шлюзе.

      • Там ситуация интересная. Кабель провайдера заходит в их шлюз Eltex, из него идет Ethernet кабель в Mikrotik hAP ac lite, на котором уже настроен свой dhcp сервер, capsman и hotspot. Остальные Микротики клиентские, получается, и берут настройки того же hotspot с самого первого Микротика

  2. Добрый день!
    Спасибо за статью, очень хорошо всё расписано!
    Вот только не нашёл ответа на свой вопрос. Если подскажете, как лучше сделать - буду очень признателен.
    У меня есть интерфейс (eth4), за которым находятся пользователи WiFi. На интерфейсе ip c /24 маской (192.168.1.1/24). Я хочу выделить, допустим, 1 мегабит не на всех, а персонально каждому пользователю. Пробовал в target указывать сеть (192.168.1.0/24) - микрот выделяет 1М именно на всю подсеть. Получается, что кто первый забил всё - того и тапки. Остальные пользователи вообще ничего не могут открыть. Как его заставить рассматривать каждый ip - как участника очереди?
    описывать каждый ip из 254 адресов этой подсети - сомнительное удовольствие. да и если сеть нужна побольше - тогда вообще стрельнуться можно.

    заранее спасибо!

    • А в чём смысл такого разделения? Не знаю, как сделать конкретно, как вы хотите, давно с очередями не работал. Но подобную задачу решает обычная Simple queue с PCQ (Per Connection Queuing). Распределяет канал равномерно между клиентами. Если их очень много и канал весь забит, то не понятно, как можно каждому гарантировать 1 мегабит? Нужно будет кого-то выделять. Отдайте подсети 192.168.1.0/24 определённый лимит канала и разделите его поровну между всеми. Когда канал не занят, каждый получает максимальный его объём. А когда занят, он делится равномерно между всеми участниками. Опять же, повторюсь. Если у вас канал 10 мегабит и 20 клиентов, которому вы каждому гарантировали 1 мегабит. Что будет, если они начнут качать все одновременно? Как им гарантировать этот мегабит, если для этого надо 20 мегабит, а у вас канал только 10? Очередь работать не будет.

      • Спасибо за ответ и за подсказку с PCQ! Гляну в эту сторону.
        Я уже после того, как написал вопрос, сообразил, что надо смотреть в сторону некоего подобия BRAS...
        А что касается задачи... Ну вот руководство так захотело. Типа, чтоб в рабочее время персонал в 4к видосики не смотрел )

  3. А можно, чтобы родительская очередь была с типом pcq, а все нижележащие - default-small и чтобы в дочерних очередях была приоритизация? Что-то я не понимаю, будет ли такое вообще работать.

  4. Анатолий

    День добрый. Прочитал статью но не совсем понимаю какой именно метод применим к своей задаче. У меня сеть сегментирована на VLAN-ы(8 шт). И вот мне нужно граничить скорость внешнего инета только для 2-х из них. Как бытЬ? ЗА раннее Спасибо.
    P/s Все VLAN -ы в одном Bridge.

    • Возьмите simple queue и ограничьте скорость на основе подсетей этих vlan. Самое первое, что приходит в голову.

    • Александр

      Делал такую задачу следующим образом:
      создаешь интерфейс лист и помещаешь в него VLANы которые необходимо ограничивать (если необходимо ограничивать с одной скоростью, то одного листа будет достаточно)
      Затем в Mangle маркируешь этот трафик в прероутинг и построутинг для входящего и исходящего трафика.
      В queues types создаешь 2 тайпа с типом PCQ, один тайп для входящего, второй для исходящего трафика и в каждом Type указываешь Dst или Src в зависимости от направления трафика.
      и потом создаешь 2 Queue tree (вх и исх) с указанием маркера и Type которые мы создали. и вуаля все работает.
      если куча VLANов то ограничивать их можно просто занесением в ИнтерфейсЛист.
      Можно создать несколько ограничений и при необходимости перебрасывать VLAN с одного Листа в другой.
      Удобно когда очень много VLANов и им необходимо периодически менять скорость.

  5. Доброе утро.
    Проверил работу маркировки пакетов SIP:
    add action=mark-packet chain=forward comment=SIP new-packet-mark=SIP passthrough=yes port=5060,5061,10000-20000 protocol=udp

    Под это правило стали попадать DNS-запросы на удалённый 53-ий порт, если локальный порт, например, 12000...

    • Интересное наблюдение. В целом, это не проблема. DNS трафик тоже имеет смысл приоритезировать. Можно sip порты выше поднять 30000-40000. Но туда тоже могут попадать и какие-то другие приложения.

    • //маркируем сначала DNS пакеты. обратите внимание на packet-mark=no-mark (только не маркированным пакетам будет присвоена маркировка) и passthrough=no (чтобы следующие правила "случайно" не приклеили новую марку)
      add action=mark-packet chain=forward dst-port=53 log=yes log-prefix=DNSreq new-packet-mark=DNSreq packet-mark=no-mark passthrough=no protocol=udp

      //потом маркируем сипы
      add action=mark-packet chain=forward comment=SIP new-packet-mark=SIP packet-mark=no-mark passthrough=no passthrough=yes port=5060,5061,10000-20000 protocol=udp

  6. Александр

    Хорошая статья. А можете подсказать - у меня два канала в интернет, основной и резервный. Основной трафик идет по основному каналу. А IP телефония всегда по резервному. Настроил родительскую категорию в Simple queue, явно указал в dest интерфейс основного канала. Настроил дочерние категории для HTTP, HTTPS и всего остального трафика с указанием в dest основного выхода в интернет. А в очереди для IP телефона поставил максимальный приоритет, но в качестве dest указал резервный канал. Корректно ли я сделал - что одна дочерняя категория в качестве dest имеет интерфейс отличный от родительской категории ?

    • Мне так трудно сказать, я не часто настраиваю qos. Лучше всего просто протестировать. Тогда наверняка будет видно, работает или нет приоритеты.

  7. Александр

    Автор, нельзя указывать CIR безлимита, а PIR с лимитом. CIR должен быть либо равен либо меньше PIR. Не хочу искать как в микротике это обозначается, но CIR\PIR это международно принятыне обозначения гарантированного и максимального порога трафика. Исправляй свою статью.

    • Спасибо за информацию, но я сам разберусь, что мне сделать со своей статьей. Все, что написано в ней, проверено на стенде.

      • Здравствуйте. Не надо так реагировать, я просто думал что нашел ошибку. В общем я разобрался и статью менять не надо )))). Оказывается все было просто. Дело в том, что я копировал текст из файла и вставлял его в консиоли, а при этом консоль не понимает перевода строк и все что ниже первой строки не приминялось. как следствие конфиг не применялся весь и не работала логика. Я изменил конфиг так, что бы каждая команда была в одну строчку и все стало ОК. так же я попробовал импортировать сам файл командой в терминале и тоже все ок. В общем спасибо большое, самый дельный конфиг во всем интернете. Вы не против что бы я ссылаясь на вашу статью сделал видео ролик у себя на канале?

        • "Вы не против что бы я ссылаясь на вашу статью сделал видео ролик у себя на канале?"
          После таких слов: "Исправляй свою статью." я бы на вашем месте сразу запросил банковские реквизиты, на которые послать оплату за пользование статьёй!

        • Я не против, записывайте. Когда сделаете, напишите мне, сделаю анонс в своем телеграм канале https://t.me/srv_admin

  8. Валерий

    На LAN не вешают QoS политики, для 1Гб канала это лишнее. Сначала классифицируют трафик и при необходимости тегируют (DSCP/ToS/CoS ..). Потом делают политики на входящий и исходящий Интернет трафик, которые потом и вешают на WAN интерфейсы. Это общие принципы QoS независимо от платформы.
    И еще - входящий на WAN трафик можно только полисить, так как нельзя контролировать входящий буфер - есть масса хороших примеров в Инете на эту тему.
    В очередях маркировка уже не играет роли, так как провайдеры ее игнорируют) Она нужна для распределения по очередям.

  9. Странно! Сайты по http стали открываться моментально, но в Simple Queue - Statistics информация не меняется ... В Simple Queue - Traffic ноль пакетов ....

  10. Кирилл

    Вопрос у вас первый пример режет трафик бриджа локальной сети (bridge1-lan), а в остальных примерах используется wan интерфейс (wan1)

    Это так и должно быть это два отдельных правила или я что то не понял?

    • В целом, это не принципиально. Все зависит от задач, конфигурации сети, подключения клиентов. Я в своих примерах не делал на этом акцент. Выбирая интерфейс, вы просто фокусируетесь на том, для кого все это работать будет и как. Например, wan интерфейсов может быть два, как и несколько локальных бриджей. На месте уже выбирайте, для какого конкретно интерфейса будет работать qos. Если wan один, можно на нем. А если, к примеру, wan два интерфейса, а локальный бридж один, то надо на нем настраивать, а не на wan.

  11. Михаил

    Вопрос в том как отключить ограничения скорости? Удаление в Queues не помогло. Где эти правила еще прописываются? (Интернет - 100 Мб, wifi - 5 Мб на всех!!!)

    • Хм, по идее в очередях эти настройки и есть. Часто помогает найти неизвестные настройки следующий ход. Сделайте export всего конфига Mikrotik и посмотрите его глазами. Возможно увидите какие-то настройки на этот счет. Мне что-то в голову ничего не приходит, где еще может быть задано ограничение.

  12. Queue type у меня везде стоит "default-small"

  13. Здравствуйте! Попытался реализовать "Приоритет трафика по IP"
    Сделал все точно как у вас:

    /queue simple
    add dst=ether1 max-limit=55M/55M name=wan1 target=""
    add max-limit=55M/55M name=High-priority parent=wan1 priority=7/7 target=192.168.87.5/32
    add limit-at=768k/768k max-limit=55M/55M name=all parent=wan1 target=192.168.87.0/24

    Не работает. С IP 192.168.87.2 начинаю загрузку - дает макс. скорость.
    С IP 192.168.87.5 начинаю загрузку - скорость делится пополам.
    С IP 192.168.87.2 останавливаю загрузку - тогда 192.168.87.5 получает всю скорость.
    [URL=https://fastpic.ru/view/114/2021/0128/4fe32887c8ee16a4480c6a9cb59e6ac4.jpg.html][IMG]https://i114.fastpic.ru/thumb/2021/0128/c4/4fe32887c8ee16a4480c6a9cb59e6ac4.jpeg[/IMG][/URL]
    Ради интереса попробовал реализовать "Ограничение скорости по IP" - это работает.

    • Мне сейчас трудно что-то подсказать, потому что тестовый стенд, где я все это проверял, уже разобран. Queue type у вас стоит тот же, что у меня на скрине? Тут по идее нет особых нюансов, ситуация простая. Основная очередь и 2 потомка.

  14. Виталий

    Спасибо большое за статью, единственный правильный совет нашел в ней - как настроить queues в bridge. Оказалось всё просто, нужно было включить фаервол для IP

  15. Приоритет трафика по IP не работает пример тот что у вас.

    • Ошиблись может где-то? Там достаточно простая конфигурация, особых нюансов нет. Все примеры я проверял и тут же скрины делал, которые прикладывал. На скрине явно видно, что приоритет работал, когда я тестировал.

      • Постройка домашний сети в которой есть ПК, ТВ и все остальное. Я хочу реализовать немного другое, что бы ПК имел наивысший приоритет по входящему и исходящему трафику, затем ТВ и тд. Каким образом мне это можна сделать?

        • Так статья же как раз об этом. В ней все и описано, как сделать. Не понял, в чем суть вопроса?

          • Вот что у меня получилось, https://fex.net/ru/s/0msmfp2

            Теперь, когда я ограничиваю скорость до, например, 5М для групи ALL, все равно дает всю скорость, так же когда проверяю скорость через два ПК в Speedtest, то кто первый запустил тот забрал все себе, а эти настройки не работают почему-то. Может я что-то сделал не так...

  16. Сергей

    Добрый.
    Проверьте меня, пожалуйста, правильно ли я все понял и настроил?
    Задача. Настроить приоритет трафика по IP для двух ПК и одного бриджа (гостевой сети). Но также нужно чтобы эти два пк(каждый) (ПК1 и ПК2) делили скрость или не забирали все на себя каждый. Бытает что ПК1 скачивает большой файл а ПК2 уже ничего скачать не может хотя канал еще позволяет!

    Для этого я создал 4 simple queue
    WAN-V (основная родительская запись) в строке Dst. указал wan порт провайдера так как у меня есть выход из этой локальной сети не только в интернет, но и в другие подсети.
    Guest (цель указана на гостевой бридж)
    Dell (ПК1 с самым высокий приоритетом "6") в случае необходимости на который уйдет вся скорость.
    Lenovo (ПК 2 с более низким приоритетом "7") который заберет всю скорость после ПК1?

    Upload Limi At & Download Limi At - это минимальная скорость которая будет (останется) после ограничений (понижения скорости по отношению к более приоритетным пользователям?

    https://c.radikal.ru/c04/2010/86/2c0cf3a08007.jpg

    Спасибо

    • Смотрите. Я сразу вижу ошибку в вашей логике. Если вы хотите, чтобы оба ПК могли делить равномерно скорость между собой, у них не может быть разный приоритет. Он должен быть одинаковый и включена очередь с равномерным распределением. У вас достаточно простая конфигурация, которую вы без проблем можете проверить просто запустив тест скорости интернета на каждом ПК и убедиться, что ваша схема работает.

      • Сергей

        Вот так Вы имели ввиду? (одинаковый приоритет у обеих пк и ключена очередь с равномерным распределением)
        https://a.radikal.ru/a24/2010/1d/a39bb8478e66.jpg
        Нужно ли добавлять всех стальных пользователей интрнета 192.168.1.X в Simple queue (которые не входят в гостевую сеть brige4-NET-G) для внесения минимального значения Upload Limi At & Download Limi At чтоб они вовсе не остались без интернета?
        Спасибо

        • Смотрите, общая идея такая, что лучше описать в очередях вообще всех пользователей, которые пользуются интернетом, чтобы не оставить никого без связи. Всех остальных поместите в отдельную очередь с пониженным приоритетом, но с гарантированной небольшой полосой пропускания, чтобы они совсем не оставались без интернета.

          • Сергей

            А можно сделать вот так?
            https://c.radikal.ru/c37/2011/79/de2094cf9608.jpg
            Чтобы не заморачиватся с добавление всех пользователей интернета я добавил 2 бриджа в которых они-пользователи состоят (один рабочий а второй гостевой)
            В рабочем бридже "NET-V" два под пользователя Dell и Lenovo которые имеют приоритет в рабочем бридже и у пользователя Dell выше приоритет по отношению к ползователю Lenovo?
            Есть НО! Я запускал speedtest одновременно на двух ПК Dell и Lenovo и почему то Lenovo чаще забирал всю скорость- как такое может быть? (или это не правильная проверка?)
            Спасибо

  17. Констянтин

    Что насчет маркировки SIP трафика по кодам DSCP? CS5 и вот это вот всё.
    Имеет смысл? Эффективно ли?

    • Вопрос не очень понятен. Способов маркировки и реализации qos множество и все имеет смысл в зависимости от ситуации и использованного оборудования.

  18. Очень хорошая статья. Спасибо!
    Один только вопрос хотелось бы в ней увидеть: а как ограничить torrent трафик? Можете в ответе написать если коротко или статью дополнить.

    • Я бы сам рад узнать, как это сделать. Насколько я понимаю, однозначного рецепта по ограничению торрентов нет, так как торрент торренту рознь. Этот трафик не так просто однозначно идентифицировать. Если найдете и опробуете хорошее решение, буду рад, если поделитесь здесь информацией или ссылкой.

    • Александр

      могу сказать как, только когда спрашиваете сразу спрашивайте номер карты куда деньги перевести. сказать реквизиты для перевода? )))

  19. Максим

    Спасибо за подробную статью.
    Возник вопрос, как промаркировать правило входящего/исходящего соединения за компьютерами входящими в Bridge с заранее определенными IP источника.

    сделал правила:
    add action=mark-connection chain=prerouting comment="LAN Download" disabled=\
    yes in-interface=LAN new-connection-mark="LAN Download" passthrough=yes \
    src-address-list=allow
    add action=mark-packet chain=forward connection-mark="LAN Download" disabled=\
    yes dst-address=192.168.0.1 new-packet-mark="PC 1 Download" \
    passthrough=no src-address=!192.168.0.0/16
    add action=mark-packet chain=forward connection-mark="LAN Download" disabled=\
    yes dst-address=192.168.0.2 new-packet-mark="PC 2 Download" passthrough=\
    no src-address=!192.168.0.0/16

    add action=mark-connection chain=postrouting comment="LAN Upload" disabled=\
    yes dst-address-list=allow new-connection-mark="LAN Upload" \
    out-interface=LAN passthrough=yes
    add action=mark-packet chain=forward connection-mark="LAN Upload" disabled=\
    yes dst-address=!192.168.0.0/16 new-packet-mark="PC 1 Upload" \
    passthrough=no src-address=192.168.0.1
    add action=mark-packet chain=forward connection-mark="LAN Upload" disabled=\
    yes dst-address=!192.168.0.0/16 new-packet-mark="PC 2 Upload" \
    passthrough=no src-address=192.168.0.2

    Сначала промаркировал все соединения приходящие на Bridge LAN, после этого уже помечая соединения, промаркировав пакеты в сторону конкретных ПК по IP.

    • А в чем конкретно вопрос? У вас что-то не получилось? Я правила не разбирал, но сходу не вижу, в чем может быть проблема в вашем случае.

  20. Приветствую, Владимир!
    Интересно, голосовое приветствие перед статьёй, это ваш голос или как у блогера Нисмияна автоматический? ))

  21. По поводу burst есть хорошая картинка, которая объясняет как это работает.
    https://i.paste.pics/c52e81293774a9c01ad87a1c2872ede9.png

    • Картинок много. Есть и более наглядные. Но к ним нужно хорошее пояснение. Я лично так до конца и не понял, пока мне не пояснили словами подобную картинку.

      • Согласен, но картинки + слова интереснее, чем просто слова :)

      • Про Burst вы объяснили очень доходчиво. Спасибо! По приведённой картинке не понятно, а по вашим словесным объяснениям всё очень даже понятно.

  22. Александр

    По поводу маркировки трафика. Лучше сначала маркировать соединение по нужным Вам параметрам, например по порту 80 или 443, а затем уже в нем маркировать все пакеты. Это избавит микротик от просмотра пакетов всего трафика и снизит нагрузку.

    • Да, я тоже об этом думал, когда маркировал пакеты. Логикой понимаю, что проще промаркировать сначала соединения. Но я не понял, как в итоге набор правил должен выглядеть, чтобы сначала маркировать соединения, а потом пакеты. А потом это отдать в queue.

      • Александр

        Так же в мангле сначала делаешь маркировку первым правилом по нужным вам параметрам например порт 80 протокол 443 и в экшене Марк конекшен. Следующим правилом указываешь на вкладке Генерал конекшен Марк ту которую указал выше, а в екшене уже делаешь макр пакет и в косах указываешь как и в статье имя маркировки пакетов

        • Спасибо, я что-то не докумекал просто. Я сначала промаркировал соединения, потом увидел, что в queue нужна маркировка пакетов. И просто пошел, промаркировал пакеты, вместо того, чтобы зацепиться за уже промаркированные соединения.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar