Jump to content
Калькуляторы

Mikrotik. Динамический шейпинг+ Блокировка ip прописанных вручную Для ресторанов, гостиниц и прочих нужд

Хочу поделиться скриптом и одновременно услышать предложения/пожелания/упреки у более опытных товарищей с данного форума.

Ну по порядку:

В DHCP сервере прописываем скрипт который выполняет следующие функции

1) добавлять простую очередь в Queues с заранее заданым лимитом скорости для одного ip

3) добавлять пользователя в /ip firewall address-list с таймаутом равным DHCP lease time

2) Блокировать ip-адреса введенные на устройстве вручную.

Самое интересное что по логике данные пункты зависят друг от друга и друг-друга дополняют.

Например если пользователь пропишет вручную ip - то он обойдет queues и будет сидет на полную скорость канала. Соотвественно по данному скрипту он попадает в список заблокированных. Если он решить играть по правилам DHCP сервера - то получив ip от него автоматически удаляется из списка и становиться пользователем по правилам и получает доступ в инет на той скорости какую указал сисадмин. Если пользователь ушел из сети то список очередей и адрес-лист от него освобождается, тем самым не загружая процессор микротика

Подготовка

Есть bridge c именем Guests-bridge. Есть DHCP сервер с именем Guests-DHCP. Какой ip и диапазон - это на ваше усмотрение.

В firewall filter добавляем два правила

 

/ip firewall filter

add action=add-src-to-address-list address-list=StaticGuests address-list-timeout=10s chain=forward in-interface=Guests-bridge src-address-list=!Guests-DHCP

add action=drop chain=forward src-address-list=StaticGuests

 

здесь можно было обойтись одним правилом но я решил отделить котлеты от мух и выделить статические адреса отдельным листом а потом его забанить.

В очередях создаю simple queue c именем Guests-Queue. Это будет основная очередь к которой будут подвязываться другие queues. В ней можно указать общую максимальную скорость для Guests-bridge.

Далее скрипт добавляем в /ip dhcp-server в поле скрипта

 

:local queueName "$leaseServerName-$leaseActIP";

:local leaseSrvTime [/ip dhcp-server get [find where name=$leaseServerName] lease-time]

:if ($leaseBound = "1") do={

/ip firewall address-list remove [find where address=$leaseActIP];

/queue simple add name=$queueName target=($leaseActIP . "/32") max-limit=5M/7M parent=Guests-Queue;

/ip firewall address-list add list=$leaseServerName address=$leaseActIP timeout=$leaseSrvTime;

} else={

/queue simple remove [find where target=($leaseActIP . "/32")];

/ip firewall address-list remove [find where address=$leaseActIP];

}

построчно

1) переменная для имени в очередях

2) переменная времени для timeout в адрес-листе. Берется от времени для DHCP-Lease

3) "если ip получен то..." поехали! По правилам ниже можно понять что сначала удаляется данный ip из списка. чтобы не задваивалось.

потом создается очередь

потом добавляется в список которому доступ есть)

4) далее идут комманды отмены если время жизни ip закончилось либо его удалили из списка dhcp-lease

 

Заранее рад если вам понравиться. Очень важны ваши комментарии! Косяки всегда есть) Для меня важно узнать где они если они есть)

Share this post


Link to post
Share on other sites

Сам выявил косячки. Когда клиент отваливается от WiFi и переподключается - leasetime обновляется, а timeout в address-list остается прежним. Пришлось в скрипт добавить 12 часов к таймауту методом простого сложения)))

Share this post


Link to post
Share on other sites

Сам выявил косячки. Когда клиент отваливается от WiFi и переподключается - leasetime обновляется, а timeout в address-list остается прежним. Пришлось в скрипт добавить 12 часов к таймауту методом простого сложения)))

Спасибо настроил у себя все работает. Вот только не пойму по косеку можно подробнее на что влияет.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.