Mikrotik как ограничить объем трафика
Перейти к содержимому

Mikrotik как ограничить объем трафика

Ограничение пользователей по объему трафика в месяц, с использованием простых очередей

Довольно часто в практике использования маршрутизаторов Микротик возникает вопрос об ограничении пользователей по объему трафика, в какой-то определенный период времени. И если с лимитами по скоростям вопросов меньше и настройка проще, то вопрос с объемом часто ставит в тупик.

Непосредственно на сайте Mikrotik, есть замечательный и простой пример, который позволяет расширить ваши познания в области применения RouterOS и лишний раз демонстрирует гибкость, которую дает данная операционная система.

Итак, рассмотрим следующую ситуацию:

Прежде, чем переходить к решению поставленной задачи примем следующие условия:

Для начала нам необходимо создать скрипт, который будет проверять объем трафика, подсчитываемого в простых очередях у клиентов:
SystemScripts — нажмем «плюс».

В поле 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к+ файлов в облако, не получая за это временный «бан» на доступ к ресурсу? Легко!

Алгоритм действий будет таков:

  1. Создаем список IP-адресов, для которых нужно включить ограничение скорости;
  2. Организовать маркировку пакетов, идущих на и с ресурсов списка;
  3. Задать ограничение скорости по требуемым ресурсам при помощи очередей.

Приступим к настройке

Шаг 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:
  • CommentMEGA-upload.
  • chainforward.
  • Out. Interface — интерфейс, на котором висит Инет. В моем случае это «eth1-Wi-Fi».
  • Dst. Address Listmega.nz — это имя того самого набора адресных листов с прошлого шага.
  • Actionmark packet.
  • New Packet MarkMEGA-upload.
  • Passthroughttrue.
MEGA-download:
  • CommentMEGA-download.
  • chainforward.
  • In. Interface — интерфейс, на котором висит Инет. В моем случае это «eth1-Wi-Fi».
  • Src Address Listmega.nz — это имя того самого набора адресных листов с прошлого шага.
  • Actionmark packet.
  • New Packet MarkMEGA-download.
  • Passthroughtrue.

Шаг 3. Добавление правил очередей (Queues)

Далее, переходим во вкладку «Queue Tree» и также добавляем два новых правила:

MEGA-upload:
  • NameMEGA-upload
  • Parentglobal
  • Packet MarksMEGA-upload (выбираем из списка)
  • Queue Typedefault-small
  • Priority8
  • Bucket Size0.100
  • Max Limit25M
MEGA-download:
  • NameMEGA-download
  • Parentglobal
  • Packet MarksMEGA-download (выбираем из списка)
  • Queue Typedefault-small
  • Priority8
  • Bucket Size0.100
  • Max Limit25M

Всё. Теперь при синхронизации облачного хранилища на вход и выход скорость не поднимется больше 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *