Ограничение пользователей по объему трафика в месяц, с использованием простых очередей
Довольно часто в практике использования маршрутизаторов Микротик возникает вопрос об ограничении пользователей по объему трафика, в какой-то определенный период времени. И если с лимитами по скоростям вопросов меньше и настройка проще, то вопрос с объемом часто ставит в тупик.
Непосредственно на сайте Mikrotik, есть замечательный и простой пример, который позволяет расширить ваши познания в области применения RouterOS и лишний раз демонстрирует гибкость, которую дает данная операционная система.
Итак, рассмотрим следующую ситуацию:
Прежде, чем переходить к решению поставленной задачи примем следующие условия:
Для начала нам необходимо создать скрипт, который будет проверять объем трафика, подсчитываемого в простых очередях у клиентов:
System → Scripts — нажмем «плюс».
В поле Name введем название нашего скрипта, например Traff_Limit_4Gb.
В поле Source введем следующий скрипт (скопируйте приведенный ниже код и вставьте его в поле Source):
Данный код скрипта (как видно из значения i — изменяющегося от 17 до 28) предназначен для диапазона IP-адресов 192.168.15.17-192.168.15.28. Т.к. нам необходимо ограничить еще адреса 192.168.15.35 и 192.168.15.67 — то создадим еще по одному скрипту на каждый IP-адрес:
для 192.168.15.35 (в поле Name введем название скрипта, Traff_Limit_4Gb_IP35):
для 192.168.15.67 (в поле Name введем название скрипта, Traff_Limit_4Gb_IP67):
В результате в списке должно появится три скрипта:
Теперь нам необходимо заставить наши скрипты выполнятся, в этом нам на помощь придет планировщик — Sheduler
Mikrotik: Ограничение скорости скачивания для определенных IP-адресов
Предыстория: имеем Интернет-соединение со скоростью «до 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
Шаг 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.
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.
Шаг 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
MEGA-download:
- Name — MEGA-download
- Parent — global
- Packet Marks — MEGA-download (выбираем из списка)
- Queue Type — default-small
- Priority — 8
- Bucket Size — 0.100
- Max Limit — 25M
Всё. Теперь при синхронизации облачного хранилища на вход и выход скорость не поднимется больше 25 Мбит/с и, тем самым, устранили вероятность получения временного бана от провайдера.
PS.: Таким образом можно ограничивать скорость на любые ресурсы.
PPS: Правила ограничений были частично взяты из статьи «Ограничение скорости в MikroTik» и изменены для своих нужд.
PPPS: В статью были добавлены скрипты в текстовом эквиваленте, а также убрано создание PCQ-типов для очередей.
PPPPS: Если кому нужно, ниже представлен скрипт автодобавления IP-адресов из кэша DNS в именованный список. Сразу скажу, что скрипт настроен на работу с несколькими облачными сервисами и добавляет адреса в список с именем «clouds». Если нужно, можете изменить его под себя.
MikroTik.by
For every complex problem, there is a solution that is simple, neat, and wrong.
- Темы без ответов
- Активные темы
- Поиск
- Список форумовФорум по операционной системе MikroTik RouterOSСкрипты
- Поиск
Ограничение пользователя по объему трафика в месяц
Ограничение пользователя по объему трафика в месяц
Сообщение r136a8 » 15 сен 2019, 18:33
У меня вопрос а как настроить планировщик — Sheduler. Когда скрипт должен запускаться? В моем случае я его запустил вручную.
К примеру после перезагрузки микротика его нужно запускать повторно (тогда установить Start time — startup?) или его нужно запускать периодично каждый день? Я правильно понял что все обнуляется после перезагрузки, счетчики и скрипты?
Спасибо
Re: Ограничение пользователя по объему трафика в месяц
Сообщение Chupaka » 16 сен 2019, 13:35
Скрипт просто проверяет, сколько трафика прошло через очередь — и меняет настройки очереди, если много Так что запускать каждые N минут. Да, счётчики при перезагрузке сбрасываются. Ну и я бы переписал скрипт в более простой для восприятия форме (с поправками на синтаксис актуальных версий: /32 после адреса и target вместо target-addresses — у вас на какой версии оно работало в таком виде?):
Re: Ограничение пользователя по объему трафика в месяц
Сообщение r136a8 » 16 сен 2019, 14:19
У меня работал на актуальной 6.45.6
Вы имели ввиду вот так (в таком же виде и ничего не добавлять)
https://c.radikal.ru/c08/1909/7b/f12b234e3592.jpg
Если, к примеру скрипт запускать каждых 30 минут и пользователь использует 3Gb из 4Gb и перезагрузится то все обнулится до 0Gb или скрипт продолжит работу с 3Gb?
Если обнуляется то скрипт актуален только при условии не перезагружатся!
Re: Ограничение пользователя по объему трафика в месяц
Сообщение Chupaka » 16 сен 2019, 15:43
Всё обнулится до нуля (ух ).
Встречал где-то давно рекомендации по хранению накопленного трафика в комментариях, дабы не быть зависимыми от перезагрузок, но готового решения показать, увы, не могу.
UserManager не поможет?
Re: Ограничение пользователя по объему трафика в месяц
Сообщение Diana » 21 ноя 2020, 13:11
Мда, завязла я даже в этом скрипте.
Нужно ограничить по обьёму подсеть, от 3 до 229 айпишника. Для теста ограничение поставила 100 Мб.
Вписываю скрипт в терминал и шедулер и ничего не меняется.
качает торент на максимальной скорости до упора.
Подскажите что не так ?
версия 6.46
скрин:
:local traf;
/queue simple
:for i from=3 to= 229 do = <
:if ([/queue simple find target-addresses=(«192.168.5.» . $i)] != «») do= <
:set traf [get [find target-addresses=(«192.168.5.» . $i)] total-bytes]
:if ($traf > 104857600) do = <
set [find target-addresses=(«192.168.5.» . $i)] max-limit= 64000/64000
>
>
>
Re: Ограничение пользователя по объему трафика в месяц
Сообщение Chupaka » 21 ноя 2020, 23:10
Re: Ограничение пользователя по объему трафика в месяц
Сообщение Diana » 22 ноя 2020, 10:03
Re: Ограничение пользователя по объему трафика в месяц
Сообщение Chupaka » 23 ноя 2020, 16:01
Re: Ограничение пользователя по объему трафика в месяц
Сообщение Diana » 24 ноя 2020, 13:02
Re: Ограничение пользователя по объему трафика в месяц
Сообщение Chupaka » 24 ноя 2020, 13:06
Ещё раз, скрипт ищет очередь, в которой target=IP/32, проверяет значение total-bytes и при превышении порога задаёт max-limit. От этого и пляшите.
Т.е. если вы вручную можете всё это увидеть и проделать — скрипт будет работать.
Re: Ограничение пользователя по объему трафика в месяц
Сообщение Diana » 24 ноя 2020, 14:14
Re: Ограничение пользователя по объему трафика в месяц
Сообщение Chupaka » 24 ноя 2020, 14:30
Почему не пишет? В первом посте этой темы есть отсылка на статью с описанием, да и свой скрипт вы ведь где-то взяли.
Если вы думаете, что создать IP Address или Simple Queue на роутере может только ас — у меня плохие новости Вы, может, поищите какой базовый курс по MikroTik RouterOS?
Вот простая инструкция, как создать Simple Queue, например (первый попавшийся не сильно сложный пример из Гугла): https://www.technotrade.com.ua/Articles . peed_limit
Если в статистике нужен именно Total Traffic — надо сменить Total Queue Type с default-small на какой-нибудь другой (например, default), без этого очередь не будет считать Total Traffic.