Предыстория: имеем Интернет-соединение со скоростью «до 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». Если нужно, можете изменить его под себя.