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

    Скрипт обновления DynDNS

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Скрипт обновления DynDNS, RouterOS
     
    gsloop
    Guest
    #1
    0
    07.03.2012 16:48:00
    Я знаю, что существует несколько скриптов обновления DynDNS, и они работают, но не так, чтобы полностью соответствовать правилам использования DynDNS. [Например, вызывают обновление с параметром nochg после перезагрузки, так как не сохраняют состояние IP между перезагрузками, или запрашивают IP чаще, чем разрешено.] Они используют «старую» версию процесса обновления — которая хоть и работает, но устарела. Это уже обновлено. Кроме того, они вообще не проверяли коды возврата после обновления и не обрабатывали ошибки при получении плохого ответа. Думаю, эти проблемы в этом коде исправлены. Записи во флэш-память могли быть избыточными. [Хотя размер был настолько мал, что вряд ли это проблема.] Мы записываем во флеш только при успешном обновлении IP на DynDNS. Стиль кода не совсем однородный (извиняюсь), и в самом скрипте столько комментариев, что отдельной документации нет. Буду рад отзывам, если они есть. Сейчас код поддерживает обновление DynDNS только для одного интерфейса, и чтобы работать с несколькими, понадобится доработка. [Но такой запрос вряд ли распространён, если кто-то хочет — сделаю за плату. Я выкладываю это бесплатно, потому что мне нужна была эта функция и другие варианты меня не устраивали. Если же мне придётся писать что-то, что мне лично не нужно, это будет только когда доберусь — то есть вероятность минимальна... или придётся брать деньги.] Буду рад комментариям, исправлениям ошибок и прочему. Если используете код, уделите минутку, чтобы сообщить, работает ли он и на каком железе/версии ROS. — Грег

    Я обновил код — думаю, просто убрал несколько комментариев, которые уже не актуальны. [Остались там по ошибке.] Код не менял.

    \ Обновлено 2012/03/26

    Новая версия 1.0.5  
    Изменение в скрипте — теперь проверяет наличие файла «lastip» и создаёт его, если его нет. Это избавляет пользователя от необходимости создавать файл вручную. [Больше изменений не припоминаю…]

    Обновлено 2012/04/01

    Новая версия 1.0.6  
    Исправлена ошибка, когда мы создавали файл «lastip.txt», а потом читали из него мусорные данные. Также исправлены примечания/комментарии по именованию файлов, чтобы избежать путаницы. Если у вас старая версия, менять не обязательно, но для новых установок эта новая версия, скорее всего, надёжнее — меньше шансов, что пользователь что-то сломает.

    dyndns-published-1.0.6.rsc (8.43 KB)
     
     
     
    lanside
    Guest
    #2
    0
    23.03.2012 22:43:00
    Привет, и спасибо за отличную работу! Всё работает, но с ошибкой! RB750G 5.14 Скрипт немного подправлен под Loopa.se:

    :set vlocalurl (“http://” . “$username” . “:” . “$password” . “@” . “dns.loopia.se/XDynDNSServer/XDynDNS.php” . “?” . “hostname=” . “$hostname” . “&myip=” . “$currentIP”)

    В логе видно:
    23:37:38 script,info UpdateDynDNS: Dyndns update needed  
    23:37:38 script,info DynDNS Update FAILED  
    23:37:38 script,info UpdateDynDNS: Dyndns Update Result: nochg

    Обновление проходит, но в логе написано, что что-то пошло не так.
     
     
     
    gsloop
    Guest
    #3
    0
    26.03.2012 07:09:00
    «nochg» означает, что попытка отправить обновление была, но IP-адрес не изменился. [По крайней мере, именно так это работает для DynDNS...] Если настроить скрипт в соответствии с документацией в «заголовке», то он не должен генерировать nochg обновления — по крайней мере, обычно. [Возможно, одно такое обновление может появиться при первом запуске, если файл lastip не содержит реальный последний IP-адрес.] Тем не менее, обновления не должны происходить, если адрес не меняется, так что после этого вы больше не должны получать nochg обновления. В любом случае спасибо за отзыв! — Greg
     
     
     
    gsloop
    Guest
    #4
    0
    26.03.2012 09:02:00
    Обновление кода. Подробности и ссылку на скачивание смотрите в первом сообщении темы. – Greg
     
     
     
    carlosmp
    Guest
    #5
    0
    29.03.2012 02:13:00
    Привет, (RouterOS - 5.14 на RB751U-2HnD). Я только что попытался скопировать/вставить скрипт в winbox после того, как изменил переменные username/password/hostname/interface. Но скрипт зависает, и я заметил следующее… Похоже, что строка 90 берёт вывод списка файлов и записывает его как содержимое файла dyndns-lastip.txt. Я даже напрямую вписал IP-адрес в файл, но получаю вот такой контент:

    # mar/28/2012 21:51: 9 by RouterOS 5.14  
    # software id = XXXX-XXXX  
    #  
    # NAME           TYPE                                SIZE CREATION-TIME  
    0 skins          directory                                dec/31/1969 20:00:50  
    1 base-co... script                            24 450 jan/01/1970 20:03:03  
    2 sys-note.txt   .txt file                              0 jan/01/1970 20:03:32  
    3 pub            directory                                mar/28/2012 15:13:07  
    4 export-2012... script                            13 271 mar/28/2012 15:21:39  
    5 dyndns-resp... .txt file                              0 mar/28/2012 21:50:58  
    6 dyndns-last... .txt file                              0 mar/28/2012 21:50:58  
    7 backup-28.b... backup                            54 847 mar/28/2012 15:21:39

    Я вообще обошёл эту проверку файла, но скрипт, кажется, зависает на команде set в строке 97. Также, поскольку этот скрипт будет использоваться за прокси-сервером, есть ли способ гарантировать, что будет использоваться IP интерфейса, а не прокси IP от вышестоящего сервера? Наверняка это что-то простое. Спасибо, Карлос.
     
     
     
    gsloop
    Guest
    #6
    0
    24.05.2012 16:32:00
    Итак, позвольте спросить: так как я вообще не пользуюсь PPPoE и подобным, откуда вы знаете, какой WAN-интерфейс проверять? Если возможно, не могли бы вы дать мне небольшой кусочек кода, который поможет с этим разобраться? Частично я написал скрипт именно так потому, что почти на всех моих установках обычные eth-интерфейсы получают IP через DHCP, и их может быть несколько. Я хочу, чтобы скрипт обновлял DNS-запись только для конкретного интерфейса. Если их два, пусть оба скрипта запускаются и обновляют свои интерфейсы соответственно. Отсюда и сериализация имён файлов с ответами, чтобы они друг другу не мешали. Возможно, я смогу вставить что-то вроде этого, но это существенно изменит логику кода. При этом я совсем не знаю, как определить, какой интерфейс «активен», поэтому если вы подскажете, буду рад немного времени посвятить кодированию. Или, может, посоветуете какую-то другую утилиту, которая это делает, и я посмотрю, как они справились, чтобы написать аналог для своего скрипта. И наконец — не могли бы вы помочь с тестированием? — Грег
     
     
     
    gsloop
    Guest
    #7
    0
    29.03.2012 15:15:00
    Код в строках 87-94 проверяет, существует ли файл, указанный в строке 69 [vLastIPFileName], и если нет — создаёт его. Создание сводится просто к выводу корневого каталога вашего RB. [То, что вы и видите в этом файле...] …А, до меня дошло! Думаю, что происходит следующее: при первом запуске файла нет, он создаётся, а затем сразу же пытается его прочитать, но это ничего толкового не даёт. Нужно добавить пару строк, чтобы заполнить его временным фиктивным IP. [Наверное, я просто не проверял этот случай… думал, проверял, но нет...] Давайте попробуем так. Замените строку 93 на это: /file set [/file find name=$vLastIPFileName] contents="1.2.3.4" Затем удалите файл, указанный в строке 69, с RB. [Это заставит файл создаться заново и проверить наш новый код...] Запустите снова и скажите, что получилось. – Грег
     
     
     
    carlosmp
    Guest
    #8
    0
    31.03.2012 15:23:00
    Похоже, ничего не изменилось. Я начал немного поотлаживать, и кажется, что проверка файла всегда создает новый файл dyndns-lastip.txt. Я попробовал по-другому искать файл, но это всегда приводило к созданию нового файла:

    :local found "0";
    :foreach i in=[/file find] do={
    :local filename [/file get $i name];
    if ( $filename = $vLastIPFileName) do={
         :set found "1"
     :log info ("found file")
    }
    }
    if ( $found = "1" ) do={
      :log info ("DynDNS: LastIP Файл найден")
    }
    if ( $found = "0" ) do={
      :log info ("DynDNS: LastIP Файл не найден")
       /file print file=$vLastIPFileName
    :delay 2
    /file set [/file find name=$vLastIPFileName] contents="1.2.3.4"
    }

    Но это всё равно не работало. Тогда я убрал «/» из названий файлов в переменных, и всё сразу заработало как надо.
     
     
     
    gsloop
    Guest
    #9
    0
    02.04.2012 03:11:00
    Обновление кода: добавлены комментарии и исправлено чтение из неинициализированного файла для хранения last-ip. Спасибо @carlosmp за то, что выявил проблему и подробно объяснил свои наблюдения! — Грег
     
     
     
    mitzone
    Guest
    #10
    0
    10.04.2012 08:45:00
    Рабочий код, если кто-то из вас использует no-ip.com в качестве провайдера DDNS:  
    :set vlocalurl (“http://” . “$username” . “:” . “$password” . “@” . “dynupdate.no-ip.com” . “/nic/update?hostname=” . “$hostname” . “&myip=” . “$currentIP”)
     
     
     
    gsloop
    Guest
    #11
    0
    12.04.2012 19:14:00
    @mitzone Спасибо! Я добавлю это в код, и этот скрипт можно будет использовать как для NoIP, так и для DynDNS. -Грег
     
     
     
    mh348
    Guest
    #12
    0
    24.05.2012 13:53:00
    Привет, спасибо за отличную работу! Всё работает прекрасно... RB750 версии 5.10 и 5.4. Будет ли возможность сделать так, чтобы скрипт смотрел на любой WAN IP, а не конкретно на определённый WAN-интерфейс? Причина в том, что у меня несколько разных аккаунтов у провайдеров, я использую только один из них за раз. Если надо переключиться на другой аккаунт, я просто отключаю один (pppoe-client) и включаю другой. Из-за этого каждый раз приходится править скрипт, указывая нужный интерфейс, например pppoe-out1 или pppoe-out2. В старом скрипте обновлялось то PPPoE-соединение, которое было активно. Спасибо за всю проделанную работу над скриптом!
     
     
     
    majestic21
    Guest
    #13
    0
    15.07.2012 20:05:00
    Привет, получилось. RB1100AH с multi wan на ROS 5.18 — возможно ли добавить обновление multi wan в один скрипт вместо отдельного скрипта для каждого wan-интерфейса? И есть ли опция принудительного обновления каждые 24 часа с dyndns?
     
     
     
    gsloop
    Guest
    #14
    0
    15.07.2012 20:32:00
    Спасибо за отзыв. А как насчёт опции принудительного обновления каждые 24 часа с dyndns? Я мог бы добавить это, но это явно противоречит правилам использования (TOS). Я не совсем знаю, какие там ограничения у DynDNS, поэтому не уверен, что установка принудительного обновления раз в сутки не приведёт к проблемам... Вообще, мне кажется, это плохая идея. Ещё написание кода для учёта состояния — задача не из лёгких. [Придётся сохранять дату/время последнего обновления и состояние после перезагрузки.] Работа с NAND-файлами достаточно ненадёжна, поэтому писать такой код мне не хотелось бы. (И я не использовал сравнение дат/времён в RoS, но не думаю, что оно будет работать хорошо, учитывая, насколько многое там вообще не работает.) По правде, я вижу большое количество времени, которое придётся потратить на переработку (и отладку) скрипта для реализации чего-то, явно противоречащего правилам DynDNS. Поскольку одной из главных причин переписывания скрипта было именно соблюдение правил, я не горю желанием добавлять что-то, что их нарушает. Если кто-то предложит какое-то весомое улучшение, может быть, тогда займусь этим. Если решишь сделать эту фичу и напишешь хорошо документированный код — возможно, добавлю или волью в основную ветку. А насчёт возможности обновления на несколько WAN-интерфейсов в одном скрипте вместо отдельного для каждого — это уже более реалистично. Я мог бы это сделать, но не очень понимаю, в чём смысл. На многоканальных установках DHCP встречается нечасто. Чтобы на multi-wan было сразу несколько DHCP-клиентов — это ещё гораздо реже. [У меня есть multi-WAN с одним DHCP, но ни одного с несколькими.] Поддержка нескольких DHCP WAN-интерфейсов — нетривиальная задача. А делать работу, чтобы избавить редких пользователей от необходимости запускать несколько скриптов, как-то не оправдывает затраты времени. Так что, хотя это возможно, я не считаю нужным тратить на это время — по крайней мере, мне. Извини, что не отвечаю так, как, наверное, хотелось бы, но именно так я это вижу. — Greg
     
     
     
    theprism
    Guest
    #15
    0
    16.09.2012 13:18:00
    Здравствуйте, я использую скрипт с созданием файлов, и он отлично работает, однако меня немного беспокоит внутренняя флеш-память, ведь она со временем выйдет из строя (пусть и через долгое время). На данный момент вижу вот что: Bad Blocks – 0.2%. Я подключил 2GB USB-флешку к своему RB751G-2HnD и отформатировал её — устройство видит флешку, но я не могу изменить скрипт так, чтобы он использовал USB1 для создания и чтения dyndns-resp.txt и dyndns-lastip.txt на флешке. Если возможно, не могли бы вы помочь с этим? Спасибо, Алекс.
     
     
     
    gsloop
    Guest
    #16
    0
    17.09.2012 06:21:00
    У меня есть всего секунда. Посмотрите эту тему: http://forum.mikrotik.com/t/sector-writes-how-big-is-a-sector/55752/1. Честно, я не совсем уверен, насколько можно верить оценке в 100 тысяч записей на блок, но даже если взять половину от этого количества, речь всё равно о КОЛОССАЛЬНОМ числе записей до того, как ваша флэшка сдохнет. [Даже десятая часть — это много.] Я попробую найти код, где я это реализовывал, но, по идее, вы тоже сможете. По сути, просто добавляете к имени файла путь, который укажет на флэш-драйв. В одном из моих скриптов я даже начал указывать пути к SD-карте — посмотрите комментарии, возможно, это там. Если нет, гляньте в мои другие посты. Может быть, в том скрипте для netwatch, который я писал, а если нет, то в dyndns. Если будет время, постараюсь найти, но опять же, думаю, вы разберётесь по моим кодам и комментариям, что я оставил. [И последнее: ни один из моих скриптов не пишет во флэш, если ничего не меняется. Поскольку ваш IP вряд ли часто меняется, скрипт будет писать во флэш только тогда, когда это происходит. Такая нагрузка будет крайне небольшой. (Честно — даже если изменения происходят раз в день, солнце к тому времени, скорее всего, почти исчерпает запасы водорода для ядерного синтеза.) Если во флэш пишется слишком много, ищите причину в другом месте — это не мой скрипт dyndns, если только там нет какой-то действительно ужасной ошибки, которую не заметили ни я, ни другие… Может быть, но я не думаю.] — Грег
     
     
     
    theprism
    Guest
    #17
    0
    30.09.2012 17:27:00
    Привет! Я пытался подкорректировать скрипт, чтобы он записывал на USB-флешку, но по каким-то причинам он создаёт файлы с листингом структуры каталогов вместо нужного результата… Кто-нибудь успешно с этим справлялся? Спасибо, Алекс.
     
     
     
    gsloop
    Guest
    #18
    0
    01.10.2012 16:07:00
    Я протестировал запись и чтение с флешки. Как написано в документации и комментариях — используйте что-то вроде этого:  
    :local vLastIPFileName "micro-sd/dyndns-lastip.txt" и/или  
    :local vDynDNSResponseFile "micro-sd/cc-dyndns-resp.txt"  
    (Думаю, вы захотите, чтобы оба файла были либо на флешке, либо оба не на ней.)  

    У меня под рукой нет устройства для теста, но мой SD-раздел был назван именно так, и всё работало нормально. (Я давно не создавал SD-разделы, точное имя уже не помню, возможно, у вас он называется не "micro-sd", а как-то иначе. Проверьте в system|store в WinBox.)  

    Что касается записи каталога — это нормально. Если файла нет, его нужно создать, а единственный способ — отправить список файлов RoS в указанный файл. (Можно избежать автоматического создания файлов системой, создав их самостоятельно и оставив пустыми. Тогда скрипт увидит, что файлы существуют, и не будет путать их с "мусорными" начальными данными. Но в любом случае это не должно влиять на работу скрипта, насколько мне известно.)  

    После этого скрипт должен использовать файл со списком содержимого и записывать туда либо последний IP, либо результаты dynDNS-запроса.  

    Вы уверены, что скрипт запускается правильно? Проверьте журнал (просто “Log” в WinBox). Например, если "fetch" не удастся, скрипт упадет в середине, и два файла не запишут нужные данные. (Можете показать, что показывают логи — я посмотрю, чем могу помочь.)  

    Дайте знать — у кого-то недавно были проблемы с fetch, но они так и не выяснили причину, у меня же всё работает отлично. Если это какой-то странный баг, его поиск будет полезен.  

    -Greg
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры