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

    Скрипт DynDNS, который действительно работает?

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Скрипт DynDNS, который действительно работает?, RouterOS
     
    hobbes1069
    Guest
    #1
    0
    08.02.2018 20:44:00
    Я перерыл весь интернет в поисках решения этой проблемы, но ни один из скриптов с форумов или из вики не работает. Я попробовал практически всё, что мог придумать, и вне зависимости от метода получаю “404 Not Found”, хотя curl и wget на моём Linux-компе работают без проблем. Моя рабочая гипотеза — дело в базовой аутентификации Apache, которую использует members.dyndns.org. При использовании wget сначала возвращается 401 Unauthorized, но потом wget распознаёт эту базовую аутентификацию Apache, повторяет запрос — и всё работает. Curl с параметром --basic тоже срабатывает. Вообще реально ли заставить обновление работать через /tool fetch? Спасибо, Ричард.
     
     
     
    elgarchatuma
    Guest
    #2
    0
    19.04.2018 00:23:00
    Этот скрипт работает с моим rb951G-2hnd. Задайте нужные переменные:  
    :local username “escribe-tu-usuario-user”  
    :local password “put-password-here”  
    :local hostname “putyour-hostname-here.dlinkddns.com”  
    :global systemname [/system identity get name]

    :if ($systemname = “Site1”) do={ :set hostname “yourdomain1.dyndns.org” }  
    :if ($systemname = “Site2”) do={ :set hostname “yourdomain2.dyndns.org” }  
    :if ($systemname = “Site3”) do={ :set hostname “yourdomain3.dyndns.org” }  

    :global dyndnsForce  
    :global previousIP  

    Выводим немного отладочной информации:  
    :log info (“UpdateDynDNS: username = $username”)  
    :log info (“UpdateDynDNS: password = $password”)  
    :log info (“UpdateDynDNS: hostname = $hostname”)  
    :log info (“UpdateDynDNS: previousIP = $previousIP”)  

    Получаем текущий IP-адрес из интернета (на случай двойного NAT)  
    /tool fetch mode=http address=“checkip.dyndns.org” src-path=“/” dst-path=“/dyndns.checkip.html”  
    :local result [/file get dyndns.checkip.html contents]

    Разбираем полученный IP:  
    :local resultLen [:len $result]
    :local startLoc [:find $result ": " -1]
    :set startLoc ($startLoc + 2)  
    :local endLoc [:find $result “” -1]
    :local currentIP [:pick $result $startLoc $endLoc]
    :log info “UpdateDynDNS: currentIP = $currentIP”  

    Уберите знак # в следующей строке, чтобы принудительно обновлять каждый раз — удобно для отладки, но можно попасть в черный список DynDNS!  
    #:set dyndnsForce true  

    Определяем, нужно ли обновлять dyndns (подробнее про запросы обновления есть на Perform Update - Dyn):  
    :if (($currentIP != $previousIP) || ($dyndnsForce = true)) do={  
    :set dyndnsForce false  
    :set previousIP $currentIP  
    /tool fetch user=$username password=$password mode=http address=“members.dyndns.org” src-path=“/nic/update?hostname=$hostname&myip=$currentIP” dst-path=“/dyndns.txt”  
    :local result [/file get dyndns.txt contents]
    :log info (“UpdateDynDNS: Dyndns update needed”)  
    :log info ("UpdateDynDNS: Dyndns Update Result: ".$result)  
    :put ("Dyndns Update Result: ".$result)  
    } else={  
    :log info (“UpdateDynDNS: No dyndns update needed”)  
    }
     
     
     
    elgarchatuma
    Guest
    #3
    0
    19.04.2018 00:27:00
    Это работает с моим rb951g-2hnd  
    Нужные переменные:  
    :local username “escribe-tu-usuario-user”  
    :local password “put-password-here”  
    :local hostname “putyour-hostname-here.dlinkddns.com”  
    :global systemname [/system identity get name]

    :if ($systemname = “Site1”) do={  
    :set hostname “yourdomain1.dyndns.org”  
    }  

    :if ($systemname = “Site2”) do={  
    :set hostname “yourdomain2.dyndns.org”  
    }  

    :if ($systemname = “Site3”) do={  
    :set hostname “yourdomain3.dyndns.org”  
    }  

    :global dyndnsForce  
    :global previousIP  

    Выводим отладочную информацию:  
    :log info (“UpdateDynDNS: username = $username”)  
    :log info (“UpdateDynDNS: password = $password”)  
    :log info (“UpdateDynDNS: hostname = $hostname”)  
    :log info (“UpdateDynDNS: previousIP = $previousIP”)  

    Получаем текущий IP-адрес из интернета (на случай двойного NAT):  
    /tool fetch mode=http address=“checkip.dyndns.org” src-path=“/” dst-path=“/dyndns.checkip.html”  
    :local result [/file get dyndns.checkip.html contents]

    Парсим текущий IP:  
    :local resultLen [:len $result]
    :local startLoc [:find $result ": " -1]
    :set startLoc ($startLoc + 2)  
    :local endLoc [:find $result “” -1]
    :local currentIP [:pick $result $startLoc $endLoc]
    :log info “UpdateDynDNS: currentIP = $currentIP”  

    Уберите # в следующей строке, чтобы принудительно обновлять каждый раз — удобно для отладки, но есть риск попасть в черный список DynDNS!  
    #:set dyndnsForce true  

    Определяем, нужно ли обновлять dyndns — подробнее о запросах обновления смотрите в Perform Update - Dyn:  
    :if (($currentIP != $previousIP) || ($dyndnsForce = true)) do={  
    :set dyndnsForce false  
    :set previousIP $currentIP  
    /tool fetch user=$username password=$password mode=http address=“members.dyndns.org” src-path=“/nic/update?hostname=$hostname&myip=$currentIP” dst-path=“/dyndns.txt”  
    :local result [/file get dyndns.txt contents]
    :log info (“UpdateDynDNS: Dyndns update needed”)  
    :log info ("UpdateDynDNS: Dyndns Update Result: ".$result)  
    :put ("Dyndns Update Result: ".$result)  
    } else={  
    :log info (“UpdateDynDNS: No dyndns update needed”)  
    }
     
     
     
    arnaldo
    Guest
    #4
    0
    21.04.2018 20:10:00
    Этот скрипт поддерживает несколько интерфейсов, динамические интерфейсы и даже более одного DNS-записи на интерфейс. Пользуюсь им уже несколько лет.

    :local ifs {"ppp1";"wan1";"wan1"};
    :local hostnames {"a.homeip.net";"b.homeip.net";"c.homeip.net"};
    :local user "your-account-name";
    :local password "your-password";

    :foreach k,v in=$ifs do={
       :local if [/ip address find interface="$v"];
       :if ($if="") do={
           :log info "DynDNS: Интерфейс '$v' недоступен";
       } else={
           :local newip [/ip address get $if address];
           :if ([:typeof $newip]=nil) do={
               :log info "DynDNS: Нет IP-адреса на интерфейсе '$v'";
           } else={
               :set newip [:pick $newip 0 [:find $newip "/"]];
               :local oldip [:resolve ($hostnames->$k)];
               :local hostname ($hostnames->$k);
               :if ($newip!=$oldip) do={
                   :log info "DynDNS: IP адрес изменён для '$hostname/$v': $oldip -> $newip";
                   /tool fetch user=$user password=$password keep-result=no \
                   url="http://members.dyndns.org/nic/update\?hostname=$hostname&myip=$newip&wildcard=NOCHG&mx=NOCHG&backm­x=NOCHG";
               } else={
                   :log info "DynDNS: IP адрес не изменился для '$hostname/$v': $oldip";
               }
           }
       }
    }
     
     
     
    lillecarl
    Guest
    #5
    0
    22.04.2018 10:43:00
    Встроенный можно включить так: /ip cloud set ddns-enabled=yes  
    /ip cloud force-update  
    :delay 5s  
    /ip cloud print  
    Или можно использовать скрипт отсюда: https://github.com/Lillecarl/ROS_Scripts/tree/master/DDNS
     
     
     
    anav
    Guest
    #6
    0
    05.12.2018 23:04:00
    Привет, Арнальдо, выглядит интересно. Допустим, у меня есть URL knowchit.homeip.net, имя пользователя cl0wn и пароль: notmyrealone. У меня два провайдера: основной — с именем VLANfiber, использующий vlanxx от провайдера и работающий на интерфейсе ether на ethport5, и резервный (failover) — с именем cableISP, работающий на интерфейсе ether на ethport1. Как ты модифицируешь свой скрипт для двух интерфейсов, где один — основной, а другой — резервный и так далее?
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры