![]() |
|||||||||||||
|
|||||||||||||
![]() Как стать провайдером. Часть пятая. Шейпера и QOSА что бы вы со своей стороны могли предложить? Про разделение скорости, приоритезацию, работу шейпера и всего остального уже много всего написано и нарисовано. Есть множество статей, мануалов, схем и прочего, в том числе и написанных мной материалов. Но судя по возрастающим потокам писем и сообщений, пересматривая предыдущие материалы, я понял - что часть информации изложена не так подробно как это необходимо, другая часть просто морально устарела и просто путает новичков. На самом деле QOS на микротике не так сложен, как кажется, а кажется он сложным из-за большого количества взаимосвязанных нюансов. Кроме этого можно подчеркнуть, что крайне тяжело освоить данную тему руководствуясь только теорией, только практикой и только прочтением теории и примеров. Основным костылем в этом деле является отсутствие в Mikrotik визуального представления того, что происходит внутри очереди PCQ, а то, что нельзя увидеть и пощупать приходится вообразить. Но воображение у всех развито индивидуально в той или иной степени. Поэтому я решил написать еще один материал, в котором я смешаю теорию с практикой, визуальными примерами и разобью данный материал на блоки от простого, к сложному. С каждым новым примером я буду добавлять необходимую информацию, и в самом конце вы получите полное представление, как это все работает. Думаю, так будет значительно проще понять основные принципы построения шейпера на микротике. В данном материале я буду рассматривать только Queue Tree очереди с использованием PCQ. Уж извиняйте, Simple Queues для меня это - несколько не тот уровень возможностей. Так же не будет описан устаревший материал, который применим только для пятых версий ROS, хотя в некоторых моментах я буду на него ссылаться для сравнения.
Начнем с простого примера
Задача нарезать входящую в различных комбинациях (Download) скорость для подсети 192.168.0.0/24. Исходящую скорость (Upload) пока трогать не будем, но отмечу, что ее реализация почти ничем не отличается от реализации входящей скорости. Для того чтобы что то нарезать на микротике мы должны определится с критериями отбора нужного нам трафика и выделить его. Для этого нам понадобится /ip firewall mangle. Мангл можно представить в виде своеобразного фильтра, способного отбирать из общего потока пакеты и соединения по определенным критериям и выполнять с ними определенные действия. Наш единственный критерий известен: нам из общего потока нужны только пакеты, которые идут в подсеть 192.168.0.0/24. В качестве действия с этими пакетами мы выберем - назначение пакету маркировки, впоследствии на основе этой маркировки пакеты можно будет обработать в Queue Tree. Чтобы правильно промаркировать пакет - нужно знать по каким цепочкам в Mangle он проходит. Для этого нужно знать диаграммы движения пакетов (Packet Flow) причем не абы какие, а именно свежие диаграммы т.к. в шестой версии ROS схема немного изменилась. И естественно, посмотрев на эти диаграммы впервые, у вас на устах ничего кроме матерных слов не будет.
Исходя из данной диаграммы, можно понять, что интересующий нас трафик
идет по пути: Схема при включенном NAT будет чуть пожирнее: Input Interface > PREROUTING > DST-NAT >FORWARD > POSTROUTING > SRC-NAT > Output Interface Какую из цепочек выбрать? В пятых версиях ROS кроме того где находится NAT, нужно было еще знать
где находится обработка очередей global-in, global-out и global-total. А раз так, то единственное ограничение нам создает только NAT и выбор будет зависеть от направления трафика, который мы хотим промаркировать. По этому случаю накидал свою диаграмму:
(Щелкните на изображении для увеличения)
Как видно из диаграммы, для маркировки полученных пакетов, нам нужны
цепочки, в которых доступны серые адреса подсети 192.168.0.0/24 (dst-address). Для того чтобы промаркировать Upload пакеты нужны цепочки со второй
половины диаграммы, в которых доступны серые адреса подсети 192.168.0.0/24
(src-address). Я рад, что не поленился и написал так много лишних букаф. И все для того, чтобы донести до вас информацию о том, что независимо от направления, которое мы хотим промаркировать, можно выбрать цепочку FORWARD в обоих случаях. Но так нельзя делать в пятых версиях ROS. С цепочкой определились, теперь нужно определиться с тем, как мы будем
помечать пакеты. Сначала пометить соединения, а уже потом в них пометить
нужные пакеты? Или просто пометим пакеты и все взлетит?
Ну, с этим закончили. Правило в студию!Данным правилом мы помечаем все пакеты, у которых dst-address равен адрес листу "LAN" ну и назначаем им packet-mark тоже "LAN" /ip firewall mangle add action=mark-packet chain=forward comment=LAN disabled=no dst-address-list=LAN new-packet-mark=LAN passthrough=yes;
Так же добавим и сам адрес лист: /ip firewall address-list add address=192.168.0.0/24 disabled=no list=LAN;
На этом маркировка в одном направлении закончена, чтобы промаркировать исходящий трафик, нам нужна копия правила, где dst-address-list=LAN заменен на src-address-list=LAN Но как я уже писал, для примера мы возьмем только входящий трафик.
Ловим трафик в Queue TreeДля того чтобы создать очередь PCQ в данном случае требуется одно правило и профиль в Queue Type. Но я создам два правила, чтобы на одном примере показать как в том, или ином случае ведет себя очередь при установке лимитов. Родительская очередь /queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=30M name=DOWNLOAD parent=global priority=8
Тут стоит прояснить несколько моментов: max-limit=30M - в условии задачи указано что канал у нас выдает 32 метра, но прописывать нужно чуть меньше доступной скорости. В противном случае вы упретесь в шейпер своего провайдера, ваш же просто не будет работать. burst-limit=0 burst-threshold=0 burst-time=0s - отключены т.к. их использование мало чего дает при PCQ, но в профиле они имеют достаточную актуальность для использования. priority=8 - приоритет очереди, 1 - высший приоритет, 8 - низший приоритет. НЕ РАБОТАЕТ если очередь имеет потомков. Приоритеты работают только у потомков, причем конкурируют они друг
с другом не только в пределах своего родителя, но и с потомками других
родителей и только в случае общего дедушки, который лимитирует этим
дармоедам скорость. При одинаковых приоритетах они распределят между
собой всю доступную дедушкой скорость. При разных - сначала из общей
дедушкиной миски едят высокоприоритетные, потом едят те у кого приоритет
пониже и то только если что-то осталось, ну или родители развели дедушку
на Limit-at. Хотя и родители могут устроить битву титанов среди своих
потомков, если у них установлен не только Limit-at, но и Max-limit.
Это будет в стиле: "не сжирайте все, у деда есть и другие дети
с внуками от первого брака!" В общем, мы создали родителя, теперь ему нужен потомок. Но для добавления потомка (конечной очереди) сначала необходимо добавить профиль. Добавляем. /queue type add kind=pcq name= PCQ_DOWNLOAD_LAN 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;
kind=pcq - Указываем что очередь которая использует данный профиль
является инициатором подочередей PCQ pcq-dst-address-mask=32 и pcq-src-address-mask=32 - задают количество адресов в одной очереди. (32=одна очередь на один ip адрес) pcq-rate=0 - Устанавливает верхний лимит скорости для одной PCQ очереди (в нашем случае для одного ip адреса) Если указан ноль - скорость не ограничена и будет разделена поровну между очередями (ip адресами). В нашем случае 30 мегабит будут разделены поровну между активными очередями (ip адресами). pcq-limit=50 - лимит размера одной очереди (для одного ip адреса) Все данные в этой очереди при достижении лимитов задерживаются, все что в нее не влезло - уничтожается. pcq-total-limit=2000 - лимит размера всех очередей.
/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s
disabled=no limit-at=0 max-limit=0 name=LAN packet-mark=LAN parent=DOWNLOAD
priority=8 queue=PCQ_DOWNLOAD_LAN;
packet-mark=LAN - вот тут мы ловим в очередь поток промаркированных
в мангле пакетов.
Все что происходит наверху, вы уже знаете, далее смешанные промаркированные пакеты в хаотичном порядке, кучей подхватываются очередью потомком. И тут начинается самое интересное. (Щелкните на изображении для увеличения)
В связи с тем, что потомок привязан к профилю с именем "PCQ_DOWNLOAD_LAN", профиль ему сообщил: что нужно создать под каждый встреченный в промаркированном потоке dst-ip адрес отдельную PCQ очередь. У нас внутри Queue Tree очереди будет создано три PCQ очереди (потока) с одинаковыми параметрами pcq-rate, pcq-limit и настройками Burst скоростей. В данном случае очередь сработала как своеобразный сортировщик пакетов. И для каждого пользователя создала индивидуальную очередь. Каждая очередь проходит через pcq-rate, именно эта штука и задерживает
пакеты в индивидуальных очередях. Но у нас этого параметра в очереди "LAN" не установлено и
поэтому трафик ползет вверх к родительской очереди (DOWNLOAD). Там все
происходит по аналогии, проверяется Max-Limit и если он достигнут -
родительская очередь пинает pcq-rate на закрытие дышла. Скорости потоков
выравниваются, и все приходит в норму. Многих мучает вопрос, если в данном случае pcq-rate=0, пользователей три, двое спят, а один качает. Он выжирает все 30 мегабит? - Да! А что будет, если проснется еще один и тоже начнет качать? - Будет произведено перестроение и выравнивание скоростей. 30 мегабит они поделят поровну. Единственный нюанс - на это требуется время, второй пользователь будет немного медленнее набирать скорость, чем обычно. Суть механизма заключается в задержке и уничтожении пакетов, которые не влезли в лимит. Протокол TCP устроен таким образом, что в рамках соединения - сервер который отправляет данные клиенту, проверяет как они дошли до него, если у пакетов выросла задержка или пакет потерялся (нарушение последовательности) сервер снижает скорость отправки чтобы увеличить стабильность. pcq-limit и pcq-total-limit задаются экспериментально, чем больше лимит - тем больше задержка и больше занято оперативной памяти роутера. Чем меньше лимит - тем больше пакетов будет уничтожено. Что будет, если задать pcq-rate=5M? Три активных пользователя, все качают по полной, pcq-rate=11M? Я очень надеюсь, что по данному примеру все понятно, если непонятно - прочтите еще раз и еще раз, далее будет сложнее.
BurstТехнология Burst предназначена для подачи увеличенной скорости при назначенном лимите на короткое время. Использовать данную функцию целесообразно на небольших по скорости тарифах, для ускорения веб-серфинга или быстрой подгрузки данных в приложения. Данная функция работает только в случае если pcq-rate не равен нулю.Не буду до посинения грузить вас графиками и формулами расчета, лучше накидаю пример. Pcq-rate=2M Максимальная скорость работы пользователя равна 2 мегабитам. Если скорость его работы в данный момент менее 1 мегабита (pcq-burst-threshold), ему станет доступна скорость в 4 мегабита (pcq-burst-rate) на 10 секунд (на практике меньше) это pcq-burst-time. Счетчик начинает тикать с того момента как будет превышен порог в 1 мегабит (pcq-burst-threshold), по истечении времени скорость упадет до pcq-rate, чтобы Burst снова стал доступен - скорость пользователя должна упасть ниже 1 мегабита и находится там не менее 10 секунд (pcq-burst-time) Понятно, что это очень грубое объяснение, на самом деле время доступности
burst рассчитывается по непростому алгоритму - время делится на 16 отрезков
и учитывая почти все переменные скорости и лимитов рассчитывается время
действия. Для справки: При внесении любых изменений, в любую очередь и в любом ее проявлении (Tree или Simple) - все счетчики обнуляются в т.ч. и счетчики Burst. Если вы используете скрипты для автоматической коррекции значений Max-Limit типа QOSEvxController - будьте готовы отказаться от Burst или использовать циклы проверки очередей в QOSEvxController не так часто.
Ведро с болтами (Bucket)Так же с недавнего времени в шестой версии ROS для очередей появился новый параметр bucket-size (размер ведра). Данный параметр может быть изменен в пределах от 0.1 до 10 и используется для задания емкости ведра с токенами. Емкость ведра рассчитывается по форумуле:Емкость в МЕГАБАЙТАХ=bucket-size * max-limit Над каждой очередью нависает ведро с говном токенами, пока трафик в данной очереди не превышает лимит (max-limit) токены накапливаются в данном ведре. При переполнении ведра токен падающий в полное ведро уничтожается. На что тратятся токены. /queue tree add name=download parent=global packet-mark=PC1-traffic
max-limit=10M bucket-size=10; В данном примере, емкость ведра будет равна: (max-limit=10M) * (bucket-size=10) = 100 мегаБАЙТАМ Если пользователь или пользователи потока пакетов с маркировкой "PC1-traffic" до недавнего времени ничего не качали на полной скорости - ведро с токенами в данной очереди будет полным, а это целых сто мегабайт трафика. И вот решили они дружно, что то качнуть, так вот, первых 100 мегабайт трафика они получат без ограничения скорости по max-limit, когда 100 мегабайт будет скачано очередь начнет ограничивать скорость согласно заданному max-limit=10M. Кроме этого, если у очереди есть родитель с более жирным max-limit, то после того как потомок выжрет все свои токены, из своего ведра, он начнет забирать токены у родительской очереди. Для чего это нужно? Более подробная диаграмма работы ведра:
Эквиваленты маркировки трафикаВ данном примере я указал, что у нас одна подсеть (192.168.0.0/24) с тремя пользователями (192.168.0.1, 192.168.0.2, 192.168.0.3). Мы пометили трафик к данным адресам одним правилом в mangle и одним адрес-листом.На всякий случай скажу, что для mangle нет разницы, как мы ему скормим адреса для пометки - обработаны они будут одинаково. Подсеть целиком: /ip firewall address-list add address=192.168.0.0/24 disabled=no list=LAN; Диапазон адресов: /ip firewall address-list add address=192.168.0.1-192.168.0.3 disabled=no list=LAN;
Отдельные адреса: /ip firewall address-list add address=192.168.0.1 disabled=no list=LAN; /ip firewall address-list add address=192.168.0.2 disabled=no list=LAN; /ip firewall address-list add address=192.168.0.3 disabled=no list=LAN;
Аналогично обстоит дело и с PCQ очередями. PCQ очередь без проблем разбирает один поток пакетов, помеченный одним правилом, состоящий из адресов разных подсетей на подочереди.
(Щелкните на изображении для увеличения) Исходя из всего вышеперечисленного, можно сделать вывод, что оперируем мы не подсетями, а группами ip адресов, которые создаем с помощью адрес-листов В данном случае нет смысла раздельно маркировать трафик, делать два
профиля и две очереди. Когда требуется задать индивидуальный Max-Limit для выбранной группы
адресов. А вот пример того как делать не надо: (Щелкните на изображении для увеличения)
Полный листинг примера: /ip firewall mangle add action=mark-packet chain=forward comment=LAN disabled=no dst-address-list=LAN new-packet-mark=LAN passthrough=yes; /ip firewall address-list add address=192.168.0.0/24 disabled=no list=LAN; /queue type add kind=pcq name= PCQ_DOWNLOAD_LAN 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; /queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=30M name=DOWNLOAD parent=global priority=8; /queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=LAN packet-mark=LAN parent=DOWNLOAD priority=8 queue=PCQ_DOWNLOAD_LAN;
Пример второй. Приоритет одних, над другими.Допустим, что мы администратор организации с небольшим количеством сотрудников. Имеем исходные данные: WAN интерфейс с белым адресом (1.1.1.1) и входящей скоростью 32 мегабита
в секунду В данном примере мы как раз, имеем один канал и две группы потребителей с разными приоритетами. Где директора имеют приоритет над менеджерами. Именно в этом случае для реализации данной схемы потребуется раздельная маркировка пакетов и раздельные очереди для групп пользователей. Правила для маркировки:/ip firewall mangle add action=mark-packet chain=forward comment=GROUP-A_DW
disabled=no dst-address-list= GROUP-A new-packet-mark= GROUP-A_DW passthrough=yes; /ip firewall mangle add action=mark-packet chain=forward comment=GROUP-B_DW disabled=no dst-address-list= GROUP-B new-packet-mark= GROUP-B_DW passthrough=yes; Два правила для маркировки трафика с разными packet-mark и два списка для присвоения адресам принадлежности к группам. /ip firewall address-list add address=192.168.0.0/24 disabled=no list=GROUP-A; /ip firewall address-list add address=192.168.1.0/24 disabled=no list=GROUP-B; Пришло время создать профили PCQ для очередей. /queue type add kind=pcq name= GROUP-A_DW 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;
/queue type add kind=pcq name= GROUP-B_DW 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; Создаем дерево очередей: Родительская очередь: /queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no
limit-at=0 max-limit=30M name=DOWNLOAD parent=global priority=8; Потомки: /queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no
limit-at=0 max-limit=0 name= GROUP-A_DW packet-mark= GROUP-A_DW parent=DOWNLOAD
priority=7 queue= GROUP-A_DW; /queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name= GROUP-B_DW packet-mark= GROUP-B_DW parent=DOWNLOAD priority=8 queue= GROUP-B_DW; В данном примере нет ничего сложного, разница между очередями лишь в разных маркировках пакетов и разных приоритетах. При низких скоростях данная схема будет прозрачно пропускать трафик через себя и любой из потребителей может получить все 30М указанных в родительской очереди. При нехватке скорости в родительской очереди скорость начнет перераспределяться между потребителями по следующей схеме: Группа с адресами GROUP-A_DW имеет более высокий приоритет (priority=7), ей будет отдана вся скорость родительской очереди (30M) и равномерно разделена между активными потребителями в пределах этой очереди. Если данная группа не утилизировала весь доступный лимит скорости (30М), остатки этого лимита будут переданы в очередь с более низким приоритетом GROUP-B_DW (priority=8), где данные остатки будут равномерно разделены между активными потребителями в пределах этой очереди. Если группа GROUP-A_DW утилизировала весь доступный лимит в 30 мегабит, группа GROUP-B_DW не получит вообще никакой скорости и никакой возможности передавать и получать пакеты из сети. Для того чтобы группе с низким приоритетом оставалось хотя бы некоторое количество скорости, можно задать в очереди параметр limit-at=5M. Но данный параметр можно задать только совместно с параметром Max-Limit, ограничивать максимальную скорость группы нам не требуется - поэтому просто скопируем его из родительской очереди. И вторая очередь после правок будет выглядеть так: /queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no
limit-at=5M max-limit=30M name=GROUP-B_DW packet-mark=GROUP-B_DW parent=DOWNLOAD
priority=8 queue=GROUP-B_DW;
В таком случае при нехватке скорости в родительской очереди, очередь с низким приоритетом будет всегда получать минимум 5 мегабит, которые сможет равномерно разделить между активными потребителями в пределах этой очереди.
Пример третий. Реализация тарифных планов с разделением на группы с разными приоритетами.В данном примере будет рассмотрен своеобразный гибрид, который включает реализации из первых двух примеров. Предположим, что мы субпровайдер с ограниченными финансовыми и техническими возможностями. У нас есть узкий канал в интернет, пара тарифных планов и две категории абонентов (физ.лица и юр.лица). Чаще всего, при предоставлении услуг юридическим лицам мы получаем от них большую выгоду, чем от физических лиц на тех же показателях скорости. Вместе с этим, мы предоставляем юридическим лицам некоторые дополнительные гарантии в виде гарантированной скорости и более оперативной технической поддержки. Ну и как чаще всего бывает - мы немного увлеклись и подключили чуть больше абонентов, чем может вытянуть наш канал в интернет. По правильному - нужно расширить канал или подключить дополнительный с последующей балансировкой нагрузки. Но как уже было сказано, на это пока нет возможностей. Но скорости в прайм-тайм не хватает, юридические лица начинают звонить и жаловаться на несоответствующую тарифному плану скорость, задержки пакетов, заикания телефонии и пр. Частично облегчить данную ситуацию поможет шейпер с приоритетами как во втором примере, единственные отличия в том, что в данном примере скорость на одного абонента строго лимитирована и присутствует несколько тарифных планов. Так же как и в предыдущих примерах, мы рассмотрим только входящую скорость. Однако во избежание путаницы в комментариях, именах маркировок и именах очередей будет присутствовать upload скорость. Сокращения:
Маркировка пакетов: /ip firewall mangle add action=mark-packet chain=forward
comment=FIZ_1024K-1024K_DW disabled=no dst-address-list= FIZ_1024K-1024K
new-packet-mark= FIZ_1024K-1024K_DW passthrough=yes;
/ip firewall mangle add action=mark-packet chain=forward comment=FIZ_3072K-3072K_DW disabled=no dst-address-list= FIZ_3072K-3072K new-packet-mark= FIZ_3072K-3072K_DW passthrough=yes; /ip firewall mangle add action=mark-packet chain=forward comment=UR_1024K-1024K_DW disabled=no dst-address-list= UR_1024K-1024K new-packet-mark= UR_1024K-1024K_DW passthrough=yes; /ip firewall mangle add action=mark-packet chain=forward comment=UR_3072K-3072K_DW disabled=no dst-address-list= UR_3072K-3072K new-packet-mark= UR_3072K-3072K_DW passthrough=yes; Четыре правила маркировки, которые выдадут нам четыре потока помеченных пакетов, рассортированных по четырем тарифным планам (Два для физ.лиц и два для юр.лиц.)
/ip firewall address-list add address=192.168.0.1 disabled=no list=
FIZ_1024K-1024K;
Теперь необходимо добавить необходимые профили для очередей: /queue type add kind=pcq name= FIZ_1024K-1024K_DW 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=1M
pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000;
/queue type add kind=pcq name= FIZ_3072K-3072K_DW 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=3M pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000; /queue type add kind=pcq name= UR_1024K-1024K_DW 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=1M pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000; /queue type add kind=pcq name= UR_3072K-3072K_DW 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=3M pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000; Опять же я создал четыре профиля вместо двух, для сохранения гибкости настроек на будущее.
Далее построим дерево очередей: Родительская очередь: /queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no
limit-at=0 max-limit=30M name=DOWNLOAD parent=global priority=8 Потомки: /queue tree add burst-limit=0 burst-threshold=0 burst-time=0s
disabled=no limit-at=0 max-limit=0 name=FIZ_1024K-1024K_DW packet-mark=FIZ_1024K-1024K_DW
parent=DOWNLOAD priority=8 queue= FIZ_1024K-1024K_DW;
/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=FIZ_3072K-3072K_DW packet-mark=FIZ_3072K-3072K_DW parent=DOWNLOAD priority=8 queue= FIZ_3072K-3072K_DW; /queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=UR_1024K-1024K_DW packet-mark=UR_1024K-1024K_DW parent=DOWNLOAD priority=7 queue= UR_1024K-1024K_DW; /queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=UR_3072K-3072K_DW packet-mark=UR_3072K-3072K_DW parent=DOWNLOAD priority=7 queue= UR_3072K-3072K_DW;
При реализации данного примера все будет работать следующим образом: При низких скоростях абоненты без проблем получают свою тарифную скорость, которая ограничена параметром pcq-rate. Но самое интересное, начинается, когда активных абонентов больше чем может выдать канал. Родительская очередь ограничена 30 мегабитами. Тарифные планы физических лиц и сами физические лица между собой равноправны. Вся доступная скорость отдается в тарифы для юридических лиц, каждый
такой абонент ограничен скоростью тарифа заданной в параметре pcq-rate.
Тем не менее, если данные абоненты интенсивно работают и их потребление
трафика превышает в сумме 30 мегабит, то получим такую картину: 4 * 1М = 4 мегабита Но у нас всего 30 мегабит. Все бы было просто в случае одинаковых тарифных планов: 30 мегабит поровну поделились бы между абонентами и все. Но как будет распределена скорость, если тарифы у нас разные в пределах одной приоритетной группы. Как распределится недостаток скорости? Недостаток скорости будет распределен в процентном соотношении исходя из скорости тарифного плана. Примерно как то так: (100% / 40 мегабит которые требуются) = 2.5 (1 мегабит / 100%) * 75% = 0.75 мегабита Проверяем: В принципе логично и относительно честно, только вот к сожалению данный
сценарий будет обработан несколько иначе, а именно: Сложные вычисления: Первый этап, первый временной промежуток: 30 литров - (4+12) =14 литров воды осталось в чане. Второй этап, второй временной промежуток: Итог вычислений: Тоже самое если использовать простые вычисления: Если внимательно посмотреть на оба примера (неправильный и верный) можно увидеть что в первом примере общая нехватка скорости по тарифу у всех ровно четверть от заявленной скорости и пострадали все тарифы одинаково. Во втором случае мелкие тарифные планы не почувствовали нехватки и получили заявленную скорость, однако тарифы с более высокой скоростью ощутили нехватку почти на треть. Исходя из излишне-изложенной и не самой удачной метафоры, можно условно сказать, что тарифы с низкими скоростями имеют некий приоритет над тарифами с более высокими скоростями, при нехватке скорости, даже с одинаковым приоритетом. Да это не совсем честно, но, к сожалению, данное поведение шейпера
никак нельзя изменить. Ну да вернемся к дальнейшему обсуждению… Понятное дело, что подобная ситуация в реальности будет равна катастрофе. Но отодвинем катастрофу подальше и представим что юридических лиц не так много. А именно: 2 с тарифами в 1 мегабит и два с тарифами в 3 мегабита. И качают они "по полной". Путем нехитрых вычислений (2*1 + 2*3 = 8, 30-8=22) понимаем, что после
обслуживания юридических лиц, до очереди физических лиц дойдет всего
22 мегабита и разделятся они между ними согласно их тарифам. Если физических
лиц слишком много и данной скорости на них не хватает - начнется дележка
как в вышеописанном случае с большим количеством юридических лиц.
Пример четвертый. Приоритет одного типа трафика над другим.Дополнительно к классической системе приоритетов, когда поток разделен на несколько групп абонентов с разными приоритетами можно прикрутить дополнительные критерии разделения на приоритеты. На эту тему можно спорить часами. Одни люди скажут, что при особых
обстоятельствах, безусловно, стоит использовать приоритеты. И, конечно
же, предоставят весомые аргументы в пользу данных решений. Другие начнут
кричать про производительность и как бы этичность данного решения -
мол, кто мы такие, чтобы решать за пользователя или абонента какой тип
трафика ему важнее. Приоритезация по направлению внешний <-> внутренний Приоритезация по направлению внешнего трафика Download <-> Upload Для примера: В шестой версии ROS с ее изменениями (корневая очередь global и пометка в forward) появилась возможность контролировать дуплексный трафик с ограничением и снижением приоритета исходящего трафика от абонентов. Данная теория в основном относится к B/G/N, при использовании оборудования
работающего в AC режиме встречный трафик уже не так страшен.
Суровая практикаНу, хорошо, теория и основы понятны. Стоит реальная задача сделать некий умный шейпер. С чего начать? Какие факторы нужно учесть, чтобы не собрать все грабли и впоследствии не переделывать все сначала? Перед тем, как создать некоторую конструкцию шейпера необходимо в первую очередь определится с множеством параметров, которые имеет ваша сеть, или будет иметь в будущем. Если вы не сделаете этого сейчас, то в будущем могут возникнуть проблемы, которые заставят вас переделывать конструкцию с нуля. Так же стоит помнить, что каждая новая функция, требование или критерий будет стоить процессорного времени. Чаще всего эта стоимость будет возрастать в геометрической прогрессии. Поэтому дважды подумайте, на сколько критична и уместна данная функция в вашей конфигурации. Первое с чего мы начинаем - это каналы в интернет. Первое на что нужно обратить внимание - это число каналов. Если у вас
несколько каналов в интернет или только планируется использовать несколько
каналов в будущем, то, скорее всего, вам понадобится делать под каждый
канал уникальный шейпер. Во первых, какой бы крутой у вас не стоял балансировщик нагрузки между каналами - всегда будет определенный дисбаланс. Разная нагрузка на каналы хотя бы в 1% нарушит стабильную работу шейпера и минимум 1 абонент на каждом канале будет недополучать тарифной скорости. Во вторых, скорость некоторых каналов время от времени может "плыть" и в составе балансировки это приведет к краху т.к. ни балансировщик, ни шейпер не будут знать о реальных скоростях аплинков. И даже искусственно созданный запас по емкости в данном случае не спасет. В третьих, при падении одного из каналов общая емкость изменится, и значение max-limit в очереди станет неактуальным. В результате этого шейпер будет прозрачно пропускать трафик, соблюдая лишь pcq-rate. Кто-то из абонентов будет получать полную скорость, а кто-то вообще ничего. Исходя из вышеперечисленного - если у вас несколько каналов, считайте
данный функционал обязательным, даже при условии что цена ему довольно
высока. Второе на что нужно обратить внимание - это гарантированная скорость
каналов. 1. Использовать только гарантированные каналы. Это почти миф. Такие
каналы предоставляют в основном юр.лицам со всеми вытекающими. Во вторых,
если канал приходит в роутер по радио - толку от этого будет мало. Цена вопроса - Договор на юр.лицо или внешние скрипты и некоторые ресурсы процессора. Третье и последнее по каналам - Тип подключения аплинков.
Третий вопрос для обсуждения - это: "Нужно ли выделять какому
либо типу трафика более высокий приоритет?" Однако полезность данной функции тоже очень положительно влияет на
работу сети. Есть абоненты, которые с компьютером строго на "вы" и это самая болезненная для технической поддержки группа. Они собирают все тизеры на страницах интернета, соответственно на их компьютере просто зоопарк из вирусов, троянов и загрузчиков, да еще центр обновления у них сам качает, что захочет и когда захочет. А после школы возвращается их ребенок, запускает танки, ловит лаги и начинаются звонки в техническую поддержку. Вы вежливо объясняете, что у них проблемы с компьютером и чаще всего получаете ответ что им "все починили и настроили две недели назад" и что у них проблем быть не может. Ведь папины веселые картинки на весь экран, которые просили положить денег на какой-то номер телефона, удалил мамин знакомый программист с работы. И чаще всего до таких абонентов трудно достучатся и найти нужные слова для убеждения. Увы, но это так! При выделении в более высокий приоритет (отдельная полоса) к примеру, тех же танкистов, подобные проблемы переходят из разряда "острые" в разряд "вялотекущие". И очень часто со временем решаются сами собой (машина начинает тупить, Winlocker-ы портят папе настроение, шифровальщики добивают файлы) и это все как бы намекает, что специалиста все-таки придется пригласить для решения этих проблем. Абоненты, которые с компьютером на "ты" обычно не звонят по пустякам в техподдержку, сначала проверяют свою машину, потом скорость, а потом уже набирают вас. И боже упаси вас, сказать им, что у них с машиной или сетевой картой, что-то не так, они вам горло перегрызут. Хотя в некоторых, из таких случаев провайдер действительно прав, т.к. человеческий фактор никто не отменял, мы все ошибаемся, забываем про роутер, про ноутбук который качает торренты на кухне и т.д. Во втором случае, когда нас выручает приоритезация по типу трафика - это некоторые проблемы с нашим оборудованием или каналами в интернет. Когда суммарной полосы наших каналов существенно не хватает, низкоприоритетный трафик равноправных абонентов прижимается чтобы пропустить высокоприоритетный. Тут тот же бонус, геймеры а тем более танкисты в разгар игровых баталий - очень нервный народ и пока вы занимаетесь решением проблемы вам будет значительно легче пережить эту неисправность если в это время вам не так сильно будут обрывать телефон как при падении всех сервисов в целом. Четвертый вопрос для обсуждения коснется только тех, у кого локальный трафик от абонентов превышает возможности внутренних линков до сегмента сети. Наиболее остро вопрос стоит у тех субпровайдеров, кто раздает интернет по радио на распространенном оборудовании. Для примера возьмем базовую станцию Ubiquiti Rocket M5 c хорошей панельной
антенной, установленной по всем правилам и работающей на свободной частоте
без помех. И вот мы создали тепличные условия для красивой коробочки внутри которой китайское г… Не скажу что у других производителей все супер внутри корпуса, но данный
производитель очень тщательно скрывает очень важный параметр - пакетную
производительность данного устройства. И что это нам дает? При закачке торрентов скоростью 1 мегабит в секунду
(не самые мелкие пакеты, если что) генерируется порядка 800-1100 пакетов
в секунду. К чему я собственно веду: при 30 абонентах с тарифами в 5 мегабит, данная база не справится в глобальный прайм-тайм, который случается не так уж редко. (Выход ожидаемых фильмов, трансляции спортивных событий и пр. Даже 20*5 это уже сто мегабит, понятное дело, что на базе есть свои очереди, таймслоты при использовании TDMA и прочее, база как бы обязана раздавать трафик честно и поровну. Но в реальных условиях, когда она явно перегружена по пакетам или радио, при наличии помех, разности расстояний и сигналов, равномерное деление по TDMA просто невозможно. Если ближе к теме, назовем базовую станцию сегментом, т.к. у нормальных
провайдеров сети сегментированы и броадкаст по ним без разрешения не
гуляет. Легко сказать, но очень дорого сделать. Ведь каждый сегмент (VLAN).
Но его все, же используют, просто данный функционал легко настраивается
на терминирующем роутере, из двух роутеров получается распределенная
система. Последний вопрос: "Зачем нужен межабонентский трафик и как больно грабли ударят по лбу?" Межабонентский трафик нужен в первую очередь для снижения нагрузки
на интернет каналы. Ну, тут я уже предвижу: "Да кому нужны ваши внутренние серваки и ретрекеры? Тут у каждого второго оптика" У меня есть клиент, официальный провайдер. У него три канала по 4 мегабита от спутниковых модемов и около 400 абонентов. В радиусе 700км нет ни оптики, ни кабеля, ни файфая, ни жопорезов с 3-4g. В общем, ничего нет. Пинг 700мс. А вы тут как сырки в масле, с оптикой и 21 веком. Еще будут вопросы, зачем субпровайдерам кеширующие прокси, ретрекеры и прочие примочки? Так что межабонентскому трафику быть! Проблема в том, что мы физически не сможем пометить трафик от одного
абонента до другого в пределах одного сегмента (базы), т.к. для одного
абонента пакет будет помечен как исходящий, а для второго он является
входящим. Для mangle это пакет соответствующий критериям двух правил,
сначала он получит одну метку, а потом будет переразмечен другим правилом.
И все бы получилось, если бы между маркировками можно было бы принудительно
отправить пакет в обработку очередей. Но чудес не бывает. Как же быть? Есть некоторые варианты решения подобной задачи, трафик будет зарегистрирован лишь в одном направлении и с более низким приоритетом, интернет трафик будет иметь более высокий приоритет. Кроме этого данный поток полезно лимитировать. Схема довольно сложная и создается под отдельно взятые конфигурации. Если кто-то из специалистов сейчас прочитал это и понял, о чем я говорю - свяжитесь со мной, возможно, вместе мы придумаем что-то более продвинутое. Кроме всего этого межабонентский трафик нельзя маркировать на одном
роутере с контролем нагрузки на интернет аплинки. Даже если вы решили
рискнуть производительностью роутера и сделать комбаин "все в одном"
(Контроль нагрузки на каналы+нарезка скорости по тарифам+приоритеты+контроль
внутренних сегментов+маркировка межабонентского трафика) то вы через
некоторое время заметите, что в корневых очередях каналов в интернет
регистрируется нагрузка, которой на самом деле не существует. Это межабонентский
трафик маркируется, попадает в очередь, передается в корневую очередь
сегмента, а оттуда попадает в очередь канала. Ну, вот как бы и решилось что к чему, естественно если есть биллинг, то он должен поддерживать работу с адрес-листами для сообщения микротику какому ip адресу и сколько скорости выдать. Тоже самое относится к скрипту балансировки, он должен сообщать своими списками какой ip адрес, к какому каналу привязан в данный момент времени. Кроме этого если вы создаете распределенную систему на двух роутерах, вам потребуется синхронизация адрес листов между роутерами, реализовать ее можно написав скрипт, либо внешний обработчик на api. Так же в скором времени такой скрипт можно будет приобрести (EvxListSync).
Практическая и заключительная часть:Думаю что после того как мы определились с необходимыми параметрами, следует приступить от слов к делу. В данном примере я опишу основную конструкцию, в которую можно добавить некоторый функционал по своему вкусу или удалить лишний. Предположим, что у нас есть два канала в интернет и балансировщик, который раскидывает абонентов по каналам и формирует динамически нужные адрес листы ISP1 и ISP2. Для каждого канала будет создан индивидуальный шейпер. В примере будут рассмотрены четыре тарифных плана, два для физ.лиц
и два для юр.лиц. Кроме всего этого мы разделим трафик по типу на два приоритета.
Маркируем весь входящий трафик к адресам из списка "SHAPER_TARGET" назначая пакетам метку "CLASS-B-DL" /ip firewall mangle add action=mark-packet chain=forward comment=CLASS-B-DL
dst-address-list=SHAPER_TARGET new-packet-mark=CLASS-B-DL;
Далее отлавливаем пакеты с меткой "CLASS-B-DL" и переразмечаем их, назначая метку более приоритетного класса. В более выскокий приоритет попадут: ICMP, DNS, SSH, TELNET, RDP и пакеты у которых в качестве адреса источника указан любой адрес из списка CLASS-A-SITES. /ip firewall mangle add action=mark-packet chain=forward comment=CLASS-A-ICMP-DL
new-packet-mark=CLASS-A-DL packet-mark=CLASS-B-DL protocol=icmp;
/ip firewall mangle add action=mark-packet chain=forward comment=CLASS-A-DNS_TCP-DL dst-port=53 new-packet-mark=CLASS-A-DL packet-mark=CLASS-B-DL protocol=tcp; /ip firewall mangle add action=mark-packet chain=forward comment=CLASS-A-DNS_UDP-DL dst-port=53 new-packet-mark=CLASS-A-DL packet-mark=CLASS-B-DL protocol=udp; /ip firewall mangle add action=mark-packet chain=forward comment=CLASS-A-SSH-DL dst-port=22 new-packet-mark=CLASS-A-DL packet-mark=CLASS-B-DL protocol=tcp; /ip firewall mangle add action=mark-packet chain=forward comment=CLASS-A-TELNET-DL dst-port=23 new-packet-mark=CLASS-A-DL packet-mark=CLASS-B-DL protocol=tcp; /ip firewall mangle add action=mark-packet chain=forward comment=CLASS-A-RDP-DL dst-port=3389 new-packet-mark=CLASS-A-DL packet-mark=CLASS-B-DL protocol=tcp; /ip firewall mangle add action=mark-packet chain=forward comment=CLASS-A-SITES-DL new-packet-mark=CLASS-A-DL packet-mark=CLASS-B-DL src-address-list=CLASS-A-SITES;
Выполняем аналогичную процедуру для исходящего трафика: /ip firewall mangle add action=mark-packet chain= forward
comment=CLASS-B-UL new-packet-mark=CLASS-B-UL src-address-list=SHAPER_TARGET;
/ip firewall mangle add action=mark-packet chain= forward comment=CLASS-A-ICMP-UL
new-packet-mark=CLASS-A-UL packet-mark=CLASS-B-UL protocol=icmp; После этих действий мы получаем четыре потока промаркированных пакетов:
/ip firewall mangle add action=mark-packet chain=forward
comment=ISP1-CLASS-A-DL dst-address-list=ISP1 new-packet-mark=ISP1-CLASS-A-DL
packet-mark=CLASS-A-DL;
/ip firewall mangle add action=mark-packet chain=forward comment=ISP1-CLASS-B-DL dst-address-list=ISP1 new-packet-mark=ISP1-CLASS-B-DL packet-mark=CLASS-B-DL; /ip firewall mangle add action=mark-packet chain=forward comment=ISP1-CLASS-A-UL dst-address-list=ISP1 new-packet-mark=ISP1-CLASS-A-UL packet-mark=CLASS-A-UL; /ip firewall mangle add action=mark-packet chain=forward comment=ISP1-CLASS-B-UL dst-address-list=ISP1 new-packet-mark=ISP1-CLASS-B-UL packet-mark=CLASS-B-UL;
ISP1-CLASS-A-DL Теперь нужно разобрать эти четыре потока на тарифные планы: Адрес лист "1024-1024-8" в формате "Входящая скорость-Исходящая скорость-Приоритет". Приоритет равен 8 если физ.лицо и 7 если юр.лицо. Так удобнее управлять листами из биллинга. Выделяем четыре потока для тарифного плана "1024-1024-8" два под загрузку, два под отдачу: /ip firewall mangle add action=mark-packet chain=forward comment=ISP1_1024-1024-8_CLASS-A_DL
dst-address-list=1024-1024-8 new-packet-mark=ISP1_1024-1024-8_CLASS-A_DL
packet-mark=ISP1-CLASS-A-DL;
/ip firewall mangle add action=mark-packet chain=forward comment=ISP1_1024-1024-8_CLASS-B_DL dst-address-list=1024-1024-8 new-packet-mark=ISP1_1024-1024-8_CLASS-B_DL packet-mark=ISP1-CLASS-B-DL; /ip firewall mangle add action=mark-packet chain=forward comment=ISP1_1024-1024-8_CLASS-A_UL dst-address-list=1024-1024-8 new-packet-mark=ISP1_1024-1024-8_CLASS-A_UL packet-mark=ISP1-CLASS-A-UL; /ip firewall mangle add action=mark-packet chain=forward comment=ISP1_1024-1024-8_CLASS-B_UL dst-address-list=1024-1024-8 new-packet-mark=ISP1_1024-1024-8_CLASS-B_UL packet-mark=ISP1-CLASS-B-UL; Повторяем действия для трех оставшихся тарифных планов: /ip firewall mangle add action=mark-packet chain=forward comment=ISP1_2048-2048-8_CLASS-A_DL
dst-address-list=2048-2048-8 new-packet-mark=ISP1_2048-2048-8_CLASS-A_DL
packet-mark=ISP1-CLASS-A-DL;
/ip firewall mangle add action=mark-packet chain=forward comment=ISP1_2048-2048-8_CLASS-B_DL dst-address-list=2048-2048-8 new-packet-mark=ISP1_2048-2048-8_CLASS-B_DL packet-mark=ISP1-CLASS-B-DL; /ip firewall mangle add action=mark-packet chain=forward comment=ISP1_2048-2048-8_CLASS-A_UL dst-address-list=2048-2048-8 new-packet-mark=ISP1_2048-2048-8_CLASS-A_UL packet-mark=ISP1-CLASS-A-UL; /ip firewall mangle add action=mark-packet chain=forward comment=ISP1_2048-2048-8_CLASS-B_UL dst-address-list=2048-2048-8 new-packet-mark=ISP1_2048-2048-8_CLASS-B_UL packet-mark=ISP1-CLASS-B-UL; /ip firewall mangle add action=mark-packet chain=forward comment=ISP1_1024-1024-7_CLASS-A_DL
dst-address-list=1024-1024-7 new-packet-mark=ISP1_1024-1024-7_CLASS-A_DL
packet-mark=ISP1-CLASS-A-DL; /ip firewall mangle add action=mark-packet chain=forward comment=ISP1_2048-2048-7_CLASS-A_DL
dst-address-list=2048-2048-7 new-packet-mark=ISP1_2048-2048-7_CLASS-A_DL
packet-mark=ISP1-CLASS-A-DL;
Потоки канала:
Далее нужно произвести переразметку для второго канала, аналогично первому: /ip firewall mangle add action=mark-packet chain=forward
comment=ISP2-CLASS-A-DL dst-address-list=ISP2 new-packet-mark=ISP2-CLASS-A-DL
packet-mark=CLASS-A-DL;
/ip firewall mangle add action=mark-packet chain=forward comment=ISP2-CLASS-B-DL dst-address-list=ISP2 new-packet-mark=ISP2-CLASS-B-DL packet-mark=CLASS-B-DL; /ip firewall mangle add action=mark-packet chain=forward comment=ISP2-CLASS-A-UL dst-address-list=ISP2 new-packet-mark=ISP2-CLASS-A-UL packet-mark=CLASS-A-UL; /ip firewall mangle add action=mark-packet chain=forward comment=ISP2-CLASS-B-UL dst-address-list=ISP2 new-packet-mark=ISP2-CLASS-B-UL packet-mark=CLASS-B-UL; /ip firewall mangle add action=mark-packet chain=forward comment=ISP2_1024-1024-8_CLASS-A_DL
dst-address-list=1024-1024-8 new-packet-mark=ISP2_1024-1024-8_CLASS-A_DL
packet-mark=ISP2-CLASS-A-DL; /ip firewall mangle add action=mark-packet chain=forward comment=ISP2_2048-2048-8_CLASS-A_DL
dst-address-list=2048-2048-8 new-packet-mark=ISP2_2048-2048-8_CLASS-A_DL
packet-mark=ISP2-CLASS-A-DL; /ip firewall mangle add action=mark-packet chain=forward comment=ISP2_1024-1024-7_CLASS-A_DL
dst-address-list=1024-1024-7 new-packet-mark=ISP2_1024-1024-7_CLASS-A_DL
packet-mark=ISP2-CLASS-A-DL; /ip firewall mangle add action=mark-packet chain=forward comment=ISP2_2048-2048-7_CLASS-A_DL
dst-address-list=2048-2048-7 new-packet-mark=ISP2_2048-2048-7_CLASS-A_DL
packet-mark=ISP2-CLASS-A-DL;
Итого у нас 32 потока, общие потоки классов и потоки каналов стали неактуальны т.к. все пакеты в них были переразмечены и образовали новые 32 потока. На этом маркировка закончена.
/queue type add kind=pcq name=DL-1024-1024-8 pcq-classifier=dst-address
pcq-dst-address6-mask=64 pcq-rate=1M pcq-src-address6-mask=64 pcq-burst-rate=2M
pcq-burst-threshold=1200K pcq-burst-time=15s;
/queue type add kind=pcq name=UL-1024-1024-8 pcq-classifier=src-address pcq-dst-address6-mask=64 pcq-rate=1M pcq-src-address6-mask=64 pcq-burst-rate=2M pcq-burst-threshold=1200K pcq-burst-time=15s; /queue type add kind=pcq name=DL-2048-2048-8 pcq-classifier=dst-address
pcq-dst-address6-mask=64 pcq-rate=2M pcq-src-address6-mask=64 pcq-burst-rate=4M
pcq-burst-threshold=2500K pcq-burst-time=15s;
/queue type add kind=pcq name=DL-2048-2048-7 pcq-classifier=dst-address
pcq-dst-address6-mask=64 pcq-rate=2M pcq-src-address6-mask=64 pcq-burst-rate=4M
pcq-burst-threshold=2500K pcq-burst-time=15s;
Ранее я упоминал о проблемах, которые возникнут при получении интернет
каналов по радио, так же вполне вероятно, что провайдер вам выдаст не
симметричный канал, либо вы будете использовать adsl или 3-4g. Родительская очередь для первого канала: /queue tree add name=ISP1-Duplex parent=global queue=default; Подочереди для симплекса: /queue tree add name=DL-ISP1 parent=ISP1-Duplex queue=default; /queue tree add name=UL-ISP1 parent=ISP1-Duplex queue=default; После этого можем добавлять конечных потомков, в этих очередях и будут заданы приоритеты. Тарифный план 1024-1024 для физ.лиц на два приоритета+приоритет входящего трафика: /queue tree add name=DL-ISP1_1024-1024-8_CLASS-A packet-mark=ISP1_1024-1024-8_CLASS-A_DL
parent=DL-ISP1 priority=5 queue=DL-1024-1024-8;
/queue tree add name=DL-ISP1_1024-1024-8_CLASS-B packet-mark=ISP1_1024-1024-8_CLASS-B_DL parent=DL-ISP1 priority=6 queue=DL-1024-1024-8; /queue tree add name=UL-ISP1_1024-1024-8_CLASS-A packet-mark=ISP1_1024-1024-8_CLASS-A_UL parent=UL-ISP1 priority=7 queue=UL-1024-1024-8; /queue tree add name=UL-ISP1_1024-1024-8_CLASS-B packet-mark=ISP1_1024-1024-8_CLASS-B_UL parent=UL-ISP1 priority=8 queue=UL-1024-1024-8;
/queue tree add name=DL-ISP1_2048-2048-8_CLASS-A packet-mark=ISP1_2048-2048-8_CLASS-A_DL
parent=DL-ISP1 priority=5 queue=DL-2048-2048-8;
/queue tree add name=DL-ISP1_2048-2048-8_CLASS-B packet-mark=ISP1_2048-2048-8_CLASS-B_DL parent=DL-ISP1 priority=6 queue=DL-2048-2048-8; /queue tree add name=UL-ISP1_2048-2048-8_CLASS-A packet-mark=ISP1_2048-2048-8_CLASS-A_UL parent=UL-ISP1 priority=7 queue=UL-2048-2048-8; /queue tree add name=UL-ISP1_2048-2048-8_CLASS-B packet-mark=ISP1_2048-2048-8_CLASS-B_UL parent=UL-ISP1 priority=8 queue=UL-2048-2048-8; /queue tree add name=DL-ISP1_1024-1024-7_CLASS-A packet-mark=ISP1_1024-1024-7_CLASS-A_DL parent=DL-ISP1 priority=3 queue=DL-1024-1024-7; /queue tree add name=DL-ISP1_1024-1024-7_CLASS-B packet-mark=ISP1_1024-1024-7_CLASS-B_DL parent=DL-ISP1 priority=4 queue=DL-1024-1024-7; /queue tree add name=UL-ISP1_1024-1024-7_CLASS-A packet-mark=ISP1_1024-1024-7_CLASS-A_UL parent=UL-ISP1 priority=5 queue=UL-1024-1024-7; /queue tree add name=UL-ISP1_1024-1024-7_CLASS-B packet-mark=ISP1_1024-1024-7_CLASS-B_UL parent=UL-ISP1 priority=6 queue=UL-1024-1024-7; /queue tree add name=DL-ISP1_2048-2048-7_CLASS-A packet-mark=ISP1_2048-2048-7_CLASS-A_DL parent=DL-ISP1 priority=3 queue=DL-2048-2048-7; /queue tree add name=DL-ISP1_2048-2048-7_CLASS-B packet-mark=ISP1_2048-2048-7_CLASS-B_DL parent=DL-ISP1 priority=4 queue=DL-2048-2048-7; /queue tree add name=UL-ISP1_2048-2048-7_CLASS-A packet-mark=ISP1_2048-2048-7_CLASS-A_UL parent=UL-ISP1 priority=5 queue=UL-2048-2048-7; /queue tree add name=UL-ISP1_2048-2048-7_CLASS-B packet-mark=ISP1_2048-2048-7_CLASS-B_UL parent=UL-ISP1 priority=6 queue=UL-2048-2048-7;
/queue tree add name=ISP2-Duplex parent=global queue=default;
/queue tree add name=DL-ISP2 parent=ISP2-Duplex queue=default; /queue tree add name=DL-ISP2_1024-1024-8_CLASS-A packet-mark=ISP2_1024-1024-8_CLASS-A_DL parent=DL-ISP2 priority=5 queue=DL-1024-1024-8; /queue tree add name=DL-ISP2_1024-1024-8_CLASS-B packet-mark=ISP2_1024-1024-8_CLASS-B_DL parent=DL-ISP2 priority=6 queue=DL-1024-1024-8; /queue tree add name=UL-ISP2_1024-1024-8_CLASS-A packet-mark=ISP2_1024-1024-8_CLASS-A_UL parent=UL-ISP2 priority=7 queue=UL-1024-1024-8; /queue tree add name=UL-ISP2_1024-1024-8_CLASS-B packet-mark=ISP2_1024-1024-8_CLASS-B_UL parent=UL-ISP2 priority=8 queue=UL-1024-1024-8; /queue tree add name=DL-ISP2_2048-2048-8_CLASS-A packet-mark=ISP2_2048-2048-8_CLASS-A_DL parent=DL-ISP2 priority=5 queue=DL-2048-2048-8; /queue tree add name=DL-ISP2_2048-2048-8_CLASS-B packet-mark=ISP2_2048-2048-8_CLASS-B_DL parent=DL-ISP2 priority=6 queue=DL-2048-2048-8; /queue tree add name=UL-ISP2_2048-2048-8_CLASS-A packet-mark=ISP2_2048-2048-8_CLASS-A_UL parent=UL-ISP2 priority=7 queue=UL-2048-2048-8; /queue tree add name=UL-ISP2_2048-2048-8_CLASS-B packet-mark=ISP2_2048-2048-8_CLASS-B_UL parent=UL-ISP2 priority=8 queue=UL-2048-2048-8; /queue tree add name=DL-ISP2_1024-1024-7_CLASS-A packet-mark=ISP2_1024-1024-7_CLASS-A_DL parent=DL-ISP2 priority=3 queue=DL-1024-1024-7; /queue tree add name=DL-ISP2_1024-1024-7_CLASS-B packet-mark=ISP2_1024-1024-7_CLASS-B_DL parent=DL-ISP2 priority=4 queue=DL-1024-1024-7; /queue tree add name=UL-ISP2_1024-1024-7_CLASS-A packet-mark=ISP2_1024-1024-7_CLASS-A_UL parent=UL-ISP2 priority=5 queue=UL-1024-1024-7; /queue tree add name=UL-ISP2_1024-1024-7_CLASS-B packet-mark=ISP2_1024-1024-7_CLASS-B_UL parent=UL-ISP2 priority=6 queue=UL-1024-1024-7; /queue tree add name=DL-ISP2_2048-2048-7_CLASS-A packet-mark=ISP2_2048-2048-7_CLASS-A_DL parent=DL-ISP2 priority=3 queue=DL-2048-2048-7; /queue tree add name=DL-ISP2_2048-2048-7_CLASS-B packet-mark=ISP2_2048-2048-7_CLASS-B_DL parent=DL-ISP2 priority=4 queue=DL-2048-2048-7; /queue tree add name=UL-ISP2_2048-2048-7_CLASS-A packet-mark=ISP2_2048-2048-7_CLASS-A_UL parent=UL-ISP2 priority=5 queue=UL-2048-2048-7; /queue tree add name=UL-ISP2_2048-2048-7_CLASS-B packet-mark=ISP2_2048-2048-7_CLASS-B_UL parent=UL-ISP2 priority=6 queue=UL-2048-2048-7;
Так же требуется задать значения max-limit в корневых очередях, эти значения должны быть на 5-20% ниже реальной скорости, которую вам выдает провайдер. Итого получилось: Но если приблизится к более реальным условиям, получаются огромные
числа. 16 правил в Mangle для определения типов трафика. Итого правил в mangle = 276 (260 зависят от числа тарифов и каналов) Профили Дерево Итого: 255 очередей И данные цифры вполне нормально уживутся на CCR, CHR, X86 если не баловаться с регулярными выражениями. Если хочется добавить еще одну ступень для определения типа трафика - умножайте число очередей и правил на два. Для тех, кто вопреки убеждениям хочет прикрутить к данной схеме еще
и контроль внутренних сегментов сети на этом же роутере - число правил
и очередей умножайте на число сегментов и к полученному значению прибавляйте
количество сегментов умноженное на два. К тому же если в сети будет присутствовать межабонентский трафик - по лбу очень больно ударят грабли, о которых я писал ранее. Для этих целей нужен второй шейпер на втором промежуточном роутере,
кроме того что это все можно относительно просто реализовать, второй
роутер дает еще много полезных преимуществ. Думаю, что теперь многим станет понятно, почему на SOHO мыльницах с 680 мегагерцами на борту можно реализовать только простую сеялку на две группы пользователей и не более. Ну, раз уж я начал говорить про второй роутер и про контроль сегментов, грех будет не рассказать, как это все делается.
Распределенный шейперПервым делом нужно разметить трафик на втором роутере. Маркируем внешний входящий трафик, назначая метку: "EXT_CLASS-B_DL" /ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-B_DL
disabled=no src-address-list=!SHAPER_TARGET dst-address-list=SHAPER_TARGET
new-packet-mark=EXT_CLASS-B_DL passthrough=yes;
Далее отлавливаем пакеты с меткой "EXT_CLASS-B_DL" и переразмечаем их, назначая метку более приоритетного класса. Делаем по аналогии как на первом роутере. /ip firewall mangle add action=mark-packet chain=forward
comment=EXT_CLASS-A-ICMP-DL new-packet-mark=EXT_CLASS-A_DL packet-mark=EXT_CLASS-B_DL
protocol=icmp;
/ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-A-DNS_TCP-DL dst-port=53 new-packet-mark=EXT_CLASS-A_DL packet-mark=EXT_CLASS-B_DL protocol=tcp; /ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-A-DNS_UDP-DL dst-port=53 new-packet-mark=EXT_CLASS-A_DL packet-mark=EXT_CLASS-B_DL protocol=udp; /ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-A-SSH-DL dst-port=22 new-packet-mark=EXT_CLASS-A_DL packet-mark=EXT_CLASS-B_DL protocol=tcp; /ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-A-TELNET-DL dst-port=23 new-packet-mark=EXT_CLASS-A_DL packet-mark=EXT_CLASS-B_DL protocol=tcp; /ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-A-RDP-DL dst-port=3389 new-packet-mark=EXT_CLASS-A_DL packet-mark=EXT_CLASS-B_DL protocol=tcp; /ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-A-SITES-DL new-packet-mark=EXT_CLASS-A_DL packet-mark=EXT_CLASS-B_DL src-address-list=CLASS-A-SITES;
Далее нам нужно их преобразовать в четыре потока, два потока для физ.лиц и два для юр.лиц, делать мы это будем перемаркировкой согласно адрес листам тарифных планов. /ip firewall mangle add action=mark-packet chain=forward
comment=EXT_CLASS-A-FL_DL new-packet-mark=EXT_CLASS-A-FL_DL packet-mark=EXT_CLASS-A_DL
dst-address-list=1024-1024-8;
/ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-B-FL_DL new-packet-mark=EXT_CLASS-B-FL_DL packet-mark=EXT_CLASS-B_DL dst-address-list=1024-1024-8; /ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-A-FL_DL new-packet-mark=EXT_CLASS-A-FL_DL packet-mark=EXT_CLASS-A_DL dst-address-list=2048-2048-8; /ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-B-FL_DL new-packet-mark=EXT_CLASS-B-FL_DL packet-mark=EXT_CLASS-B_DL dst-address-list=2048-2048-8; /ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-A-UR_DL new-packet-mark=EXT_CLASS-A-UR_DL packet-mark=EXT_CLASS-A_DL dst-address-list=1024-1024-7; /ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-B-UR_DL new-packet-mark=EXT_CLASS-B-UR_DL packet-mark=EXT_CLASS-B_DL dst-address-list=1024-1024-7; /ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-A-UR_DL new-packet-mark=EXT_CLASS-A-UR_DL packet-mark=EXT_CLASS-A_DL dst-address-list=2048-2048-7; /ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-B-UR_DL new-packet-mark=EXT_CLASS-B-UR_DL packet-mark=EXT_CLASS-B_DL dst-address-list=2048-2048-7; Теперь у нас есть в распоряжении четыре потока: Аналогичную процедуру производим с исходящим наружу трафиком: /ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-B_UL
disabled=no src-address-list=SHAPER_TARGET dst-address-list=!SHAPER_TARGET
new-packet-mark=EXT_CLASS-B_UL passthrough=yes;
/ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-A-ICMP_UL new-packet-mark=EXT_CLASS-A_UL packet-mark=EXT_CLASS-B_UL protocol=icmp; /ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-A-DNS_TCP_UL new-packet-mark=EXT_CLASS-A_UL packet-mark=EXT_CLASS-B_UL protocol=tcp src-port=53; /ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-A-DNS_UDP_UL new-packet-mark=EXT_CLASS-A_UL packet-mark=EXT_CLASS-B_UL protocol=udp src-port=53; /ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-A-SSH_UP new-packet-mark=EXT_CLASS-A_UL packet-mark=EXT_CLASS-B_UL protocol=tcp src-port=22; /ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-A-TELNET_UL new-packet-mark=EXT_CLASS-A_UL packet-mark=EXT_CLASS-B_UL protocol=tcp src-port=23; /ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-A-RDP_UL new-packet-mark=EXT_CLASS-A_UL packet-mark=EXT_CLASS-B_UL protocol=tcp src-port=3389; /ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-A-SITES_UL new-packet-mark=EXT_CLASS-A_UL packet-mark=EXT_CLASS-B_UL src-address-list=CLASS-A-SITES; /ip firewall mangle add action=mark-packet chain=forward comment=EXT_CLASS-A-FL_UL
new-packet-mark=EXT_CLASS-A-FL_UL packet-mark=EXT_CLASS-A_UL src-address-list=1024-1024-8;
EXT_CLASS-A-FL_UL Для обработки межабонентского трафика так же потребуется добавить еще один поток, но на данном этапе в нем будет сразу два направления т.к. для одного абонента трафик является входящим, а для другого исходящим. /ip firewall mangle add action=mark-packet chain=forward comment=INT disabled=no src-address-list=SHAPER_TARGET dst-address-list=SHAPER_TARGET new-packet-mark=INT passthrough=yes;
Входящий трафик: /ip firewall mangle add action=mark-packet chain=forward
comment=VID30_EXT_CLASS-A-FL_DL dst-address-list=VID30 new-packet-mark=VID30_EXT_CLASS-A-FL_DL
packet-mark=EXT_CLASS-A-FL_DL;
/ip firewall mangle add action=mark-packet chain=forward comment= VID30_EXT_CLASS-B-FL_DL dst-address-list=VID30 new-packet-mark= VID30_EXT_CLASS-B-FL_DL packet-mark=EXT_CLASS-B-FL_DL; /ip firewall mangle add action=mark-packet chain=forward comment=VID30_EXT_CLASS-A-UR_DL dst-address-list=VID30 new-packet-mark=VID30_EXT_CLASS-A-UR_DL packet-mark=EXT_CLASS-A-UR_DL; /ip firewall mangle add action=mark-packet chain=forward comment=VID30_EXT_CLASS-B-UR_DL dst-address-list=VID30 new-packet-mark=VID30_EXT_CLASS-B-UR_DL packet-mark=EXT_CLASS-B-UR_DL; /ip firewall mangle add action=mark-packet chain=forward comment=VID30_INT_DL dst-address-list=VID30 new-packet-mark=VID30_INT_DL packet-mark=INT; Исходящий трафик, по аналогии: /ip firewall mangle add action=mark-packet chain=forward
comment=VID30_EXT_CLASS-A-FL_UL src-address-list=VID30 new-packet-mark=VID30_EXT_CLASS-A-FL_UL
packet-mark=EXT_CLASS-A-FL_UL;
/ip firewall mangle add action=mark-packet chain=forward comment=VID30_EXT_CLASS-B-FL_UL src-address-list=VID30 new-packet-mark=VID30_EXT_CLASS-B-FL_UL packet-mark=EXT_CLASS-B-FL_UL; /ip firewall mangle add action=mark-packet chain=forward comment=VID30_EXT_CLASS-A-UR_UL src-address-list=VID30 new-packet-mark=VID30_EXT_CLASS-A-UR_UL packet-mark=EXT_CLASS-A-UR_UL; /ip firewall mangle add action=mark-packet chain=forward comment=VID30_EXT_CLASS-B-UR_UL src-address-list=VID30 new-packet-mark=VID30_EXT_CLASS-B-UR_UL packet-mark=EXT_CLASS-B-UR_UL; /ip firewall mangle add action=mark-packet chain=forward comment=VID30_INT_UL src-address-list=VID30 new-packet-mark=VID30_INT_UL packet-mark=INT; Повторяем то же самое для второго сегмента: Входящий трафик: /ip firewall mangle add action=mark-packet chain=forward
comment=VID40_EXT_CLASS-A-FL_DL dst-address-list=VID40 new-packet-mark=VID40_EXT_CLASS-A-FL_DL
packet-mark=EXT_CLASS-A-FL_DL;
/ip firewall mangle add action=mark-packet chain=forward comment= VID40_EXT_CLASS-B-FL_DL dst-address-list=VID40 new-packet-mark= VID40_EXT_CLASS-B-FL_DL packet-mark=EXT_CLASS-B-FL_DL; /ip firewall mangle add action=mark-packet chain=forward comment=VID40_EXT_CLASS-A-UR_DL dst-address-list=VID40 new-packet-mark=VID40_EXT_CLASS-A-UR_DL packet-mark=EXT_CLASS-A-UR_DL; /ip firewall mangle add action=mark-packet chain=forward comment=VID40_EXT_CLASS-B-UR_DL dst-address-list=VID40 new-packet-mark=VID40_EXT_CLASS-B-UR_DL packet-mark=EXT_CLASS-B-UR_DL; /ip firewall mangle add action=mark-packet chain=forward comment=VID40_INT_DL dst-address-list=VID40 new-packet-mark=VID40_INT_DL packet-mark=INT; Исходящий трафик: /ip firewall mangle add action=mark-packet chain=forward
comment=VID40_EXT_CLASS-A-FL_UL src-address-list=VID40 new-packet-mark=VID40_EXT_CLASS-A-FL_UL
packet-mark=EXT_CLASS-A-FL_UL;
/ip firewall mangle add action=mark-packet chain=forward comment=VID40_EXT_CLASS-B-FL_UL src-address-list=VID40 new-packet-mark=VID40_EXT_CLASS-B-FL_UL packet-mark=EXT_CLASS-B-FL_UL; /ip firewall mangle add action=mark-packet chain=forward comment=VID40_EXT_CLASS-A-UR_UL src-address-list=VID40 new-packet-mark=VID40_EXT_CLASS-A-UR_UL packet-mark=EXT_CLASS-A-UR_UL; /ip firewall mangle add action=mark-packet chain=forward comment=VID40_EXT_CLASS-B-UR_UL src-address-list=VID40 new-packet-mark=VID40_EXT_CLASS-B-UR_UL packet-mark=EXT_CLASS-B-UR_UL; /ip firewall mangle add action=mark-packet chain=forward comment=VID40_INT_UL src-address-list=VID40 new-packet-mark=VID40_INT_UL packet-mark=INT; На этом маркировка завершена.
Профили /queue type add kind=pcq name=PCQ-DL pcq-classifier=dst-address pcq-dst-address6-mask=64
pcq-rate=0 pcq-src-address6-mask=64;
/queue type add kind=pcq name=PCQ-UL pcq-classifier=src-address pcq-dst-address6-mask=64 pcq-rate=0 pcq-src-address6-mask=64;
Корневая очередь, в которой можно задать max-limit (скорость соединения с первым роутером) /queue tree add name=ISP parent=global queue=default max-limit=900M;
Дуплексная подочередь на сегмент сети: /queue tree add name=DUPLEX-VID30 parent=ISP queue=default max-limit=40M;
Симплекс сегмента на загрузку: /queue tree add name=DL_VID30 parent=DUPLEX-VID30 queue=default;
Очереди потомки: /queue tree add name=DL_VID30_EXT_CLASS-A-FL_DL packet-mark=VID30_EXT_CLASS-A-FL_DL
parent=DL_VID30 priority=5 queue=PCQ-DL;
/queue tree add name=DL_VID30_EXT_CLASS-B-FL_DL packet-mark=VID30_EXT_CLASS-B-FL_DL parent=DL_VID30 priority=6 queue=PCQ-DL; /queue tree add name=DL_VID30_EXT_CLASS-A-UR_DL packet-mark=VID30_EXT_CLASS-A-UR_DL parent=DL_VID30 priority=4 queue=PCQ-DL; /queue tree add name=DL_VID30_EXT_CLASS-B-UR_DL packet-mark=VID30_EXT_CLASS-B-UR_DL parent=DL_VID30 priority=5 queue=PCQ-DL; /queue tree add name=DL_VID30_INT_DL packet-mark=VID30_INT_DL parent=DL_VID30 priority=7 queue=PCQ-DL max-limit=20M;
Симплекс сегмента на отдачу: /queue tree add name=UL_VID30 parent=DUPLEX-VID30 queue=default;
Очереди потомки: /queue tree add name=UL_VID30_EXT_CLASS-A-FL_UL packet-mark=VID30_EXT_CLASS-A-FL_UL
parent=UL_VID30 priority=6 queue=PCQ-UL;
/queue tree add name=UL_VID30_EXT_CLASS-B-FL_UL packet-mark=VID30_EXT_CLASS-B-FL_UL parent=UL_VID30 priority=7 queue=PCQ-UL; /queue tree add name=UL_VID30_EXT_CLASS-A-UR_UL packet-mark=VID30_EXT_CLASS-A-UR_UL parent=UL_VID30 priority=5 queue=PCQ-UL; /queue tree add name=UL_VID30_EXT_CLASS-B-UR_UL packet-mark=VID30_EXT_CLASS-B-UR_UL parent=UL_VID30 priority=6 queue=PCQ-UL; /queue tree add name=UL_VID30_INT_UL packet-mark=VID30_INT_UL parent=UL_VID30 priority=8 queue=PCQ-UL max-limit=20M; Повторяем дерево для второго сегмента (VID40) Очередь сегмента: /queue tree add name=DUPLEX-VID40 parent=ISP queue=default max-limit=40M;
Загрузка: /queue tree add name=DL_VID40 parent=DUPLEX-VID40 queue=default;
/queue tree add name=DL_VID40_EXT_CLASS-A-FL_DL packet-mark=VID40_EXT_CLASS-A-FL_DL parent=DL_VID40 priority=5 queue=PCQ-DL; /queue tree add name=DL_VID40_EXT_CLASS-B-FL_DL packet-mark=VID40_EXT_CLASS-B-FL_DL parent=DL_VID40 priority=6 queue=PCQ-DL; /queue tree add name=DL_VID40_EXT_CLASS-A-UR_DL packet-mark=VID40_EXT_CLASS-A-UR_DL parent=DL_VID40 priority=4 queue=PCQ-DL; /queue tree add name=DL_VID40_EXT_CLASS-B-UR_DL packet-mark=VID40_EXT_CLASS-B-UR_DL parent=DL_VID40 priority=5 queue=PCQ-DL; /queue tree add name=DL_VID40_INT_DL packet-mark=VID40_INT_DL parent=DL_VID40 priority=7 queue=PCQ-DL max-limit=20M; Отдача: /queue tree add name=UL_VID40 parent=DUPLEX-VID40 queue=default;
/queue tree add name=UL_VID40_EXT_CLASS-A-FL_UL packet-mark=VID40_EXT_CLASS-A-FL_UL parent=UL_VID40 priority=6 queue=PCQ-UL; /queue tree add name=UL_VID40_EXT_CLASS-B-FL_UL packet-mark=VID40_EXT_CLASS-B-FL_UL parent=UL_VID40 priority=7 queue=PCQ-UL; /queue tree add name=UL_VID40_EXT_CLASS-A-UR_UL packet-mark=VID40_EXT_CLASS-A-UR_UL parent=UL_VID40 priority=5 queue=PCQ-UL; /queue tree add name=UL_VID40_EXT_CLASS-B-UR_UL packet-mark=VID40_EXT_CLASS-B-UR_UL parent=UL_VID40 priority=6 queue=PCQ-UL; /queue tree add name=UL_VID40_INT_UL packet-mark=VID40_INT_UL parent=UL_VID40 priority=8 queue=PCQ-UL max-limit=20M;
Теперь расскажу, как это работает. Шейпер прозрачно пропускает через себя весь трафик до тех пор, пока не будет достигнут лимит, какой либо из родительских очередей. Простыми словами - пока хватает пропускной способности сегментов шейпер не работает, если же по сегменту идет большой трафик и превышает лимит - скорость режется в соответствии с приоритетами.
Priority=4 Priority=5 Priority=6 Priority=7 Priority=8 Данное поведение можно менять, изменяя приоритет у потомков в дереве, в данном случае приоритеты настроены "в нахлест" это позволяет "впихнуть невпихуемое" в сложных конфигурациях, когда восьми приоритетов не хватает. В данном же примере это лишь демонстрация возможностей. Кроме всех приоритетов, на каждый сегмент наложено ограничение в сорок мегабит дуплекса. Это связано с радио и обсуждалось ранее. Так же принудительно ограничен обмен межабонентским трафиком по 20 мегабит на прием и 20 мегабит на отдачу в сегмент. При обмене межабонентским трафиком между сегментами все будет регистрироваться
правильно. На одном сегменте будет входящий трафик на другом исходящий.
Но при обмене трафиком внутри сегмента будет зарегистрирован только
исходящий из сегмента межабонентский трафик. Этого конечно можно было
бы избежать, создав для каждого абонента индивидуальные правила маркировки,
цена этому - пара тысяч правил в мангле. Некоторые наверно подумали: "Внутри сегмента подсеть у всех одна,
они общаются друг с другом напрямую (через базу или свитч). Как пакеты
попали в маршрутизатор?". Думаю, на этом стоит закончить, сей чудесный опус. По традиции выкладываю готовые RSC последних примеров для импорта в систему, а так же адрес листы для добавления в приоритет серверов Wargaming, Warface и iccup. Дабы избавить вас от копипаста при проведении экспериментов.
Файл импорта RSC c контролем каналов, приоритезацией и тарифами (Первый роутер)
При использовании материалов ссылка на автора и источник ОБЯЗАТЕЛЬНЫ! Автор: Григорьев Дмитрий (Inlarion) (C) 06.08.2016 Теги: Mikrotik, Микротик, QOS, PCQ, Shaper, приоритезация, очереди, ограничение скорости |
|||||||||||||
|
|||||||||||||