?

Log in

No account? Create an account
Previous Entry Поделиться Next Entry
Микротик: создаем очередь для клиентов и режем им скорость по достижении лимита
mr_welk
Задумал резать злоупотребляющих траффиком клиентов на микротике. Правильное решение это Hotspot но он не подошёл, потому что сертификат для https придется покупать, иначе требуется подтверждение небезопасного соединения что годится для дома но не годится для офиса.


Поэтому пишем скрипт, срабатывающий при выдаче аренды DHCP :

[Скрипт для DHCP]

#Lease to Simple Queues
#V.1 By Virtual IT Export
:local queueName "Client- $leaseActMAC";
:if ($leaseBound = "1") do={
  /queue simple add name=$queueName target=($leaseActIP . "/32") limit-at=512k/512k max-limit=512k/512k comment=[/ip dhcp-server lease get [find where active-mac-address=$leaseActMAC && active-address=$leaseActIP] host-name];
} else={
  /queue simple remove $queueName
}

Таким образом все клиенты получают по личной очереди с ограничением 512к (это по желанию)

Дальше, делаем скрипт, который раз в определенное время (в зависимости от времени аренды) проверяет количество скачанного траффика и если оно
превышает определенное значение (в данном случае 500мб) режет скорость до 32/64 к

[Скрипт]

:local traffic;
:local ipaddr;
/queue simple
:log info "script started"
:for i from=60 to=100 do= {
:set ipaddr [("192.168.4.$i/32")];
# :log info "Addresses counter"
# :log info $i
:if ([find target=$ipaddr] != "") do= {
# :log info "Ip address"
# :log info $ipaddr
:set traffic [get [find target=$ipaddr] bytes];
# :log info "traffic="
# :log info $traffic
:local posSlash [:find $traffic "/" -1]
:local trafficlen [:len $traffic]
:local UpTraff [:pick $traffic 0 $posSlash];
# :log info "UpTraff"
# :log info $UpTraff
:local UpTrafflen [:len $UpTraff]
:local DownTraff [:pick $traffic ($posSlash+1) $trafficlen]
# :log info "DownTraff="
# :log info $DownTraff
  :if ($DownTraff  > 524288000) do= {
# :log info "Bingo!"
    set [find (target=$ipaddr)] limit-at=32k/64k max-limit=32k/64k;
   }
 }
}
# :log info "Finish!"



Ну и не забыть скрипт сброса счетчиков подсчета траффика периодически запускать (смотря за какой период считаем)

[Скрипт 2]
/queue simple reset-counters




Метки: , ,


  • 1
  • 1