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

    Скрипт обновления динамического DNS для No-IP DNS за NAT

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Скрипт обновления динамического DNS для No-IP DNS за NAT, RouterOS
     
    ConnectiviaSrl
    Guest
    #1
    0
    21.05.2012 09:06:00
    Привет всем! Мы используем сервис dyndns от http://www.no-ip.com на наших Mikrotik роутерах за NAT, которые распределены по сайтам Connectivia. По этой причине мы разработали (тестировали на RouterOs 5.x) новый скрипт, объединив два отличных скрипта, уже доступных на wiki.mikrotik.com. Получился скрипт обновления dyndns, специально для сервиса No-IP, когда устройства Mkt работают за NAT. Спасибо создателю скрипта changeip, опубликованного на Wiki http://wiki.mikrotik.com/wiki/Scripts — надеемся, никто не будет против использования базы или отдельных частей.

    Вот сам скрипт:

    # Скрипт динамического обновления DNS для No-IP за NAT  
    # Устанавливаем необходимые переменные  
    :local username "uzername"  
    :local password "pazzword"  
    :local host "dreammachine.no-ip.org"  

    :global previousIP  

    # выводим немного отладочной информации  
    :log info ("Обновление No-IP DNS: username = $username")  
    :log info ("Обновление No-IP DNS: hostname = $host")  
    :log info ("Обновление No-IP DNS: previousIP = $previousIP")  

    #  
    # За NAT — получаем публичный IP через dyndns url http://checkip.dyndns.org  

    /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 "</body>" -1]
    :local currentIP [:pick $result $startLoc $endLoc]
    :log info "No-IP DNS: currentIP = $currentIP"  

    :if ($currentIP != $previousIP) do={  
          :log info "No-IP: Текущий IP $currentIP не совпадает с предыдущим, требуется обновление"  
          :set previousIP $currentIP  
          :local url "http://dynupdate.no-ip.com/nic/update\3Fmyip=$currentIP&hostname=$host"  
          :log info "No-IP DNS: Отправляем обновление для $host"  
          /tool fetch url=$url user=$username password=$password mode=http dst-path=("no-ip_ddns_update.txt")  
          :log info "No-IP DNS: Хост $host обновлён на No-IP с IP $currentIP"  
    }  
    else={  
      :log info "No-IP: обновление не требуется"  
    }  

    # конец, команда RouterOs @ Connectivia S.r.l
     
     
     
    normis
    Guest
    #2
    0
    06.06.2012 11:30:00
    Спасибо! Можешь разместить это в нашей вики?
     
     
     
    nicholwee
    Guest
    #3
    0
    10.06.2012 02:34:00
    Отличная работа! Спасибо!
     
     
     
    nicholwee
    Guest
    #4
    0
    10.06.2012 02:43:00
    Привет! Я проверил этот скрипт на RB450G с версией 5.17. Но хотел уточнить, надо ли указывать интерфейс шлюза, чтобы он работал эффективнее. Потому что в моём предыдущем скрипте интерфейс шлюза был указан. Спасибо.
     
     
     
    Ham
    Guest
    #5
    0
    12.06.2012 03:31:00
    Спасибо, nicholwee, что написал этот скрипт, он просто отлично работает.
     
     
     
    screenname
    Guest
    #6
    0
    19.06.2012 15:27:00
    Спасибо за скрипт и предложение по улучшению. Поскольку мой IP редко меняется, я всё равно каждый месяц получаю напоминание по электронной почте войти в свой аккаунт на no-ip.com. Можно ли изменить скрипт так, чтобы он сначала обновлял фиктивный IP, а потом реальный через каждые X дней? Ещё раз спасибо.
     
     
     
    saintofinternet
    Guest
    #7
    0
    24.08.2013 03:05:00
    Не работает в версии 6.0 — файлы не создаются, и страница no-ip тоже не обновляется.
     
     
     
    fuba
    Guest
    #8
    0
    04.07.2014 02:14:00
    Мне удалось запустить это на версии 6.15. Нашёл здесь

    # Скрипт обновления Dynamic DNS для No-IP DNS за NAT  
    # Устанавливаем необходимые переменные  
    :local username "ваш логин no-ip"  
    :local password "ваш пароль no-ip"  
    :local host "ваш хост no-ip"  
    :global previousIP  

    # выводим отладочную информацию  
    :log info ("Обновление No-IP DNS: username = $username")  
    :log info ("Обновление No-IP DNS: hostname = $host")  
    :log info ("Обновление No-IP DNS: previousIP = $previousIP")  

    # за NAT — получаем публичный IP с помощью dyndns URL http://checkip.dyndns.org  
    /tool fetch mode=http address="checkip.dyndns.org" src-path="/" dst-path="/dyndns.checkip.html"  
    :delay 2  
    :local result [/file get dyndns.checkip.html contents]
    :log info "Результат dyndns = $result"  

    # парсим текущий IP из результата  
    :local resultLen [:len $result]
    :local startLoc [:find $result ": " -1]
    :set startLoc ($startLoc + 2)  
    :local endLoc [:find $result "</body>" -1]
    :local currentIP [pick $result $startLoc $endLoc]
    :log info "No-IP DNS: currentIP = $currentIP"  

    :if ($currentIP != $previousIP) do={  
     :log info "No-IP: Текущий IP $currentIP не совпадает с предыдущим, обновление нужно"  
     :set previousIP $currentIP  
     :local url "http://dynupdate.no-ip.com/nic/update/?myip=$currentIP&hostname=$host"  
     :log info "No-IP DNS: Отправляем обновление для $host"  
     /tool fetch url=$url user=$username password=$password mode=http dst-path=("no-ip_ddns_update.txt")  
     :log info "No-IP DNS: Хост $host обновлён на No-IP с IP $currentIP"  
     :delay 2  
     :local result [/file get "no-ip_ddns_update.txt" contents]
     :log info "Результат обновления = $result"  
    } else={  
     :log info "No-IP: обновление не требуется"  
    }  

    # конец
     
     
     
    djynny
    Guest
    #9
    0
    09.12.2015 16:31:00
    Версия ROS >= 6.27 Добавьте скрипт с политикой чтения, записи и тестирования под названием no-ip_update:

    Код:
    # Скрипт обновления Dynamic DNS для No-IP DNS за NAT  
    Задайте необходимые переменные:  
    :local username “USER”  
    :local password “PASS”  
    :local host “HOST”  
    :global previousIP — за NAT, используется функция MikroTik IP Cloud  
    # текущий IP  
    /ip cloud force-update  
    :delay 5  
    :local currentIP [/ip cloud get public-address]
    :log info “No-IP DNS: currentIP = $currentIP”  
    # сравниваем IP  
    :if ($currentIP not $previousIP) do={  
     :log info “No-IP: текущий IP $currentIP не совпадает с предыдущим, нужно обновление”  
     # текущий IP заменяет предыдущий  
     :set previousIP $currentIP  
     :local url "> https://dynupdate.no-ip.com/nic/update/?myip=$currentIP&hostname=$host > "  
     :log info “No-IP DNS: отправка обновления для $host”  
     # отправляем данные, необходимые для API no-ip через https  
     /tool fetch url=$url user=$username password=$password mode=https keep-result=no  
     :log info “No-IP DNS: Хост $host обновлен на No-IP с IP $currentIP”  
    } else={  
     :log info "No-IP: обновление не требуется"  
    }  
    end

    Я пробовал этот no ip апдейтер за NAT, использую RouterOS 6.29. Но, похоже, он не работает. Он только показывает, что мой динамический публичный IP изменился, но не может обновить его на noip.  
    https://drive.google.com/file/d/0B19T49EYIVfRYW5sRVRtOHRpOWc/view?usp=sharing  
    Djemmy
     
     
     
    djynny
    Guest
    #10
    0
    09.12.2015 16:48:00
    Думаю, я решил проблему. #compare IPs :if ($currentIP not $previousIP) do={ должно быть :if ($currentIP != $previousIP) do={ Думаю, это просто опечатка. Спасибо за скрипт.
     
     
     
    gbroin
    Guest
    #11
    0
    19.09.2018 15:43:00
    У меня не сработало, но, кажется, я решил проблему:

    # Скрипт обновления Dynamic DNS для No-IP DNS за NAT  
    Задаём нужные переменные:  
    :local username “USER”  
    :local password “PASS”  
    :local host “HOST”  

    Получаем предыдущий IP:  
    :local previousIP [/put [:resolve $host]]

    Получаем текущий IP с помощью функции MikroTik IP Cloud  
    /ip cloud force-update  
    :delay 5  
    :local currentIP [/ip cloud get public-address]

    Логируем IP:  
    :log info “No-IP: Предыдущий IP = $previousIP”  
    :log info “No-IP: Текущий IP = $currentIP”  

    # Сравниваем IP и обновляем хост, если нужно  
    :if ($currentIP != $previousIP) do={  
    :log info “No-IP: Текущий IP ($currentIP) отличается от предыдущего ($previousIP), нужно обновить”  
    # текущий IP заменяет предыдущий  
    :local url “https://dynupdate.no-ip.com/nic/update/?myip=$currentIP&hostname=$host”  
    :log info “No-IP: Отправляем обновление для $host”  
    # отправляем данные, необходимые в API no-ip через https  
    /tool fetch url=$url user=$username password=$password mode=https keep-result=no  
    :log info “No-IP: Хост $host обновлён на No-IP с IP $currentIP”  
    } else={  
    :log info "No-IP: обновление не требуется"  
    }  
    end
     
     
     
    alinmear
    Guest
    #12
    0
    22.07.2021 20:02:00
    Обновил скрипт. Протестировано на 7.1beta6:

    # Скрипт обновления динамического DNS для No-IP DNS за NAT

    # Задаём необходимые переменные  
    :local username "al1nm3ar"  
    :local password "!-IcedGuardian86-!"  
    :local host "pylonlabs.ddns.net"

    # Получаем предыдущий IP  
    :local previousIP [/put [:resolve $host]]

    # Получаем текущий IP с помощью функции MikroTik IP Cloud  
    /ip cloud force-update  
    :delay 5  
    :local currentIP [/ip cloud get public-address]

    # Логируем IP-адреса  
    :log info "No-IP: Предыдущий IP = $previousIP"  
    :log info "No-IP: Текущий IP = $currentIP"

    # Сравниваем IP и обновляем хост при необходимости  
    :if ($currentIP != $previousIP) do={  
     :log info "No-IP: Текущий IP ($currentIP) не совпадает с предыдущим ($previousIP), обновление нужно"  
     # текущий IP заменяет предыдущий  
     :local url "https://dynupdate.no-ip.com/nic/update/?hostname=$host"  
     :log info "No-IP: Отправляем обновление для $host"  
     # отправляем данные, необходимые в API no-ip через https  
     /tool fetch url=$url http-method=post user=$username password=$password mode=https keep-result=no http-data="{\"myip\"=\"$currentIP\"}"  
     :log info "No-IP: Хост $host обновлён на No-IP с IP $currentIP"  
    } else={  
     :log info "No-IP: Обновление не требуется"  
    }

    # конец
     
     
     
    Jotne
    Guest
    #13
    0
    24.07.2021 20:00:00
    Тебе нужно сменить пароль, раз ты его тут выложил, если ты ещё этого не сделал.
     
     
     
    karanik
    Guest
    #14
    0
    06.10.2021 21:17:00
    Привет! Есть ли какой-нибудь скрипт для no-ip, чтобы работал с версией 6.48?
     
     
     
    diamuxin
    Guest
    #15
    0
    13.10.2021 16:57:00
    Привет, попробуй это: # Автоматическое обновление Dynamic DNS для No-IP

    #--------------- Измени значения в этом разделе, чтобы они соответствовали твоей настройке ------------------

    # Данные аккаунта No-IP
    :local noipuser "xxxxxxxxxx"
    :local noippass "xxxxxxxxxx"

    # Укажи имя хоста или метку сети для обновления.
    # Хосты с пробелами не поддерживаются. Замени значение в кавычках на свои имена хостов.
    # Чтобы указать несколько хостов, разделяй их запятыми.
    :local noiphost "xxxxxxxxx.noip.com"

    # Название интерфейса, который получает динамический IP, у меня это: pppoe-out1
    :local inetinterface "pppoe-out1"

    #------------------------------------------------------------------------------------
    # Дальше менять ничего не нужно

    :global previousIP

    :if ([/interface get $inetinterface value-name=running]) do={
    # Получаем текущий IP на интерфейсе
      :local currentIP [/ip address get [find interface="$inetinterface" disabled=no] address]

    # Убираем маску сети у IP  
      :for i from=( [:len $currentIP] - 1) to=0 do={
          :if ( [:pick $currentIP $i] = "/") do={
              :set currentIP [:pick $currentIP 0 $i]
          }
      }

      :if ($currentIP != $previousIP) do={
          :log info "No-IP: Текущий IP $currentIP не совпадает с предыдущим, нужно обновить"
          :set previousIP $currentIP

    # URL для обновления. Обрати внимание, "\3F" — это шеснадцатеричный код знака вопроса (?). Он нужен, так как ? — спецсимвол в командах.
          :local url "http://dynupdate.no-ip.com/nic/update\3Fmyip=$currentIP"
          :local noiphostarray
          :set noiphostarray [:toarray $noiphost]
          :foreach host in=$noiphostarray do={
              :log info "No-IP: Отправляем обновление для $host"
              /tool fetch url=($url . "&hostname=$host") user=$noipuser password=$noippass mode=http dst-path=("no-ip_ddns_update-" . $host . ".txt")
              :log info "No-IP: Хост $host обновлён на No-IP с IP $currentIP"
          }
      }  else={
          :log info "No-IP: Предыдущий IP $previousIP совпадает с текущим, обновление не требуется"
      }
    } else={
      :log info "No-IP: Интерфейс $inetinterface сейчас не работает, обновление не будет выполнено."
    } С уважением.
     
     
     
    hardus
    Guest
    #16
    0
    31.01.2022 05:26:00
    Привет! Сначала я писал, потому что не мог заставить это работать, но в итоге всё получилось. Вот моё решение для тех, кто только начинает с Mikrotik:

    Сначала я создал скрипт для NoIp, который работал при ручном запуске, но не запускался через планировщик. Вот что сработало:

    Заглавные буквы в названиях не работают.  
    Имя скрипта: noip  
    Политика: оставил по умолчанию, все галочки включены.

    Исходник:

    # Скрипт для обновления Dynamic DNS через No-IP за NAT

    # Устанавливаем нужные переменные  
    :local username "Ваше имя пользователя NoIP (не email, а именно Username)"  
    :local password "Ваш пароль NoIP"  
    :local host "Ваш хостнейм на NoIP"

    # Получаем предыдущий IP  
    :local previousIP [/put [:resolve $host]]

    # Получаем текущий IP с помощью MikroTik IP Cloud  
    /ip cloud force-update  
    :delay 5  
    :local currentIP [/ip cloud get public-address]

    # Логируем IP-адреса  
    :log info "No-IP: Previous IP = $previousIP"  
    :log info "No-IP: Current IP = $currentIP"

    # Сравниваем IP и обновляем хост, если нужно  
    :if ($currentIP != $previousIP) do={  
       :log info "No-IP: Текущий IP ($currentIP) не совпадает с предыдущим ($previousIP), нужно обновить"  
       # текущий IP заменяет предыдущий  
       :local url "https://dynupdate.no-ip.com/nic/update/?hostname=$host"  
       :log info "No-IP: Отправляем обновление для $host"  
       # отправляем данные, обязательные для API no-ip через https  
       /tool fetch url=$url http-method=post user=$username password=$password mode=https keep-result=no http-data="{\"myip\"=\"$currentIP\"}"  
       :log info "No-IP: Хост $host обновлён на No-IP с IP $currentIP"  
    } else={  
       :log info "No-IP: Обновление не требуется"  
    }

    # Конец

    Настройки планировщика:  
    Имя: noip  
    Интервал: сначала поставил 0:00:05 для теста, чтобы проверить, работает ли запуск, потом сменил на 00:05:00, когда всё заработало.  
    Политика: все галочки включены по умолчанию  
    В событии: /system script run noip
     
     
     
    parsaaalm
    Guest
    #17
    0
    28.01.2024 01:41:00
    Работал на Mikrotik OS версии 7.13.3 за NAT.
     
     
     
    kasser010
    Guest
    #18
    0
    19.06.2015 07:55:00
    Привет! Я создал новую версию Updater с такими возможностями:  
    [ ]использование IP Cloud для получения публичного IP (требуется ROS v6.14)
    [ ]обновление хоста через https
    [ ]автоматическое обновление каждые 3 минуты
    [ ]не создает никаких файлов

    Просто скопируй следующий код в текстовый файл, отредактируй USER, PASS и HOST, вставь в CLI — и скрипт Updater будет создан:

    ROS версия >= 6.27  
    Добавь скрипт с политикой read, write, test под названием no-ip_update:  

    # Скрипт обновления динамического DNS для No-IP DNS за NAT  
    # Задаем необходимые переменные  
    :local username "USER"  
    :local password "PASS"  
    :local host "HOST"  
    :global previousIP  

    # За NAT — используем MikroTik IP Cloud  
    # Текущий IP  
    /ip cloud force-update  
    :delay 5  
    :local currentIP [/ip cloud get public-address]
    :log info "No-IP DNS: currentIP = $currentIP"  

    # Сравнение IP  
    :if ($currentIP not $previousIP) do={  
     :log info "No-IP: Текущий IP $currentIP не равен предыдущему, требуется обновление"  
     # текущий IP заменяет предыдущий  
     :set previousIP $currentIP  
     :local url "https://dynupdate.no-ip.com/nic/update/?myip=$currentIP&hostname=$host"  
     :log info "No-IP DNS: Отправка обновления для $host"  
     # отправляем данные в no-ip API через https  
     /tool fetch url=$url user=$username password=$password mode=https keep-result=no  
     :log info "No-IP DNS: Хост $host обновлен на No-IP с IP $currentIP"  
    } else={  
     :log info "No-IP: обновление не требуется"  
    }  
    # конец  

    Вставь в CLI:  
    /ip cloud set ddns-enabled=yes  
    /system scheduler add name=no-ip-updater disabled=no interval=3m policy=read,write,test on-event=no-ip_update  

    ROS версия с 6.14 по 6.26  
    Добавь скрипт с политикой read, write, test под названием no-ip_update:  

    # Скрипт обновления динамического DNS для No-IP DNS за NAT  
    # Задаем необходимые переменные  
    :local username "USER"  
    :local password "PASS"  
    :local host "HOST"  
    :global previousIP  

    # За NAT — используем MikroTik IP Cloud  
    # Текущий IP  
    /ip cloud force-update  
    :delay 5  
    :local currentIP [/ip cloud get public-address]
    :log info "No-IP DNS: currentIP = $currentIP"  

    # Сравнение IP  
    :if ($currentIP not $previousIP) do={  
     :log info "No-IP: Текущий IP $currentIP не равен предыдущему, требуется обновление"  
     # текущий IP заменяет предыдущий  
     :set previousIP $currentIP  
     :local url "https://dynupdate.no-ip.com/nic/update/?myip=$currentIP&hostname=$host"  
     :log info "No-IP DNS: Отправка обновления для $host"  
     # отправляем данные в no-ip API через https  
     /tool fetch url=$url user=$username password=$password mode=https keep-result=no  
     :log info "No-IP DNS: Хост $host обновлен на No-IP с IP $currentIP"  
    } else={  
     :log info "No-IP: обновление не требуется"  
    }  
    # конец  

    Вставь в CLI:  
    /ip cloud set enabled=yes  
    /system scheduler add name=no-ip-updater disabled=no interval=3m policy=read,write,test on-event=no-ip_update
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры