Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    RouterOS
    Скрипт – аренда DHCP для простых очередей

    Скрипт – аренда DHCP для простых очередей

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Скрипт – аренда DHCP для простых очередей, RouterOS
     
    dignome
    Guest
    #1
    0
    21.07.2014 03:31:00
    Зачем? Просто способ для тех, кто не очень дружит с техникой, понять, кто или что грузит интернет на роутере. Легко можно ограничить скорость для каждого отдельного компьютера или устройства. Практически не требует обслуживания, так как скрипт сам поддерживает таблицу simple queue в актуальном состоянии и самостоятельно убирает старые записи.

    Что он делает: этот скрипт просматривает таблицу DHCP-аренд в ROS, чтобы создать записи simple queue для каждого устройства. Он обновляет эти записи и удаляет устаревшие.

    Как использовать: скопируйте текст ниже в новый скрипт в RouterOS. Запланируйте выполнение скрипта с нужной периодичностью через планировщик RouterOS. Для устройств, отображаемых в списке simple queue только по MAC-адресу, можно задать имя вручную в таблице DHCP lease в поле комментария.

    # DHCP Lease to Simple Queues  
    # 2014 Lonnie Mendez (lmendez@anvilcom.com)  
    #  
    # Mikrotik RouterOS v6.9

    /ip dhcp-server lease  
    :foreach x in=[find] do={

     # берем переменные для дальнейшего использования  
     :local leaseaddr ([get $x address]."/32")
     :local leasemacaddr [get $x mac-address]
     :local leasehostname [get $x host-name]
     :local leasename [get $x comment]
     :local queuecomment  
     :local leaseinqueue false

     /queue simple  
     :foreach y in=[find] do={

       # берем переменные для использования дальше  
       :local queuetargetaddr [get $y target]
       :set queuecomment [get $y comment]

       # выделяем из комментария информацию (MAC, имя хоста)  
       :local queuemac [:pick $queuecomment 4 21]
       :local queuehostname [:pick $queuecomment 22 [:len $queuecomment]]

       # если MAC из аренды совпадает с MAC в очереди — обновляем запись в очереди  
       :if ($queuemac = $leasemacaddr) do={  
         # формируем комментарий  
         :set queuecomment ("dtq," . $leasemacaddr . "," . $leasehostname)

         set $y target=$leaseaddr comment=$queuecomment  
         :if ($leasename != "") do= {  
           set $y name=($leasename . " (" . $leasemacaddr . ")")  
         } else= {  
           :if ($leasehostname != "") do= {  
             set $y name=($leasehostname . " (" . $leasemacaddr . ")")  
           } else= {  
             set $y name=$leasemacaddr  
           }  
         }  
         :set leaseinqueue true  
       } else= {  
         # если IP есть, но MAC другой — обновляем MAC/имя и сбрасываем счетчики  
         :if ($queuetargetaddr = $leaseaddr) do={  
           # формируем комментарий  
           :set queuecomment ("dtq," . $leasemacaddr . "," . $leasehostname)

           set $y comment=$queuecomment  
           reset-counters $y  
           :if ($leasename != "") do= {  
             set $y name=($leasename . " (" . $leasemacaddr . ")")  
           } else= {  
             :if ($leasehostname != "") do= {  
               set $y name=($leasehostname . " (" . $leasemacaddr . ")")  
             } else= {  
               set $y name=$leasemacaddr  
             }  
           }  
           :set leaseinqueue true  
         }  
       }  
     }

     # если записи не было — добавляем новую для этой аренды  
     :if ($leaseinqueue = false) do={  
       # формируем комментарий  
       :set queuecomment ("dtq," . $leasemacaddr . "," . $leasehostname)  
       # составляем команду  
       :local cmd "/queue simple add target=$leaseaddr max-limit=100M/100M comment=$queuecomment"  
       :if ($leasename != "") do={  
         :set cmd "$cmd name=\"$leasename ($leasemacaddr)\""  
       } else= {  
         :if ($leasehostname != "") do={  
           :set cmd "$cmd name=\"$leasehostname ($leasemacaddr)\""  
         } else= {  
           :set cmd "$cmd name=\"$leasemacaddr\""  
         }  
       }

       :execute $cmd  
     }  
    }

    # Очистка — удаляем динамические записи, которых уже нет в таблице аренды  
    /queue simple  
    :foreach z in=[find] do={
     :local queuecomment [get $z comment]
     :local queue1stpart [:pick $queuecomment 0 3]
     :local queue2ndpart [:pick $queuecomment 4 21]
     :if ( $queue1stpart = "dtq") do={  
       :if ( [/ip dhcp-server lease find mac-address=$queue2ndpart] = "") do={
         :log info ("DTQ: Удаляю устаревшую запись для MAC-адреса - " . $queue2ndpart)  
         remove $z  
       }  
     }  
    }
     
     
     
    bpita
    Guest
    #2
    0
    26.02.2015 14:01:00
    Привет, dignome, твой скрипт безупречен… Я добавил небольшую доработку, чтобы различать диапазон (минимальный и максимальный) IP-адресов и тем самым создавать разные правила для разных клиентов. P.S.: Я пытался сделать это через сетевую маску, но у меня не получилось. Спасибо, Бернардо.

    # DHCP Lease to Simple Queues  
    # 2014 Lonnie Mendez (lmendez@anvilcom.com)  
    #  
    # Mikrotik RouterOS v6.9  

    /ip dhcp-server lease  
    :foreach x in=[find] do={

    # захватываем переменные для дальнейшего использования  
    :local leaseaddr ([get $x address])
    :local leasemacaddr [get $x mac-address]
    :local leasehostname [get $x host-name]
    :local leasename [get $x comment]
    :local queuecomment  

    :local minlimit 192.168.88.20  
    :local maxlimit 192.168.88.100  

    :local leaseinqueue false  

    /queue simple  
    :foreach y in=[find] do={

    # захватываем переменные для дальнейшего использования  
    :local queuetargetaddr [get $y target]
    :set queuecomment [get $y comment]

    # Извлекаем информацию из поля comment (MAC, Hostname)  
    :local queuemac [:pick $queuecomment 4 21]
    :local queuehostname [:pick $queuecomment 22 [:len $queuecomment]]

    # Если MAC из lease совпадает с MAC в очереди — обновляем запись очереди  
    :if ($queuemac = $leasemacaddr) do={  
    # формируем поле comment  
    :set queuecomment ("dtq," . $leasemacaddr . "," . $leasehostname)  

    set $y target=$leaseaddr comment=$queuecomment  
    :if ($leasename != "") do= {  
    set $y name=($leasename . " (" . $leasemacaddr . ")")  
    } else= {  
    :if ($leasehostname != "") do= {  
    set $y name=($leasehostname . " (" . $leasemacaddr . ")")  
    } else= {  
    set $y name=$leasemacaddr  
    }  
    }  
    :set leaseinqueue true  
    } else= {  
    # если IP существует для этого lease, но MAC другой — обновляем MAC/hostname и сбрасываем счетчик  
    :if ($queuetargetaddr = $leaseaddr) do={  
    # формируем поле comment  
    :set queuecomment ("dtq," . $leasemacaddr . "," . $leasehostname)  

    set $y comment=$queuecomment  
    reset-counters $y  
    :if ($leasename != "") do= {  
    set $y name=($leasename . " (" . $leasemacaddr . ")")  
    } else= {  
    :if ($leasehostname != "") do= {  
    set $y name=($leasehostname . " (" . $leasemacaddr . ")")  
    } else= {  
    set $y name=$leasemacaddr  
    }  
    }  
    :set leaseinqueue true  
    }  
    }  
    }  

    # Если записи не было — добавляем для этого lease  
    :if ($leaseinqueue = false) do={  
    # формируем поле comment  
    :set queuecomment ("dtq," . $leasemacaddr . "," . $leasehostname)  
    # формируем команду  
    :local cmd "/queue simple add target=$leaseaddr max-limit=128k/2M comment=$queuecomment"  
    :if ($leasename != "") do={  
    :set cmd "$cmd name=\"$leasename ($leasemacaddr)\""  
    } else= {  
    :if ($leasehostname != "") do={  
    :set cmd "$cmd name=\"$queuehostname ($leasemacaddr)\""  
    } else= {  
    :set cmd "$cmd name=\"$leasemacaddr\""  
    }  
    }  

    # Выполняем команду, если IP входит в заданный диапазон  
    :if ($leaseaddr >= $minlimit && $leaseaddr <= $maxlimit) do={  
    :execute $cmd  
    }  
    }  
    }  

    # Очистка — удаляем динамические записи, которых больше нет в таблице lease  
    /queue simple  
    :foreach z in=[find] do={
    :local queuecomment [get $z comment]
    :local queue1stpart [:pick $queuecomment 0 3]
    :local queue2ndpart [:pick $queuecomment 4 21]
    :if ( $queue1stpart = "dtq") do={  
    :if ( [/ip dhcp-server lease find mac-address=$queue2ndpart] = "") do={
    :log info ("DTQ: Удаляем устаревшую запись для MAC адреса - " . $queue2ndpart)  
    remove $z  
    }  
    }  
    }
     
     
     
    boen_robot
    Guest
    #3
    0
    26.02.2015 14:14:00
    Недавно мне нужно было создать очереди для записей DHCP, и я использовал гораздо более простое решение… Следующий скрипт применяется как lease-script:

    :local queueName "Guest $leaseActMAC";

    :if ($leaseBound = "1") do={
       /queue simple add name=$queueName parent=GUESTS place-before="Guest STATIC" 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
    }

    Родительская очередь «GUESTS» содержит общий лимит, который делится между пользователями. И, как видите, каждый пользователь получает 10 Мбит/с на загрузку и выгрузку… Настраивайте скорость по своему желанию.

    Каждый раз, когда запись DHCP истекает (или принудительно удаляется), lease-script вызывается с $leaseBound равным «0», так что это автоматически добавляет и удаляет очереди.
     
     
     
    Zapnologica
    Guest
    #4
    0
    09.03.2016 15:35:00
    Можете, пожалуйста, уточнить, как добавить скрипт аренды?
     
     
     
    boen_robot
    Guest
    #5
    0
    09.03.2016 16:32:00
    В Winbox (или, насколько я знаю, в WebFig то же самое...) зайдите в меню «IP > DHCP Server», на вкладке «DHCP» дважды кликните по DHCP-серверу, к которому хотите добавить скрипт. Вставьте или напишите скрипт в текстовое поле внизу (где немного выше написано «Lease script:»).
     
     
     
    amperex
    Guest
    #6
    0
    22.08.2016 22:15:00
    Привет, я просто пытаюсь вручную выполнить скрипт, чтобы его протестировать, но, к сожалению, он, похоже, ничего не делает. В списке простых очередей ничего не отображается. Какие правильные политики нужно установить, чтобы скрипт работал? Совместим ли он с RouterOS 6.34.4? Я пытаюсь сделать так, чтобы один из пользователей локальной сети не забирал всю полосу пропускания, а у остальных оставался интернет. Спасибо.
     
     
     
    boen_robot
    Guest
    #7
    0
    23.08.2016 02:12:00
    Привет, я просто пытаюсь вручную запустить скрипт, чтобы проверить его, но, к сожалению, он, похоже, ничего не делает. Этот скрипт требует переменные DHCP, которые передаются при запуске lease-скрипта, так что просто запускать его из терминала не получится. Тебе нужны значения для $leaseActMAC и $leaseActIP, которые соответствуют уже существующей аренде. Я бы посоветовал для теста применить его на реальном DHCP-сервере, но если хочешь убедиться, что ограничения не сработают, просто создай очереди, которые будут отключены при создании, например: /queue simple add disabled=yes ...
     
     
     
    BrasDeutscher
    Guest
    #8
    0
    04.09.2016 00:13:00
    Попробуйте вот это http://forum.mikrotik.com/t/make-automatic-static-dhcp-leases/101221/1
     
     
     
    Onexios
    Guest
    #9
    0
    15.03.2018 10:00:00
    Привет! Мне интересно насчёт этого скрипта. Кто-нибудь знает, ограничивает ли очередь цель сразу или только если уже назначено много других лизов? Буду очень признателен за любую информацию. Заранее спасибо!
     
     
     
    Temorizador
    Guest
    #10
    0
    17.11.2018 15:36:00
    Спасибо, брат, за этот скрипт. Он мне очень понадобился месяц назад, когда нужно было создать несколько отдельных очередей, :-( Я могу подтвердить, что он отлично работает на версии 6.43.4. Кстати, я выложил этот пост, потому что скрипт очень интересный и простой. Привет и ещё раз спасибо.

    P.S. Я слишком быстро говорил, кажется, скрипт хорошо добавляет очереди, но не удаляет их, когда запись истекает или принудительно завершается. Подскажите, кто может помочь?
     
     
     
    gammy69er
    Guest
    #11
    0
    11.02.2019 04:14:00
    Огромное спасибо! Ты сэкономил мне часы, пытаясь сделать это самому. Удаление в конце — просто гениально. Респект, лайки и золото тебе, сэр!
     
     
     
    stanego
    Guest
    #12
    0
    25.10.2019 04:23:00
    Подождите... с /22 ничего не работает. Помогите, пожалуйста.
     
     
     
    hmdslm1
    Guest
    #13
    0
    13.09.2022 09:24:00
    Вау, это работает отлично, спасибо!!!
     
     
     
    anassar26
    Guest
    #14
    0
    31.12.2023 08:48:00
    Пожалуйста, помогите изменить скрипт «DHCP Lease to Simple Queues», чтобы он работал на Mikrotik RouterOS v7.13. Обратите внимание, что скрипт отлично функционировал на предыдущей версии Mikrotik RouterOS v6.9.
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры