Всем привет!!!
В этой статье описана процедура настройки QOS в Mikrotik с новым типом очереди Cake, которая поддерживает DSCP заголовки. А классификация пакетов выполнена универсально, что бы поддерживать не только Cake но и очереди PCQ для старых версий или малопроизводительных устройств.

Настройка QOS в Mikrotik
Оглавление
Введение
Тема настройки QOS очень сложная и очень не стандартная. Невозможно настроить QOS правильно действуя по одному шаблону в разных сетях. Поэтому я постарался дать не только варианты настрйоки, но и немного теории, что бы было понимание. В статье есть ролик по настрйоке QOS в Mikrotik, который я обязательно рекомендую всем посмотреть. Лично я смотрел его несколько раз.
Зачем вообще настраивать QOS если и так все работает? В таком случаи ничего настраивать не нужно. А вот если у вас дома или в офисе есть сервер, телевизор, ПК с играми, то настраивать QOS нужно. Кто-то может смотреть телевизор, а в соседней комнате скачиватсья файл и телевизор начнет притормаживать. Чат на телефоне будет работать медленно при обновлении Windows на ПК. Игры онлайн могут лагать, при этом загрузки интернет канала вроде бы как и нет. Для того что бы в сети все работало хорошо, торенты не забивали канал давая возможность смотреть ютуб, нужно настроить QOS.
QoS (Quality of Service) — это набор технологий и механизмов, предназначенных для управления сетевым трафиком с целью обеспечения определенного уровня качества обслуживания. QoS позволяет контролировать и оптимизировать использование сетевых ресурсов, таких как пропускная способность, задержки, джиттер и потери пакетов. Это особенно важно в сетях с ограниченной пропускной способностью или при наличии трафика, чувствительного к задержкам (например, VoIP, видеоконференции, онлайн-игры).
Хочу отметить, что провадйреы интерена не поддерживают QOS клиентского трафика и да же наоборот сбрасывают все значения в 0, т.е. навешивают наименьший приоритет. Mikrotik в свою очерьде может влиять не только на исходищй трафик, как обычно это делают другие роутеры, но и косвенно влиять на входящий трафик от провайдера, тем самы обеспечивая QOS даже в интернет канале.
Я всегда стремился к простоте во всем и в том числе в простоте в настрйоке роутера, тем более домашнего роутера. Потому что чем проще настройка тем надежнее и лучше. А через 1 год или 5 лет вспомнить сложную настроку не получится и придется заново ее изучать.
Вот например, когда у меня был роутер TP-Link Deco то настройка QOS выполнялась парочкой ползунков на телефоне. Нужно было только зайти в нужное меню и выставить настройки. Согласитесь очень просто. Если у вас есть похожий роутер вы и сейчас можете так настроить.

Такой способ настройки дествительно очень простой. Тем не менее, те кто разбираюстя в сетях понимают, что у такого способа есть куча непонятного. Например, как TP-link определяет тип трафика? Игра это или чат? Работает ли эта настройка в действительности? Что если TP-link не определяет вашу игру или приложение на телевизоре? В общем тут больше вопросов чем ответов.
Конечно можно взять да проверить. Загрузить канал торрентами и повзонить по телефону. Могу сказать, что вот именно такое тестирование пройдет, а может и нет. В любом случаи у вас дома есть сервер и он точно не подпадет ни под какие правила TP-link так как компания не расчитвает на появление дома сервера.
В роутерах keenetik тот же принцип. Кстати вот настройка QOS на роутерах Keenetik.

В общем можно сколько угодно двигать эти ползунки и остается только надеятся, что они на что-то влияют. Самое главное никто не знает как классифицируется трафик в TP-link или Keenetik и уж точно они не смогут подстроиться под вас, т.к. расчитывают на людей у которых нет домашнего сервера, который может не только скачивать с интернета данные, но и быть медиа сервером, web сервером или почтовым сервером.
И вот я стал обладателем Mikrotik RB5009, в котором мне так же как и в TP-Link Deco нужно настроить QOS. Соответственно я столкнулся со всеми проблемами, которые в этом случаи появляются. Простыми ползунками тут не обойтись, придется во всем разобраться и сделать что-то похожее или даже лучше.
Эта статья моя вторая попытка настроить QOS на Mikrotik. Первая статья “Mikrotik настройка Firewall и QOS” все еще актуальна, но появились новые настройки, появилось больше информации и поэтому радилась эта статья.
Основную информацию я взял из видео ролика “Новые очереди в RouterOS 7: Как FQ-CoDel и Cake решают проблемы задержек в TCP” канала ютуб “Mikrotik Training“. Автор очень хорошо разбирается в Mikrotik и очень хорошо все рассказал. рекомендую ознакомитсья с видео.
В целом на Mikrotik не так просто настроить QOS. Нужно пройти несколько стадий: теория, классификаци и только потом настройка QOS. Но и даже на последнем пункте будут варианты и вопросы. Поэтому эта статья больше шпаргалка для меня на будущее, которой я делюсь с вами.
В целом настройка QOS в Mikrotik выглядит как показано на картинке ниже, но до этой настройки нужно еще дойти.

Типы очередей
В Mikrotik существуют различные очереди для управления трафиком: FIFO, PCQ, CoDel, FQ-CoDel и CAKE. Для начала я распишу немного про каждую.
Далее будет немного скриншотов с презинтации из видео ролика “Новые очереди в RouterOS 7: Как FQ-CoDel и Cake решают проблемы задержек в TCP” канаала ютуб “Mikrotik Training“. Я не брал разрешение делать это. Если авторы считают это неприемлемым, то дайте знать, ваш контент будет удален из статьи. Призентация лежит в открытом доступе, но я забыл на нее ссылку к сожалению.
FIFO (First In, First Out)

- Описание: Это самая простая очередь, где пакеты обрабатываются в порядке их поступления (первый пришел — первый ушел). Нет приоритизации или управления трафиком.
- Преимущества:
- Простота настройки.
- Низкие накладные расходы на обработку.
- Недостатки:
- Нет контроля за задержками или перегрузкой сети.
- Не подходит для сетей с высокой нагрузкой или требовательным трафиком (VoIP, игры).
- Когда использовать:
- В простых сетях, где QoS не требуется.
- На интерфейсах с низкой нагрузкой.
- Появление: Доступен во всех версиях RouterOS.
- Требования к ресурсам: Минимальные.
- Рекомендуемые устройства:
- Все устройства MikroTik.
- Используется только в простых сценариях, где QoS не требуется.
PCQ (Per Connection Queue)

- Описание: PCQ распределяет трафик по отдельным очередям для каждого соединения (например, для каждого IP-адреса или подсети). Это полезно для равномерного распределения пропускной способности между пользователями.
- Преимущества:
- Справедливое распределение между пользователями.
- Подходит для ограничения скорости для множества клиентов (например, в интернет-кафе или hotspot).
- Недостатки:
- Не борется с буферной блокадой.
- Нет приоритезации трафика.
- Когда использовать:
- Для равномерного распределения между пользователями.
- В сетях с большим количеством клиентов (например, провайдеры, кафе).
- Появление: Доступен во всех версиях RouterOS.
- Требования к ресурсам: Низкие. Подходит для любых устройств.
- Рекомендуемые устройства:
- Все устройства MikroTik, включая старые модели (RB750, RB951).
- Идеально для провайдеров, которые хотят равномерно распределять между клиентами.
CoDel (Controlled Delay)

- Описание: CoDel — это алгоритм управления очередями, который борется с буферной блокадой (bufferbloat) и минимизирует задержки. Он автоматически определяет перегруженные буферы и снижает задержки.
- Преимущества:
- Эффективно снижает задержки.
- Автоматическая адаптация к условиям сети.
- Недостатки:
- Менее гибкий в настройке по сравнению с FQ-CoDel или Cake.
- Когда использовать:
- Для улучшения качества VoIP, видеозвонков и онлайн-игр.
- В сетях с высокой нагрузкой и требовательным трафиком.
- Появление: Доступен с RouterOS 6.40 и выше.
- Требования к ресурсам: Низкие. Подходит для устройств с ограниченными ресурсами.
- Рекомендуемые устройства:
- RB750, RB951: Могут работать с CoDel на низких и средних скоростях.
- hEX Lite (RB750r2): Подходит для CoDel.
- hAP lite (RB941): Может использоваться для базового QoS.
FQ-CoDel (Fair Queuing with Controlled Delay)

- Описание: FQ-CoDel сочетает в себе fair queuing (справедливое распределение трафика) и CoDel (управление задержками). Он создает отдельные очереди для каждого потока данных и управляет ими, чтобы минимизировать задержки и буферную блокаду.
- Преимущества:
- Справедливое распределение между потоками.
- Эффективное управление задержками.
- Подходит для смешанного трафика (VoIP, видео, игры, веб).
- Недостатки:
- Требует больше ресурсов, чем CoDel.
- Когда использовать:
- В сетях с разнородным трафиком.
- Для улучшения качества обслуживания при высокой нагрузке.
- Появление: Доступен с RouterOS 6.40 и выше.
- Требования к ресурсам: Умеренные. Подходит для большинства устройств MikroTik.
- Рекомендуемые устройства:
- hEX (RB750Gr3): Отлично справляется с FQ-CoDel даже на высоких скоростях.
- hAP ac² / hAP ac³: Хороший выбор для FQ-CoDel.
- RB2011, RB3011: Подходят для средних нагрузок.
- Не рекомендуется:
- Очень старые устройства (например, RB750, RB951).
CAKE (Common Applications Kept Enhanced)

- Описание: CAKE — это современный алгоритм управления очередями, который объединяет в себе функции FQ-CoDel и дополнительные улучшения. Он автоматически адаптируется к условиям сети, борется с буферной блокадой и поддерживает DiffServ для приоритезации трафика.
- Преимущества:
- Автоматическая настройка и адаптация.
- Поддержка DiffServ для приоритезации трафика.
- Эффективное управление задержками и буферной блокадой.
- Недостатки:
- Требует больше ресурсов, чем простые очереди.
- Когда использовать:
- Для сложных сетей с высокими требованиями к QoS.
- В сетях с VoIP, видеотрафиком и онлайн-играми.
- Для провайдеров, которые хотят обеспечить стабильное качество обслуживания.
- Появление: CAKE был добавлен в RouterOS 7.1 и выше.
- Требования к ресурсам: CAKE требует больше вычислительной мощности, поэтому он лучше работает на устройствах с более производительными процессорами.
- Рекомендуемые устройства:
- RB4011, RB5009: Отлично подходят для CAKE благодаря мощным процессорам.
- CCR (Cloud Core Router): Все модели CCR поддерживают CAKE без проблем.
- hEX (RB750Gr3): Может работать с CAKE, но на высоких скоростях (например, 1 Гбит/с) возможна повышенная нагрузка на CPU.
- hAP ac² / hAP ac³: Подходят для CAKE на средних скоростях (до 500 Мбит/с).
- Не рекомендуется:
- Устаревшие устройства с слабыми процессорами (например, RB750, RB951, RB2011).
Механизм DiffServ

В очередях CAKE и FQ-CoDel применяется механизм DiffServ, который я и буду настроивать далее, т.к. это более гибкий и самый простой спобоб обработки трафика в очередях.
DiffServ — это механизм, который позволяет маркировать пакеты данных на основе их приоритета. Каждый пакет помечается значением DSCP (Differentiated Services Code Point) в заголовке IP-пакета. Это значение определяет, как сетевые устройства (например, маршрутизаторы) должны обрабатывать пакет: с высоким приоритетом, низким или по умолчанию.
В очереди CAKE есть поддержка различных режимов DiffServ, таких как diffserv3, diffserv4 и diffserv8. Эти режимы определяют, как CAKE классифицирует и приоритизирует трафик на основе значений DSCP
- Diffserv3 – три группы трафика
- Diffserv4 – четыре группы
- Diffserv8 – восемь групп трафика
- Besteffort – не хотите классифицировать
- Precedence – CSX-CS7 not be used in a modern diffserv installation Включает устаревшую интерпретацию поля «Приоритет» TOS. Использование этого пресета категорически не рекомендуется.
Везде далее я буду использовать Diffserv8
Чем больше значение DSCP тем приоритетнее трафик. Стандартные значения DSCP для diffserv8 в Mikrotik RouterOS:
- Управление сетью (48-63): Самый высокий приоритет, часто используемый для критического сетевого трафика, такого как информация о маршрутизации.
- Мультимедийные конференции (24-31): Видеоконференции.
- Телефония (46): Трафик, чувствительный к задержке, например VoIP.
- Сигнализация (32-47): Управляющие сигналы для приложений в режиме реального времени.
- Интерактивные приложения в реальном времени (40): Интерактивные приложения, такие как игры.
- Потоковая передача мультимедиа (16-23): Потоковая передача видео и аудио.
- Данные с низкой задержкой (8-15): Трафик, требующий низкой задержки, как и финансовые операции.
- Лучшие усилия (0): Класс трафика по умолчанию без особого приоритета.
Рекомендации по выбору очереди в зависимости от устройства
Устройство | Рекомендуемые очереди | Примечания |
---|---|---|
RB750, RB951 | FIFO, PCQ, CoDel | Слабые процессоры, подходят только для базового QoS. |
hEX (RB750Gr3) | FQ-CoDel, CAKE (на средних скоростях) | Мощный процессор, подходит для большинства сценариев. |
hAP ac² / hAP ac³ | FQ-CoDel, CAKE (до 500 Мбит/с) | Хороший выбор для домашних сетей и малого бизнеса. |
RB4011, RB5009 | CAKE, FQ-CoDel | Мощные устройства, подходят для CAKE на высоких скоростях. |
CCR (все модели) | CAKE, FQ-CoDel | Идеально для CAKE даже на высоких скоростях и сложных сценариях. |
RB2011, RB3011 | FQ-CoDel, CoDel | Подходят для средних нагрузок, но CAKE может перегрузить CPU. |
Раскраска трафика
Правильная “раскраска” трафика (маркировка пакетов с использованием значений DSCP или других меток) — это ключевой этап настройки QoS (Quality of Service). Она позволяет сетевому оборудованию понимать, как обрабатывать разные типы трафика, чтобы обеспечить оптимальное качество обслуживания.
Проблема с раскраской трафика заключается в том, что практически никакое устрйоство это не делает. Это главная проблема, которую будем решать в данной статье.
Казалось бы, можно настроить классификацию трафика в Windows (например через реестр) или в Linux (например через iptables), но это еще больше затруднит настройку и не даст хорошего эффекта. Вам придется раскрашивать трафик на кажом ПК по отдельности, а что делать с телефонами? Что делать с телевизорами? И что делать с прочими устройствами в вашей сети? Поэтому раскрашивать трафик придется на роутере благо Mikrotik это позволяет.
Для начала нужно опредилить какой трафик и как будет раскрашиваться. Для этого я сделал таблицу в которой расписал какие приоритеты и значения DSCP я собираюсь далее проставлять. Т.к. значений в DSCP намного больше чем классов трафика, то Diffserv8 уже тут наглядно показывает какая польза от него.
Чем выше значение DSCP чем выше приоритет

Естественно каждый пользователь может сам придумывать и классифицировать трафик по собственному усмотрению. Я приведу свои настройки.
На сайте portforward.com можно узнать какие порыт используются для тех или иных приложений и сервисов.
Web трафик
Начну с WEB трафика и остановлюсь на нем более подробно. Остальные классификаторы будут отличаться по сути только портами.
Что бы снизить нагрузку на процессор роутера я крашу не сам трафик, а его connection. Таким образов роутеру не нужно будет вычислять каждый пакетик, что бы определить какую классификацию сделать для него. Это значительно снижает нагрузку на процессор.
Если вы собираетесь применять Cake очереди, что очень удобно, то действие 2 ниже можно не делать. Packet-mark нужен только для тех типов очередей, которые не умеют работать с dscp заголовками. В то же время, я не считаю это лишним и делаю такую настройку всегда.
Если вы не собираетесь использовать Cake очереди, то действие 3 ниже можно не делать. New-dscp нужен только для тех типов очередей, которые умеют работать с dscp заголовками. В то же время, я не считаю это лишним и делаю такую настройку всегда.
- На первом скриншоте выбираем Chain prerouting, протокол tcp, порты 80,443,8080 и самое главное указать Cnnection State равный new. Затем на вкладке Action промаркировал connection: HTTP-connect
- На втором скриншоте выбираем Chain prerouting, но уже connection-mark и созданный ранее HTTP-connect. Затем на вкладке Action промаркировал packet-mark в Applications.
- На третьем скриншоте выбираем Chain prerouting и так же connection-mark и созданный ранее HTTP-connect. Затем на вкладке Action промаркировал new-dscp в значение 10



# HTTP traffic
/ip/firewall/mangle/
add action=mark-connection chain=prerouting comment="HTTP traffic" connection-state=new new-connection-mark=HTTP-connect passthrough=yes port=\
80,443,8080 protocol=tcp
add action=mark-packet chain=prerouting connection-mark=HTTP-connect new-packet-mark=Applications passthrough=yes
add action=change-dscp chain=prerouting connection-mark=HTTP-connect new-dscp=10 passthrough=yes
Таким образом получаем минимум два правила, а в моем случаи три правила, для маркировки определенного типа трафика.
Winbox traffic
# Winbox traffic
/ip/firewall/mangle/
add action=mark-connection chain=prerouting comment="Winbox traffic" connection-state=new new-connection-mark=Winbox-connect passthrough=yes port=8291 \
protocol=tcp
add action=mark-packet chain=prerouting connection-mark=Winbox-connect new-packet-mark=Controll passthrough=yes
add action=change-dscp chain=prerouting connection-mark=Winbox-connect new-dscp=42 passthrough=yes
HTTP traffic udp YuoTube
Сервис YuoTube работает интереснее других. Дело в том, что его интерфейс работает по TCP протоколу, а видео трафик по протоколу UDP. Поэтому нужно отдельно раскрасить видео трафик YuoTube. Причем можно задать ему повышенный приоритет чем web трафику. Опять же, т.к. YuoTube хорошо справляется с перегрузками добавлять его в Realtime я не стал, но повысить приоритет, что бы торренты его не перебили однозначно стоит.
# HTTP traffic udp YuoTube
/ip/firewall/mangle/
add action=mark-connection chain=prerouting comment="HTTP traffic udp YuoTube" connection-state=new new-connection-mark=RealTime-connect passthrough=yes \
port=80,443 protocol=udp
add action=mark-packet chain=prerouting connection-mark=RealTime-connect new-packet-mark=RealTime passthrough=yes
add action=change-dscp chain=prerouting connection-mark=RealTime-connect new-dscp=16 passthrough=yes
Телевизоры
Я решил, что на телевизорах всегда только Realtime трафик и сделал с ними другие правила. Дело в том, что на телевизорах могут стоять разные приложения: Кинопоиск, Winx, Movix, Netflix и так далее. Искать для этих сервисов порты себе дороже. Поэтому создаем адрес лист с названием Televizor. Добавляем туда все IP адреса ваших телевизоров и маркируем трафик с повышенным приоритетом. В моем случаи это RealTime и dscp=23. Почему такой маленький dscp? тут надо понимать, что эти приложения на телевизоре рассчитаны на работу через интернет, а значит перегрузки. Следовательно, давать им dcsp 46 я не вижу смысла.
# Televizor
/ip/firewall/mangle/
add action=mark-connection chain=prerouting comment=Televizor connection-state=new new-connection-mark=TV-connect passthrough=yes src-address-list=\
Televizor
add action=mark-packet chain=prerouting connection-mark=TV-connect new-packet-mark=RealTime passthrough=yes
add action=change-dscp chain=prerouting connection-mark=TV-connect new-dscp=23 passthrough=yes
Добавить IP адреса в адресс лист это еще не все. Нужно зарезервировать эти IP адреса на DHCP сервере сделав их Make Static. Не прописывать же на телевизоре статический адрес верно?

RealTime traffic
Это правило по сути для тех, кто уже промаркировал поле dscp в RealTime равный 46. Это могут быть телефоны, телевизоры и прочие устройства, которые могут оказаться у вас в сети.
# RealTime traffic
/ip/firewall/mangle/
add action=mark-connection chain=prerouting comment="RealTime traffic" connection-state=new dscp=46 new-connection-mark=dscp-EF-connect passthrough=yes
add action=mark-packet chain=prerouting connection-mark=dscp-EF-connect new-packet-mark=RealTime passthrough=yes
SIP traffic
Если телефоны не маркируют трафик, например это SIP телефоны на Windows, то такой трафик определяем по портам и маркируем в RealTime с dscp 46 как положено по стандарту в телефонных сетях.
# SIP traffic
/ip/firewall/mangle/
add action=mark-connection chain=prerouting comment="SIP traffic" connection-state=new new-connection-mark=SIP-connect passthrough=yes port=\
1060,1061,5060,5061 protocol=udp
add action=mark-packet chain=prerouting connection-mark=SIP-connect new-packet-mark=RealTime passthrough=yes
add action=change-dscp chain=prerouting connection-mark=SIP-connect new-dscp=46 passthrough=yes
# RTP traffic
add action=mark-connection chain=prerouting comment="RTP traffic" connection-state=new disabled=yes new-connection-mark=RTP-connect passthrough=yes \
port=10000-20000 protocol=udp
add action=mark-packet chain=prerouting connection-mark=RTP-connect disabled=yes new-packet-mark=RealTime passthrough=yes
RDP traffic
Если вы пользуетесь удаленным рабочим столом RDP, то однозначно нужно приоритизировать трафик для комфортной работы
# RDP traffic
/ip/firewall/mangle/
add action=mark-connection chain=prerouting comment="RDP traffic" connection-state=new new-connection-mark=RDP-connect passthrough=yes port=3389 \
protocol=tcp
add action=mark-packet chain=prerouting connection-mark=RDP-connect new-packet-mark=RealTime passthrough=yes
add action=change-dscp chain=prerouting connection-mark=RDP-connect new-dscp=20 passthrough=yes
DNS traffic
DNS трафик основа работы в интернете, дадим ему максимальный приоритет, что бы не было проблем. А сам трафик DNS не занимает больщую полосу в канале.
# DNS traffic
/ip/firewall/mangle/
add action=mark-connection chain=prerouting comment="DNS traffic" new-connection-mark=DNS-connect passthrough=yes port=53 protocol=udp
add action=mark-packet chain=prerouting connection-mark=DNS-connect new-packet-mark=Controll passthrough=yes
add action=change-dscp chain=prerouting connection-mark=DNS-connect new-dscp=32 passthrough=yes
add action=change-dscp chain=prerouting new-dscp=32 passthrough=yes port=53 protocol=udp
NAS traffic
У меня дома есть NAS сервер и окраска его трафика является очень важным делом. Тут нужно красить как весь IP адрес сервера, так и конкретные порты в зависимости от того кто открывает соединение сервер или клиент.
# NAS traffic
/ip/firewall/mangle/
add action=mark-connection chain=prerouting comment="NAS traffic" connection-state=new new-connection-mark=NAS-connect passthrough=yes src-address=\
10.17.68.101
add action=mark-connection chain=prerouting connection-state=new dst-address=10.17.68.101 new-connection-mark=NAS-connect passthrough=yes
add action=mark-connection chain=prerouting connection-state=new new-connection-mark=NAS-connect passthrough=yes port=\
5000,5001,8008,8443,3808,38443,6690,5005,5006 protocol=tcp
add action=mark-packet chain=prerouting connection-mark=NAS-connect new-packet-mark=Applications passthrough=yes
add action=change-dscp chain=prerouting connection-mark=NAS-connect new-dscp=12 passthrough=yes
Plex traffic
Трафик медиа сервера Plex так же желательно открасить в приоритетную очередь.
# Plex traffic
/ip/firewall/mangle/
add action=mark-connection chain=prerouting comment="Plex traffic" connection-state=new new-connection-mark=Plex-connect passthrough=yes port=32400 \
protocol=tcp
add action=mark-packet chain=prerouting connection-mark=Plex-connect new-packet-mark=RealTime passthrough=yes
add action=change-dscp chain=prerouting connection-mark=Plex-connect new-dscp=23 passthrough=yes
# PlexStream traffic
add action=mark-connection chain=prerouting comment="PlexStream traffic" connection-state=new new-connection-mark=PlexStream-connect passthrough=yes \
port=1900,32400 protocol=udp
add action=mark-packet chain=prerouting connection-mark=PlexStream-connect new-packet-mark=RealTime passthrough=yes
add action=change-dscp chain=prerouting connection-mark=PlexStream-connect new-dscp=23 passthrough=yes
Steam traffic
Для игр Steam можно сделать отдельыне правила
# Steam traffic RealTime
/ip/firewall/mangle/
add action=mark-connection chain=prerouting comment="Steam traffic RealTime" connection-state=new new-connection-mark=SteamRemotePlay-connect \
passthrough=yes port=27000-27100 protocol=udp
add action=mark-connection chain=prerouting connection-state=new new-connection-mark=SteamRemotePlay-connect passthrough=yes port=27036 protocol=tcp
add action=mark-connection chain=prerouting connection-state=new new-connection-mark=SteamRemotePlay-connect passthrough=yes port=4380 protocol=udp
add action=mark-packet chain=prerouting connection-mark=SteamRemotePlay-connect new-packet-mark=RealTime passthrough=yes
add action=change-dscp chain=prerouting connection-mark=SteamRemotePlay-connect new-dscp=40 passthrough=yes
Танки
Еще можно покрасить трафик моей любимой игры в танки
# Tanki (WorldOfTanks)
/ip/firewall/mangle/
add action=mark-connection chain=prerouting comment=WorldOfTanks connection-state=new new-connection-mark=WOT-connect passthrough=yes port=32800-32900 \
protocol=udp
add action=mark-packet chain=prerouting connection-mark=WOT-connect new-packet-mark=RealTime passthrough=yes
add action=change-dscp chain=prerouting connection-mark=WOT-connect new-dscp=40 passthrough=yes
Roblox
Детки играют в Roblox и им очень не нравится, когда обновления Windows мешают играть. Но тут есть минус. Дело в том, что у roblex заявлен очень большой диапазон портов и в этот диапазаон практически наверняка попадут и другие сервисы, которые попасть в него не должны. Пока я не знаю как быть с этой игрой и оставляю так.
#Roblox
/ip/firewall/mangle/
add action=mark-connection chain=prerouting comment=Roblox connection-state=new new-connection-mark=Roblox-connect port=49152-65535 protocol=udp
add action=mark-packet chain=prerouting connection-mark=Roblox-connect new-packet-mark=RealTime
Все правила
Вот так выглядят все правила, которые влезли в окно Winbox. Это мой список правил, что-то мне подсказывает у вас будут свой.
Все эти правила нужно разместить ниже ваших правил MSS и прочих корректировок.

/ip firewall mangle
# Winbox traffic
add action=mark-connection chain=prerouting comment="Winbox traffic" connection-state=new new-connection-mark=Winbox-connect passthrough=yes port=8291 \
protocol=tcp
add action=mark-packet chain=prerouting connection-mark=Winbox-connect new-packet-mark=Controll passthrough=yes
add action=change-dscp chain=prerouting connection-mark=Winbox-connect new-dscp=42 passthrough=yes
# HTTP traffic
add action=mark-connection chain=prerouting comment="HTTP traffic" connection-state=new new-connection-mark=HTTP-connect passthrough=yes port=\
80,443,8080 protocol=tcp
add action=mark-packet chain=prerouting connection-mark=HTTP-connect new-packet-mark=Applications passthrough=yes
add action=change-dscp chain=prerouting connection-mark=HTTP-connect new-dscp=10 passthrough=yes
# HTTP traffic udp YuoTube
add action=mark-connection chain=prerouting comment="HTTP traffic udp YuoTube" connection-state=new new-connection-mark=RealTime-connect passthrough=yes \
port=80,443 protocol=udp
add action=mark-packet chain=prerouting connection-mark=RealTime-connect new-packet-mark=RealTime passthrough=yes
add action=change-dscp chain=prerouting connection-mark=RealTime-connect new-dscp=16 passthrough=yes
# Mail traffic
add action=mark-connection chain=prerouting comment="Mail traffic" connection-state=new new-connection-mark=MAIL-connect passthrough=yes port=\
25,143,110,465,587,993,995 protocol=tcp
add action=mark-packet chain=prerouting connection-mark=MAIL-connect new-packet-mark=Applications passthrough=yes
add action=change-dscp chain=prerouting connection-mark=MAIL-connect new-dscp=12 passthrough=yes
# Televizor
add action=mark-connection chain=prerouting comment=Televizor connection-state=new new-connection-mark=TV-connect passthrough=yes src-address-list=\
Televizor
add action=mark-packet chain=prerouting connection-mark=TV-connect new-packet-mark=RealTime passthrough=yes
add action=change-dscp chain=prerouting connection-mark=TV-connect new-dscp=23 passthrough=yes
# RealTime traffic
add action=mark-connection chain=prerouting comment="RealTime traffic" connection-state=new dscp=46 new-connection-mark=dscp-EF-connect passthrough=yes
add action=mark-packet chain=prerouting connection-mark=dscp-EF-connect new-packet-mark=RealTime passthrough=yes
# SIP traffic
add action=mark-connection chain=prerouting comment="SIP traffic" connection-state=new new-connection-mark=SIP-connect passthrough=yes port=\
1060,1061,5060,5061 protocol=udp
add action=mark-packet chain=prerouting connection-mark=SIP-connect new-packet-mark=RealTime passthrough=yes
add action=change-dscp chain=prerouting connection-mark=SIP-connect new-dscp=46 passthrough=yes
# RDP traffic
add action=mark-connection chain=prerouting comment="RDP traffic" connection-state=new new-connection-mark=RDP-connect passthrough=yes port=3389 \
protocol=tcp
add action=mark-packet chain=prerouting connection-mark=RDP-connect new-packet-mark=RealTime passthrough=yes
add action=change-dscp chain=prerouting connection-mark=RDP-connect new-dscp=20 passthrough=yes
# RTP traffic
add action=mark-connection chain=prerouting comment="RTP traffic" connection-state=new disabled=yes new-connection-mark=RTP-connect passthrough=yes \
port=10000-20000 protocol=udp
add action=mark-packet chain=prerouting connection-mark=RTP-connect disabled=yes new-packet-mark=RealTime passthrough=yes
# DNS traffic
add action=mark-connection chain=prerouting comment="DNS traffic" new-connection-mark=DNS-connect passthrough=yes port=53 protocol=udp
add action=mark-packet chain=prerouting connection-mark=DNS-connect new-packet-mark=Controll passthrough=yes
add action=change-dscp chain=prerouting connection-mark=DNS-connect new-dscp=32 passthrough=yes
add action=change-dscp chain=prerouting new-dscp=32 passthrough=yes port=53 protocol=udp
# NAS traffic
add action=mark-connection chain=prerouting comment="NAS traffic" connection-state=new new-connection-mark=NAS-connect passthrough=yes src-address=\
10.17.68.101
add action=mark-connection chain=prerouting connection-state=new dst-address=10.17.68.101 new-connection-mark=NAS-connect passthrough=yes
add action=mark-connection chain=prerouting connection-state=new new-connection-mark=NAS-connect passthrough=yes port=\
5000,5001,8008,8443,3808,38443,6690,5005,5006 protocol=tcp
add action=mark-packet chain=prerouting connection-mark=NAS-connect new-packet-mark=Applications passthrough=yes
add action=change-dscp chain=prerouting connection-mark=NAS-connect new-dscp=12 passthrough=yes
# PlexStream traffic
add action=mark-connection chain=prerouting comment="PlexStream traffic" connection-state=new new-connection-mark=PlexStream-connect passthrough=yes \
port=1900,32400 protocol=udp
add action=mark-packet chain=prerouting connection-mark=PlexStream-connect new-packet-mark=RealTime passthrough=yes
add action=change-dscp chain=prerouting connection-mark=PlexStream-connect new-dscp=23 passthrough=yes
# Plex traffic
add action=mark-connection chain=prerouting comment="Plex traffic" connection-state=new new-connection-mark=Plex-connect passthrough=yes port=32400 \
protocol=tcp
add action=mark-packet chain=prerouting connection-mark=Plex-connect new-packet-mark=RealTime passthrough=yes
add action=change-dscp chain=prerouting connection-mark=Plex-connect new-dscp=23 passthrough=yes
# Steam traffic RealTime
add action=mark-connection chain=prerouting comment="Steam traffic RealTime" connection-state=new new-connection-mark=SteamRemotePlay-connect \
passthrough=yes port=27000-27100 protocol=udp
add action=mark-connection chain=prerouting connection-state=new new-connection-mark=SteamRemotePlay-connect passthrough=yes port=27036 protocol=tcp
add action=mark-connection chain=prerouting connection-state=new new-connection-mark=SteamRemotePlay-connect passthrough=yes port=4380 protocol=udp
add action=mark-packet chain=prerouting connection-mark=SteamRemotePlay-connect new-packet-mark=RealTime passthrough=yes
add action=change-dscp chain=prerouting connection-mark=SteamRemotePlay-connect new-dscp=40 passthrough=yes
# WorldOfTanks
add action=mark-connection chain=prerouting comment=WorldOfTanks connection-state=new new-connection-mark=WOT-connect passthrough=yes port=32800-32900 \
protocol=udp
add action=mark-packet chain=prerouting connection-mark=WOT-connect new-packet-mark=RealTime passthrough=yes
add action=change-dscp chain=prerouting connection-mark=WOT-connect new-dscp=40 passthrough=yes
Настройка QOS
Настрйока очереди Cake
Все настройки очереди есть на сатйе разработчика.
Для настройки очередей Cake открваем в Winbok очереди, переходим на вкладку Queue Type и создаем две очереди. Одна для upload трафика, другая очередь для download трафика.

- Overhead Schemes: Функция компенсации накладных расходов в CAKE позволяет учитывать дополнительные байты, добавленные различными технологиями уровня связи, что в некоторых случаях может быть значительным. Это важно, потому что CAKE работает с размерами пакетов, о которых сообщает ядро Linux, которые не включают эти дополнительные байты. Если накладные расходы не учтены, шейпер CAKE может позволить большему количеству данных на канале, чем он может обработать на самом деле, что приведет к неожиданной потере пакетов. Полезно в случае с PPPoE или VLAN. Т.к. у меня провайдер подключен по Ethernet то я выбрал именно этот параметр.
- RTT Schemes: Дисциплина очереди CAKE позволяет указать время потраченное туда и обратно (RTT), которое следует учитывать при управлении трафиком. Это важно, потому что время, необходимое для перемещения пакета от источника к месту назначения и обратно, влияет на то, как CAKE управляет перегрузкой сети. Если фактический RTT вашей сети близок к указанному вами значению, как пропускная способность, так и задержка вашей сети должны хорошо управляться.
- Интернет: Это подходит для большинства интернет-трафиков. Предполагается, что RTT составляет 100 миллисекунд.
- FLOW Mode: Ключевым аспектом здесь является метод, с помощью которого CAKE определяет различные потоки, известный как «изоляция потока». CAKE использует алгоритм хеширования set-associative для уменьшения коллизий потоков.
- Dual-srchost – Здесь потоки определяются 5-кортежем, и справедливость применяется сначала к адресам источника, а затем к отдельным потокам. Это хороший выбор для исходящего трафика из локальной сети (LAN) в Интернет. Университет может использовать это, чтобы предотвратить подключение к Интернету любого отдельного пользователя или устройства, независимо от того, сколько различных подключений они используют.
- Dual-dsthost – В этом случае потоки определяются 5-кортежем, и справедливость применяется сначала к адресам назначения, а затем к отдельным потокам. Это подходит для входящего трафика в локальную сеть из Интернета. Крупная компания могла бы использовать это, чтобы предотвратить перегружение входящей пропускной способности сети любого отдельного сервера или системы.
- NAT: Этот параметры контролирует, как CAKE обрабатывает трафик при использовании трансляции сетевых адресов (NAT). NAT заставляет CAKE учитывать адреса и порты после NAT при изоляции потоков, что может быть полезно при формировании трафика на маршрутизаторе, который также выполняет NAT для своих подключенных устройств.
- Autorate Ingress: Автоматически определяя скорость канала, CAKE адаптируется к изменениям в сетевых условиях и обеспечивает корректировку алгоритмов формирования трафика и очередей для оптимизации использования доступной полосы пропускания. Эта настройка хорошо подойдет только для каналов с изменением полосы пропускания например к 4G или 5G. Так же ее нужно включать, если вы собираетесь ограничивать скорость в этой настройке. Я же буду ограничивать скорость в настройке Simple Queues далее.
Настрйока Simple Queues метод 1
Этот метод не подходит для очередей не поддерживающий Diffserv8, т.е. подходит только для fq-codel и cake
Это можно сказать кульминация всего. Когда нужная очередь настроена, оастается просто настроить одну Simple Queues, дать ей название, указать вашу сеть, указать пропускную способность вашего интернет канала, а на вкладке дополнительно выбрать ранее настроенные очереди укзав их в нужных местах как показано на картинке ниже.

У меня дома несколько сетей. Поэтому в поле таргет я указал все сети 0.0.0.0/0 а в поле Dst интерфейс, куда подключен мой провайдер ether1. Скорость я скоректировал на 94М, так как провайдер дает мне именно такую скорость, хотя в договоре указано 100Мб\с. Так как победить провайдера я не могу, я могу настроить свой роутер так, что бы он понимал такую особенность и в случаи с перегрузками учитывал их, когда они начинаются.
Узнать реальную скорость вашего канала интернет можно любым speedtest в интернете, когда нет никаких других клиентов в сети или когда они активно не качают трафик.

Установка Max Limit очень важное значение в данном случаи и рекомендую указать его на пару мегабит меньше, чем выйти за рамки возможного.
На этом настройка QOS в Mikrotik закончена и теперь трафик классифицируется и обслуживается роутером согласно настроек.
Настрйока Simple Queues метод 2
Этот метод подходит для очередей не поддерживающих Diffserv8, т.е. подохит для очередей PCQ. Вы можете вместо Cake указывать PCQ в настройках очередей. Мне даже кажется так и нужно делать в этом методе, но я остался на Cake.
Теперь пошла тяжелая артилерия. В этом методе будут настраиваться все теже Simple Queues, но уже с разбивкой на приортитеты. Чем меньше число, тем выше приоритет.
- Самый высокий приоритет: 1
- Самый низкий приоритет: 8
Используюя мою табличку в самом начале статьи получаем слледующее:
- Control – приоритет 1
- Realtime – приоритет 4
- Application – приоритет 6
- BestEffort – нет приоритета, он равен 8
Так же давайте расскажу про нарезку скоростей. Существует два параметра Max Lmit и Limit At. Max Limit это максимально возможная полоса для очереди, а Limit At это ее гарантированная полоса, т.е. полоса которая гарантирована очереди если она ее попросит. Все что выше Limit At уже не гарантированная полоса и имеет одинаковый приоритет с другим не гарантированным трафиком. У меня 100М канал интернета и я нарезал скорость следующим образом:
Сумма Limit At не должна превышать Max Limit вашего канала интернета. Разумеется ваши значения должны соответствовать вашему каналу интернета.
Max limit | Limit At | |
Control | 100M | 5M |
Realtime | 100M | 40M |
Application | 100M | 30M |
BestEffort | 100M | 0 |
Таким образом Realtime трафик для телевизоров имеет достаточную полосу, что бы работать совместно с полосой для веб серфинга. В то же время, скачивание файлов будет ограничено только 100М и если телевизору понадобится полоса, то скачивание подвинется на ширину равную или больше Limit At для Realtime, но у вебсерфинга будет достаточно емкости в очередях, что бы продолжать обслуживать клиентов.
Так же четко помните, что Simple Queues работают в точнйо иерархии с верху в низ как и Firewall. У них даже есть номера соответствющие. У меня как раз ошибка в этих номерах, которую я заметил только в момент написания статьи. Как только будет найдено первое совпадаение оно сработает. В этом окне очереди можно перетаскивать меняя их порядок. Для этого у них есть два варианта отображения древовидный и истинный порядок, который меняется нажатием на знак # в соответствующем столбце.
Начну с Control. В Simple Queues создаем очередь как показано на картинке. Даем ей название 1Cntr, Target 0.0.0.0/0, Max Limit 100M (величина канала интернет, хотя в данном случаи не важно). На квладке Advantage указываем Packet Market Control и я прописал Lmit At 10M. Это гарантированная скорость для этой очереди. приоритет поставил 1. Тип очереди в этом месте оставил по дефолту.

Следующей очередью создаем родительскую очередь для провайдера. Придумываем имя, указываем сеть 0.0.0.0/0 и DST указываем интерфейс, к которому подключен наш провайдер. В моем случаи это ether1. Тут нужно указать в поле Max limit скорость, которую предоставляет провайдер. Как я говорил ранее у меня это 94М. Лучше указать на пару мегабит меньше. На вкладке Advanced указываем ранее созданные очереди Cake в соответствующие поля.

Внутри родителькой очереди нужно создать дочернии. Первая Control. На основной вкладке указываем теже параметры, что и у родительской, а на вкладке дополнительной нужно Packet mark указать Control, Limit At 5 мегабит в секунду, это гарантированная скорость, первый приоритет и тип очереди Cake. Самое главное не забыть указать родителькую очередь в поле Parent.

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

По аналогии делаются все остальыне очереди. В принципе их настройки, приоритеты и емкости вы видите на каждом скриншоте выше. Не вижу особого смасла их повторять. Для VPN я сдлел отдельные очереди, но ограничил VPN Max Limit 80M, что бы он был немного меньше основного канала, через который он проходит.
Так же вы можете видеть на скриншоте отдельную очередь с приоритетом 5 для моего сервера Synology NAS. Это гарантирует ему скорость в 20Мб\с, что позволяет мне спокойно смотрреть LAMPA не скачивая даже в 4К, т.к. Max Limit ограничен в 90М и ограничен родительской очередью. Так же я специально не указал для этой очереди packet mark, хотя наверно по хорошему нужно сделать Application, но там же есть и фильмы. Поэтому эта очреедь находится между 4 и 6 приоритетами. А так как правила читаютс с верху в низ, то мой сервер имеет приоритет над Application, что меня вполне устраивает.
Я рещил дать серверу гарантировнную скорость, т.к. в случаи скачивания на ПК, серверу тоже нужно гарантировать полосу, хотя конечно это можно было сделать по портам, но тогда таже LAMPA работающая на сервере не будет иметь никаког оприоритета, а это немного не мало просмотр фильмов онлайн. Поэтому я поступил так. Как правильно делать в таких случаях я честно не знаю, а может и даже нет правильного решения, потмоу что они все правильные.
Кстати, когда шли атаки на мой сервер, я ограничивал его скорость Max limit в 20М, что бы не перегружать всю свою сеть этими атаками. А потом уже сделал защиту от DDOS атак.
Полный вывод правил Simple Queues метод 2:
/queue simple
add limit-at=10M/10M max-limit=100M/100M name=1Cntr packet-marks=Controll priority=1/1 queue=ethernet-default/ethernet-default target=""
add comment=ISP dst=ether1 max-limit=94M/94M name=ether1-all queue=cake-internet-upload-nat/cake-internet-download target=""
add dst=ether1 limit-at=5M/5M max-limit=94M/94M name=1-Control packet-marks=Controll parent=ether1-all priority=1/1 queue=\
cake-internet-upload-nat/cake-internet-download target=""
add dst=ether1 limit-at=40M/40M max-limit=94M/94M name=4-RT packet-marks=RealTime parent=ether1-all priority=4/4 queue=\
cake-internet-upload-nat/cake-internet-download target=""
add dst=ether1 limit-at=20M/20M max-limit=90M/90M name=5-NAS920 parent=ether1-all priority=5/5 queue=\
cake-internet-upload-nat/cake-internet-download target=192.168.68.10/32
add dst=ether1 limit-at=30M/30M max-limit=94M/94M name=6-App packet-marks=Applications parent=ether1-all priority=6/6 queue=\
cake-internet-upload-nat/cake-internet-download target=""
add dst=ether1 max-limit=94M/94M name=8-no-mark packet-marks=no-mark parent=ether1-all queue=cake-internet-upload-nat/cake-internet-download \
target=""
add comment="VPN to Aeza" dst=wg0 max-limit=80M/80M name=wg0-all queue=cake-internet-upload-nat/cake-internet-download target=""
add dst=wg0 limit-at=10M/10M max-limit=80M/80M name=1-control-wg0 packet-marks=Controll parent=wg0-all priority=1/1 queue=\
cake-internet-upload-nat/cake-internet-download target=""
add dst=wg0 limit-at=50M/50M max-limit=80M/80M name=4-RT-wg0 packet-marks=RealTime parent=wg0-all priority=4/4 queue=\
cake-internet-upload-nat/cake-internet-download target=""
add dst=wg0 limit-at=30M/30M max-limit=80M/80M name=6-App-wg0 packet-marks=Applications parent=wg0-all priority=6/6 queue=\
cake-internet-upload-nat/cake-internet-download target=""
dd dst=wg0 max-limit=80M/80M name=8-no-mark-wg0 packet-marks=no-mark parent=wg0-all queue=cake-internet-upload-nat/cake-internet-download \
target=""
Ну и фишенка на торте это красивое отображение перегрузок в разных очередях зеленое, желтое и красное обозначение. Например, в данном случаи я просто запустил тест скорости интернета на своем ПК в браузере.

Недостатки
Проблема 1
К сожалению все вышеперечисленные настройки работают только с трафиком L3, т.е. с трафиком который проходит через роутинг в интернет или из интернета. По простому говоря попадает в фаервол на Mikrotik. Как настроить QOS трафика L2, т.е. трафика который коммутируется на бридже роутера и ходит только внутри вашей локальной сети, мне не понятно. Никаких инструкций по этому поводу нет в интернете или я их не нашел.
Конечно, на портах коммутатора есть настройки очередей, но классификация трафика происходит у Mikrotik на фаерволе, т.е. когда трафик проходит роутинг, а не коммутаруется.

Поэтому, когда начинаются перегрузки в локальной сети, то побороть пробелму трафика не получается. Например, когда ПК начинает делать резервную копию на сервер, а кто-то играет по сети в онлайн игры, то могут быть задержки и фризы в играх из-за того, что коммутируемые пакеты не окрашены и на портах работает очередь FIFO. А как бы вы не меняли настройку очереди, пока не будет окрашен трафик это не побороть к сожалению.
Проблема 2
Настройка по методу 2 выглядит не корректной в том плане, что интерфейс VPN работает через интерфейс ether1 и я никак и нигде не нашел как решить эту проблему. Возможно надо было не создавать родительсую очередь для VPN, а все дочернии очереди VPN поместить в родительскую Ether1. Но тогда у родительской в поле DST стоит ether1, а у дочерней wg0 и дочерняя перестает работать. В общем эта задачка не решена, поэтому имеею что имею. Знаете как правильно, дайте знать.
Итог
У меня получилось настроить QOS в Mikrotik и теперь разные сервисы будь-то игры, онлайн телевидение, чаты и прочее работают практически идеально. Я ни разу не замечал зависания, задержек или обрыва игры. При этом во время скачивания я наблюдаю просадки, но они закономерны, если в это время кто-то смотрит ТВ или ютуб. Во всех остальных случаях скачивание идет без влияния на другие сервисы.
Конечно, настрйока выглядит очень сложно. Тут очень многое или даже все завист от раскраски трафика. Без раскраски невозможно определить приоритет трафика и корректно его обработать. Но когда вы раскрасите ваш трафик, то дальнейшая настройка уже очень простая, особенно если вы используете Cake очереди с поддержкой DSCP заголовков.
Если вы наблюдаете пробелмы с QOS в вашей сети с Mikrotik, то попробуйте сделать как я и возможно большая часть пробелм уйдет или да же все. Лично мне приятно, что теперь мой Mikrotik корректно обрабатывает трафик L3 и гарантирует мне QOS в интернете. Настрйока делается один раз и работает всегда.
Настройка QOS в Mikrotik