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

    Проблема с скриптом для no-ip.info после обновления до версии 6.12

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Проблема с скриптом для no-ip.info после обновления до версии 6.12, RouterOS
     
    CoreThread
    Guest
    #1
    0
    08.05.2014 10:40:00
    Привет, ребята! Мой скрипт для динамического обновления IP на no-ip.info ведёт себя странно после обновления с версии 5.20 до 6.12. Сначала была проблема с обновлением IP — он обновлял старый IP, а теперь меняет переменную IP на новый, но обновляет её каждый раз при запуске скрипта вместо того, чтобы записать в лог, что обновление не требуется. Вот сам скрипт:

    # No-IP автоматическое обновление Dynamic DNS

    #--------------- Измените значения в этом разделе под вашу конфигурацию ------------------

    # Информация о аккаунте No-IP
    :local noipuser "MY-EMAIL@gmail.com"
    :local noippass "MY-PASSWORD"

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

    # Укажите имя интерфейса, на котором назначен динамический IP
    :local inetinterface "ADSL" # pppoe-интерфейс провайдера

    #------------------------------------------------------------------------------------
    # Здесь больше ничего менять не нужно

    :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 не совпадает с предыдущим IP, обновление требуется"
          :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 совпадает с текущим IP, обновление не требуется"
      }
    } else={
      :log info "No-IP: Интерфейс $inetinterface сейчас не работает, обновление не будет выполнено."
    }

    Я только понял, что глобальная переменная previousIP не создаётся автоматически, а если я создаю её вручную — значение не обновляется…
     
     
     
    adm1n1strat0r
    Guest
    #2
    0
    10.06.2014 20:29:00
    Привет, ребята! Я внес небольшие исправления в скрипт обновления no-ip, и теперь он работает на RouterOS v6.13. Изменения такие: Получаем значение предыдущего IP-адреса  
    # Получаем ваш предыдущий IP-адрес  
    :set previousIP [:resolve $noiphost]
    Удалил создание файла no_ip_ddns_update_<no-ip_host>.txt из команды fetch с опцией keep-result=no  

    Полный код скрипта:  

    # No-IP автоматическое обновление динамического DNS для RouterOS v6.x  

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

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

    # Установите имя хоста или метку сети для обновления.  
    # Пробелы в именах хостов не поддерживаются. Замените значение в кавычках ниже на ваши имена хостов.  
    # Для указания нескольких хостов разделяйте их запятыми.  
    :local noiphost "hostname.no-ip.net"  

    # Укажите имя интерфейса, который получает динамический IP-адрес  
    :local inetinterface "your_external_interface"  

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

    :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]
          }  
      }  

    # Получаем предыдущий IP-адрес  
      :set previousIP [:resolve $noiphost]
       
      :if ($currentIP != $previousIP) do={  
          :log info "No-IP: Текущий IP $currentIP не совпадает с предыдущим IP $previousIP, требуется обновление"  
          :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 keep-result=no;  
              :log info "No-IP: Хост $host обновлён на No-IP с IP $currentIP"  
          }  
      }  else={  
          :log info "No-IP: Предыдущий IP $previousIP совпадает с текущим IP, обновление не требуется"  
      }  
    } else={  
      :log info "No-IP: Интерфейс $inetinterface сейчас неактивен, обновление не будет выполнено."  
    }  

    # --------------------------------------------------------------------------------------
     
     
     
    matteorb
    Guest
    #3
    0
    12.06.2014 10:30:00
    Привет, ребята! Нам очень нужна помощь. У меня есть RB951G с RouterOS 6.13 — этот скрипт не работает. Я создал файл “no-ip_ddns_update” и запускаю его через планировщик задач, но результата нет. Прикладываю скрипт:

    # No-IP автоматическое обновление Dynamic DNS для RouterOS v6.x

    #--------------- Измените значения в этом разделе под вашу конфигурацию ------------------

    # Информация о аккаунте No-IP
    :local noipuser "xxxxxx" <МОЙ USER ID>
    :local noippass "xxxxxx" <МОЙ ПАРОЛЬ>

    # Установите имя хоста или метку сети для обновления.
    # Имена с пробелами не поддерживаются. Замените значение в кавычках на ваш хост.
    # Чтобы указать несколько хостов, разделите их запятыми.
    :local noiphost "xxxxxx.noip.me" <МОЙ ХОСТ>

    # Название интерфейса, который получает динамический IP
    :local inetinterface "pppoe-out1" <МОЕ НАЗВАНИЕ ИНТЕРФЕЙСА>

    # No-IP автоматическое обновление Dynamic DNS для RouterOS v6.x

    #------------------------------------------------------------------------------------
    # Больше изменений не требуется

    :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]
          }
      }

    # Получаем предыдущий IP
      :set previousIP [:resolve $noiphost]
     
      :if ($currentIP != $previousIP) do={
          :log info "No-IP: Текущий IP $currentIP не совпадает с предыдущим $previousIP, нужно обновить"
          :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 keep-result=no;
              :log info "No-IP: Хост $host обновлен на No-IP с IP $currentIP"
          }
      }  else={
          :log info "No-IP: Предыдущий IP $previousIP совпадает с текущим, обновление не нужно"
      }
    } else={
      :log info "No-IP: Интерфейс $inetinterface сейчас не активен, обновление не производится."
    }

    # --------------------------------------------------------------------------------------

    Это планировщик задач:

    /system scheduler
    add comment="Update No-IP DDNS" disabled=yes interval=300s name=no-ip_ddns_update on-event=no-ip_ddns_update policy=read,write,test start-date=jun/12/2014 start-time=08:55:11

    Спасибо за ответы! Привет, Маттео
     
     
     
    rextended
    Guest
    #4
    0
    12.06.2014 10:34:00
    Попробуй мой скрипт на эту тему.
     
     
     
    matteorb
    Guest
    #5
    0
    12.06.2014 12:52:00
    Ничего не работает, Rextender. Объясню, что я сделал: создал скрипт, который должен запускаться при каждой перезагрузке, но он не работает! http://pichost.me/1839366/ Скомпилировал скрипт с моим email, логином, паролем и хостом, скопировал код в /system script http://pichost.me/1839367/, но если я вообще правильно его создал, как мне запускать этот скрипт каждые 10 или 5 минут с помощью планировщика? Извините, но для меня это первый раз, когда я работаю со скриптами. Буду благодарен за совет. С уважением, Маттео.
     
     
     
    adm1n1strat0r
    Guest
    #6
    0
    12.06.2014 21:34:00
    Привет, matteorb. Скрипт из моего предыдущего сообщения работает на таком же железе, как у тебя (951G), и на той же версии ОС (RouterOS 6.13). Я заметил, что у тебя в планировщике задан параметр disabled=no, а это значит, что эта задача не будет выполняться. Ты можешь использовать запись из вики для планировщика:

    /system scheduler add comment="Update No-IP DDNS" disabled=no interval=5m name=no-ip_ddns_update on-event=no-ip_ddns_update policy=read,write,test
     
     
     
    matteorb
    Guest
    #7
    0
    13.06.2014 13:23:00
    Всем привет! Я решил проблему с изменением в скрипте, спасибо моему другу с форума «rodolfo». Вот рабочий скрипт для вставки в планировщик на интервал 5 минут. ИЗМЕНЯЙТЕ ТОЛЬКО ЗАГЛАВНЫЕ БУКВЫ:

    :local noipuser value="ВСТАВЬТЕ ПОЧТУ";  
    :local noippass value="ВСТАВЬТЕ ПАРОЛЬ";  
    :local noiphost value="ВСТАВЬТЕ ДОМЕННОЕ ИМЯ";  
    :local inetinterface value="НАЗВАНИЕ ADSL ИНТЕРФЕЙСА, У МЕНЯ PPPOE-OUT1";  
    :local currentIP value="0.0.0.0/0";  
    :local url value="http://dynupdate.no-ip.com/nic/update?myip=";  

    :if ([/interface get НАЗВАНИЕ ADSL ИНТЕРФЕЙСА value-name=running] = true) do={
    :set $currentIP value=[/ip address get [find where interface=НАЗВАНИЕ ADSL ИНТЕРФЕЙСА] address];
    :for i from=([:len $currentIP] - 1) to=0 do={
     :if ([:pick $currentIP $i] = "/") do={
      :set $currentIP value=[:pick $currentIP 0 $i];
     }  
    }  
    :if ($currentIP != $previousIP) do={  
     :log info message=("No-IP: Текущий IP ".$currentIP." отличается от предыдущего, требуется обновление");  
     :set $previousIP value=$currentIP;  
     :log info message=("No-IP: Отправляю обновление для ".$noiphost);  
     /tool fetch url=($url.$currentIP."&hostname=".$noiphost) user=$noipuser password=$noippass mode=http dst-path=("no_ip_ddns_update_".$noiphost.".txt");  
     :log info message=("No-IP: Хост ".$noiphost." обновлён на No-IP с IP ".$currentIP);  
    } else={  
     :log info message=("No-IP: Предыдущий IP ".$previousIP." совпадает с текущим, обновление не нужно");  
    }  
    } else={  
    :log info message=("No-IP: ".НАЗВАНИЕ ADSL ИНТЕРФЕЙСА." сейчас не работает, обновление не будет выполнено.");  
    }  

    И вот скрипт для планировщика, который запускается автоматически при перезагрузке:  
    /system scheduler  
    add name=noip-boot on-event=":global previousIP value=\"0.0.0.0/0\"" policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive,api start-time=startup  

    Спасибо всем за отклики! Привет от Matteo.
     
     
     
    mgx
    Guest
    #8
    0
    15.06.2014 19:47:00
    Ни один из ваших скриптов у меня не сработал (у меня второй NAT), поэтому я сделал рабочую модификацию автоматического обновления Dynamic DNS No-IP для RouterOS v6.x.

    #--------------- Измените значения в этом разделе под вашу конфигурацию ------------------

    # Данные учётной записи No-IP
    :local noipuser "ВАШ_ЛОГИН_ОТ_NO_IP"
    :local noippass "ВАШ_ПАРОЛЬ_ОТ_NO_IP"

    # Укажите имя хоста или метку сети для обновления.
    # Имена хостов с пробелами не поддерживаются. Замените значение в кавычках на ваши имена хостов.
    # Для нескольких хостов указывайте через запятую.
    :local noiphost "ВАШ_ХОСТ.no-ip.org"

    # Укажите имя интерфейса, на котором появляется динамический IP
    :local inetinterface "ИМЯ_ВАШЕГО_WAN_ИНТЕРФЕЙСА_напр_port2_public"

    #------------------------------------------------------------------------------------
    # Больше изменений не требуется

    :global previousIP

    :if ([/interface get $inetinterface value-name=running]) do={

       # Получаем текущий 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 "</body>" -1]
    :local currentIP [:pick $result $startLoc $endLoc]
    :log info "Обновление NO-IP.com: currentIP = $currentIP"

       # Получаем предыдущий IP
    :set previousIP [:resolve $noiphost]

       :if ($currentIP != $previousIP) do={
           :log info "No-IP: Текущий IP $currentIP не совпадает с прошлым $previousIP, обновление необходимо"
           :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 keep-result=no;
               :log info "No-IP: Хост $host обновлён на No-IP с IP $currentIP"
           }
       } else={
           :log info "No-IP: Предыдущий IP $previousIP совпадает с текущим, обновление не требуется"
       }
    } else={
       :log info "No-IP: Интерфейс $inetinterface не работает в данный момент, обновление не будет выполнено."
    }

    # --------------------------------------------------------------------------------------
     
     
     
    Bigfoot
    Guest
    #9
    0
    16.06.2014 13:35:00
    Спасибо, mgx, твой скрипт у меня тоже работает.
     
     
     
    mgx
    Guest
    #10
    0
    16.06.2014 15:18:00
    Рад это слышать.
     
     
     
    jimmyz
    Guest
    #11
    0
    05.07.2014 08:32:00
    Запишите меня на RB951Ui-2HnD v6.15! Спасибо, mgx.
     
     
     
    jimmyz
    Guest
    #12
    0
    07.07.2014 09:19:00
    Проверено: также отлично работает с версией 5.26.
     
     
     
    6PATyCb
    Guest
    #13
    0
    24.07.2014 18:45:00
    Я думаю, что запись файла во флеш при каждом запуске скрипта может очень быстро убить флеш-память. Вот моя модификация скрипта для работы с NAT. Он не проверяет предыдущий IP, обновляет только при запуске. Запись во флеш не нужна. #No-IP автоматическое обновление Dynamic DNS для RouterOS v6.x

    #--------------- Измените значения в этом разделе под свою конфигурацию ------------------

    # Информация о пользователе No-IP  
    :local noipuser "MY-EMAIL@gmail.com"  
    :local noippass "MY-PASSWORD"

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

    # Укажите имя интерфейса, который получает динамический IP  
    :local inetinterface "YOUR_WAN_INTERFACE_NAME_f.e_port2_public"

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

    :global previousIP

    :if ([/interface get $inetinterface value-name=running]) do={

    # URL для обновления. Обратите внимание, что "\3F" — это hex-код для вопросительного знака (?). Это нужно, так как ? — спецсимвол в командах.  
          :local url "http://dynupdate.no-ip.com/nic/update\3F"  
          :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 keep-result=no;  
              :log info "No-IP: Хост $host обновлён на No-IP с IP $currentIP"  
          }  
    } else={  
      :log info "No-IP: $inetinterface сейчас не работает, обновление не выполнено."  
    }

    # --------------------------------------------------------------------------------------
     
     
     
    SaeedYa
    Guest
    #14
    0
    11.12.2014 07:55:00
    Спасибо, работает отлично на 6.23
     
     
     
    jarda
    Guest
    #15
    0
    12.12.2014 16:42:00
    Я использую USB-флешку для таких операций записи, чтобы сохранить внутреннюю память.
     
     
     
    bluetrepidation
    Guest
    #16
    0
    13.12.2014 22:50:00
    Можно ли внести это изменение в вики? http://wiki.mikrotik.com/wiki/Dynamic_DNS_Update_Script_for_No-IP_DNS Кажется, там устаревшая информация, A.J.
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры