Настройка приоритета трафика в роутере mikrotik

Время на прочтение
25 мин

Количество просмотров 251K

Mikrotik-Qos Приоритезация по типу трафика и деление скорости

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

Начнем с того, что я по традиции как и все остальные специалисты отправлю вас курить мануалы… Зачем? Да только для того чтобы вы хотя бы чуть-чуть образно представили как будут протекать процессы деления скорости. Потому что как показывает практика — любые действия без осознания принципов работы, приводит лишь к куче вопросов, потерянному времени и злому бухгалтеру, ну или директору у которого по вашей вине сегодня утром не открылась страничка с загорелыми блондинками :)

Итак, мануалы:

Замечательная статья Кузьмицкого Александра — Делим Интернет или QoS на Mikrotik
Читать раз десять, до полного понимания, если не понимаете — читайте еще раз…

Две статьи от Сергея Лаговского:
MikroTik — QoS / Bandwidth Control /Простое ограничение
MikroTik — QoS / Bandwidth Control / Индивидуальные правила
Будет очень полезно для закрепления основных навыков…

Хорошая, но не законченная презентация от Мегиса (Megis), ну и ее перевод от white_crow за что ему огромное спасибо…
QoS_Megis.pdf
QoS_Megis_(Russian_translate_by_white_crow_rev.2).pdf

Данная презенташка содержит ошибку, подробнее о ней читайте в следующей доке.

Русский вариант Mikrotik Wiki
http://wiki.mikrotik.com/wiki/Руководства: Очередь_(Queue)
Не нужно сейчас брызгать слюной и говорить, что вы итак все знаете, присмотритесь, особенно в комментарии, откроете для себя чуточку нового, особенно того где находится SRC-NAT и почему из-за него неправильно режется исходящая скорость.

Ну что? Начитались? Уже появилась кучка вопросов?
Пошарив по просторам интернета, было выявлено, что у администраторов микротика возникает ряд схожих проблем и вопросов, связанных с QoS в целом, приоритезацией и нарезкой трафика, что в принципе одно и то же. Однако, как правило, это либо незаконченные статьи, либо брошенные на самом интересном месте ветки форумов.
Основные цели, проблемы и вопросы в них следующие:

  • Как разделить скорость поровну между пользователями?
  • Как повысить приоритет определенного типа трафика?
  • Как выделить приоритет определенному пользователю?
  • Как снизить приоритет торрентов и прочего P2P трафика, чтобы торренты не забивали канал, но если канал свободен, отдать всю скорость?
  • Как сделать быстрый отклик до определенных ресурсов?
  • Как разделить пользователей на группы с разными приоритетами?
  • Как снизить приоритет закачкам, чтобы интернет странички шустро открывались?
  • Как не ограничивать скорость внутренних (региональных ресурсов) если они приходят по одному и тому же каналу?
  • Почему шейпер не выдает полную скорость?

И это только основные вопросы…

Почитав и немного поразмыслив, я пришел к выводу, что очень даже было бы ничего придумать, что-нибудь такое универсальное, легко масштабируемое, и крайне юзабильное для администратора. Через пару дней в голову пришел план реализации, а еще через неделю все уже было готово…

В общем, была поставлена задача:

Задача 1.

Разделить трафик по приоритету.
Шарив по интернету, натолкнулся на предупреждения, мол, p2p трудно пометить, скайп тоже. И вообще приоритезация по типу трафика не очень хорошая идея на микротике.

Ко всему смутили золотые слова о том, что мы не можем контроллировать входящий трафик который валится к нам из интернета, т.к. он УЖЕ ПРИШЕЛ на наш входящий интерфейс. Но у этих слов есть оговорка — Да, мы не можем контроллировать то, что уже пришло на интерфейс, но мы можем задержать этот трафик тем самым за счет контрольных полей пакетов которые прийдут с задержками, мы можем сообщить серверу что наш клиент не может так быстро принимать данные. В следствии чего сервер будет отправлять пакеты чуть-чуть медленнее.

Итак, вопрос закрыт, разделению трафика по приоритету быть!

Было принято взвешенное решение: «Если не получается пометить низкоприоритетный трафик, будем метить весь трафик как низкоприоритетный, а потом из этой кучи переразмечать и выдергивать высокоприоритетный»

Для разделения трафика было принято четыре группы (Класса) трафика:

CLASS-A
CLASS-B
CLASS-C
CLASS-D

CLASS-A -имеет самый высший приоритет, и будет пропускаться в самую первую очередь.
CLASS-D -имеет самый низкий приоритет и будет пропускаться только в случае незанятости канала более высокими классами.

Задача 2.

Разделение общего потока на группы пользователей с разным приоритетом.
Тут в принципе вопросов как таковых не возникало. Было принято решение сделать 5 групп пользователей с разным приоритетом, приоритеты очередей были распределены внахлест, чтобы трафик высокого класса нижней группы мог конкурировать с трафиком верхней группы среднего или низкого класса.
В итоге пять групп:

GROUP-A
GROUP-B
GROUP-C
GROUP-D
GROUP-E

GROUP-A — имеет самый высокий приоритет, клиенты этой группы распределяют очередь между собой поровну согласно указанным выше классам.
GROUP-E — имеет самый низкий приоритет, клиенты этой группы распределяют очередь между собой поровну согласно указанным выше классам. Если группы с более высоким приоритетом полностью займут весь лимит, данная группа сможет передавать только трафик высокого класса, согласно теории вероятности и закону подлости — данная группа вообще не сможет передавать никакого трафика, пока канал не станет посвободнее, поэтому для всех групп стоит установить параметр Limit-At который даст некоторую гарантию, что у людей, хотя бы аськи будут работать.

В итоге мы получаем дерево, слева имена, справа приоритеты:

GROUP-A
CLASS-A 1
CLASS-B 2
CLASS-C 3
CLASS-D 4
GROUP-B
CLASS-A 2
CLASS-B 3
CLASS-C 4
CLASS-D 5
GROUP-C
CLASS-A 3
CLASS-B 4
CLASS-C 5
CLASS-D 6
GROUP-D
CLASS-A 4
CLASS-B 5
CLASS-C 6
CLASS-D 7
GROUP-E
CLASS-A 5
CLASS-B 6
CLASS-C 7
CLASS-D 8

В точках пересечения приоритетов, классы разных групп при наличии на них трафика будут делить доступную им скорость.
К примеру,
GROUP-A CLASS-C PRIO 3 пытается полностью забить канал

Только следующие классы получат разрешение на передачу пакетов:
GROUP-A CLASS-A 1
GROUP-A CLASS-B 2
GROUP-B CLASS-A 2
GROUP-B CLASS-B 3
GROUP-С CLASS-A 3
причем классы с одинаковым приоритетом будут делить скорость поровну между собой, классы с более высоким приоритетом отнимают скорость у классов с более низким.

Задача 3.

Приоритезация доступа к определенным ресурсам.
После разметки трафика по типам, я добавил правила, которые будут отдавать приоритет определенным ресурсам, и разделил их на три класса:
CLASS-A-SITES
CLASS-B-SITES
CLASS-C-SITES
Добавляя списки в /ip firewall address-list под соответствующими именами, мы можем направить трафик в нужный нам класс.

Задача 4.

Ускорить потоки первых соединений.
Весьма двоякая польза от данной фишки, после маркировки по типу трафика и по направлению к ресурсам было решено добавить три правила.

Все закачки размером не более 5 килобайт помещаются в CLASS-A
Все закачки размером от 5 до 50 килобайт будут перемещены в CLASS-B
Все закачки размером от 50 до 100 килобайт будут перемещены в CLASS-C
После 100 килобайт пакеты перестанут помечаться и как правило попадут в CLASS-D, данные правила не действуют для трафика CLASS-A т.к. он итак самый приоритетный.

Все это работает как своеобразный Burst для коротких соединений, быстрая подгрузка страниц, шустрые соединения по удаленке, быстрый пролет im-сообщений и пр.
Обратная сторона медали, все соединения получат данный Burst в т.ч. и P2P.

Задача 5.

Исключить из шейпера приходящие в микротик региональные ресурсы провайдера.
Для решения этой задачи, в правилах которые помечают потоки в разные классы, в полях Src.address list и Dst.address list был добавлен список !ShaperExclude, все адреса и диапазоны адресов попавшие в этот список будут пропускаться правилами шейпера и региональные ресурсы перестанут ограничиваться по скорости.

Задача 6.

Оставить администратору возможность управления профилями PCQ для каждой группы отдельно.
Для решения данной задачи было создано десять профилей, пять на загрузку, пять на отдачу, по два на группу.

Задача 7.

Слепить все это счастье вместе при следующих условиях:
Правила в /ip firewall mangle не должны блокировать пакеты в цепочках, т.е. passthrough=yes должен быть во всех правилах.
На микротике включен SRC-NAT что очень сильно скажется на просторах для творчества.

С задачами мы определились, теперь осталось дело за реализацией и результатом.

Реализовывать, учитывая условия и поставленные задачи мы будем с помощью очередей PCQ, помечать пакеты будем в цепочках forward и prerouting.

Итак, выдержка из справки:
QoS включает несколько возможностей, в следующем порядке:

1. mangle chain prerouting
2. HTB global-in
3. Mangle chain forward
4. Mangle chain postrouting
5. HTB global-out
6. HTB out interface

поэтому в пределах одного роутера можно дважды шейпить трафик:

a) #1 и #2 для первой маркировки трафика и последующего шейпинга, и #3+#5 для второй
b) #1 и #2 для первой маркировки трафика и последующего шейпинга, и #3+#6 для второй
c) #1 и #2 для первой маркировки трафика и последующего шейпинга, и #4+#5 для второй
d) #1 и #2 для первой маркировки трафика и последующего шейпинга, и #4+#6 для второй

Так же кто все таки не поленился и еще разок покурил мануалы о которых я говорил в самом начале. По презенташке от Мегиса видно что приоритезация по типу должна лежать в пределах PREROUTING-GLOBAL-IN а нарезка скорости FORWARD-HTB INTERFACE.

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

Второе и очень важное замечание.
Цепочка FORWARD-HTB INTERFACE не будет работать с исходящим каналом т.к. HTB INTERFACE находится после SRC-NAT, тоже самое относится и к цепочке FORWARD-GLOBAL-OUT, очереди PCQ по этим цепочкам не работают, кто не верит можете настроить пару правил и по экспериментировать.

Третье важное замечание.
При включенном SRC-NAT в цепочке PREROUTING-GLOBAL-IN не получится отловить входящий трафик, вернее получится с большим извратом и работать будет не очень хорошо.

И последнее, сейчас кину большой кирпич в огород тем, кто кричит, что использование Global-in, Global-out, Global-Total в качестве Parent это не правильно и вообще полная ересь. Так вот, уважаемые, представьте на секунду что к вам в огород прилетел кирпич, а к нему привязана витуха от вашего ВТОРОГО провайдера. Улавливаете о чем речь? Сколько можно тратить ресурсы роутера на дубляж правил? А если их не два а пять будет?

Ну и хватит критики…

Так вот, раз уж так получилось, что помечать, а потом резать нельзя, будем помечать и резать одновременно.
Раз в цепочке Forward не работает шейпер на исходящий трафик, значит, будем делать его в цепочке PREROUTING-GLOBAL-TOTAL
Раз в цепочке Prerouting мы не можем знать какому из серых адресов прилетел пакетег, значит помечать мы их будем в цепочке FORWARD-GLOBAL-OUT.

Как сказал Гагарин: «Поехали!»
Для начала добавим парочку L-7 наборов для определения типа трафика:

/ip firewall layer7-protocol
add name=Skype regexp="^..\\x02............."
add name=radmin regexp="^\\x01\\x01(\\x08\\x08|\\x1b\\x1b)\$"
add name=rdp regexp="rdp\r\
\nrdpdr.*cliprdr.*rdpsnd"
add name=http regexp="http/(0\\.9|1\\.0|1\\.1) [1-5][0-9][0-9]|post [\\x09-\\x\
0d -~]* http/[01]\\.[019]"
add name=Jabber regexp=\
"<stream:stream[\\x09-\\x0d ][ -~]*[\\x09-\\x0d ]xmlns=['\"]jabber"
add name=GIF_FILE regexp=gif
add name=PNG_FILE regexp=png

Пометим весь трафик в CLASS-D

/ip firewall mangle
add action=accept chain=forward comment=CLASS-D disabled=yes
add action=mark-connection chain=forward comment=ALLTRAFFIC disabled=no new-connection-mark=CLASS-D passthrough=yes
add action=mark-packet chain=forward comment=CLASS-D-GROUP-E-DL connection-mark=CLASS-D disabled=no dst-address-list=GROUP-E new-packet-mark=CLASS-D-GROUP-E-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-D-GROUP-D-DL connection-mark=CLASS-D disabled=no dst-address-list=GROUP-D new-packet-mark=CLASS-D-GROUP-D-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-D-GROUP-C-DL connection-mark=CLASS-D disabled=no dst-address-list=GROUP-C new-packet-mark=CLASS-D-GROUP-C-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-D-GROUP-B-DL connection-mark=CLASS-D disabled=no dst-address-list=GROUP-B new-packet-mark=CLASS-D-GROUP-B-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-D-GROUP-A-DL connection-mark=CLASS-D disabled=no dst-address-list=GROUP-A new-packet-mark=CLASS-D-GROUP-A-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=prerouting comment=CLASS-D-GROUP-E-UP connection-mark=CLASS-D disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-D-GROUP-E-UP passthrough=yes src-address-list=GROUP-E
add action=mark-packet chain=prerouting comment=CLASS-D-GROUP-D-UP connection-mark=CLASS-D disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-D-GROUP-D-UP passthrough=yes src-address-list=GROUP-D
add action=mark-packet chain=prerouting comment=CLASS-D-GROUP-C-UP connection-mark=CLASS-D disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-D-GROUP-C-UP passthrough=yes src-address-list=GROUP-C
add action=mark-packet chain=prerouting comment=CLASS-D-GROUP-B-UP connection-mark=CLASS-D disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-D-GROUP-B-UP passthrough=yes src-address-list=GROUP-B
add action=mark-packet chain=prerouting comment=CLASS-D-GROUP-A-UP connection-mark=CLASS-D disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-D-GROUP-A-UP passthrough=yes src-address-list=GROUP-A
add action=accept chain=forward comment=CLASS-D disabled=yes

Переразметим пакеты более высокого класса CLASS-C

add action=accept chain=forward comment=CLASS-C disabled=yes
add action=mark-connection chain=forward comment=Proxy disabled=no dst-port=3128 new-connection-mark=CLASS-C passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=HTTP disabled=no layer7-protocol=http new-connection-mark=CLASS-C passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=HTTPS disabled=no dst-port=443 new-connection-mark=CLASS-C passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=FTP disabled=no dst-port=20,21 new-connection-mark=CLASS-C passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=SFTP disabled=no dst-port=22 new-connection-mark=CLASS-C packet-size=1400-1500 passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=SMTP disabled=no dst-port=25 new-connection-mark=CLASS-C passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=SMTPS disabled=no dst-port=465 new-connection-mark=CLASS-C passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=Imap disabled=no dst-port=143 new-connection-mark=CLASS-C passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=POP3 disabled=no dst-port=110 new-connection-mark=CLASS-C passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=POP3S disabled=no dst-port=995 new-connection-mark=CLASS-C passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=IMAPS disabled=no dst-port=993 new-connection-mark=CLASS-C passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=GIF_FILE disabled=no layer7-protocol=GIF_FILE new-connection-mark=CLASS-C passthrough=yes
add action=mark-connection chain=forward comment=PNG_FILE disabled=no layer7-protocol=PNG_FILE new-connection-mark=CLASS-C passthrough=yes
add action=mark-connection chain=forward comment=CLASS-C-SITES disabled=no new-connection-mark=CLASS-C passthrough=yes src-address-list=CLASS-C-SITES
add action=mark-connection chain=forward comment=CLASS-C-SITES disabled=no dst-address-list=CLASS-C-SITES new-connection-mark=CLASS-C passthrough=yes
add action=mark-connection chain=forward comment="100Kb Connections" connection-bytes=0-100000 disabled=no new-connection-mark=CLASS-C passthrough=yes protocol=tcp
add action=mark-packet chain=forward comment=CLASS-C-GROUP-E-DL connection-mark=CLASS-C disabled=no dst-address-list=GROUP-E new-packet-mark=CLASS-C-GROUP-E-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-C-GROUP-D-DL connection-mark=CLASS-C disabled=no dst-address-list=GROUP-D new-packet-mark=CLASS-C-GROUP-D-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-C-GROUP-C-DL connection-mark=CLASS-C disabled=no dst-address-list=GROUP-C new-packet-mark=CLASS-C-GROUP-C-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-C-GROUP-B-DL connection-mark=CLASS-C disabled=no dst-address-list=GROUP-B new-packet-mark=CLASS-C-GROUP-B-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-C-GROUP-A-DL connection-mark=CLASS-C disabled=no dst-address-list=GROUP-A new-packet-mark=CLASS-C-GROUP-A-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=prerouting comment=CLASS-C-GROUP-E-UP connection-mark=CLASS-C disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-C-GROUP-E-UP passthrough=yes src-address-list=GROUP-E
add action=mark-packet chain=prerouting comment=CLASS-C-GROUP-D-UP connection-mark=CLASS-C disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-C-GROUP-D-UP passthrough=yes src-address-list=GROUP-D
add action=mark-packet chain=prerouting comment=CLASS-C-GROUP-C-UP connection-mark=CLASS-C disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-C-GROUP-C-UP passthrough=yes src-address-list=GROUP-C
add action=mark-packet chain=prerouting comment=CLASS-C-GROUP-B-UP connection-mark=CLASS-C disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-C-GROUP-B-UP passthrough=yes src-address-list=GROUP-B
add action=mark-packet chain=prerouting comment=CLASS-C-GROUP-A-UP connection-mark=CLASS-C disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-C-GROUP-A-UP passthrough=yes src-address-list=GROUP-A
add action=accept chain=forward comment=CLASS-C disabled=yes

Переразметим пакеты более высокого класса CLASS-B

add action=accept chain=forward comment=CLASS-B disabled=yes
add action=mark-connection chain=forward comment=ICQ disabled=no dst-port=5190 new-connection-mark=CLASS-B passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment="Mail.ru Agent" disabled=no dst-port=2041,2042 new-connection-mark=CLASS-B passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=Jabber disabled=no layer7-protocol=Jabber new-connection-mark=CLASS-B passthrough=yes
add action=mark-connection chain=forward comment=IRC disabled=no dst-port=6667-6669 new-connection-mark=CLASS-B passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=SSH disabled=no dst-port=22 new-connection-mark=CLASS-B packet-size=0-1400 passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=TELNET disabled=no dst-port=23 new-connection-mark=CLASS-B passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=SNMP disabled=no dst-port=161-162 new-connection-mark=CLASS-B passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=PPTP disabled=no dst-port=1723 new-connection-mark=CLASS-B passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=L2TP disabled=no dst-port=1701 new-connection-mark=CLASS-B passthrough=yes protocol=udp
add action=mark-connection chain=forward comment=GRE disabled=no new-connection-mark=CLASS-B passthrough=yes protocol=gre
add action=mark-connection chain=forward comment=Skype disabled=no layer7-protocol=Skype new-connection-mark=CLASS-B passthrough=yes
add action=mark-connection chain=forward comment=CLASS-B-SITES disabled=no new-connection-mark=CLASS-B passthrough=yes src-address-list=CLASS-B-SITES
add action=mark-connection chain=forward comment=CLASS-B-SITES disabled=no dst-address-list=CLASS-B-SITES new-connection-mark=CLASS-B passthrough=yes
add action=mark-connection chain=forward comment="50Kb Connections" connection-bytes=0-50000 disabled=no new-connection-mark=CLASS-B passthrough=yes protocol=tcp
add action=mark-packet chain=forward comment=CLASS-B-GROUP-E-DL connection-mark=CLASS-B disabled=no dst-address-list=GROUP-E new-packet-mark=CLASS-B-GROUP-E-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-B-GROUP-D-DL connection-mark=CLASS-B disabled=no dst-address-list=GROUP-D new-packet-mark=CLASS-B-GROUP-D-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-B-GROUP-C-DL connection-mark=CLASS-B disabled=no dst-address-list=GROUP-C new-packet-mark=CLASS-B-GROUP-C-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-B-GROUP-B-DL connection-mark=CLASS-B disabled=no dst-address-list=GROUP-B new-packet-mark=CLASS-B-GROUP-B-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-B-GROUP-A-DL connection-mark=CLASS-B disabled=no dst-address-list=GROUP-A new-packet-mark=CLASS-B-GROUP-A-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=prerouting comment=CLASS-B-GROUP-E-UP connection-mark=CLASS-B disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-B-GROUP-E-UP passthrough=yes src-address-list=GROUP-E
add action=mark-packet chain=prerouting comment=CLASS-B-GROUP-D-UP connection-mark=CLASS-B disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-B-GROUP-D-UP passthrough=yes src-address-list=GROUP-D
add action=mark-packet chain=prerouting comment=CLASS-B-GROUP-C-UP connection-mark=CLASS-B disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-B-GROUP-C-UP passthrough=yes src-address-list=GROUP-C
add action=mark-packet chain=prerouting comment=CLASS-B-GROUP-B-UP connection-mark=CLASS-B disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-B-GROUP-B-UP passthrough=yes src-address-list=GROUP-B
add action=mark-packet chain=prerouting comment=CLASS-B-GROUP-A-UP connection-mark=CLASS-B disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-B-GROUP-A-UP passthrough=yes src-address-list=GROUP-A
add action=accept chain=forward comment=CLASS-B disabled=yes

Переразметим пакеты более высокого класса CLASS-A

add action=accept chain=forward comment=CLASS-A disabled=yes
add action=mark-connection chain=forward comment=DNS disabled=no dst-port=53 new-connection-mark=CLASS-A passthrough=yes protocol=tcp src-port=53
add action=mark-connection chain=forward comment=DNS disabled=no dst-port=53 new-connection-mark=CLASS-A passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=DNS disabled=no dst-port=53 new-connection-mark=CLASS-A passthrough=yes protocol=udp
add action=mark-connection chain=forward comment=NNTP disabled=no dst-port=119 new-connection-mark=CLASS-A passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=Winbox disabled=no dst-port=8291 new-connection-mark=CLASS-A passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=ntp disabled=no dst-port=123 new-connection-mark=CLASS-A passthrough=yes protocol=udp
add action=mark-connection chain=forward comment=VNC disabled=no dst-port=5900-5901 new-connection-mark=CLASS-A passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=Radmin disabled=no layer7-protocol=radmin new-connection-mark=CLASS-A passthrough=yes
add action=mark-connection chain=forward comment=RDP disabled=no layer7-protocol=rdp new-connection-mark=CLASS-A passthrough=yes
add action=mark-connection chain=forward comment=PING disabled=no new-connection-mark=CLASS-A passthrough=yes protocol=icmp
add action=mark-connection chain=forward comment=CLASS-A-SITES disabled=no new-connection-mark=CLASS-A passthrough=yes src-address-list=CLASS-A-SITES
add action=mark-connection chain=forward comment=CLASS-A-SITES disabled=no dst-address-list=CLASS-A-SITES new-connection-mark=CLASS-A passthrough=yes
add action=mark-connection chain=forward comment="5Kb Connections" connection-bytes=0-5000 disabled=no new-connection-mark=CLASS-A passthrough=yes protocol=tcp
add action=mark-packet chain=forward comment=CLASS-A-GROUP-E-DL connection-mark=CLASS-A disabled=no dst-address-list=GROUP-E new-packet-mark=CLASS-A-GROUP-E-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-A-GROUP-D-DL connection-mark=CLASS-A disabled=no dst-address-list=GROUP-D new-packet-mark=CLASS-A-GROUP-D-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-A-GROUP-C-DL connection-mark=CLASS-A disabled=no dst-address-list=GROUP-C new-packet-mark=CLASS-A-GROUP-C-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-A-GROUP-B-DL connection-mark=CLASS-A disabled=no dst-address-list=GROUP-B new-packet-mark=CLASS-A-GROUP-B-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-A-GROUP-A-DL connection-mark=CLASS-A disabled=no dst-address-list=GROUP-A new-packet-mark=CLASS-A-GROUP-A-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=prerouting comment=CLASS-A-GROUP-E-UP connection-mark=CLASS-A disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-A-GROUP-E-UP passthrough=yes src-address-list=GROUP-E
add action=mark-packet chain=prerouting comment=CLASS-A-GROUP-D-UP connection-mark=CLASS-A disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-A-GROUP-D-UP passthrough=yes src-address-list=GROUP-D
add action=mark-packet chain=prerouting comment=CLASS-A-GROUP-C-UP connection-mark=CLASS-A disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-A-GROUP-C-UP passthrough=yes src-address-list=GROUP-C
add action=mark-packet chain=prerouting comment=CLASS-A-GROUP-B-UP connection-mark=CLASS-A disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-A-GROUP-B-UP passthrough=yes src-address-list=GROUP-B
add action=mark-packet chain=prerouting comment=CLASS-A-GROUP-A-UP connection-mark=CLASS-A disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-A-GROUP-A-UP passthrough=yes src-address-list=GROUP-A
add action=accept chain=forward comment=CLASS-A disabled=yes

Теперь пожалуй стоит забить пустые адрес-листы, так, для красоты…

/ip firewall address-list
add address=192.168.0.1 disabled=no list=GROUP-A
add address=192.168.0.2 disabled=no list=GROUP-B
add address=192.168.0.4 disabled=no list=GROUP-D
add address=192.168.0.3 disabled=no list=GROUP-C
add address=192.168.0.5 disabled=no list=GROUP-E
add address=0.0.0.0 disabled=no list=CLASS-A-SITES
add address=0.0.0.0 disabled=no list=CLASS-B-SITES
add address=0.0.0.0 disabled=no list=CLASS-C-SITES
add address=192.168.0.0/16 disabled=no list=ShaperExclude
add address=10.0.0.0/8 disabled=no list=ShaperExclude

Теперь когда мы закончили с фаерволом, пришло время заняться типами очередей и

посадить печень

построить дерево.

Создадим типы очередей

/queue type
add kind=pcq name=GROUP-A-DL pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000
add kind=pcq name=GROUP-B-DL pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000
add kind=pcq name=GROUP-C-DL pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000
add kind=pcq name=GROUP-D-DL pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000
add kind=pcq name=GROUP-E-DL pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000
add kind=pcq name=GROUP-A-UP pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=src-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=150 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000
add kind=pcq name=GROUP-B-UP pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=src-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=150 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000
add kind=pcq name=GROUP-C-UP pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=src-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=150 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000
add kind=pcq name=GROUP-D-UP pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=src-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=150 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000
add kind=pcq name=GROUP-E-UP pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=src-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=150 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000

Обратите пристальное внимание что парамтр PCQ Rate ничем не ограничен, т.к. скорость подпотока я оставил на ваше усмотрение, по умолчанию максимальная скорость подпотока будет ограничена параметром Max.Limit деленого на количество подпотоков, разделенной по классам.

Строим дерево:

/queue tree
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=10M name=DOWNLOAD parent=global-out priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=10M name=UPLOAD parent=global-total priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=GROUP-A-UP parent=UPLOAD priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-AA-UP packet-mark=CLASS-A-GROUP-A-UP parent=GROUP-A-UP priority=1 queue=GROUP-A-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-BA-UP packet-mark=CLASS-B-GROUP-A-UP parent=GROUP-A-UP priority=2 queue=GROUP-A-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-CA-UP packet-mark=CLASS-C-GROUP-A-UP parent=GROUP-A-UP priority=3 queue=GROUP-A-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-DA-UP packet-mark=CLASS-D-GROUP-A-UP parent=GROUP-A-UP priority=4 queue=GROUP-A-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=GROUP-B-UP parent=UPLOAD priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-AB-UP packet-mark=CLASS-A-GROUP-B-UP parent=GROUP-B-UP priority=2 queue=GROUP-B-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-BB-UP packet-mark=CLASS-B-GROUP-B-UP parent=GROUP-B-UP priority=3 queue=GROUP-B-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-CB-UP packet-mark=CLASS-C-GROUP-B-UP parent=GROUP-B-UP priority=4 queue=GROUP-B-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-DB-UP packet-mark=CLASS-D-GROUP-B-UP parent=GROUP-B-UP priority=5 queue=GROUP-B-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=GROUP-C-UP parent=UPLOAD priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-AC-UP packet-mark=CLASS-A-GROUP-C-UP parent=GROUP-C-UP priority=3 queue=GROUP-C-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-BC-UP packet-mark=CLASS-B-GROUP-C-UP parent=GROUP-C-UP priority=4 queue=GROUP-C-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-CC-UP packet-mark=CLASS-C-GROUP-C-UP parent=GROUP-C-UP priority=5 queue=GROUP-C-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-DC-UP packet-mark=CLASS-D-GROUP-C-UP parent=GROUP-C-UP priority=6 queue=GROUP-C-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=GROUP-D-UP parent=UPLOAD priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-AD-UP packet-mark=CLASS-A-GROUP-D-UP parent=GROUP-D-UP priority=4 queue=GROUP-D-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-BD-UP packet-mark=CLASS-B-GROUP-D-UP parent=GROUP-D-UP priority=5 queue=GROUP-D-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-CD-UP packet-mark=CLASS-C-GROUP-D-UP parent=GROUP-D-UP priority=6 queue=GROUP-D-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-DD-UP packet-mark=CLASS-D-GROUP-D-UP parent=GROUP-D-UP priority=7 queue=GROUP-D-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=GROUP-E-UP parent=UPLOAD priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-AE-UP packet-mark=CLASS-A-GROUP-E-UP parent=GROUP-E-UP priority=5 queue=GROUP-E-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-BE-UP packet-mark=CLASS-B-GROUP-E-UP parent=GROUP-E-UP priority=6 queue=GROUP-E-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-CE-UP packet-mark=CLASS-C-GROUP-E-UP parent=GROUP-E-UP priority=7 queue=GROUP-E-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-DE-UP packet-mark=CLASS-D-GROUP-E-UP parent=GROUP-E-UP priority=8 queue=GROUP-E-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=GROUP-A-DL parent=DOWNLOAD priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-AA-DL packet-mark=CLASS-A-GROUP-A-DL parent=GROUP-A-DL priority=1 queue=GROUP-A-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-BA-DL packet-mark=CLASS-B-GROUP-A-DL parent=GROUP-A-DL priority=2 queue=GROUP-A-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-CA-DL packet-mark=CLASS-C-GROUP-A-DL parent=GROUP-A-DL priority=3 queue=GROUP-A-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-DA-DL packet-mark=CLASS-D-GROUP-A-DL parent=GROUP-A-DL priority=4 queue=GROUP-A-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=GROUP-B-DL parent=DOWNLOAD priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-AB-DL packet-mark=CLASS-A-GROUP-B-DL parent=GROUP-B-DL priority=2 queue=GROUP-B-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-BB-DL packet-mark=CLASS-B-GROUP-B-DL parent=GROUP-B-DL priority=3 queue=GROUP-B-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-CB-DL packet-mark=CLASS-C-GROUP-B-DL parent=GROUP-B-DL priority=4 queue=GROUP-B-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-DB-DL packet-mark=CLASS-D-GROUP-B-DL parent=GROUP-B-DL priority=5 queue=GROUP-B-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=GROUP-C-DL parent=DOWNLOAD priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-AC-DL packet-mark=CLASS-A-GROUP-C-DL parent=GROUP-C-DL priority=3 queue=GROUP-C-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-BC-DL packet-mark=CLASS-B-GROUP-C-DL parent=GROUP-C-DL priority=4 queue=GROUP-C-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-CC-DL packet-mark=CLASS-C-GROUP-C-DL parent=GROUP-C-DL priority=5 queue=GROUP-C-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-DC-DL packet-mark=CLASS-D-GROUP-C-DL parent=GROUP-C-DL priority=6 queue=GROUP-C-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=GROUP-D-DL parent=DOWNLOAD priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-AD-DL packet-mark=CLASS-A-GROUP-D-DL parent=GROUP-D-DL priority=4 queue=GROUP-D-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-BD-DL packet-mark=CLASS-B-GROUP-D-DL parent=GROUP-D-DL priority=5 queue=GROUP-D-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-CD-DL packet-mark=CLASS-C-GROUP-D-DL parent=GROUP-D-DL priority=6 queue=GROUP-D-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-DD-DL packet-mark=CLASS-D-GROUP-D-DL parent=GROUP-D-DL priority=7 queue=GROUP-D-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=GROUP-E-DL parent=DOWNLOAD priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-AE-DL packet-mark=CLASS-A-GROUP-E-DL parent=GROUP-E-DL priority=5 queue=GROUP-E-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-BE-DL packet-mark=CLASS-B-GROUP-E-DL parent=GROUP-E-DL priority=6 queue=GROUP-E-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-CE-DL packet-mark=CLASS-C-GROUP-E-DL parent=GROUP-E-DL priority=7 queue=GROUP-E-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-DE-DL packet-mark=CLASS-D-GROUP-E-DL parent=GROUP-E-DL priority=8 queue=GROUP-E-DL

На этом можно сказать реализация закончена.

Еще я думаю стоит сказать о необходимости использования параметров Limit-at и Max-limit в каждой группе хотя бы из соображений того, что интернет нужен всем :)
Так же полезно настроить профили групп, опять пну вас в сторону презентации от Мегиса в которой говорится о размере очереди, задержках и потерях пакетов.

Еще дополнительно для новичков скажу пару слов: Данный набор правил абсолютно бесполезен если не задать в корнях DOWNLOAD и UPLOAD значения Max-Limit
Значения Max-Limit стоит ставить МЕНЬШЕ реальной скорости вашего канала в интернет процентов на 5-10, в противном случае настройка будет абсолютно бессмысленной, т.к. ваш провайдер будет дропать или задерживать пакеты которые не помещаются в выходной поток.

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

При наличии нескольких каналов, в параметре Max.Limit задается сумма скоростей этих каналов.

Для вашего удобства выкладываю RSC файл импорта в систему, а так же скриншоты для более полного представления работы. Пользуйтесь на здоровье!

Mangle

image
Полноразмерная пикча

Queue

image
Полноразмерная пикча

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

Буду очень рад вашим «Спасибо!» которые следует направлять лично мне, по координатам которые вы сможете найти в профиле.
Так же выслушаю и обдумаю конструктивную критику с вашей стороны, буду рад общению со специалистами работающими в подобном направлении, учту ваши поправки и дополнения.

Overview

A queue is a collection of data packets collectively waiting to be transmitted by a network device using a pre-defined structure methodology. Queuing works almost on the same methodology used at banks or supermarkets, where the customer is treated according to its arrival.

Queues are used to:

  • limit data rate for certain IP addresses, subnets, protocols, ports, etc.;
  • limit peer-to-peer traffic;
  • packet prioritization;
  • configure traffic bursts for traffic acceleration;
  • apply different time-based limits;
  • share available traffic among users equally, or depending on the load of the channel

Queue implementation in MikroTik RouterOS is based on Hierarchical Token Bucket (HTB). HTB allows to the creation of a hierarchical queue structure and determines relations between queues. These hierarchical structures can be attached at two different places, the Packet Flow diagram illustrate both input and postrouting chains.

There are two different ways how to configure queues in RouterOS:

  • /queue simple menu — designed to ease configuration of simple, every day queuing tasks (such as single client upload/download limitation, p2p traffic limitation, etc.).
  • /queue tree menu — for implementing advanced queuing tasks (such as global prioritization policy, user group limitations). Requires marked packet flows from /ip firewall mangle facility.

RouterOS provides a possibility to configure queue in 8 levels —  the first level is an interface queue from «/queue interface» menu and the other 7 are lower-level queues that can be created in Queue Simple and/or Queue Tree.

Rate limitation principles

Rate limiting is used to control the rate of traffic flow sent or received on a network interface. Traffic which rate that is less than or equal to the specified rate is sent, whereas traffic that exceeds the rate is dropped or delayed.

Rate limiting can be performed in two ways:

  1. discard all packets that exceed rate limit – rate-limiting (dropper or shaper) (100% rate limiter when queue-size=0)
  2. delay packets that exceed specific rate limit in the queue and transmit its when it is possible – rate equalizing (scheduler) (100% rate equalizing when queue-size=unlimited)

Next figure explains the difference between rate limiting and rate equalizing:

As you can see in the first case all traffic exceeds a specific rate and is dropped. In another case, traffic exceeds a specific rate and is delayed in the queue and transmitted later when it is possible, but note that the packet can be delayed only until the queue is not full. If there is no more space in the queue buffer, packets are dropped.

For each queue we can define two rate limits:

  • CIR (Committed Information Rate) – (limit-at in RouterOS) worst-case scenario, the flow will get this amount of traffic rate regardless of other traffic flows. At any given time, the bandwidth should not fall below this committed rate.
  • MIR (Maximum Information Rate) – (max-limit in RouterOS) best-case scenario, the maximum available data rate for flow, if there is free any part of the bandwidth.

Simple Queue

A simple queue is a plain way how to limit traffic for a particular target. Also, you can use simple queues to build advanced QoS applications. They have useful integrated features:

  • peer-to-peer traffic queuing;
  • applying queue rules on chosen time intervals;
  • prioritization;
  • using multiple packet marks from /ip firewall mangle
  • traffic shaping (scheduling) of bidirectional traffic (one limit for the total of upload + download)

Simple queues have a strict order — each packet must go through every queue until it reaches one queue which conditions fit packet parameters or until the end of the queues list is reached. For example, In the case of 1000 queues, a packet for the last queue will need to proceed through 999 queues before it will reach the destination. 

Configuration example

In the following example, we have one SOHO device with two connected units PC and Server.

We have a 15 Mbps connection available from ISP in this case. We want to be sure the server receives enough traffic, so we will configure a simple queue with a limit-at parameter to guarantee a server to receive 5Mbps:

/queue simple
add limit-at=5M/5M max-limit=15M/15M name=queue1 target=192.168.88.251/32

That is all. The server will get 5 Mbps of traffic rate regardless of other traffic flows. If you are using the default configuration, be sure the FastTrack rule is disabled for this particular traffic, otherwise, it will bypass Simple Queues and they will not work.

Queue Tree

The queue tree creates only a one-directional queue in one of the HTBs. It is also the only way how to add a queue on a separate interface. This way it is possible to ease mangle configuration — you don’t need separate marks for download and upload — only the upload will get to the Public interface and only the download will get to a Private interface. The main difference from Simple Queues is that the Queue tree is not ordered — all traffic passes it together.

Configuration example

In the following example, we will mark all the packets coming from preconfigured in-interface-list=LAN and will limit the traffic with a queue tree based on these packet marks.

Let`s create a firewall address-list:

[admin@MikroTik] > /ip firewall address-list
add address=www.youtube.com list=Youtube
[admin@MikroTik] > ip firewall address-list print
Flags: X - disabled, D - dynamic 
 #   LIST                                                       ADDRESS                                                                        CREATION-TIME        TIMEOUT             
 0   Youtube                                                    www.youtube.com                                                                oct/17/2019 14:47:11
 1 D ;;; www.youtube.com
     Youtube                                                    216.58.211.14                                                                  oct/17/2019 14:47:11
 2 D ;;; www.youtube.com
     Youtube                                                    216.58.207.238                                                                 oct/17/2019 14:47:11
 3 D ;;; www.youtube.com
     Youtube                                                    216.58.207.206                                                                 oct/17/2019 14:47:11
 4 D ;;; www.youtube.com
     Youtube                                                    172.217.21.174                                                                 oct/17/2019 14:47:11
 5 D ;;; www.youtube.com
     Youtube                                                    216.58.211.142                                                                 oct/17/2019 14:47:11
 6 D ;;; www.youtube.com
     Youtube                                                    172.217.22.174                                                                 oct/17/2019 14:47:21
 7 D ;;; www.youtube.com
     Youtube                                                    172.217.21.142                                                                 oct/17/2019 14:52:21

Mark packets with firewall mangle facility:

[admin@MikroTik] > /ip firewall mangle
add action=mark-packet chain=forward dst-address-list=Youtube in-interface-list=LAN new-packet-mark=pmark-Youtube passthrough=yes

Configure the queue tree based on previously marked packets:

[admin@MikroTik] /queue tree
add max-limit=5M name=Limiting-Youtube packet-mark=pmark-Youtube parent=global

Check Queue tree stats to be sure traffic is matched:

[admin@MikroTik] > queue tree print stats
Flags: X - disabled, I - invalid 
 0   name="Limiting-Youtube" parent=global packet-mark=pmark-Youtube rate=0 packet-rate=0 queued-bytes=0 queued-packets=0 bytes=67887 packets=355 dropped=0 

Queue Types

This sub-menu list by default created queue types and allows to add of new user-specific ones.

By default RouterOS creates the following pre-defined queue types:

[admin@MikroTik] > /queue type print
Flags: * - default 
 0 * name="default" kind=pfifo pfifo-limit=50 

 1 * name="ethernet-default" kind=pfifo pfifo-limit=50 

 2 * name="wireless-default" kind=sfq sfq-perturb=5 sfq-allot=1514 

 3 * name="synchronous-default" kind=red red-limit=60 red-min-threshold=10 red-max-threshold=50 red-burst=20 red-avg-packet=1000 

 4 * name="hotspot-default" kind=sfq sfq-perturb=5 sfq-allot=1514 

 5 * name="pcq-upload-default" kind=pcq pcq-rate=0 pcq-limit=50KiB pcq-classifier=src-address pcq-total-limit=2000KiB pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-src-address-mask=32 
     pcq-dst-address-mask=32 pcq-src-address6-mask=128 pcq-dst-address6-mask=128 

 6 * name="pcq-download-default" kind=pcq pcq-rate=0 pcq-limit=50KiB pcq-classifier=dst-address pcq-total-limit=2000KiB pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-src-address-mask=32 
     pcq-dst-address-mask=32 pcq-src-address6-mask=128 pcq-dst-address6-mask=128 

 7 * name="only-hardware-queue" kind=none 

 8 * name="multi-queue-ethernet-default" kind=mq-pfifo mq-pfifo-limit=50 

 9 * name="default-small" kind=pfifo pfifo-limit=10

All RouterBOARDS have default queue type «only-hardware-queue» with «kind=none». «only-hardware-queue» leaves interface with only hardware transmit descriptor ring buffer which acts as a queue in itself. Usually, at least 100 packets can be queued for transmit in transmit descriptor ring buffer. Transmit descriptor ring buffer size and the number of packets that can be queued in it varies for different types of ethernet MACs. Having no software queue is especially beneficial on SMP systems because it removes the requirement to synchronize access to it from different CPUs/cores which is resource-intensive. Having the possibility to set «only-hardware-queue» requires support in an ethernet driver so it is available only for some ethernet interfaces mostly found on RouterBOARDs.

A «multi-queue-ethernet-default» can be beneficial on SMP systems with ethernet interfaces that have support for multiple transmit queues and have a Linux driver support for multiple transmit queues. By having one software queue for each hardware queue there might be less time spent on synchronizing access to them.

Improvement from only-hardware-queue and multi-queue-ethernet-default is present only when there is no «/queue tree» entry with a particular interface as a parent.

Kinds

Queue kinds are packet processing algorithms. Kind describe which packet will be transmitted next in the line. RouterOS supports the following Queueing kinds:

  • FIFO (BFIFO, PFIFO, MQ PFIFO)
  • RED
  • SFQ
  • PCQ

FIFO

These kinds are based on the FIFO algorithm (First-In-First-Out). The difference between PFIFO and BFIFO is that one is measured in packets and the other one in bytes. These queues use pfifo-limit and bfifo-limit parameters.

Every packet that cannot be enqueued (if the queue is full), is dropped. Large queue sizes can increase latency but utilize the channel better.

MQ-PFIFO is pfifo with support for multiple transmit queues. This queue is beneficial on SMP systems with ethernet interfaces that have support for multiple transmit queues and have a Linux driver support for multiple transmit queues (mostly on x86 platforms). This kind uses the mq-pfifo-limit parameter.

RED

Random Early Drop is a queuing mechanism that tries to avoid network congestion by controlling the average queue size. The average queue size is compared to two thresholds: a minimum (minth) and maximum (maxth) threshold. If the average queue size (avgq) is less than the minimum threshold, no packets are dropped. When the average queue size is greater than the maximum threshold, all incoming packets are dropped. But if the average queue size is between the minimum and maximum thresholds packets are randomly dropped with probability Pd where probability is exact a function of the average queue size: Pd = Pmax(avgq – minth)/ (maxth — minth). If the average queue grows, the probability of dropping incoming packets grows too. Pmax — ratio, which can adjust the packet discarding probability abruptness, (the simplest case Pmax can be equal to one. The 8.2 diagram shows the packet drop probability in the RED algorithm.

SFQ

Stochastic Fairness Queuing (SFQ) is ensured by hashing and round-robin algorithms. SFQ is called «Stochastic» because it does not really allocate a queue for each flow, it has an algorithm that divides traffic over a limited number of queues (1024) using a hashing algorithm.

Traffic flow may be uniquely identified by 4 options (src-address, dst-address, src-port, and dst-port), so these parameters are used by the SFQ hashing algorithm to classify packets into one of 1024 possible sub-streams. Then round-robin algorithm will start to distribute available bandwidth to all sub-streams, on each round giving sfq-allot bytes of traffic. The whole SFQ queue can contain 128 packets and there are 1024 sub-streams available. The 8.3 diagram shows the SFQ operation:

PCQ

PCQ algorithm is very simple — at first, it uses selected classifiers to distinguish one sub-stream from another, then applies individual FIFO queue size and limitation on every sub-stream, then groups all sub-streams together and applies global queue size and limitation.

PCQ parameters:

  • pcq-classifier (dst-address | dst-port | src-address | src-port; default: «») : selection of sub-stream identifiers
  • pcq-rate (number): maximal available data rate of each sub-steam
  • pcq-limit (number): queue size of single sub-stream (in KiB)
  • pcq-total-limit (number): maximum amount of queued data in all sub-streams (in KiB)

 It is possible to assign a speed limitation to sub-streams with the pcq-rate option. If «pcq-rate=0» sub-streams will divide available traffic equally.

For example, instead of having 100 queues with 1000kbps limitation for download, we can have one PCQ queue with 100 sub-streams

PCQ has burst implementation identical to Simple Queues and Queue Tree:

  • pcq-burst-rate (number): maximal upload/download data rate which can be reached while the burst for substream is allowed
  • pcq-burst-threshold (number): this is the value of burst on/off switch
  • pcq-burst-time (time): a period of time (in seconds) over which the average data rate is calculated. (This is NOT the time of actual burst)

PCQ also allows using different size IPv4 and IPv6 networks as sub-stream identifiers. Before it was locked to a single IP address. This is done mainly for IPv6 as customers from an ISP point of view will be represented by /64 network, but devices in customers network will be /128. PCQ can be used for both of these scenarios and more. PCQ parameters:

  • pcq-dst-address-mask (number): the size of the IPv4 network that will be used as a dst-address sub-stream identifier
  • pcq-src-address-mask (number): the size of the IPv4 network that will be used as an src-address sub-stream identifier
  • pcq-dst-address6-mask (number): the size of the IPV6 network that will be used as a dst-address sub-stream identifier
  • pcq-src-address6-mask (number): the size of the IPV6 network that will be used as an src-address sub-stream identifier

The following queue kinds CoDel, FQ-Codel, and CAKE available since RouterOS version 7.1beta3.

CoDel

CoDel (Controlled-Delay Active Queue Management) algorithm uses the local minimum queue as a measure of the persistent queue, similarly, it uses a minimum delay parameter as a measure of the standing queue delay. Queue size is calculated using packet residence time in the queue.

Properties

Property Description
codel-ce-threshold (default: )

Marks packets above a configured threshold with ECN.

codel-ecn (default: no)

An option is used to mark packets instead of dropping them.

codel-interval (default: 100ms)

Interval should be set on the order of the worst-case RTT through the bottleneck giving endpoints sufficient time to react.

codel-limit (default: 1000) Queue limit, when the limit is reached, incoming packets are dropped.
codel-target (default: 5ms)

Represents an acceptable minimum persistent queue delay.

FQ-Codel

CoDel — Fair Queuing (FQ) with Controlled Delay (CoDel) uses a randomly determined model to classify incoming packets into different flows and is used to provide a fair share of the bandwidth to all the flows using the queue. Each flow is managed using CoDel queuing discipline which internally uses a FIFO algorithm.

Properties

Property Description
fq-codel-ce-threshold (default: ) Marks packets above a configured threshold with ECN.
fq-codel-ecn (default: yes) An option is used to mark packets instead of dropping them.
fq-codel-flows (default: 1024)

A number of flows into which the incoming packets are classified.

fq-codel-interval (default: 100ms) Interval should be set on the order of the worst-case RTT through the bottleneck giving endpoints sufficient time to react.
fq-codel-limit (default: 10240) Queue limit, when the limit is reached, incoming packets are dropped.
fq-codel-memlimit (default: 32.0MiB)

A total number of bytes that can be queued in this FQ-CoDel instance. Will be enforced from the fq-codel-limit parameter.

fq-codel-quantum (default: 1514)

A number of bytes used as ‘deficit’ in the fair queuing algorithm. Default (1514 bytes) corresponds to the Ethernet MTU plus the hardware header length of 14 bytes.

fq-codel-target (default: 5ms) Represents an acceptable minimum persistent queue delay.

CAKE

CAKE — Common Applications Kept Enhanced (CAKE) implemented as a queue discipline (qdisc) for the Linux kernel uses COBALT (AQM algorithm combining Codel and BLUE) and a variant of DRR++ for flow isolation. In other words, Cake’s fundamental design goal is user-friendliness. All settings are optional; the default settings are chosen to be practical in most common deployments. In most cases, the configuration requires only a bandwidth parameter to get useful results,

Properties

Property Description
cake-ack-filter (default: none )
cake-atm (default: )

Compensates for ATM cell framing, which is normally found on ADSL links.

cake-autorate-ingress (yes/no, default: )

Automatic capacity estimation based on traffic arriving at this qdisc. This is most likely to be useful with cellular links, which tend to change quality randomly.  The Bandwidth Limit parameter can be used in conjunction to specify an initial estimate. The shaper will periodically be set to a bandwidth slightly below the estimated rate.  This estimator cannot estimate the bandwidth of links downstream of itself.

cake-bandwidth (default: ) Sets the shaper bandwidth.
cake-diffserv (default: diffserv3)

CAKE can divide traffic into «tins» based on the Diffserv field:

  • diffserv4 Provides a general-purpose Diffserv implementation with four tins: Bulk (CS1), 6.25% threshold, generally low priority. Best Effort (general), 100% threshold. Video (AF4x, AF3x, CS3, AF2x, CS2, TOS4, TOS1), 50% threshold. Voice (CS7, CS6, EF, VA, CS5, CS4), 25% threshold.

  • diffserv3 (default) Provides a simple, general-purpose Diffserv implementation with three tins: Bulk (CS1), 6.25% threshold, generally low priority. Best Effort (general), 100% threshold. Voice (CS7, CS6, EF, VA, TOS4), 25% threshold, reduced Codel interval.

cake-flowmode (dsthost/dual-dsthost/dual-srchost/flowblind/flows/hosts/srchost/triple-isolate, default: triple-isolate)
  • flowblind — Disables flow isolation; all traffic passes through a single queue for each tin.
  • srchost — Flows are defined only by source address. 
  • dsthost Flows are defined only by destination address. 
  • hosts — Flows are defined by source-destination host pairs. This is host isolation, rather than flow isolation.
  • flows — Flows are defined by the entire 5-tuple of source address, a destination address, transport protocol, source port,and destination port. This is the type of flow isolation performed by SFQ and fq_codel.
  • dual-srchost Flows are defined by the 5-tuple, and fairness is applied first over source addresses, then over individual flows. Good for use on egress traffic from a LAN to the internet, where it’ll prevent anyone LAN host from monopolizing the uplink, regardless of the number of flows they use.
  • dual-dsthost Flows are defined by the 5-tuple, and fairness is applied first over destination addresses, then over individual flows. Good for use on ingress traffic to a LAN from the internet, where it’ll prevent anyone LAN host from monopolizing the downlink, regardless of the number of flows they use.
  • triple-isolate — Flows are defined by the 5-tuple, and fairness is applied over source *and* destination addresses intelligently (ie. not merely by host-pairs), and also over individual flows.
  • nat Instructs Cake to perform a NAT lookup before applying flow- isolation rules, to determine the true addresses and port numbers of the packet, to improve fairness between hosts «inside» the NAT. This has no practical effect in «flowblind» or «flows» modes, or if NAT is performed on a different host.
  • nonat (default) The cake will not perform a NAT lookup. Flow isolation will be performed using the addresses and port numbers directly visible to the interface Cake is attached to.
cake-memlimit (default: )

Limit the memory consumed by Cake to LIMIT bytes. By default, the limit is calculated based on the bandwidth and RTT settings.

cake-mpu ( -64 … 256, default: )

Rounds each packet (including overhead) up to a minimum length BYTES. 

cake-nat (default: no)

Instructs Cake to perform a NAT lookup before applying a flow-isolation rule.

cake-overhead ( -64 … 256, default: )

Adds BYTES to the size of each packet. BYTES may be negative.

cake-overhead-scheme (default: )
cake-rtt (default: 100ms )

Manually specify an RTT. Default 100ms is suitable for most Internet traffic.

cake-rtt-scheme (datacentre/internet/interplanetary/lan/metro/none/oceanic/regional/satellite, default: )
  • datacentre — For extremely high-performance 10GigE+ networks only. Equivalent to RTT 100us.
  • lan — For pure Ethernet (not Wi-Fi) networks, at home or in the office. Don’t use this when shaping for an Internet access link. Equivalent to RTT 1ms.
  • metro — For traffic mostly within a single city. Equivalent to RTT 10ms. regional For traffic mostly within a European-sized country. Equivalent to RTT 30ms.
  • internet (default) This is suitable for most Internet traffic. Equivalent to RTT 100ms.
  • oceanic — For Internet traffic with generally above-average latency, such as that suffered by Australasian residents. Equivalent to RTT 300ms.
  • satellite — For traffic via geostationary satellites. Equivalent to RTT 1000ms.
  • interplanetary — So named because Jupiter is about 1 light-hour from Earth. Use this to (almost) completely disable AQM actions. Equivalent to RTT 3600s.
cake-wash (default: no )

Apply the wash option to clear all extra DiffServ (but not ECN bits), after priority queuing has taken place.

Interface Queue

Before sending data over an interface, it is processed by the queue. This sub-menu lists all available interfaces in RouterOS and allows to change queue type for a particular interface. The list is generated automatically.

[admin@MikroTik] > queue interface print
Columns: INTERFACE, QUEUE, ACTIVE-QUEUE
# INTERFACE QUEUE ACTIVE-QUEUE
0 ether1 only-hardware-queue only-hardware-queue
1 ether2 only-hardware-queue only-hardware-queue
2 ether3 only-hardware-queue only-hardware-queue
3 ether4 only-hardware-queue only-hardware-queue
4 ether5 only-hardware-queue only-hardware-queue
5 ether6 only-hardware-queue only-hardware-queue
6 ether7 only-hardware-queue only-hardware-queue
7 ether8 only-hardware-queue only-hardware-queue
8 ether9 only-hardware-queue only-hardware-queue
9 ether10 only-hardware-queue only-hardware-queue
10 sfp-sfpplus1 only-hardware-queue only-hardware-queue
11 wlan1 wireless-default wireless-default
12 wlan2 wireless-default wireless-default 

Queue load visualization in GUI

In Winbox and Webfig, a green, yellow, or red icon visualizes each Simple and Tree queue usage based on max-limit.

0% — 50% of max-limit used

50%  — 75% of max-limit used 

75% — 100% of max-limit used

В статье подробно описано, как настроить на Микротике ограничение скорости по отдельному ip или на целую сеть, ограничение на интерфейсе и физическом порту. А также настройка приоритета трафика (QoS), для sip, tv и других сервисов. Все настройки будут производиться через программу winbox.

Нужно разобраться с MikroTik, но не определились с чего начать? В курсе «Настройка оборудования MikroTik» все по порядку. Подойдет и для начала работы с этим оборудованием, и для того, чтобы систематизировать знания. Это видеокурс из 162 уроков и 45 лабораторных работ, построен на официальной программе MTCNA. Проходить можно, когда удобно и пересматривать по необходимости – материалы курса выдаются бессрочно. Также есть 30 дней на личные консультации с автором. На пробу выдают 25 уроков бесплатно, заказать их можно на странице курса.

Если у Вас версия RouterOS выше 6.29, то перед настройкой шейпера убедитесь. что в firewall отключен fasttrack, эта технология позволяет увеличить производительность маршрутизатора, но если она включена, то шейпить скорость не получится. Заходим в меню   на вкладке Filter Rules,  ищем правило fasttrack connection. Если такое правило существует, то отключаем или удаляем его.

Содержание

  1. Ограничение скорости интернета на всеip адреса в подсети.
  2. Ограничение на интерфейсе
  3. Ограничение скорости с помощью маркировки пакетов иQueues Treeна всю сеть
  4. Simple Queues
  5. Приоритезация трафика на Mikrotik

Ограничение скорости интернета на все ip адреса в подсети.

Предположим, провайдер предоставляет нам интернет канал 50 Мбит/сек. Стоит задача: для каждого пользователя ограничить канал до 5 Мбит/с.

Создадим  новый тип. Для этого заходим в меню Queue вкладка Queue Types. И нажимаем на кнопку «+» добавить.

Type Name – имя нового типа

Kind – тип, принимает следующие значения
bfifo – тип основанный на алгоритме First-In First-Out, Первый-пришел первый ушел, размер очереди определяется в байтах параметром queue size, если очередь переполнена, то остальные пакеты отбрасываются.
pfifoто же самое что и bfifo, только размер не в байтах, а в пакетах
mq pfifo тот же pfifo с поддержкой нескольких очередей
red — Random Early Drop — это механизм очередей, который пытается избежать перегрузки сети, контролируя средний размер очереди. Средний размер сравнивается с двумя порогами: минимальным (минимальным) и максимальным (максимальным) порогом. Если средний размер (avgq) меньше минимального порога, пакеты не отбрасываются. Когда средний размер очереди больше максимального порога, все входящие пакеты удаляются.
sfq — Stochastic Fairness Queuing (SFQ) обеспечивается хешированием и циклическими алгоритмами. Трафик может быть однозначно идентифицирован с помощью 4 параметров (src-адрес, dst-адрес, src-порт и dst-порт), поэтому эти параметры используются алгоритмом хэширования SFQ для классификации пакетов в один из 1024 возможных подпотоков. Затем алгоритм round-robin начнет распространять доступную пропускную

способность для всех подпотоков, причем каждый раунд дает байты трафика sfq-allot. Вся очередь SFQ может содержать 128 пакетов и доступно 1024 подпотока.
pcq – то же что sfq,  но с возможностью ограничить скорость потоков

Более подробно о типах можно прочитать здесь https://wiki.mikrotik.com/wiki/Manual:Queue#Kinds

Для ограничения ширины канала выбираем тип pcq, в поле Rate указываем значение скорости. В нашем случае 3M. Нам нужно ограничить 3 Мбит/c на вход и на выход, поэтому ставим галочки напротив Dst. Address и Src.Address. Если нам нужно не симметрично ограничить канал, скажем на загрузку 3Мбит/c, а на отдачу 5Мбит/c, то нужно создать два типа, на загрузку и на отдачу с соответствующими параметрами. Остальные поля оставляем как есть.

Остальные поля pcq типа

Limit — размер одного подпотока
Total limit — максимальное количество данных в во всех подпотоках
Burst Rate, Burst Threshold, Burst Time  — довольно интересные параметры, рассмотрим их более подробно.
Burst Rateдословно «взрыв скорости» если мы сделаем настройки как показаны на рисунке.

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

Следующим шагом применим наши созданные правила. Заходим на вкладку Simple Queues и добавляем очередь.

Name – имя нашей очереди

Target – цель. Здесь прописываем нашу подсеть

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

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

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

Для ограничения на порту зайдите на вкладку Interface Queue, выберите нужный интерфейс и примените к нему созданное выше правило.

В примере на порту eth6 будет применено ограничение в 3Мбит/с

Ограничение скорости с помощью маркировки пакетов и Queues Tree на всю сеть

Если нужно ограничить ширину канала на одну или несколько сетей, а также на отдельные ip адреса то этот можно сделать с помощью маркировки пакетов .

Заходим в меню IP-Firewall, вкладка Address Lists создаем новый адрес лист с нашей сетью.

Также в этот лист можно добавить и отдельные ip адреса, а не сеть, скажем если они идут не по порядку, допустим 192.168.7.11, 192.168.7.87, 192.168.7.199.

Далее переходим на вкладку Mangle , здесь добавляем два правила. На вкладке General, поле Chain выбираем forward

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

Идем на вкладку Action. Здесь в поле action выбираем маркировку пакетов mark packet и пишем как будем маркировать, например upload.

Аналогично создаем еще одно правило на download. Только уже будет Dst. Address List и маркировка download.

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

Теперь идем в меню Queues, вкладка Queues tree и добавляем правило.

Name – имя

Parent выбираем global

Packet Marks выбираем маркировку созданную ранее upload

Limit AT гарантированная скорость, т.е если у нас скажем общий канал 10 Мбит/c и мы создаем две очереди с максимальной шириной канала по 10 Мбит. То если вторая очередь заняла скажем канал на 8 Мбит, то нашей остается всего 2 Мбит, параметром Limit AT мы указываем, что гарантируем канал в 5 Мбит. т.е если в нашей очереди начнут интенсивно использовать интернет, то приоритет у нашей очереди увеличится, а у второй очереди уменьшится и скорость поделится по 5 Мбит

Max Limit максимальная скорость. Это и есть наше ограничение скорости.

Нажимаем ОК и аналогично создаем очередь на загрузку

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

Этот способ удобно использовать когда список сетей или адресов на ограничение часто меняется, тогда их просто можно добавлять или удалять в адресных листах. Если же адреса для ограничения меняются не часто, то удобнее использовать simple queus.

Simple Queues

Более простой способ ограничения скорости делается через вкладку Simple Queues. Заходим на эту вкладку нажимаем добавить

В поле name пишем имя в target нашу сеть. Max Limit ограничения на загрузку и на отдачу

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

Приоритезация трафика на Mikrotik

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

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

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

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

Комбинируя выше указные способы можно очень гибко настроить шейпинг скорости и приоритет трафика. Также надо отметить что настройки в Queue Tree имеют больший приоритет чем в simple Queues.

Обучающий курс по настройке MikroTik

Нужно разобраться с MikroTik, но не определились с чего начать? В курсе «Настройка оборудования MikroTik» все по порядку. Подойдет и для начала работы с этим оборудованием, и для того, чтобы систематизировать знания. Это видеокурс из 162 уроков и 45 лабораторных работ, построен на официальной программе MTCNA. Проходить можно, когда удобно и пересматривать по необходимости – материалы курса выдаются бессрочно. Также есть 30 дней на личные консультации с автором. На пробу выдают 25 уроков бесплатно, заказать их можно на странице курса.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Общая информация о QoS

Quality of Service — это общая производительность сети, особенно производительность которую видят пользователи.

Что такое и для чего нужно.
Например у нас есть доступ в интернет со скоростью 10 Mbit/s, и также у нас есть 3 компьютера в нашей сети которые подключены к нашему маршрутизатору.

Получается что общая производительность нашей локальной сети 300 Mbit, но при этом выход ‘наружу’ в интернет у нас всего лишь 10 Mbit. Вот в этом и заключается основная проблема. Проблема бутылочного горлышка.

Проблема в том что есть некоторые типы трафика которые к подобному бутылочному горлышку относятся негативно. Это чаще всего какой-то трафик реального времени, то есть realtime трафик(sip, rdp, видео конференц-связь).

Стандартная ситуация которую можно наблюдать это когда один из трех компьютеров качает например через торрент что-то и в этот момент остальные два пользователя нашей локальной сети страдают. Лагает Skype, тормоза rdp соединений, долго грузятся сайты…

QoS поможет тем или иным способом решить вопрос с тем чтобы неприоритетный трафик(torrent или другой паразитный тип трафика) не занимал всю полосу пропускания, а давал выход в первую очередь полезному для нас трафику(без потери пакетов).


Настройки QoS имеют два ограничения скорости:

  • CIR (Committed Information Rate) — (limit-AT в RouterOS) в худшем случае, поток будет получать этот объем трафика.
  • MIR (Maximal Information Rate) — (Max limit в RouterOS) — наилучший сценарий, скорость, с которой поток может справится, если у родителя очереди есть запасная полоса пропускания.

Также есть возможность указать приоритет. Работает только для дочерних очередей. 8 — самый низкий приоритет, 1 — самый высокий.

В MikroTik есть несколько подходов к реализации QoS

  • Simple Queues(простая очередь)
  • Queue Tree(дерево очередей)
  • Ограничение скорости на интерфейс

Simple Queues

Указываем границы скоростей
Для начала мы должны указать на роутере границы наших скоростей. Например от провайдера у нас приходит 10Мбит на приём и отдачу, эти границы и нужно задать роутеру.

Переходим к настройке очередей.

Создаем ‘родителя’.

Здесь указываем Name, в поле Target я выбрал свою подсеть, для которой будут действовать ограничения и приоритеты. Можно прописать вручную, например 192.168.0.0/24. В Dst указал свой WAN интерфейс. То есть правила будут работать для указанной нами подсети трафик которой будет идти через WAN порт. И также пропишем нашу скорость, которую мы получаем от провайдера. Для примера будет 10 Мбит.

Добавляем наши устройства.

Указываем Name, в поле Target — ip адрес устройства. Max Limit указываем 10 Мбит.

Переходим во вкладку Advanced

Здесь Limit At — это минимально гарантированная скорость, которую устройство получит в любом случае.

И обязательно в Parent выбрать нашего родителя.

Если одно из сетевых устройств не использует в какой-то определённый момент свой Limit At, то его скорость будет распределятся между другими устройствами согласно Max Limit и установленных приоритетов.

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

Только в поле Target указываем нашу подсеть, а не конкретный ip адрес.

Сумма всех Limit At на всех наших устройствах должна быть меньше или равна скорости получаемой от провайдера.

Также при необходимости во вкладке Advanced можно выбрать приоритет.

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

Маркировка трафика

Для примера я промаркирую весь VPN трафик, дам ему гарантированную скорость и укажу высокий приоритет.

По-правильному нужно сначала маркировать соединения, а уже потом все пакеты в нём.

Заходим в IP > Firewall > вкладка Mangle

Создаём новое правило.
Chain выбираем prerouting.
Protocoludp.
Dst. Port1194

Дальше во вкладке Action
Actionmark connection
New Connection Markvpn

Жмём OK.

Теперь маркируем трафик.
Добавляем новое правило.
Chainforward
Connection Markvpn

Во вкладке Advanced
Actionmark packet
New Packet Markvpn

Жмём OK.

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

Теперь возвращаемся к списку очередей и добавляем для vpn трафика.

Создаем новую очередь.

  • Namevpn
  • Target192.168.10.0/24 (я указал подсеть, а можно например конкретный ip адрес на котором будем vpn трафик)
  • Max Limit10M

Заходим в Advanced

  • Packet Marksvpn
  • Limit At1M (гарантированная скорость)
  • Priority1 (самый высокий приоритет)
  • ParentParent

По аналогии таким образом можно промаркировать и ограничить практически любой трафик(SSH, web и прочее)

И последним шагом будет передвинуть нашу очередь для vpn в самый верх списка.

Готово.

В четвёртой части из цикла статей по очередям на MikroTik я на практике покажу пример создания простых очередей.

Пример простых очередей

Для того чтобы работали простые очереди или деревья очередей нужно чтобы ваши лимиты были меньше чем лимиты выданные вам провайдером. Например, провайдер выдаёт мне 100 Мбит/с. Я с помощью сервиса speedtest несколько раз замерил скорость своего интернет соединения. И она оказалась от 85 Мбит/с до 95 Мбит/с. Чтобы точно не упереться в ограничение провайдера я себя буду ограничивать до 80 Мбит/с.

Для начала решим на какие типы трафика мы будем делить весь наш трафик. У себя я выделю следующее:

  • SIP трафик. IP-телефония потребляет очень мало трафика, но она чувствителен к потерям пакетов. Для выделения этого трафика я буду использовать порты 5060 и 10000-10200. Так как я сам обслуживаю сервер ip-телефонии, то я знаю какие порты у меня используются. А если у вас нет этой информации, то вы легко можете узнать её у вашего провайдера ip-телефонии. Техподдержка провайдера телефонии должна легко ответить на этот вопрос.
  • RDP трафик. По работе мне приходится подключаться к Windows серверам по протоколу RDP, поэтому выделю этот трафик тоже. По умолчанию RDP использует порт 3389, но этот порт часто меняется, поэтому вы должны использовать тот порт, который у вас используется для подключения.
  • WEB трафик. Здесь используются порты 80 и 443, а также можно указать порт 8080, который в своей работе использует сервис speedtest.
  • Весь остальной трафик. Все остальное также следует учесть, иначе оно обойдет наши приоритеты и забьёт наш канал. Сюда, например, будет попадать torrent.

Теперь нужно составить такую табличку:

Максимальный лимит Гарантированная скорость Приоритет
sip 80 Мбит/с 10 Мбит/с 1
rdp 80 Мбит/с 10 Мбит/с 2
web 80 Мбит/с 30 Мбит/с 3
all-ather 80 Мбит/с 10 Мбит/с 8
Таблица QOS

Всего мы гарантировано выделили 60 Мбит/с, а остальные 20 Мбит/с будут распределятся в зависимости надобности и по приоритетам. Вот например, понадобилось WEB еще 15 Мбит/с, он их получил и осталось свободных 5 Мбит/с. Затем, понадобилось RDP 10 Мбит/с, а осталось только 5 Мбит/с. Но у RDP приоритет выше чем у WEB, поэтому он 5 Мбит/с заберет от WEB и 5 Мбит/с из свободных. Надеюсь это понятно.

Создание родительской очереди

Simple Queue позволяет создавать деревья очередей, что я и буду делать. Итак, нажимаем на пункт меню «Queues» и переходим на вкладку «Simple Queues«. Затем нажимаем на знак «+» чтобы создать новое правило.

При создания нового правила на вкладке «General» укажем следующие настройки:

  • Во-первых очередь называем Parent, для этого правим параметр Name.
  • С помощью параметров Target и Dst мы задаём направление трафика. В Target нужно указать интерфейс или подсеть для источника трафика, я указал бридж для локальной сети. В Dst нужно указать интерфейс или подсеть, куда трафик направляется, здесь я указал интерфейс интернета. При таких настройках уходящий трафик в интернет это Upload, а скачиваемый трафик из интернета в локальную сеть это Download.
  • В параметр Max Limit для Upload и для Download я указал 80 Мбит/с. Так мы создали локальное ограничение, чтобы не попасть в ограничение провайдера.

Затем переходим на вкладку «Advanced«:

  • Поменяем тип очереди (Queue Type) на pcq-upload-default и pcq-download-default, для того чтобы трафик в очереди честно делился между всеми клиентами (компьютерами подключенными к маршрутизатору).
  • В параметре Parent оставляем none, так как эта очередь будет родительской для остальных.

Маркировка web, rdp и sip трафика

Здесь я буду использовать маркировку пакетов, чтобы выделить web трафик. Как вам известно web использует порты 80 и 443. А сервис speedtest использует порт 8080. Эти порты в итоге мы и будем использовать при маркировке трафика.

Для маркировки пакетов нужно перейти по меню «IP / Firewall» и в открывшемся окне «Firewall» открыть вкладку «Mangle«.

Лучше маркировать вначале коннект, а уже в рамках этого коннекта можно промаркировать пакеты. Это снизит нагрузку на процессор маршрутизатора.

Добавляем первое правило для маркировки web коннектов. На вкладке «General» укажите следующие настройки:

  • В параметре «Chain» выберите Forward (так как мы маркируем проходящий трафик).
  • В «Src.Address» я указываю свою локальную подсеть.
  • Выбираю протокол TCP и Dst.Port — 80, 443, 8080. То-есть все что идет из локальной сети на указанные порты я маркирую.

Чтобы указать как маркировать такой трафик переходим на вкладку «Action«:

  • В качестве действия (Action) выберите mark connection.
  • Придумайте имя марки — я назвал web.
  • Поставьте галочку «Passthrough«, чтобы маркированный трафик мог спуститься на нижние правила.

Теперь создадим второе правило, которое маркирует пакеты для web соединений:

  • Для параметра «Chain» выберите Forward.
  • В параметре «Connection Mark» выберите созданную ранее марку web.

Затем перейдите на вкладку «Action«:

  • В качестве действия (Action) выберите «mark packet«.
  • Придумайте имя марки — у меня web.
  • Снимите галочку «Passthrough«, чтобы помеченные пакеты не пере-маркировались более нижними правилами.

Попробуйте по аналогии промаркировать sip и rdp трафик. Для подсказки можете смотреть на этот скриншот:

Мы всегда используем Chain=Forward. Маркируя коннект в качестве источника указываем свою локальную подсеть и удаленные TCP или UDP порты (Dst. Port). А маркируя пакеты мы тоже используем Chain=Forward и марку коннекта. Также при маркировке коннектов нужно ставить галочку «Passthrough«, а при маркировке пакетов эту галочку нужно снимать.

Создание очереди для web, rdp и sip трафика

После того как мы промаркировали пакеты относящиеся к web трафику, пришло время создать новую очередь. В меню нажимаем «Queues» и в окне «Queue List» переходим на вкладку «Simple Queues«. Там уже есть одно правило для всего трафика. Создадим новое нажав на «+«.

На вкладке «General» укажем следующие настройки:

  • Имя для очереди (Name) я придумал — web.
  • С помощью параметров «Target» и «Dst» указал направление трафика — от локальной сети в интернет.
  • Максимальный лимит (Max Limit) сделал чуть меньше чем общее ограничение — 79МБит/с.

Затем переходим на вкладку Advanced:

  • В параметре «Packet Marks» выбираем нужную марку пакетов — web.
  • Указываем гарантированную скорость (Limit At) для web-трафика — 30 Мбит/с.
  • Дальше укажем приоритет (Priority) для этого трафика — 3.
  • Изменим тип очереди (Queue Type): pcq-upload-default и pcq-download-default.
  • В качестве родителя (Parent) укажем Parrent.

Получилось следующее: веб трафик гарантировано получит 30МБит/с, и может получить 79МБит/с если ему позволит приоритет и другие типы трафика.

По подобию попробуйте самостоятельно сделать еще две очереди для sip и rdp трафика. Вам всего лишь нужно выбрать правильные марки пакетов.

  • Для sip укажите Приоритет = 1, гарантированную скорость (Limit At) = 10 Мбит/с и максимальную скорость (Max Limit) = 79 Мбит/с.
  • Для rdp укажите Приоритет = 2, гарантированную скорость (Limit At) = 10 Мбит/с и максимальную скорость (Max Limit) = 79 Мбит/с.

Вот что у вас должно получиться после проделанного:

Создание очереди для всего остального

Весь остальной трафик нужно тоже поместить в очередь. Для такой очереди можно указать наименьший приоритет = 8. Для этого не обязательно маркировать пакеты, просто делаете такую очередь:

То-есть указываете направление трафика (Target и Dst), максимальную скорость (Max Limit), некоторую гарантированную скорость (Limit At) и минимальный приоритет = 8. Измените тип очередей (Queue Type) на pcq-upload-default и pcq-download-default. Ну и не забудьте указать родительскую очередь (Parrent).

Итог

В итоге имеем следующую картину:

Расставьте очереди в правильном порядке, вначале Parrent, затем в любом порядке sip, rdp, web и в самом конце разместите all. После чего нажмите на «#» над очередями и у вас получится дерево.

Общее ограничение 80 Мбит/с. Каждая очередь может разогнаться до 79 Мбит/с. При этом мы гарантируем:

  • 30 Мбит/с для web-трафика;
  • 10 Мбит/с для:
    • sip-трафика;
    • для rdp-трафика;
    • для всего остального.

Остальные 19 Мбит/с может получить любая очередь по необходимости и в зависимости от приоритета. То-есть более приоритетная очередь скорее отхватит кусок от этих 19 Мбит/с, конечно если ей это понадобится.

Не обязательно делать всё как у меня. Можете, например, для sip гарантировано выделить всего 2 Мбит/с, для всего остального выделить 1 Мбит/с. Тогда для распределения у вас останется намного больше пропускной способность (57 Мбит/с). Можете по другому расставлять приоритеты. Также можете создавать и другие очереди.


Другие статьи из этого цикла доступны по ссылкам:

  • MikroTik. Очереди в компьютерных сетях
  • MikroTik. Алгоритмы обслуживания очередей
  • MikroTik. Инструменты создания очередей
  • MikroTik. Пример создания простых очередей – эта статья
  • MikroTik. Пример создания дерева очередей

Сводка

MikroTik. Пример создания простых очередей

Имя статьи

MikroTik. Пример создания простых очередей

Описание

В четвёртой части из цикла статей по очередям на MikroTik я на практике покажу пример создания простых очередей

Другие наши интересноые статьи:

  • Настройка роутер wifi zyxel keenetic viva
  • Настройка принтера через вай фай роутер
  • Настройка родительского контроля на роутере ростелеком
  • Настройка роутер d link dir 320 nru билайн
  • Настройка прошивки dd wrt для роутера

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии