Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • 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 Lease для Simple Queues не работает после обновления до версии 7.13

    Скрипт DHCP Lease для Simple Queues не работает после обновления до версии 7.13

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Скрипт DHCP Lease для Simple Queues не работает после обновления до версии 7.13, RouterOS
     
    anassar26
    Guest
    #1
    0
    05.01.2024 22:15:00
    Привет, я много лет использовал скрипт DDNS на Mikrotik RouterOS 9.6, но после обновления до версии 7.13 скрипт перестал работать. Надеюсь, кто-то подскажет, что не так или что изменилось в 7.13.

    # 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, Hostname)  
    :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/hostname и сбрасываем счетчики  
    :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  
    }  
    }  
    }
     
     
     
    dotis
    Guest
    #2
    0
    17.02.2024 10:32:00
    У меня почти такая же проблема. У меня есть этот скрипт, но он не работает в V7:

    /queue simple add max-limit=5M/25M name="Total_Clients" target=10.4.29.0/23

    :local child "MacAddr - $leaseActMAC"  
    :if ($leaseBound = "1") do={  
    /queue simple add name="MacAddr - $leaseActMAC" target=($leaseActIP."/32") limit-at=2M/25M max-limit=2M/25M burst-limit=2M/25M burst-threshold=2M/25M burst-time=5/5 priority=8/8 parent="Total_Clients" comment=("Computer LAN ".[/ip dhcp-server lease get [find where active-mac-address=$leaseActMAC && active-address=$leaseActIP] host-name]);
    } else={  
    /queue simple remove $child  
    }

    Я пробовал использовать этот скрипт, но он создаёт очереди для каждого арендатора. А нужно, чтобы очереди создавались только для того dhcp-сервера, где срабатывает скрипт. Думаю, проблема в переменных — возможно, :local не поддерживается в DHCP-скриптах, но точно не уверен!
     
     
     
    msaid
    Guest
    #3
    0
    18.02.2024 00:39:00
    Та же проблема. Следующая конфигурация работает в версии 7.12.2, но не работает в 7.13, 7.13.1, 7.13.2, 7.13.3 и 7.13.4.  
    # 2024-02-18 07:27:12 by RouterOS 7.12.2  
    # software id = QU8N-B21Q  
    #  
    # model = RB750Gr3  
    # serial number = CC210F11FD6D  

    /ip dhcp-server  
    add add-arp=yes address-pool=default-dhcp insert-queue-before=bottom interface=bridge lease-script=":local queueName \"Client - \$leaseActMAC\";\r\
    \n \r\
    \n:if (\$leaseBound = \"1\") do={\r\
    \n   :if ([:len [/queue simple find name=\$queueName]] = 0) do={\r\
    \n      :log warning \"Queue Added for \$leaseActMAC\";\r\
    \n      /queue simple add name=\$queueName  target=(\$leaseActIP.\"/32\") queue=client/client limit-at=128k/128k max-limit=1M/1M burst-limit=4M/4M burst-threshold=2M/2M burst-time=10/10  priority=8/8 parent=\"Gateway\" comment=(\"Client - \".[/ip dhcp-server lease get [find where active-mac-address=\$leaseActMAC && active-address=\$leaseActIP] host-name]);\r\
    \n   } else={\r\
    \n      :local exist [/queue simple get [find name=\$queueName] target];\r\
    \n      \r\
    \n      :if (\$exist = \$leaseActIP) do={\r\
    \n         :log warning \"Queue Enabled - \$exist\";\r\
    \n         /queue simple enable \$queueName;\r\
    \n      } else={\r\
    \n         :log warning \"Queue Updated - \$exist\";\r\
    \n         /queue simple set target=(\$leaseActIP) [find name=\$queueName];\r\
    \n         /queue simple enable \$queueName;\r\
    \n      }\r\
    \n}\r\
    \n} else={\r\
    \n   :log warning \"Queue Disabled for \$leaseActMAC\";\r\
    \n   /queue simple disable \$queueName;\r\
    \n}" lease-time=10m name=default0  

    /ip dhcp-server network  
    add address=192.168.88.0/24 dns-server=192.168.88.1 gateway=192.168.88.1  

    /queue type  
    add kind=sfq name=client  
    add cake-ack-filter=filter cake-nat=yes kind=cake name=gwout  

    /queue simple  
    add dst=192.168.88.0/24 max-limit=1G/1G name="Local Traffic" target=192.168.88.0/24  
    add max-limit=20M/20M name=Gateway queue=gwout/gwout target=192.168.88.0/24  

    Очевидно, скрипт выполняется до этой строки (в логах я вижу запись): :log warning "Queue Added for $leaseActMAC";  
    Но новая очередь не создаётся, когда новый клиент получает свой лизинг.
     
     
     
    metron6
    Guest
    #4
    0
    27.02.2024 18:08:00
    Скрипт в любом случае не работает на версии 7.13.5, есть ли вообще какой-то скрипт, который действительно работает?
     
     
     
    robbiereindeer
    Guest
    #5
    0
    02.03.2024 12:42:00
    Это мой первый роутер MikroTik, но после того, как я провозился с DHCP-скриптами целый день, вот что выяснил:

    Во-первых, DHCP-скрипты действительно работают под версиями 7.13 и 7.14, но если в вашем скрипте есть хоть малейшая синтаксическая ошибка, он не запустится — ни логов, ни ошибок, ничего. Поэтому тестируйте скрипты сначала на консоли (естественно, придется подставлять фиктивные значения для переменных DHCP).

    Во-вторых, а это было большой неприятный сюрприз, имена переменных, указанные в справке на https://help.mikrotik.com/docs/display/ROS/DHCP#DHCP-Properties, неправильные — таких значений при запуске скрипта нет. Я обнаружил, что переменные, упомянутые в третьем посте на этой теме действительно работают: http://forum.mikrotik.com/t/dhcp-server-script-internal-global-variables/148563/1

    Вот они:
    leaseBound — установлено в "1", если аренда активна, иначе "0"
    leaseServerName — имя DHCP-сервера
    leaseActMAC — активный MAC-адрес
    leaseActIP — активный IP-адрес
    lease-hostname — имя клиента
    lease-options — массив полученных опций

    По какой-то причине среди них есть имена с дефисом, а это проблемный символ для имен переменных в скриптах, поэтому нужно использовать $"lease-hostname", чтобы обойти эту проблему (я просто скопировал их значение в локальную переменную с нормальным именем, вместо того чтобы разбираться с кавычками внутри кавычек).

    В общем, надеюсь, кому-то это поможет, и, может быть, кто-то обновит официальную документацию?
     
     
     
    msaid
    Guest
    #6
    0
    10.12.2024 15:57:00
    Привет! Небольшое обновление: я откладывал обновление с февраля 2024 года до сегодняшнего дня. Сегодня я обновился сразу с версии 7.12.2 до 7.16.2. Скрипт из указанного поста теперь работает как надо. Видимо, что-то в скрипте сломалось в версии 7.13 и было исправлено между 7.13.5 и 7.16.2. Так что смело обновляйте свой роутер~!
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры