Динамический шейпинг для MikroTik

Рейтинг
Оценка: 4.8Голосов: 25Комментарии: 39

Роутеры MikroTik идеальны для небольших сетей. Они стоят недорого (относительно Cisco), настраивать их просто (относительно FreeBSD), кроме того, они ещё и обладают отличным функционалом (относительно обычных SOHO роутеров).

Итак, наша сеть доросла до состояния в котором D-link не справляется, но к установке FreeBSD мы не готовы морально.

Идем в магазин, покупаем что-то вроде RB450G, RB750 или подобную железку. Включаем ее в сеть и диву даёмся. Для человека привыкшего к суровой простоте DIR’ов обилие кнопок Win-Box`а вызывает мысль «А что тут можно нажать, чтоб ничего не сломать?».

Ну да ладно, к счастью, данные девайсы идут преднастроенными на работу в режиме роутера. Если их подключить в сеть и прописать адрес, то он даже заработает.

Однако есть одно но: работать то он работает, но по выполняемым функциям недалеко ушел от DIR-a.

Что я хочу от роутера? – Счастья всем, поровну, и пусть никто не уйдет обиженным (с).

Я хочу, чтобы каждый пользователь сети получал скорость полной ширины канала. И чтобы при этом, если несколько человек одновременно качают фильмы, скорость поделилась между ними поровну. И чтобы при этом третий мог спокойно искать информацию в сети. И чтобы четвёртый мог играть в линейку и у него были нормальные пинги. В общем, такой себе победивший коммунизм в маленькой локалке. Детальное изучение возможностей показывает, что данную задачу можно решить при помощи PCQ очередей.

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

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

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

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

WinBox

Рис.2. WinBox.

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

Назначаем пользователю Adress List

Рис.3. Назначаем пользователю Adress List.

После этого повторяем действия для всех новых компьютеров. Получил адрес – сделал его статическим – прописал Address List. После первого раза можно не писать, а воспользоваться выпадающим меню. Можно конечно не использовать DHCP, а указывать диапазоны вручную, но это не наш метод.

Теперь, когда у нас есть адреса «от кого маркировать», можно приступить к маркировке.

Маркировка – это небольшое текстовое поле, которое добавляется к пакету по нужному нам правилу и позволяет поймать этот пакет в Query Tree.

Итак, в IP Firewall Mangle.

IP Firewall Mangle

Рис.4. 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.

Создаём два 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.

Динамический шейпинг

Рис.8. Создаём само дерево.

Вот собственно и все. С этого момента скорость будет динамически распределяться между всеми пользователями. Между всеми, кому мы назначили Adress list.

Дальше, просто копированием элементов можно создать несколько групп и в каждой установить свои ограничения скорости.

Контроль над ошибками. Мало где пишут, но правильность работы PCQ очередей нужно проверить.

Контроль над ошибками

Рис.9. Контроль над ошибками.

Похоже, что сейчас 6 человек в сети. Похоже на правду :)

В три клика мышкой мы включаем отображение колонки PCQ queries. Число в этой колонке должно показывать реальное число клиентов. Если это число явно большое, то скорее всего мы напутали с классификаторами.

Рис.10. Пример неправильно выбранного классификатора.

Как пример неправильно выбранного классификатора. У меня нет 150 компьютеров, а в строчке k38 150 pcq очередей.

Ключевым правилом для работы шейпера является правильная установка ограничения в global.

MikroTik выделят скорость очередям до тех пор, пока не упрется в ограничение. Как только ограничение достигнуто (иконки на скринах сейчас зелёные, при ограничении они становятся красными), MikroTik начинает делить скорость.

Рассмотрим такой пример: у нас в действительности канал прокачивает 50 мбит, а мы выставим лимит в 60 мбит. Тогда получится так, что первый пользователь запустил торрент и занял все 50 мбит. MikroTik ему скорость не ограничивает, он качает и доволен. Второй пользователь решил поиграть. Запустил себе BF3. С точки зрения MikroTikа канал еще не забит, он ничего не предпринимает. Но внешний канал забит и второй пользователь увидит пинги под 1000 и получить удовольствия от игры не сможет.

Эта же ситуация, только мы выставим лимит в 40 Мбит. Первый клиент поставил фильмы на закачку. Торрент качает. Скорость поднимается до 40 Мбит, микротик кричит: «Ага, попался!» и задерживает пакеты сверх нормы.

Второй пользователь запускает BF3. MikroTik видит, что их двое, что один качает много, а второй – мало. Все пакеты второго пользователя идут без очереди, а первый отдыхает.

И получается: первый качает 39 мбит, а второй спокойно играет с нормальными пингами.

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

Специально для ASP24.

Вас может заинтересовать

 
2399 грн 89 у.е.
Купить
 

(Снят с производства)

Если Вы нашли ошибку в тексте, то выделите ее мышкой и нажмите Ctrl + Enter или нажмите здесь.

Сообщение об ошибке

Ошибка:

Ваш комментарий (не обязательно):

Да Отмена

Об авторе Artjom_Smirnov