Есть сеть, в сети адреса раздаются по DHCP. Нужно, что-бы при подключении клиентов каждому автоматически ограничивалась скорость в 10 мегабит. Для этого мы будем использовать функционал в DHCP-сервер Mikrotik под название "lease-script". Для этого зайдем в IP > DHCP Server в свойства нашего сервера.
В поле "Lease-Script" добавим наш скрипт. Он будет выполнятся при регистрации DHCP-клиента и при отключении. Сам скрипт имеет вид:
После того как клиент отключиться (потеряет аренду DHCP) значение "$leaseBound" станет "0" - и созданное правило в Queue с именем "Guest $leaseActMAC" удалиться:
Так же стоит заметить, что в комментарий правила Queue, при подключении клиентского устройства, создается запись, которая соответствует полю "Active Host Name" в IP > DHCP Server > DHCP Leases. Если это поле не заполнено - комментарий не создается.
В поле "Lease-Script" добавим наш скрипт. Он будет выполнятся при регистрации DHCP-клиента и при отключении. Сам скрипт имеет вид:
:local queueName "Guest $leaseActMAC";В этом скрипте можно использовать внутренние глобальные переменные, которые действуют только в этом поле:
:if ($leaseBound = "1") do={
/queue simple add name=$queueName parent=GUESTS target=($leaseActIP . "/32") max-limit=10M/10M comment=[/ip dhcp-server lease get [find where active-mac-address=$leaseActMAC && active-address=$leaseActIP] host-name];
} else={
/queue simple remove $queueName
}
- leaseBound - устанавливается в "1", если DHCP-клиент активен, в противном случае - устанавливается в "0";
- leaseServerName - передается в значение имя сервера DHCP;
- leaseActMAC - активный MAC - адрес;
- leaseActIP - активный IP - адрес.
/queue simple
add max-limit=50M/50M name=GUESTS target=192.168.88.0/24
Немного поясню скрипт и как это работает. Если клиент получил DHCP-аренду, то "$leaseBound" устанавливается в значение "1" и выполняется действие, которое добавляет правило ограничивающее ему скорость 10M/10M:
/queue simple add name=$queueName parent=GUESTS target=($leaseActIP . "/32") max-limit=10M/10M comment=[/ip dhcp-server lease get [find where active-mac-address=$leaseActMAC && active-address=$leaseActIP] host-name];Это правило является подчиненным нашему общему правилу ограничения на подсеть (GUESTS). Таким образом мы можем добавлять очень много таких правил, и они все будут ограничены общим родительским правилом в 50M/50M. Для общего развития скажу, параметром Priority назначается приоритет для очередей. Данный параметр может принимать значения от 1 до 8. 1 – наивысший приоритет, 8 – самый низкий приоритет. Сначала будут обрабатываться очереди с наивысшим приоритетом. Так же параметром Limit At, в правиле можно задать гарантированный параметр скорости. То есть шейпер сразу будет обеспечивать это значение в правиле, а потом, что останется - перераспределять.
После того как клиент отключиться (потеряет аренду DHCP) значение "$leaseBound" станет "0" - и созданное правило в Queue с именем "Guest $leaseActMAC" удалиться:
/queue simple remove $queueNameПравила выглядят так:
Так же стоит заметить, что в комментарий правила Queue, при подключении клиентского устройства, создается запись, которая соответствует полю "Active Host Name" в IP > DHCP Server > DHCP Leases. Если это поле не заполнено - комментарий не создается.
Используемые материалы:
не работает у меня :(
ОтветитьУдалитьубедитесь, что правило с именем GUESTS существует, или не используйте подчиненные правила.
Удалитьвсё как у вас на картинке, скрипт в дхцп в лизах
Удалитьправило /queue simple
Удалитьadd max-limit=50M/50M name=GUESTS target=x.x.x.x/x добавлено?
есть такое, и циферки показывают загрузку канала, но при подключении нового пользователя по дхцп - ничего не происходит
Удалитьубедитесь что используется именно тот dhcp-сервер, введите переменные и проверьте отработку скрипта в терминале, может невидимые символы или переносы при копировании скрипта. на 6.37 все работает, должно работать и на ранних версиях. Только что проверил на 6.28 - все отработало.
УдалитьНе работает меня.... Попробовал вставить скрипт напрямую в терминал
Удалитьinvalid value for argument numbers
Працює з першого разу
УдалитьЗаработало сегодня ... Только учета трафика не видно
ОтветитьУдалитьУ меня тоже что-то не работает, [IT_Admin@SideA] > /queue simple add name=$queueName parent=GUESTS target=($leaseActIP . "/32") max-limit=10M/10M comment=[/ip dhcp-server lease get [find where active-mac-a
ОтветитьУдалитьddress=$leaseActMAC && active-address=$leaseActIP] host-name];
no such item
Все норм работает!
ОтветитьУдалитьСпасибо, на 6.43.7 работает нормально.
ОтветитьУдалитьСпасибо добрый человек!
ОтветитьУдалить