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

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

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

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

  1. Есть подсеть 192.168.15.х/24.
  2. Необходимо ограничить каждого пользователя данной подсети месячным объемом трафика в 4 гигабайта.
  3. По достижении лимита - ограничить скорость пользователю до 64 kbit/s.

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

  • Адрес маршрутизатора 192.168.15.254/24
  • Адреса клиентов которых необходимо ограничить 192.168.15.17-192.168.15.28, 192.168.15.35, 192.168.15.67.
  • Есть другие клиенты, с другими адресами, на которых данное ограничение не распространяется.
  • Для всех клиентов созданы простые правила ограничения скорости (Queue Simple).

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

В поле Name введем название нашего скрипта, например Traff_Limit_4Gb.
В поле Source введем следующий скрипт (скопируйте приведенный ниже код и вставьте его в поле Source):

:local traf;
  /queue simple
 :for i from=17 to= 28 do =  {
  :if ([/queue simple find target-addresses=("192.168.15." . $i)] != "") do={
    :set traf [get [find target-addresses=("192.168.15." . $i)] total-bytes]
    :if ($traf  > 4294967296) do = {
      set [find target-addresses=("192.168.15." . $i)] max-limit= 64000/64000
    }
  }
}

Данный код скрипта (как видно из значения 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):

:local traf;
  /queue simple
   :if ([/queue simple find target-addresses=("192.168.15.35")] != "") do={
    :set traf [get [find target-addresses=("192.168.15.35")] total-bytes]
     :if ($traf  > 4294967296) do = {
      set [find target-addresses=("192.168.15.35")] max-limit= 64000/64000
  }
}

для 192.168.15.67 (в поле Name введем название скрипта, Traff_Limit_4Gb_IP67):

:local traf;
  /queue simple
   :if ([/queue simple find target-addresses=("192.168.15.67")] != "") do={
    :set traf [get [find target-addresses=("192.168.15.67")] total-bytes]
     :if ($traf  > 4294967296) do = {
      set [find target-addresses=("192.168.15.67")] max-limit= 64000/64000
  }
}

В результате в списке должно появится три скрипта:

  • Traff_Limit_4Gb (для диапазона IP 192.168.15.17-192.168.15.28)
  • Traff_Limit_4Gb_IP35 (для IP 192.168.15.35)
  • Traff_Limit_4Gb_IP67 (для IP 192.168.15.67)

Теперь нам необходимо заставить наши скрипты выполнятся, в этом нам на помощь придет планировщик - Sheduler

QR Code
QR Code Ограничение пользователей по объему трафика в месяц, с использованием простых очередей (generated for current page)