Динамический шейпинг с PCQ для MikroTik
Динамический шейпинг, справедливое деление трафика с помощью PCQ, подробная инструкция для MikroTik
Роутеры MikroTik идеальны для небольших сетей. Они стоят недорого (относительно Cisco), настраивать их не очень сложно (относительно FreeBSD), кроме того, они ещё и обладают отличным функционалом (относительно обычных SOHO роутеров).
Итак, Ваша сеть доросла до состояния в котором D-link или TP-Link не справляется, но к установке FreeBSD мы не готовы морально , а на покупку DrayTek Vigor нет ни денег ни средств , ни желания.
Тогда все просто ,
идем в магазин и покупаем что-то вроде RB450G, RB750, а еще лучше RB751U или подобную железку rb751u-2hnd ( rb751u-5hnd ). Включаем ее в сеть и диву даёмся. Для человека привыкшего к суровой простоте DIR и TP-Link обилие кнопок WinBox вызывает мысль «А что тут можно нажать, чтоб ничего не сломать?».
Настроить устройство для работы теперь можно практически несколькими кликами использую меню - Quick Set ( быстрые настройки.)
Ну да ладно, к счастью, данные устройства идут иногда предварительно настроенными на работу в режиме роутера. Если их подключить в сеть и прописать адрес, то он даже заработает.
Однако есть одно но: работать то он работает, но по выполняемым функциям недалеко уйдет от DIR и TP-Link
А я хочу, чтобы каждый пользователь сети получал скорость полной ширины канала. И чтобы при этом, если несколько человек одновременно качают фильмы, скорость поделилась между ними поровну. И чтобы при этом третий мог спокойно искать информацию в сети. И чтобы четвёртый мог играть в линейку и у него были нормальные пинги.
Детальное изучение возможностей показывает, что данную задачу можно решить при помощи PCQ очередей.
Задача простая: нужно промаркировать пакеты и загнать их в PCQ очередь. Для начала разберёмся, что маркировать.
Найдем подключенные адреса в DHCP и преобразуем их в статические.
Итак, включаем получение адресов через DHCP, подключаем патч в порт 2-5 нового роутера. Запускаем WinBox. Идём в IP -> DHCP Server -> Leases.
Рис.2. WinBox.
Вверху списка будет наша единственная запись с выданным адресом. Открываем её, нажимаем «Make static» и закрываем. Открываем еще раз. У нас появилась закладка General на которой можно поменять IP-адрес, можно назначить пользователю Adress List. Вот Adress List сейчас нам больше всего и нужен, здесь запишем, как мы хотим назвать эту группу пользователей.
Адрес листы (Address lists) были введены для того, чтобы определить множество IP адресов в одно и тоже правило фаервола, таким образом сокращается общее число правил
фаервола и повышается производительность роутера.
После этого повторяем действия для всех новых компьютеров. Получил адрес – сделал его статическим – прописал Address List. После первого раза можно не писать, а воспользоваться выпадающим меню. Можно конечно не использовать DHCP, а указывать диапазоны вручную.
Теперь, когда у нас есть адреса «от кого маркировать», можно приступить к маркировке.
Маркировка – это небольшое текстовое поле, которое добавляется к пакету по нужному нам правилу и позволяет поймать этот пакет в Query Tree.
Итак идем в IP Firewall Mangle.
Создаём два правила.
Первое будет маркировать все входящие пакеты.
Рис.5. Маркируем входящие пакеты.
Заполняем: Chain – forward, Dist address list – наш список пользователей, выбираем по стрелочке вниз. Action - mark packet, New packet mark – наше имя пакета.
Dist address list – это адрес назначения. Т.е. это те пакеты, которые уходят из роутера и в которых зазначен адрес получателя в нашем Adress List.
Рис.6. Действия для исходящего трафика.
Для исходящего трафика все точно так же, только наоборот. Dist Address у нас пустой, а Src address – наш список.
Пакеты промаркировали, теперь их нужно запихнуть в очередь.
Для начала создадим два PCQ.
Из того, что здесь важно. Rate – ограничение скорости на каждого пользователя. Можно использовать буквы k (килобиты) и М (мегабиты). У исходящих пакетов (для нас исходящие, а для пользователя входящие – download) классификатор dist address. Т.е. пакеты уходят, а мы делим между ними скорость, классифицируя их по адресу пользователя. Другими словами, доступная скорость будет делится между всеми активными в данным момент адресами.
У входящих пакетов (а для пользователя это upload) мы ставим классификатор SRC. Т.е. источник.
Теперь создадим само дерево. Дерево можно делать по разному, в зависимости от требуемой задачи.
Для начала создадим один корневой элемент. Назовем его Global, parent выберем global-out.
Добавим еще два элемента. Один – Download, второй – Upload. Parent у них будет общий – наш Global.
Такая схема удобна, если входящий канал у нас полудуплексный, например, wi-fi канал. В Global нужно выставить ограничение суммарной скорости канала. Например у нас канал 25 мбит. Мы хотим разрешить скачивать с максимальной скоростью, а закачивать не более 3м.
Мы в ветку Global ставим max limit 50m, а в ветку Download не ставим ограничения (то есть, ставим 0), в ветку Upload ставим 10m.
Вот собственно и все. С этого момента скорость будет динамически распределяться между всеми пользователями. Между всеми, кому мы назначили Adress list.
Дальше, просто копированием элементов можно создать несколько групп и в каждой установить свои ограничения скорости.
Контроль над ошибками. Мало где пишут, но правильность работы PCQ очередей нужно проверить.
В три клика мышкой мы включаем отображение колонки PCQ queries.
Число в этой колонке должно показывать реальное число клиентов. Если это число явно большое, то скорее всего мы напутали с классификаторами.
Ключевым правилом для работы шейпера является правильная установка ограничения в global.
MikroTik выделят скорость очередям до тех пор, пока не упрется в ограничение. Как только ограничение достигнуто (иконки на скринах сейчас зелёные, при ограничении они становятся красными), MikroTik начинает делить скорость.
Рассмотрим такой пример: у нас в действительности канал прокачивает 30 мбит, а мы выставим лимит в 40 мбит. Тогда получится так, что первый пользователь запустил торрент и занял все 30 мбит. MikroTik ему скорость не ограничивает, он качает и доволен. Второй пользователь решил поиграть. Запустил себе BF3. С точки зрения MikroTikа канал еще не забит, он ничего не предпринимает. Но внешний канал забит и второй пользователь увидит пинги под 1000 и получить удовольствия от игры не сможет.
Эта же ситуация, только мы выставим лимит в 20 Мбит. Первый клиент поставил фильмы на закачку. Торрент качает. Скорость поднимается до 20 Мбит, микротик кричит: «Ага, попался!» и задерживает пакеты сверх нормы.
Второй пользователь запускает BF3. MikroTik видит, что их двое, что один качает много, а второй – мало. Все пакеты второго пользователя идут без очереди, а первый отдыхает.
И получается: первый качает 19 мбит, а второй спокойно играет с нормальными пингами.
Поэтому ключевым моментом является установка лимита, который может