Роутеры 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.
Рис.2. WinBox.
Вверху списка будет наша единственная запись с выданным адресом. Открываем её, нажимаем «Make static» и закрываем. Открываем еще раз. У нас появилась закладка General на которой можно поменять IP-адрес, можно назначить пользователю Adress List. Вот Adress List сейчас нам больше всего и нужен, здесь запишем, как мы хотим назвать эту группу пользователей.
Рис.3. Назначаем пользователю Adress List.
После этого повторяем действия для всех новых компьютеров. Получил адрес – сделал его статическим – прописал Address List. После первого раза можно не писать, а воспользоваться выпадающим меню. Можно конечно не использовать DHCP, а указывать диапазоны вручную, но это не наш метод.
Теперь, когда у нас есть адреса «от кого маркировать», можно приступить к маркировке.
Маркировка – это небольшое текстовое поле, которое добавляется к пакету по нужному нам правилу и позволяет поймать этот пакет в Query Tree.
Итак, в 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.
Рис.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.
Источник http://asp24.com.ua/blog/dinamicheskij-sheiping-v-mikrotik/