Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • 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 для поддержки кэша DNS

    Скрипт аренды DHCP для поддержки кэша DNS

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Скрипт аренды DHCP для поддержки кэша DNS, RouterOS
     
    idlemind
    Guest
    #1
    0
    05.04.2017 13:52:00
    Я изучал разные скрипты, чтобы обновлять локальный DNS кэш на основе DHCP-аренды. Хотя, на мой взгляд, это должно «просто работать», как в OpenWRT с dnsmasq, мне нужна рабочая версия прямо сейчас. Просматривая несколько вариантов, собранных сообществом, для меня упускается важная деталь — как лучше всего установить lease-script. Похоже, что если вставлять его в устройство через SSH, приходится вручную добавлять символы переноса строки \r\n и экранировать кавычки. Есть ли более удобный способ загрузить скрипт и затем указать его как файл при выборе lease-script?
     
     
     
    FIPTech
    Guest
    #2
    0
    03.05.2017 13:23:00
    Вот скрипт, который я написал для обновления статических записей DNS из DHCP-аренд. Его нужно вставить в скрипт аренды DHCP. По вопросу загрузки скрипта у меня ответа нет. Для работы необходима версия Router OS не ниже 6.39. Будьте осторожны при использовании на большом наборе DNS — он может удалять записи. Скрипт создан, чтобы поддерживать чистый локальный DNS без дублирующихся адресов и доменных имён.

    Проблема с таким скриптом аренды DHCP в том, что он срабатывает только при установке связи с клиентом. Это значит, что если клиент просто обновляет аренду, а имя домена клиента изменилось, DNS не обновится. Даже если аренда обновится в конце периода, скрипт не выполнится. Было бы здорово, если бы скрипт аренды мог срабатывать и на другие события DHCP, а не только на bound (renew, release и т.д.), чтобы можно было обновлять и удалять записи DNS при изменениях или освобождении аренды DHCP.

    Дайте знать, если найдёте решение этой проблемы.

    # Записать статическую DNS-запись для каждой аренды DHCP

    :local topdomain;
    :local FullHostName;
    :local NoUpdate false;

    # Настройте ваш домен
    :set topdomain "yourdomain.com";

    :if ($leaseBound = 1) do={

     :set FullHostName ($"lease-hostname" . "." . $topdomain)

     /ip dns static;

     :foreach n in [find] do={
       # Если статическая запись DNS совпадает с арендой — не трогаем и помечаем, чтобы не обновлять
       :if (([get $n name] = $"FullHostName") and ([get $n address] = $leaseActIP)) do={
         :set NoUpdate true;
       } else={
         # Если существует запись с таким же FQDN или с таким же адресом — удаляем
         :if (([get $n name] = $"FullHostName") or ([get $n address] = $leaseActIP)) do={
           :log info ("Удаляем из статического DNS: " . [get $n name] . " @ " . [get $n address]);
           remove $n;
         }
       }
     }

     # Добавляем новую статическую запись DNS при необходимости
     :if ($NoUpdate = false) do={
       :log info ("Добавляем в статический DNS: " . $"FullHostName" .  " @ " . $leaseActIP);
       add name=($"lease-hostname" . "." . $topdomain) address=$leaseActIP;
     }

    }
     
     
     
    idlemind
    Guest
    #3
    0
    03.05.2017 13:31:00
    Спасибо, какой самый эффективный способ «установить» это в RouterOS? Желательно через командную строку. Наверное, нельзя просто скопировать и вставить, да?
     
     
     
    FIPTech
    Guest
    #4
    0
    03.05.2017 14:26:00
    Да, думаю, ты просто можешь скопировать и вставить это в окно скрипта аренды DHCP сервера в Winbox. Я только что снова попробовал, и то, что я писал в предыдущем сообщении, не совсем точно. На самом деле скрипт срабатывает при освобождении DHCP. Вот новая версия скрипта с возможностью удаления DNS-записи, когда клиент освобождает DHCP.

    # DNS запись для аренды DHCP

    :local topdomain;
    :local FullHostName;
    :local NoUpdate false;

    # Настройте свой домен
    :set topdomain "yourdomain.com";

    :set FullHostName ($"lease-hostname" . "." . $topdomain)

    /ip dns static;

    :if ($leaseBound = 1) do={

    :foreach n in [find] do={
    # Если статическая DNS-запись совпадает с арендой, оставляем её и ставим флаг, чтобы избежать обновления DNS
    :if (([get $n name] = $"FullHostName") and ([get $n address] = $leaseActIP)) do={
    :set NoUpdate true;
    } else={
    # Если уже есть DNS-запись с таким же полным доменным именем или адресом — удаляем её
    :if (([get $n name] = $"FullHostName") or ([get $n address] = $leaseActIP)) do={
      :log info ("Удаляю из статического DNS: " . [get $n name] . " @ " . [get $n address]);
       remove $n;
     }
    }
    }
    # Добавляем новую статическую DNS-запись, если нужно
    :if ($NoUpdate = false) do={
    :log info ("Добавляю в статический DNS: " . $"FullHostName" .  " @ " . $leaseActIP);
    add name=($"lease-hostname" . "." . $topdomain) address=$leaseActIP;
    }
    # Удаляем DNS-запись при освобождении DHCP:
    } else={
    :log info ("Очищаю статическую DNS-запись при освобождении DHCP: " . $"FullHostName" . " @ " . $leaseActIP);
    :foreach n in [find] do={
    :if (([get $n name] = $"FullHostName") and ([get $n address] = $leaseActIP)) do={
    remove $n;
     }
    }
    }
     
     
     
    idlemind
    Guest
    #5
    0
    03.05.2017 16:24:00
    Спасибо, никак просто вставить это вне WinBox, да?
     
     
     
    FIPTech
    Guest
    #6
    0
    03.05.2017 17:48:00
    Ты также можешь использовать Webfig, чтобы скопировать и вставить скрипт. Если потом понадобится применить его на других роутерах, экспортируй конфигурацию DHCP через SSH или Telnet консоль командой: /ip dhcp-server export file=dhcp-config.rsc. Потом забери этот файл, например через FTP, отредактируй его в Notepad++ или похожем редакторе, чтобы убрать ненужные вещи, и скопируй на другие роутеры. После этого импортируй его снова через Telnet или SSH консоль командой: import file=dhcp-config.rsc. Так тебе не придется вручную экранировать lease-скрипт — экспорт/импорт сделает всё за тебя.
     
     
     
    idlemind
    Guest
    #7
    0
    03.05.2017 19:55:00
    Спасибо, попробую так сделать. Файл .rsc — это текстовый файл в формате UTF8? Я собираюсь зайти в WebFig и посмотреть, смогу ли импортировать его там, а иначе, наверное, придётся запускать WinBox.
     
     
     
    FIPTech
    Guest
    #8
    0
    04.05.2017 00:15:00
    Похоже на похожий случай с обратным слэшем в Unicode CSS, экранированным (шестнадцатеричным) способом. То есть, на самом деле, основная кодировка — ASCII. Например, «é» превращается в \E9.
     
     
     
    reddot
    Guest
    #9
    0
    22.09.2021 15:12:00
    Недавно я связался с командой поддержки Mikrotik с предложением добавить возможность запуска скрипта аренды при её продлении. В ответ мне сообщили, что такая функция может быть реализована, если поступит больше похожих запросов. Поэтому, пожалуйста, отправьте сообщение в службу поддержки, если вас интересует такая доработка запуска скриптов аренды.
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры