Делим Интернет или QoS на Mikrotik
Принцип деления окружает нас повсеместно. Это касается практически каждой сферы нашей жизни. Как правило, речь идет о делении в равных пропорциях, что вполне логично.
Современные информационные технологии, которые отвечают за передачу больших массивов информации, работают по этому же принципу. Алгоритмы деления не позволяют устройствам взять больше отведенного.
Естественно, что речь мы ведем именно об интернете. Именно он за последние лет 15 стал неотъемлемой частью жизни большинства жителей планеты. В статье мы расскажем, как эффективно организовать деление интернет канала (укажем основные настройки для системных администраторов) за счет использования современной операционной системы RouterOS Mikrotik.
Сперва теория
Практика – очень важно, но без знания теоретических основ будет максимально сложно реализовать задуманное. Сперва рассмотрим список ключевых понятий, которые просто необходимы для решения вопроса шейпинга – технологии, которая способна эффективно ограничивать скорость и качество доступа в интернет.
Шейпер – алгоритм управления очередностью представленных пакетов, которые позволит отсеить все те пакеты, не подходящие под конкретно оговоренные условия.
Schedulers – алгоритм, управляющий движением пакета внутри непосредственно шейпера. Формирует приоритетную очередность пакетов, учитывая адреса источника и ряд других важных параметров. К таким алгоритмам полностью относятся:
- SFQ;
- PFIFO;
- PCQ;
- RED.
Подочередь – сформированная очередь пакетов, которая была выстроена по заранее выбранному алгоритму.
Queuing discipline (qdisc – дисциплина очереди) – данный алгоритм позволяет «захватить» конкретные пакеты, а также определить порядок их следования/передвижения.
HTB
Основой шейпинга в Mikrotik служит HTB – дисциплина очереди, которая реализована во многих Linux-системах. Важно изучить ее, чтобы умело управляться с данным алгоритмом.
В Linux-системах сравнительно давно был реализован алгоритм НТВ, который определяет дисциплину очереди в Mikrotik.
Основные возможности управления трафиком в Mikrotik следующие:
- Возможность ограничения скорости за счет специально включенного алгоритма, способного учитывать несколько важных параметров: порт, время суток, подсети, IP-адрес и т.д.
- Применение пиковых скоростей.
- Возможность разделения предоставляемого P2P-трафика между несколькими пользователями в равных или программно заданных пропорциях.
- Обеспечение гарантированной скорости интернета.
- Выставление приоритетов одних пакетов над другими.
В дисциплине HTB ключевым понятием является класс (правило). Схематический пример иерархии классов представлен на изображении ниже. В данном случае из файервола (Filter) поступают пакеты с данными, которые распределяются в локальные очереди (Self Feed) или отправляются в очереди родительских классов (Inner Feed), что зависит от приоритета, загрузки канала и параметров классов. Отметим, что обычно на нулевом уровне иерархии находятся классы , не имеющие дочерних правил, их можно назвать клиентами. Именно такими классами в первую очередь захватывается трафик, которые затем передается родительским классам. У двух или более классов с одним прямым родителем одинаковый уровень и подсоединение к одной локальной выходной очереди.
Структура НТВ (схематично)
У каждого из классов могут быть следующие параметры:
limit-at – гарантированная скорость;
max-limit – ограничение скорости;
priority – приоритет класса.
Также у них есть три разных состояния.
Зеленый, при котором верхней границей для пропускной способности правила является параметр limit-at и движение пакетов осуществляется согласно приоритетам сразу в выходной поток своего уровня, без движения вверх по иерархии.
Желтый, при котором у пропускной способности правила значение превышает limit-at, но находится ниже уровня max-limit. В данном случае выполняется отключение правила от выходного потока его уровня с подключением к родительскому классу.
Красный, при котором идет превышение значения пропускной способности правила в сравнении с параметром max-limit и отключение правила от родительского класса с подключением к локальной очереди.
Есть в Mikrotik еще и два типа правил, которые разнесены на различные закладки в утилите Winbox, позволяющей настраивать конфигурацию операционной системы из под Windows – Simple Queues и Queue Trees.
Про эти правила пойдет речь чуть позже, а сейчас приведем примеры работы НТВ с созданием нескольких правил.
[admin@MikroTik] queue tree> add name=ClassA parent=Local max-limit=2048000
3 name=Leaf2 parent=ClassB packet-mark=packet_mark2 limit-at=256000
4 name=Leaf3 parent=ClassB packet-mark=packet_mark3 limit-at=768000 |
1. В первом случае передача данных клиентами 1 и 2 осуществляется с меньшей скоростью, чем значение параметра limit-at, а клиент 3 не работает. В этом случае пакеты с данными от клиентов 1 и 2 выстраиваются в локальную очередь по своим приоритетам, не передавая данные в родительские классы.
2. В данном случае при передаче данных клиентом leaf2 данные передаются с высшей скоростью в сравнении с limit-at, нос меньшей скоростью в сравнении с max-limit в его параметрах и меньше, чем параметр limit-at для родительского класса ClassB. У leaf1 передача данных осуществляется на скорости не выше собственного limit-at. В данной ситуации у leaf1 больший приоритет в сравнении с leaf2, несмотря на указание большего приоритета для последнего в параметрах. Дело в том, что при передаче данных с превышающей limit-at скоростью клиент 2 подключается к родительскому классу с приоритетом 8. В то же время действует правило, согласно которому приоритет пакетов на нижних уровнях при одинаковых условиях выше, чем на верхних.
3. В данном случае есть превышение скорости передачи данных клиента 1 в сравнении с допустимым max-limit, а у клиента 2 данные передаются со скоростью в диапазоне больше limit-at и меньше max-limit. У третьего клиента скорость передачи данных ниже значения limit-at. В такой ситуации получается, что ClassA перегружается данными от первого клиента, из-за чего у ClassB нет разрешения на передачу и работоспособным остается только третий клиент, который подключается к локальной очереди на нулевом уровне.
4. Возможен и такой вариант, когда данные одновременно передаются клиентами leaf1, leaf2, leaf3, ClassB становится желтым, а ClassA – зеленым. В такой ситуации первым в очереди на втором уровне по праву наибольшего приоритета становится leaf2. Для клиентов 1 и 3 при этом устанавливается случайный выбор, определяющий порядок следования.
Гибкость и универсальность алгоритма работы НТВ позволяют создавать на его основе любые иерархии правил с точным разграничением и управлением потоками данных.
Bursts
Не редки ситуации, когда требуется выдача пиковой скорости клиенту на заданный временной интервал. Либо необходимо с максимальной скоростью осуществлять отправку запросов и принимать данные. В таких случаях требуется защитить остальных пользователей от проблем в работе интернета, для чего в Mikrotik есть все необходимые инструменты.
burst-limit – параметр, задающий скорость, доступную сразу при подключении.
burst-threshold – показывает среднюю скорость за последние burst-time секунд;
burst-time – время, необходимое для подсчета burst-threshold.
С этими параметрами и, используя limit-at с max-limit, можно задать правила для выдачи клиенту максимальной скорости. Например, установим limit-at=128000/128000, max-limit=256000/256000, burst-limit=512000/512000, burst-treshold=192000/192000, burst-time=8 и понаблюдаем за графиком загрузки канала от одного клиента, который характерен для случаев с закачкой больших файлов по протоколу http.
После первой секунды показатель средней загрузки канала равен (0+0+0+0+0+0+0+512)/8=64 kbps, что не превышает параметр burst-threshold. После второй секунды средняя скорость будет равна (0+0+0+0+0+0+512+512)/8=128kbps. После третьей секунды показатель средней скорости уже выше burst-threshold, и она резко падает до max-limit, удерживаясь на этом уровне до достижения меньшего значения средней скорости загрузки канала в сравнении с параметром burst-threshold. Как только это произойдет, burst снова выдается скорость.
Schedulers
Алгоритмы Schedulers обычно используются вместе с шейперами, но они так же могут обладать функциями ограничения скорости. По сути, Scheduler является предшественником шейпера, предоставляя ему уже подготовленную очередь из пакетов с заданием соответствующих ограничений.
PFIFO/BFIFO
Packet/Bytes (FIFO) – основанный на принципе первенства (первый пришел – первый ушел) алгоритм. Для его конфигурирования используется только один параметр pfifo-limit (bfifo-limit), указывающий на количество байт, допустимых для хранения в выходном буфере. Если пакеты в буфер не попали, они разрушаются. Ниже приведена графическая схема работы данного алгоритма.
SFQ
SFQ (Stochastic Fairness Queuing) – алгоритм для предоставления всем TCP/UDP-подключениям одинаковой возможность по передаче данных. Данный алгоритм применим для случаев с сильной загрузкой канала, когда необходимо предоставить приложениям одинаковые возможности по передаче данных. Но на практике он почти не используется, поэтому не будет рассматривать его подробно.
Есть еще и частный случай SFQ в виде алгоритма PCQ (Per Connection Queuing), который отвечает за формирование потоков в подочереди по заданным правилам. В теории, такой алгоритм мог бы равномерно распределять скорость между участниками, независимо от числа открытых подключений, разделяя пропускную способность в равных пропорциях между классами или клиентами, что дает возможность организации динамического шейпинга. Но эффективная реализация такого алгоритма именно с точки зрения динамического шейпинга пока еще не была придумана. Тем не менее, благодаря PCQ можно с помощью всего пары правил разделить в равных пропорциях и входящий, и исходящий канал.
RED (Random Early Detection) – алгоритм, предназначенный для выравнивания пропускной способности и сглаживания скачков с контролем среднего размера очереди. При достижении размера очереди значения red-min-threshold происходит удаление случайно выбранного пакета. Чем больше средний размер очереди, тем больше будет случайно удаленных пакетов. При достижении значения red-max-threshold происходит удаление всех пакетов. Такой алгоритм используется редко, а при UDP-трафике его применение крайне нежелательно, так как данные при передаче могут не доходить до адресата.
Практическое применение
Теоретическое введение закончено, теперь давайте перейдем к практике.
Для начала остановимся на особом типе очередей Queue Trees, с помощью которого можно выстраивать иерархию правил и управлять пакетами на самом низком уровне.
Рассмотрим основные элементы управления в Queue Trees:
burst-limit (целое) – параметр, отвечающий за максимальную burst-скорость;
burst-threshold (целое) – отвечающий за среднюю загрузка канала параметр, при котором разрешается выдавать burst-limit;
burst-time (время) – используемый для подсчета средней загрузки канала элемент;
flow (text) – поток, маркированный в /ip firewall mangle;
limit-at (целое) – значение гарантированной скорости;
max-limit (целое) – показатель максимальной скорости;
name (text) – имя очереди;
parent (text) – родитель в иерархии классов HTB;
priority (целое: 1..8) – приоритет очереди;
queue (text) – тип очереди. Задается в /queue type.
Примеры.
I. Создадим правило, по которому клиенты локальной или виртуальной сети подключаются к условному сайту www.test.ru с максимальной скоростью и минимальным временем отклика, при этом скорость делится между ними в равной мере.
1. Сначала помечаются все пакеты, идущие от пользователей на условный адрес сайта 11.222.33.44 и обратно, для чего необходимо создание 4 правил. Два из них будут помечать прямые и обратные подключения, а еще два будут помечать непосредственно пакеты в данных подключениях. Важно помнить, что очереди выстраиваются именно из пакетов, а не работают с помеченными подключениями. Поэтому, чтобы все заработало, правила должны выглядеть следующим образом:
/ip firewall mangle add chain=forward src-address=192.168.11.0/24 dst-address=11.222.33.44/32 action=mark-connection new-connection-mark=users-con-up
/ip firewall mangle add connection-mark=users-con-up action=mark-packet
/ip firewall mangle add connection-mark=users-con-down action=mark-packet |
2. Затем создается два типа PCQ очередей, с классификацией по входящему и исходящему адресу:
/queue type add name=pcq-download kind=pcq pcq-classifier=dst-address |
3. После этого создаются очереди, отвечающие за входящий и исходящий трафик:
/queue tree add name=Download parent=Local max-limit=10240000 burst-limit=200000 burst-time=10 |
Из примера видно, что всего нескольких правил хватило для реализации столь сложной задачи, как динамический шейпинг для определенных адресов, которым предоставляется пиковая скорость. В большинстве случаев, на практике все происходит сложнее с большим числом сочетающихся между собой правил.
В Queue Trees, фактически, все действия выстраиваются на ограничении скорости, а адреса источников, порты, протоколы и другие параметры заносятся в раздел Mangle-фаервола. Этот способ позволяет обеспечить хороший пинг на определенные адреса даже в тех случаях, когда есть серьезная загрузка канала.
Приведем пример таких правил для условного сервера www.ptimer.ru.
В Firewall необходимо прописать четыре правила, в первом из которых именем primer-connection-up помечаются все подключения с адресом получателя 111.333.22.44. Второе правило помечает пакеты в подключениях primer-connection-up именем primer-packet.up. Также пометим все подключения с адресом источника 111.333.22.44 именем primer-connection-from и пакеты в этих подключениях именем primer-packet-from.
/ip firewall mangle add chain=prerouting dst-address=111.333.22.44 action=mark-connection new-connection-mark= primer-connection-up passthrough=yes/ip firewall mangle add chain=forward connection-mark= primer-connection-up action=mark-packet new-packet-mark= primer-packet-up passthrough=yes
/ip firewall mangle add chain=forward connection-mark= primer-connection-from action=mark-packet new-packet-mark= primer-packet-from passthrough=yes |
Затем создается два правила в Queue Trees для входящего и исходящего потоков
/queue tree add name=queue1 parent=global-out packet-mark= primer-packet limit-at=0 |
Благодаря таким правилам приходящие и уходящие с адреса 111.333.22.44 пакеты направляются в приоритетные очереди и всегда имеют гарантированную скорость 50 Kbit/s. С помощью такой схемы, например, можно установить фиксированную гарантированную скорость для онлайн-игр, распределив пропускную способность в равной мере между всеми участниками сети.
Simple Queues
Очереди Simple Queues являются упрощенными, так как при их использовании не требуется применение помеченных пакетов из Firewall. Но и высокая гибкость в настройках теряется. Основными параметрами для создания правил здесь выступают адреса источника и получателя.
Можно выделить список основных возможностей простых очередей.
· Возможность работы с Р2Р-трафиком.
· Использование очередей для определенных временных интервалов.
· Возможность задавать приоритеты потокам.
· Использование в виде параметров нескольких цепочек пакетов, отмеченных в /ip firewall mangle.
· Создание одного правила для исходящего и входящего потока.
Также в Simple Queues можно указывать параметр Parent, что позволяет строить иерархию классов почти такую же, как и в Queue Trees. Разница в том, что здесь используются адреса, а не пакеты и потоки. При этом Simple Queues всегда были и остаются частным случаем Queue Trees. А значит, при создании новых правил в простых очередях, следует проверять наличие подобных правил с теми же портами, адресами или другими параметрами в Queue Trees. При сходстве правил приоритет остается за Queue Trees и простые очереди не работают.
Когда вы приступаете к созданию правил в Simple Queues, помните, что есть исходящий и входящий трафик для клиентов, роутера и провайдера. Приведем схематически на рисунке направление потоков трафика от провайдера к роутеру, от роутера к клиенту и в обратную сторону. Получается, что исходящий трафик клиента является входящим для роутера и наоборот.
Ниже представлен список параметров для конфигурации простых очередей в Mikrototik:
burst-limit (целое) – максимальная burst-скорость;
burst-threshold (целое) – средняя загрузка канала при которой разрешено выдать burst-limit;
burst-time (время) – используется для подсчета средней загрузки канала;
dst-address (IP адрес/маска) – адрес назначения;
dst-netmask (netmask) – маска подсети для dst-address;
interface (text) – интерфейс, для которого предназначается правило;
limit-at (целое/целое) – гарантированный канал;
max-limit (целое/целое) – максимальная величина канала;
name (text) – имя правила;
p2p (any | all-p2p | bit-torrent | blubster | direct-connect | edonkey | fasttrack | gnutella | soulseek | winmx) – тип P2P-трафика;
packet-marks (name; по умолчанию: «») – цепочка пакетов, промаркированных в /ip firewall mangle;
parent (name) – имя родительской очереди;
priority (целое: 1..8) – приоритет. 1- больший, 8-самый маленький;
queue (name/name; default: default/default) – имя очереди из /queue type;
target-addresses (IP address/netmask) – исходный адрес;
time (time-time,sat | fri | thu | wed | tue | mon | sun{+}; по умолчанию: «») – применить очередь к временному интервалу;
total-burst-limit (целое) – максимальная burst скорость в очереди global-total;• total-burst-threshold (целое) – средняя скорость в очереди global-total;
total-burst-time (time) – используется для подсчета средней загрузки канала в очереди global-total;
total-limit-at (целое) – гарантированная скорость в очереди global-total (входящий+исходящий каналы);
total-max-limit (целое) – максимальная скорость передачи данных в очереди global-total.
Отметим, что наличие возможности управлять входящим и исходящим трафиком позволяет клиентам максимально эффективно использовать канал.
Примеры
Представим канал для клиента со скоростью 128/64 kbit/s, при гарантированной скорости 64/32 kbit/s в будние дни. А также канал со скоростью 512/256 kbit/s с гарантированной скоростью 128/128 kbit/s в выходные.
Результатом нашей работы будет два правила:
/queue simple add target-addresses=192.168.11.1/32 limit-at=64000/32000 max-limit=128000/64000 time=00:00:00-00:00:00,mon,tue,wed,thu,fri/queue simple add target-addresses=192.168.11.1/32 limit-at=128000/128000 max-limit=512000/256000 time=00:00:00-00:00:00,sat,sun |
В паре 32000/32000 первая цифра отвечает за входящий канал для клиента, а вторая за исходящий. Если хотите обеспечить быстрое открытие страниц, добавляете burst-limit и burst-time.
Также возможно видоизменение данного правила с целью разделения указанной скоростью между всей сетью 192.168.11.0.24. В данной ситуации параметру queue необходимо указать тип очереди pcq-download, который приводился выше в примере с Queue Trees.
Благодаря простым очередям легко можно реализовать предоставление на определенные адреса неограниченной скорости. Например, согласно следующему правилу клиент с адресом 192.168.11.1 получает на скорости от 1 до 2 мегабит доступ к адресу 88.205.221.123
/queue simple add target-addresses=192.168.11.1/32 dst-address=88.205.221.123 limit-at=1024000/1024000 max-limit=2048000/2048000 |
Если выделяется гарантированная пропускная способность для отдельного клиента, следует помнить о том, что сумма limit-at всех клиентов не может превышать значение пропускной способности всего канала.
Можно отметить наличие в Mikrotik встроенной возможности синхронизировать время с внешним источником, что актуально для случаев с неправильно установленными часами или севшей батарейкой на материнской плате.
Также нет возможности напрямую прописывать URI-адрес в поле ввода IP-адреса, хотя в этом появляется необходимость из-за наличия динамических адресов у сайтов. Данная проблема решается с помощью прописывания требуемого адреса ресурса в разделе /ip firewall address-list с присвоением ему имени, по которому в будущем можно обращаться.
Заключение
В Mikrotik реализованы большие возможности по управлению трафиком, что позволяет данной системе встать в один ряд с популярными аппаратными решениями от Cisco, а в чем-то даже превзойти их. Благодаря объединению Mikrotik и биллинга с поддержкой протокола Radius получается мощная система, которая может работать и в качестве раздающего интернет сервера внутри локальной сети, и в сети среднего провайдера. Благодаря описанным в статье возможностям шейпинга можно не только разделять доступ в интернет, но и создавать резервные каналы связи. Добавление беспроводных технологий RouterOS позволяет превратить несколько беспроводных сетевых карт и немного «железа» в мощную систему Wi-Fi, предоставляющую гарантированную полосу пропускания клиентам с разделением доступа.