galeoner Posted January 20, 2016 Posted January 20, 2016 Хочу поделиться скриптом и одновременно услышать предложения/пожелания/упреки у более опытных товарищей с данного форума. Ну по порядку: В 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 Заранее рад если вам понравиться. Очень важны ваши комментарии! Косяки всегда есть) Для меня важно узнать где они если они есть) Вставить ник Quote
galeoner Posted January 21, 2016 Author Posted January 21, 2016 Сам выявил косячки. Когда клиент отваливается от WiFi и переподключается - leasetime обновляется, а timeout в address-list остается прежним. Пришлось в скрипт добавить 12 часов к таймауту методом простого сложения))) Вставить ник Quote
shulya Posted June 30, 2016 Posted June 30, 2016 Сам выявил косячки. Когда клиент отваливается от WiFi и переподключается - leasetime обновляется, а timeout в address-list остается прежним. Пришлось в скрипт добавить 12 часов к таймауту методом простого сложения))) Спасибо настроил у себя все работает. Вот только не пойму по косеку можно подробнее на что влияет. Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.