![]()
Маршрутизаторы MikroTik предоставляют гибкие возможности для настройки фильтрации и распределения трафика.
![]()
В первой части статьи будет рассмотрен один из механизмов QoS, реализованный в RouterOS, по управлению очередями и пропускной способностью, а именно Simple Queues.
- Введение
- Ограничение скорости интернета на все ip адреса в подсети.
- Ограничение на интерфейсе
- Ограничение скорости с помощью маркировки пакетов и Queues Tree на всю сеть
- Simple Queues
- Приоритезация трафика на Mikrotik
- Hierarchical token bucket (HTB)
- Действия при фильтрации пакетов
- MikroTik Simple Queues
- Особенности работы файрвола
- Настройка Queue Tree
- Практика Burst
- Принципы ограничения скорости
- Практика Simple Queues
- Заключение
Введение
«Сетевая безопасность бывает хай и нехай». Фраза, найденная в сети Интернет
С момента своего появления сеть Интернет многократно выросла. Также многократно увеличились такие показатели сети, как предоставляемые ресурсы, скорости обмена информацией, скорости подключения. Однако вместе с ростом полезных ресурсов, многократно выросли риски кражи информации, использования ресурсов не по назначению и другие опасности. Таким образом, каждый системный администратор ежедневно сталкивается с вопросами защиты обслуживаемых ресурсов.
Данная статья написана с целью описать функционал фильтрации трафика в операционной системе RouterOS, производства компании MikroTik.

![]()
Во второй части статьи рассматривается второй механизм QoS, реализованный в RouterOS Queue Tree. Представлен набор практических примеров из первой части статьи, выполненный средствами Queue Tree.
Вторым способом конфигурации QoS, после Simple Queues, является Queue Tree. Дерево очередей предназначено для построения иерархических систем распределения доступной пропускной способности.
В отличии от простых очередей, MikroTik Queue Tree применяют политики к однопоточному трафику, т.е. для ограничения пропускной способности в направлениях upload/download потребуется создать два правила. Второй отличительной особенностью является механизм проверки соответствия: если в простых правилах проверка на соответствие выполняется последовательно, то здесь трафик проходит через всё дерево, а применяемая к трафику политика определяется его маркировкой, поэтому использование Queue Tree без маркировки в Mangle невозможно.
На рисунках 4.1 и 4.2 представлена простая схема прохождения трафика и отдельно рассмотрены два блока — Input и Postrouting, т.к. применение политик дерева очередей выполняется в этих цепочках. Важно отметить, что применение политик RouterOS Queue Tree предшествует применению RouterOS Queues, поэтому при одновременном использовании этих инструментов нужно следить, чтобы проходящий трафик не соответствовал правилам в том и другом разделах, поскольку к нему применятся обе политики. Рекомендуется, при настройке маршрутизатора, использовать один из двух механизмов.


Рисунок 4.2 — Схема прохождения пакетов для цепочек Input и Postrouting в RouterOS
6.1 Параметры дерева очередей
Конфигурация дерева очередей выполняется в разделе /queue tree и представляет собой набор следующих параметров:
Довольно часто в практике использования маршрутизаторов Микротик возникает вопрос об ограничении пользователей по объему трафика, в какой-то определенный период времени. И если с лимитами по скоростям вопросов меньше и настройка проще, то вопрос с объемом часто ставит в тупик.
Непосредственно на сайте Mikrotik, есть замечательный и простой пример, который позволяет расширить ваши познания в области применения RouterOS и лишний раз демонстрирует гибкость, которую дает данная операционная система.
Итак, рассмотрим следующую ситуацию:
Прежде, чем переходить к решению поставленной задачи примем следующие условия:
В поле Name введем название нашего скрипта, например Traff_Limit_4Gb.
В поле Source введем следующий скрипт (скопируйте приведенный ниже код и вставьте его в поле Source):
для 192.168.15.35 (в поле Name введем название скрипта, Traff_Limit_4Gb_IP35):
для 192.168.15.67 (в поле Name введем название скрипта, Traff_Limit_4Gb_IP67):
В результате в списке должно появится три скрипта:
Теперь нам необходимо заставить наши скрипты выполнятся, в этом нам на помощь придет планировщик — Sheduler
Одним из способов управления качеством обслуживания в сети является внедрение механизмов QoS (quality of service — качество обслуживания). Использование MikroTik QoS позволяет повысить приоритет трафика одного типа над другим, ограничить полосу пропускания для разных типов трафика. Распространённым сценарием является использование комбинированных методик. В этом случае из общего трафика выделяются потоки в соответствии с заданными критериями и между ними распределяются ресурсы: потокам, для которых важно время обработки, выделяется приоритет в обслуживании, а потокам, для которых важна пропускная способность, выделяется большая гарантированная полоса. Штатные средства RouterOS позволяют выполнить распределение ресурсов между потоками трафика с помощью инструментов Simple Queues (простые очереди) и Queue Tree (дерево очередей).
Следует упомянуть, что конфигурация QoS выполняется на каждом устройстве, поэтому, должна быть распространена на все устройства локальной сети. Эффект от внедрения QoS будет ограничен локальной сетью, поскольку смежные сети, находящиеся под управлением других лиц, работают в соответствии со своими политиками, которые могут не совпадать с вашей.
К важным методам обеспечения качества обслуживания также следует отнести архитектуру построения сети и административные меры. В блок административных мер входит контроль за пользовательским трафиком, в допустимых рамках, и контроль за утилизацией каналов связи и аплинков.
В RouterOS существует несколько типов очередей, управление которыми выполняется в разделе /queue type. Пользователь может создавать свои типы очередей, однако за основу будет браться одна из существующих.
RouterOS поддерживает следующие типы очередей:
1.1 Очередь типа none
Очередь типа none подразумевает под собой использование только аппаратной очереди сетевого интерфейса, через который трафик будет отправлен. Данный тип очереди не позволяет выполнять дополнительные настройки по приоритизации трафика.
1.2 Очереди типа pfifo, bfifo, mq-pfifo
Алгоритм FIFO (first in — first out, первый пришёл — первый ушёл) заключается в том, что данные, попадающие в очередь первыми, будут первыми переданы на дальнейшую обработку. Такой подход не позволяет распределять между потоками данных временные ресурсы в соответствии с их приоритетом и применим, в первую очередь, в системах с невысокой утилизацией каналов передачи данных.
На рисунке 1.1 представлен механизм работы очереди типа FIFO: в очередь поступают пакеты трёх потоков данных. Пакет первого потока поступает в очередь первым и первым из неё выходит, первый пакет второго потока выходит вторым, пакет третьего потока — третьим и второй пакет второго потока — четвёртым.
Рисунок 1.1 — Принцип организации очередей FIFO
Разница между pfifo и bfifo заключается в том, что первый метод применяет алгоритм FIFO попакетно, а второй — побайтово. Очевидно, что данный тип очередей использует единый буфер хранения пакетов, определяемый параметром pfifo-limit и bfifo-limit.
Тип очереди mq-pfifo аналогичен pfifo с той лишь разницей, что использует несколько буферов хранения пакетов для каждого из потоков. Размер буфера определяется параметром mq-pfifo-limit.
В случае переполнения буфера, вновь пришедшие пакеты будут отброшены. Таким образом, размер очереди позволяет искать компромисс между высокой утилизацией канала (большой размер очереди) и низким уровнем задержки (малый размер очереди).
1.3 Очередь типа red
Центральным понятием для очередей типа RED (random early drop — случайное превентивное отбрасывание) является средний размер очереди. Пользователь устанавливает значения минимального и максимального порогов red-min-threshold и red-max-threshold и, в зависимости от положения среднего размера очереди относительно этих порогов, выполняется управление потоком данных:
1.4 Очередь типа sfq

Рисунок 1.2 — Принцип организации очередей SFQ
Очередь использует два параметра: sfq-allot — размер каждой из 1024 очередей в байтах, sfq-perturb — время, по истичении которого следует сменить хэширующий алгоритм.
Таким образом удаётся достичь равноправного распределения пропускной способности между всеми потоками данных. Однако у этого алгоритма есть недостаток: в случае, если какой-то из хостов будет оперировать множеством потоков данных, то получит приоритет трафика перед остальными, т.к. его трафик будет помещаться в различные очереди. В некоторых случаях этого можно избежать, выбрав параметры, участвующие в расчёте хэш-функции, но для этого потребуется сменить тип очереди на PCQ.
1.5 Очередь типа pcq
Очередь PCQ (per-connection queuing — распределение очередей по соединениям) является расширенным вариантом SFQ. Как уже было упомянуто, для PCQ можно выбрать параметры участвующие в расчёте хэш-функции (параметр pcq-classifier). Кроме того, можно задать размер каждой из подочередей через параметр pcq-limit.
Одним из преимуществ очередей типа PCQ является возможность гибкого управления доступной полосой для подочередей с помощью параметров pcq-rate и pcq-total-limit. Параметр pcq-rate устанавливает пороговую величину пропускной способности для каждой из подочередей, а pcq-total-limit – суммарный порог для всех подочередей. Полоса, указанная в параметре pcq-total-limit равномерно распределяется между всеми потоками, однако, пропускная способность потока не может превысить pcq-rate, даже если утилизация канала имеет запас. Если для очереди не установлены пороговые значения, то доступная полоса будет распределяться равномерно между подпотоками.
Наглядная демонстрация влияния размера очереди с иллюстрациями представлена в официальной документации — https://wiki.mikrotik.com/wiki/Manual:Queue_Size.
В статье подробно описано, как настроить на Микротике ограничение скорости по отдельному ip или на целую сеть, ограничение на интерфейсе и физическом порту. А также настройка приоритета трафика (QoS), для sip, tv и других сервисов. Все настройки будут производиться через программу winbox.
Нужно разобраться с MikroTik, но не определились с чего начать? В курсе «Настройка оборудования MikroTik» все по порядку. Подойдет и для начала работы с этим оборудованием, и для того, чтобы систематизировать знания. Это видеокурс из 162 уроков и 45 лабораторных работ, построен на официальной программе MTCNA. Проходить можно, когда удобно и пересматривать по необходимости – материалы курса выдаются бессрочно. Также есть 30 дней на личные консультации с автором. На пробу выдают 25 уроков бесплатно, заказать их можно на странице курса.
Если у Вас версия RouterOS выше 6.29, то перед настройкой шейпера убедитесь. что в firewall отключен fasttrack, эта технология позволяет увеличить производительность маршрутизатора, но если она включена, то шейпить скорость не получится. Заходим в меню на вкладке Filter Rules, ищем правило fasttrack connection. Если такое правило существует, то отключаем или удаляем его.

Ограничение скорости интернета на все 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 и добавляем правило.

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
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Hierarchical token bucket (HTB)
Организация очередей и их взаимосвязи в RouterOS выполнены с использованием логики алгоритма HTB (hierarchical token bucket — иерархическое распределение).
Основным достоинством HTB является возможность установки отношений между очередями и организация их в иерархическую структуру. Таким образом, между очередями могут быть установлены отношения «родительский-дочерний» с наследованием распределяемых ресурсов. В рамках алгоритма HTB выделяют понятия входящей очереди (inner queue) и конечной (leaf queue). Очередь, у которой есть хотя бы одна дочерняя очередь является входящей и она отвечает за распределение трафика, тогда как конечная, у которой нет дочерних, является потребителем трафика.
Для каждой из очередей могут быть заданы следующие параметры: CIR, MIR и приоритет. Приоритет будет использован только в том случае, если удовлетворены CIR для всех конечных очередей и осталась часть пропускной способности. Очередь обладающая большим приоритетом (8 — наименьший приоритет, 1 — наивысший приоритет) получит дополнительную пропускную способность в первую очередь. В случае, если приоритеты конечных очередей совпадают, пропускная способность сверх CIR будет распределяться между ними равномерно. Распределение доступной полосы сверх CIR будет выполнено только в случае, если для конечных очередей установлены значения приоритетов, при этом приоритет входящей очереди не берётся в расчёт.
При построении иерархии необходимо руководствоваться следующими принципами:
В официальной документации приведены несколько примеров распределения пропускной способности между очередями в соответствии с иерархией (https://wiki.mikrotik.com/wiki/Manual:HTB), разберём один из них (см. рисунок 3.1).

Рисунок 3.1 — Пример организации структуры очередей
Распределение пропускной способности будет выполняться в соответствии со следующим алгоритмом:
1. Очереди Queue03, Queue04, Queue05 резервируют по 2Мбит/с в соответствии со значениями CIR;
2. Очередь Queue02 резервирует 8 Мбит/с;
3. Поскольку Queue02 зарезервировала 8 Мбит/с из которых конечные очереди Queue04 и Queue05 суммарно потребляют 4 Мбит/с, то оставшиеся 4 Мбит/с должны быть распределены между ними. Для этого выполняется анализ установленных значений приоритетов и 4 Мбит/с выделяется очереди Queue04 (Queue04 более приоритетна, чем Queue05);
4. Распределена вся доступная полоса, установленная в качестве MIR для очереди Queue01: Queue03 получает 2 Мбит/с, Queue04 — 6 Мбит/с, Queue05 — 2 Мбит/с.
При работе с HTB следует руководствоваться следующим алгоритмом: на первом этапе необходимый трафик выделяется и маркируется, далее промаркированный трафик ассоциируется с одной из созданных очередей, и на последнем этапе очередь закрепляется за конкретным интерфейсом.
Действия при фильтрации пакетов
Действия задаются на закладке Action сформированного правила.
Разрешить прохождение пакета. Дальнейшие действия по фильтрации прекращаются, пакет передается на следующий этап обработки.
Добавить адрес назначения пакета в именованный список адресов (address list).
Добавить адрес источника пакета в именованный список адресов (address list).
Обратите внимание, что динамические списки адресов являются очень мощным инструментом. Так как мы можем учитывать списки адресов в правилах выбора пакета на закладке Advanced, фактически, таким образом мы можем динамически менять правила фильтрации трафика.
Удалить пакет. Пакет уничтожается и никуда дальше не передается.
Перейти на собственную цепочку (chain) обработки пакетов.
Опция – наименование цепочки.
Занести информацию о пакете в Log-файл маршрутизатора. При этом пакет будет передан на следующее правило. Данная опция часто используется при отладке.
Ничего не делать. Передать пакет на следующее правило. Однако при этом счетчики работают, показывая сколько пакетов соответствовало этому правилу. Обычно используется для статистики.
Запретить прохождение пакета и отправить отправляющему узлу ICMP-сообщение об ошибке.
Опция – вид сообщения.
Досрочно прервать обработку собственной цепочки (chain) и вернуться на следующее правило за правилом с Action=jump, которое передало пакет в эту цепочку.
Очень интересная опция. Может использоваться только с протоколом TCP. Суть в том, что маршрутизатор дает разрешение на создание соединения, при этом выставляя нулевое окно передачи (т.е. скорость соединения = 0). Позволяет «завесить» атакующий хост на этом соединении.
MikroTik Simple Queues
Как уже было упомянуто, одним из способов организации MikroTik QoS в RouterOS является настройка Simple Queues, конфигурация которого будет рассмотрена в этом разделе.
MikroTik Simple Queues является достаточно гибким инструментом, позволяющим быстро выполнить ограничение полосы для какого-то хоста, либо, используя комплексный подход, продумать структуру и выполнить конфигурацию для множества сетей и потоков данных.
Настройка простых очередей выглядит как набор правил и связанных с ними политик. Пакет, обрабатываемый блоком Simple Queues, последовательно проверяется на соответствие всем правилам до того момента, пока правило не сработает. После срабатывания, к пакету будут применены политики, определённые этой записью. Механизм проверки соответствия схож с механизмом в Filter, рассмотренным в другом цикле статей. Отсюда следует, что большое число правил приводит к росту нагрузки на аппаратные ресурсы маршрутизатора.
В простых правилах может быть использована маркировка пакетов, выполняемая в Mangle. На рисунке 4.1 представлена упрощённая схема прохождения пакетов в RouterOS. Обработка пакетов блоком Simple Queues выполняется на двух этапах: Input для входящих пакетов и Postrouting — для исходящих (см. рисунок 4.2). Важно отметить, что применение Simple Queues MikroTik является одним из последних этапов обработки, поэтому маркировка выполняется на любом из предшествующих ему этапов. Также, важно обратить внимание на то, что использование Fasttrack влияет на работу очередей, поэтому, в рамках демонстрационных примеров эта опция будет отключена.
4.1 Параметры Simple Queues
Конфигурация простых правил выполняется в разделе /queue simple и при создании правил можно настроить следующие параметры:
Важно понимать, что в случае, если не указан параметр «target», ограничение скорости будет применено к трафику дважды. Это происходит потому что в Packet Flow Diagram (см. рисунок 4.1) блок обработки простых правил присутствует дважды и устройство не сможет разделить upload- и download-потоки. В рамках статьи понятия upload/download тождественны uplink/downlink.
Особенности работы файрвола
Для базового понимания работы файрвола, необходимо ознакомиться с понятиями цепочки (chain), состояния соединения (connection state), условия и действия (action).
При фильтрации трафик, в зависимости от своего предназначения попадает в одну из цепочек (chain) обработки трафика. В фильтре предопределены три основные цепочки:
Таким образом мы видим, что для защиты самого маршрутизатора необходимо использовать цепочку input, а для защиты и фильтрации трафика между сетями необходимо использовать цепочку forward.
Кроме того, администратор имеет возможность создавать свои собственные цепочки обработки трафика, к которым можно обращаться из основных цепочек. Данная возможность будет рассмотрена в дальнейшем.
Состояние соединения (connection state)
Каждое из сетевых соединений MikroTik относит к одному из 4 состояний:
Исходя из вышеизложенного, мы видим, что хорошим вариантом настройки фильтрации пакетов будет следующий набор условий:
При прохождении пакета через фильтр, маршрутизатор последовательно проверяет соответствие пакета заданным условиям, начиная от правила, расположенного первым. и последовательно проверяя пакет на соответствие правилам номер два, три и так далее, пока не произойдет одно из двух событий:
Исходя из п.2, нельзя не отметить, что есть две стратегии построения фильтра пакетов:
Не могу сказать, что какая-то из стратегий является правильной, а какая-то неправильной. Обе стратегии имеют право на жизнь, но каждая — в определенных условиях.
Теперь подробнее распишем все варианты условий, на основании которых мы можем принимать решение о действии.
Обратите внимание, что перед частью полей можно поставить флаг восклицательного знака. Этот флаг будет обозначать отрицание. Например:
обозначает что адрес источника любой, кроме 192.168.0.0/24 . Также обратите внимание, что если поле не заполнено, оно должно быть серым. Если вы передумали заполнять поле, чтобы его исключить и сделать серым – нажмите стрелку «вверх», справа от поля.
На этой закладке собраны расширенные опции выбора пакета.
Эта закладка продолжает список расширенных опций, не поместившихся на закладку Advanced.
Как мы видим, в маршрутизаторе существует достаточно большое количество правил выбора пакетов, которые позволяют очень гибко и тонко настраивать работы с трафиком.
Теперь, когда мы поняли, на основании каких правил мы можем найти интересующий нас пакет, давайте посмотрим, что можно сделать после срабатывания правила.
Настройка Queue Tree
Повторим примеры, рассмотренные в разделе 5, выполнив конфигурацию с использованием дерева очередей. Начальную конфигурацию устройств и схему соединений оставим прежней (см. раздел 5).
7.1 Ограничение скорости для подсети
Выполним ограничение скорости для подсети 172.16.1.0/24 upload 10 Мбит/с, download 5 Мбит/с. Для этого в цепочке prerouting выполним маркировку пакетов, в качестве src- и dst-адресов которых используется необходимая подсеть, а после к пакетам с определённой маркировкой применим ограничения скорости.
На R1 и R2 запустим тестирование пропускной способности, предварительно добавив в конфигурацию R_queue следующие команды:



Рисунок 7.2 — Результат тестирования в направлении uplink
По рисункам видно, что, в соответствии с поставленной задачей, выполнено ограничение пропускной способности для подсети R1 до уровня ~10/~5 Мбит/с. В то же время пропускная способность трафика второй подсети ограничивается лишь возможностями порта.
7.2 Ограничение общей полосы по приоритетам
Повторим пример 5.2, выделив R1 пропускную способность 8Мбит/с, а R2 — 5 Мбит/с. При этом трафик R2 будет иметь больший приоритет, а пропускная способность канала ограничивается 10Мбит/с.



Рисунок 7.4 — Результат тестирования в направлении uplink
Результат повторился — оба потребителя получают по 5 Мбит/с. Отключим тест на R2.


Рисунок 7.6 — Результат тестирования в направлении uplink
Аналогично разделу 5.2, первый потребитель трафика получил пропускную способность, указанную в MIR — 8 Мбит/с.
7.3 Использование CIR и MIR при распределении пропускной способности
Повторим пример из раздела 5.3, указав для обоих потребителей CIR=2 Мбит/с, MIR=10 Мбит/с. Приоритеты сохраним равными предыдущему примеру.



Рисунок 7.8 — Результат тестирования в направлении uplink
Ожидаемо, первому потребителю выделена полоса 2 Мбит/с, в соответствии с указанным MIR, второму — оставшаяся полоса 8 Мбит/с.
Остановим тест на R2:


Рисунок 7.10 — Результат тестирования в направлении uplink
Как и ожидалось, первому потребителю будет выделена вся полоса в соответствии с его MIR — 10 Мбит/с.
7.4 Одновременное использование Queue Tree и Simple queues
Ранее было упомянуто, что, в соответствии со схемой прохождения трафика, пакет сначала обрабатывается в дереве очередей, а затем в простых очередях. Возьмём за основу предыдущий пример и смоделируем ситуацию, когда ошибочно для трафика R1 в простых очередях создано правило, ограничивающее трафик до 2 Мбит/с.
Запустим тест пропускной способности на R1, предварительно выполнив на R_queue следующую команду:

Рисунок 7.11 — Результат тестирования в направлении downlink и uplink
На рисунке видно, что пропускная способность R1 ограничена не MIR, как это было ранее, а политикой Simple queues — 2 Мбит/с.
Практика Burst
Продемонстрируем работу burst-режима. Для этого воспользуемся схемой на рисунке 5.1, которую использовали в других разделах, и применим к устройствам начальную конфигурацию. Создадим простое правило, в котором ограничим скорость для R1 до 5 Мбит/с и установим возможность её увеличения до 10 Мбит/с, если burst-режим активирован.

Величина burst-time выбрана намерена большой в целях демонстрации. Запустим тест пропускной способности на R1:

Рисунок 8.1 — Результаты тестирования burst-режима
На рисунке видно, что на первых этапах выделенная пропускная способность превосходила MIR в ~2 раза, т.е. была равна 10 Мбит/с. После чего, burst-режим был отключен и пропускная способность снизилась до 5 Мбит/с.
Принципы ограничения скорости
Поток данных проходящий через интерфейс, независимо от того входящий или исходящий, может быть обработан двумя способами: ограничение и выравнивание (см. рисунок 2.1).

Рисунок 2.1 — Принцип ограничения и выравнивания трафика
Ограничение трафика подразумевает, что весь трафик свыше заданного ограничения будет отброшен. Этот механизм представлен на рисунке 2.1а — данные, превосходящие порог отбрасываются. Такой тип ограничения скорости уместен для трафика, который чувствителен к задержкам: поскольку данные не хранятся в буфере, а передаются далее либо отбрасываются.
Выравнивание предполагает наличие буфера данных, через который проходят все пакеты в рамках потока данных. В случае, если поток превышает заданные ограничения, то пакеты сохраняются в буфере до того момента, пока не будет возможности их передать далее. Такой механизм представлен на рисунке 2.1б — трафик выше порога не отбрасывается, а сохраняется в буфере и передаётся далее с задержкой. Если поток достиг заданного ограничения и буфер полностью заполнен, входящие пакеты будут отброшены. Такой подход используется для типов трафика нечувствительного к задержкам. Кроме того, подобный механизм выравнивает утилизацию каналов связи, выравнивая поток передачи данных.
Исходя из этого, применяют два понятия, связанных с ограничением скорости: CIR и MIR. C IR (committed information rate — гарантированная скорость) — скорость, которая выделяется очереди в самом худшем случае, но гарантированно. M IR (maximum information rate — максимальная скорость) — скорость, которая выделяется очереди в лучшем случае, если эта полоса не используется другими очередями.
В синтаксисе RouterOS CIR обозначается как limit-at, а MIR — max-limit.
2.1 Использование Burst
Помимо механизмов ограничения скорости через CIR и MIR, в RouterOS существует возможность кратковременного увеличения полосы пропускания для очереди, называемая burst (импульс, взрыв).
Работа в режиме burst определяется тремя параметрами, значения которых устанавливает пользователь:
Результатом использования режима burst является значение текущей скорости передачи данных (actual-rate), выделяемая потоку данных.
Рассмотрим пример, в котором пользователь выполняет загрузку двух файлов, размер каждого из файлов 4 Мбайт (32 Мбит) (см. рисунок 2.2). Загрузка первого файла начинается на нулевой секунду, второго – на семнадцатой. На сетевом устройстве пользователя выполнена следующая конфигурация:

Рисунок 2.2 — Демонстрация работы burst-режима
По оси асбцисс отложены временные отрезки, а по оси ординат — пропускная способность. Проанализируем выделенную пользователю полосу канала поэтапно:
Таким образом, применение burst оказывается полезным для повышения кратковременной скорости, например при открытии веб-страниц, и повышает лояльность пользователей. Однако, для правильной работы burst, необходимо продумать его конфигурацию и иметь запас пропускной способности.
Практика Simple Queues
Для демонстрации настройки простых очередей рассмотрим пример на рисунке 5.1. Каждое из устройств на схеме является маршрутизатором, функционирующем на RouterOS. R1 и R2 являются потребителями трафика – на них будет запущен bandwidth-test по направлению к BT_server. На маршрутизаторе R_queue будет выполнена настройка простых очередей.
Рисунок 5.1 — Схема сети для рассмотрения практических примеров
Начальная конфигурация устройств:


5.1 Ограничение скорости для подсети
Выполним ограничение скорости для подсети 172.16.1.0/24 upload 10 Мбит/с, download 5 Мбит/с. Для этого на R_queue выполним команду /queue simple add target=172.16.1.0/24 max-limit=10M/5M, а на R1 и R2 запустим тестирование пропускной способности.


Рисунок 5.3 — Результаты тестирования в направлении uplink
На рисунках 5.2 и 5.3 видно, что трафик потребителя R1 ограничен, в соответствии с задачей, ~10Мбит/~5Мбит, тогда как пропускная способность R2 ограничивается физическими возможностями порта.
5.2 Распределение общей полосы по приоритетам
В примере 5.1 был рассмотрен простейший способ ограничения скорости для определённой подсети. Такая реализация может быть использована в небольших сетях, либо как временное решение. На практике чаще пропускная способность канала должна быть разделена между несколькими потребителями в разных пропорциях.
Для этого создадим иерархию простых очередей: родительская очередь ограничена 10 Мбит/с, а дочерние — 8 и 5 Мбит/с соответственно, причём имеют разные приоритеты. Важно отметить, что target родительской очереди должен соответствовать target всех дочерних.



Рисунок 5.5 — Результаты тестирования в направлении uplink
Пропускная способность канала распределяется в соответствии с приоритетами — сначала 5 Мбит/с выделяется R2, а потом оставшаяся полоса — R1. R2 не получает всю пропускную способность канала связи, т.к. выставлено ограничение max-limit=5M. При этом, если остановить потребление трафика на R2, R1 получит пропускную способность в соответствии с ограничениями — 8 Мбит/с:


Рисунок 5.7 — Результаты тестирования в направлении uplink
5.3 Использование CIR и MIR при распределении пропускной способности
Недостатком решения, рассмотренного в примере 5.2, является то, что при отсутствии одного из потребителей, часть пропускной способности не используется, даже, если в ней есть потребность со стороны активного потребителя трафика. Так, например, при отсутствии трафика R1, R2 сможет использовать только 5 Мбит/с.
Решим эту задачу, задав значения CIR и MIR. Для обоих потребителей установим MIR равным 10 Мбит/с, а CIR — 2 Мбит/с. Приоритеты останутся теми же: приоритизация трафика второго потребителя будет выше.



Рисунок 5.9 — Результаты тестирования в направлении uplink
Сначала пропускная способность распределяется в соответствии с CIR — по 2 Мбит/с, а затем, т.к. приоритет R2 выше, чем у R1, оставшаяся часть полосы канала предоставляется R2: 10Мбит — 2 Мбит -2 Мбит = 6 Мбит, т.е. итоговая пропускная способность R2 – 8 Мбит/с (2 Мбит/с от CIR + 6 Мбит/с при приоритетном распределении полосы канала). При этом, если отключить R2, то R1 начинает утилизировать всю доступную полосу:



Рисунок 5.11 — Результаты тестирования в направлении uplink
Заключение
Во второй части статьи рассматривается реализация дерева очередей в RouterOS для набора задач, рассмотренных в первой части статьи. Кроме того, добавлена демонстрация совместного использования Simple Queues и Queue Tree, а также Burst-режима.
Как можно было заметить, простые очереди и дерево очередей решают схожие задачи, однако рекомендациями от опытных сетевых инженеров является использование Simple Queues в небольших сетях или в качестве временных решений. Крупные сети и сети операторов связи, подразумевающие более строгий и системный подход к разграничению трафика требуют построения структуры очередей, а значит конфигурации Queue Tree.
В этой части мы разобрались с основными опциями файрвола. Обратите внимание, что условия выбора пакетов одинаковы для всего файрвола и будут нам требоваться в дальнейшем при изучении NAT и расширенной обработки трафика (Mangle). А вот названия цепочек и действия там будут совершенно другими.
Технический директор Илья Князев
В первой части статьи представлены принципы организации очередей и их типы в RouterOS. Также рассмотрен инструмент Simple Queues с демонстрацией базовых примеров ограничения скорости. Также, в рамках практических примеров, рассматриваются примеры построения структуры очередей на основе отношений «родительский-дочерний».

