понедельник, 18 ноября 2013 г.

Динамический шейпинг, справедливое деление трафика с помощью PCQ - инструкция для MikroTik

Динамический шейпинг с 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 очередей.





Рис.1. Принцип деления скорости.

Задача простая: нужно промаркировать пакеты и загнать их в PCQ очередь. Для начала разберёмся, что маркировать.

Найдем подключенные адреса в DHCP и преобразуем их в статические.
Итак, включаем получение адресов через DHCP, подключаем патч в порт 2-5 нового роутера. Запускаем WinBox. Идём в IP -> DHCP Server -> Leases.
 

Рис.2. WinBox.

 Вверху списка будет наша единственная запись с выданным адресом. Открываем её, нажимаем  «Make static» и закрываем. Открываем еще раз. У нас появилась закладка General на которой можно поменять IP-адрес, можно назначить пользователю Adress List. Вот Adress List сейчас нам больше всего и нужен, здесь запишем, как мы хотим назвать эту группу пользователей.


Рис.3. Назначаем пользователю 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.


Рис.7. Создаём два 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 мбит, а второй спокойно играет с нормальными пингами.

Поэтому ключевым моментом является установка лимита, который может

Комментариев нет:

Отправить комментарий