Предыстория: имеем Интернет-соединение со скоростью «до 50 Мбит/с», имеющее «фичу» разгоняться до 100 если канал свободен. Пользуясь облачным хранилищем заметил проблему, что выгрузив или загрузив около 50-100 файлов клиент для работы с облаком «зависает» и либо качает файлы на крайне низкой скорости (порядка 50-200 Кбит/с), либо вообще «молчит». При этом, сайты в браузере открываются без всяких проблем.
Как такое может быть? Ограничение ширины канала по определенным IP-адресам при скачке за определенный промежуток времени.
Для тех, кто хочет подробнее узнать об этом или вовсе новичок, увидевший возможное решение своей проблемы, добро пожаловать под кат.
В просторах сети было найдено множество статей на подобную тематику, только все они предлагали распределение скорости между пользователями по приоритету (интернет-страницы с высоким, потоковое видео ниже и самый низкий приоритет у p2p-систем).
Итак, для начала теория. Провайдер отслеживает все «скачки» скорости и количество обращений к ресурсам, выдавая ограничение на превышающие их показатели предел. Узнать его не получится — это закрытая информация провайдера. Но как же скачивать и заливать по 1к+ файлов в облако, не получая за это временный «бан» на доступ к ресурсу? Легко!
Алгоритм действий будет таков:
- Создаем список IP-адресов, для которых нужно включить ограничение скорости;
 - Организовать маркировку пакетов, идущих на и с ресурсов списка;
 - Задать ограничение скорости по требуемым ресурсам при помощи очередей.
 
Приступим к настройке
Шаг 1. Добавим IP-адреса ресурса(ов) в список. Для этого зайдем на вкладку "Address Lists" окна "Firewall"

Я пользуюсь облачным хранилищем Mega.nz и пул их IP-адресов будет:
- 31.216.144.0/24
 - 31.216.145.0/24
 - 31.216.147.0/24
 - 89.44.168.0/24
 - 154.53.224.0/24
 - 154.53.225.0/24
 
Добавим все подсети адресов в лист с именем, например, "mega.nz".
/ip firewall address-list
add address=31.216.144.0/24 list=mega.nz
add address=31.216.145.0/24 list=mega.nz
add address=31.216.147.0/24 list=mega.nz
add address=89.44.168.0/24 list=mega.nz
add address=154.53.224.0/24 list=mega.nz
add address=154.53.225.0/24 list=mega.nz
Шаг 2. Маркировка пакетов

После этого перейдем во вкладку "Mangle" и добавим правила маркировки пакетов. Для этого жмем на «плюс» и указываем следующие параметры:
MEGA-upload:
- Comment — MEGA-upload.
 - chain — forward.
 - Out. Interface — интерфейс, на котором висит Инет. В моем случае это «eth1-Wi-Fi».
 - Dst. Address List — mega.nz — это имя того самого набора адресных листов с прошлого шага.
 - Action — mark packet.
 - New Packet Mark — MEGA-upload.
 - Passthrought — true.
 



/ip firewall mangle
add action=mark-packet chain=forward comment=MEGA-upload \
    out-interface=eth1-Wi-Fi new-packet-mark=MEGA-upload \
    passthrough=yes dst-address-list=mega.nz
MEGA-download:
- Comment — MEGA-download.
 - chain — forward.
 - In. Interface — интерфейс, на котором висит Инет. В моем случае это «eth1-Wi-Fi».
 - Src Address List — mega.nz — это имя того самого набора адресных листов с прошлого шага.
 - Action — mark packet.
 - New Packet Mark — MEGA-download.
 - Passthrough — true.
 



/ip firewall mangle
add action=mark-packet chain=forward comment=MEGA-download \
    in-interface=eth1-Wi-Fi new-packet-mark=MEGA-download \
    passthrough=yes src-address-list=mega.nz
Шаг 3. Добавление правил очередей (Queues)
Далее, переходим во вкладку "Queue Tree" и также добавляем два новых правила:
MEGA-upload:
- Name — MEGA-upload
 - Parent — global
 - Packet Marks — MEGA-upload (выбираем из списка)
 - Queue Type — default-small
 - Priority — 8
 - Bucket Size — 0.100
 - Max Limit — 25M
 

/queue tree
add max-limit=25M name=MEGA-upload packet-mark=MEGA-upload parent=global \
    queue=default-small
MEGA-download:
- Name — MEGA-download
 - Parent — global
 - Packet Marks — MEGA-download (выбираем из списка)
 - Queue Type — default-small
 - Priority — 8
 - Bucket Size — 0.100
 - Max Limit — 25M
 

/queue tree
add max-limit=25M name=MEGA-download packet-mark=MEGA-download parent=global \
    queue=default-small
Всё. Теперь при синхронизации облачного хранилища на вход и выход скорость не поднимется больше 25 Мбит/с и, тем самым, устранили вероятность получения временного бана от провайдера.
PS.: Таким образом можно ограничивать скорость на любые ресурсы.
PPS: Правила ограничений были частично взяты из статьи "Ограничение скорости в MikroTik" и изменены для своих нужд.
PPPS: В статью были добавлены скрипты в текстовом эквиваленте, а также убрано создание PCQ-типов для очередей.
PPPPS: Если кому нужно, ниже представлен скрипт автодобавления IP-адресов из кэша DNS в именованный список. Сразу скажу, что скрипт настроен на работу с несколькими облачными сервисами и добавляет адреса в список с именем «clouds». Если нужно, можете изменить его под себя.
				






