Я обнаружил, что переменная “global” не работает в планировщике, поэтому переделал скрипт так, чтобы он сразу записывал и считывал файл.
Автоматическое обновление Dynamic DNS от No-IP
#--------------- Измените значения в этом разделе под свою конфигурацию ------------------
Информация об аккаунте 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”
:local previousIP if ( [:len [/file find name=(“no-ip_ddns_previousip.txt”)]] > 0 ) do={ :set previousIP [/file get (“no-ip_ddns_previousip.txt”) contents] }
: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) не равен предыдущему ($previousIP), требуется обновление” # URL обновления. \3F — это шестнадцатеричный код вопросительного знака (?), необходим, так как ? — спецсимвол в командах :local url “http://dynupdate.no-ip.com/nic/update\3Fmyip=$currentIP”
: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” /file print file=(“no-ip_ddns_previousip.txt”) :delay 3 /file set contents=”$currentIP" (“no-ip_ddns_previousip.txt”) } } else={ :log info “No-IP: Предыдущий IP $previousIP совпадает с текущим, обновление не требуется” } } else={ :log info “No-IP: Интерфейс $inetinterface сейчас не работает, обновление не выполняется.” }
Я попробовал, но у меня не работает. У меня RB2011 v6.7, и вот ошибка, которая появляется: «No-IP: Текущий IP (x.x.x.x) не совпадает с предыдущим IP(), требуется обновление» — то есть IP(пустой). «No-IP: Отправка обновления для x.myftp.org», но на сайте обновления нет. Запускаю снова — та же ошибка, и IP() всё так же пустой. Логин и пароль правильные. Ещё вижу, что при нажатии на «Файлы» создаётся файл. Какие идеи?
В файле no-ip_ddns_previousip.txt что-то есть? Там должен быть ваш IP. Вы уверены, что email и пароль правильно указаны для сайта no-ip? Возможно, там есть специальные символы, которые скрипт не принимает?
В файле написано nohost. Потом я подумал, может, вручную прописать 1.1.1.1 и проверить, как будет работать. Без толку, всё равно не работает. Потом тройной раз проверил, что логин и пароль верные. После этого удалил файл host.txt. И тут произошло что-то странное — файл host.txt больше не создаётся. На случай, если я где-то ошибся, я полностью переписал твой скрипт и заново ввёл переменную — результата ноль, файл всё равно не создаётся. Подумал, может, перезагрузка поможет, но и это не дало результата, файл не создаётся. Свободно 76% места, так что место на диске не проблема. Политика скрипта — все 8 пунктов отмечены. Хотел создать ещё один аккаунт no-ip, подумал, может, с моим что-то не так, но теперь вообще файл не создаётся… Есть идеи? Кстати, я запутался — здесь RB750, а не RB2011, но сомневаюсь, что в этом дело.
Я вручную создал файл no-ip_ddns_previousip.txt и вписал в него 8.8.8.8. Теперь в логе больше не показывается «previous IP ()», а правильно отображается «previous IP (8.8.8.)». Однако обновление всё равно не происходит. Плюс, когда я запустил снова, в логе снова показывается такой же предыдущий IP (8.8.8.) — то есть, запись в файл не происходит, хотя все права проверены и установлены.
Вы следовали всем инструкциям здесь: http://wiki.mikrotik.com/wiki/Dynamic_DNS_Update_Script_for_No-IP_DNS? Мои скрипты — это всего лишь обновление оттуда (я их не создавал). Проверьте также права на эту задачу… ведь именно эта задача и записывает файл. В моём скрипте/расписании установлены права: Read, Write, Test (владелец — ‘admin’). Расписание запускается каждые 5 минут с момента запуска. Когда вы говорите, что в файле написано «nohost», вы имеете в виду файл «no-ip_ddns_previousip.txt», а не «no-ip_ddns_update-x.myftp.org.txt»? Также в логах «CurrentIP» отображается правильно? Вы указали интерфейс «WAN» в скрипте (у меня это «ether1-gateway»)?
На самом деле, файл txt, который я увидел, был создан другим скриптом ddns. Я ошибочно принял его за твой. Но когда я вручную создал no-ip_ddns_previousip.txt, тогда скрипт стал читать из него, но не записывает в него. Думаю, это проблема с правами, поэтому я убедился, что дал все права (перезагрузка, запись, тест, перехват, чтение, политика, пароль, чувствительные), но без результата. Владелец не админ, потому что я переименовал его в другое имя. Но потом я заново создал пользователя admin, вошёл под ним, убедился, что владелец скрипта — admin (чья группа — «full»). Но всё равно не пишет в txt. О, я не ждал расписания, нажал «запустить скрипт» вручную. У меня ещё пара микротик роутеров. Сейчас здесь 2 часа ночи. Поскольку у меня закончились идеи, завтра попробую на других микротик роутерах и посмотрю, сработает ли так же на них, или только на этом RB750. Есть ещё какие-то идеи, что я могу попробовать?
Удалите файлы и попробуйте подождать по расписанию, чтобы посмотреть результат. Думаю, всё не запускается, потому что работают разные пользователи. К тому же у вас версия ПО v6.7, вы обновляли прошивку на RouterBOARD?
Интересно, когда я попробовал это на другом маршрутизаторе Mikrotik (это RB751G с версией v6.6), всё сработало. Он создает два txt-файла и корректно обновляет no-ip. Потом я проверил на RB2011 с версией v6.7 — тоже получилось. Все три маршрутизатора Mikrotik настроены примерно одинаково. Определённо что-то должно вызывать эту проблему. RB751G и RB2011 с фиксированным IP, а вот проблемный RB750 — с динамическим IP. Ну что ж, теперь понятно, чем я займусь на выходных. Огромное спасибо за отличный скрипт и вашу добрую помощь!
Всем привет! Я использую RB951G-2HnD с RouterOS 6.9 и 6.10. Я пытался применить приведённый выше скрипт, но не могу получить доступ к роутеру из интернета, хотя no-ip обновился с текущими публичными IP-адресами, которые я получил от своего провайдера. Я проверил это, попросив друга зайти на мой роутер через мой no-ip хост. Во время теста у меня было такое правило в фаерволе:
Я временно отключил свои правила файрвола. Я только что нашёл эти правила, когда искал, как предотвратить попытки входа, которые раньше наблюдал. Эти правила действительно блокировали попытки входа через ssh и telnet, хотя я не уверен, влияет ли это на то, почему мой скрипт no ip раньше не работал, когда эти правила были активны. Могут ли эти правила быть причиной того, что мой скрипт no ip не работает? Спасибо.
Тебе нужно добавить правило файрвола: «input» «tcp (6)» «dst port»: твой http/https порт. «allow». Какой именно «http/https порт»? 80 или 443? К тому же, я не вижу опции «allow» во вкладке Action, там только «accept». Я правильно понимаю, что так надо делать?
Да, это принимается, извините. По умолчанию http / https работает на портах 80 и 443, если вы их не меняли. У меня они изменены на 444 или 9443 в зависимости от приложения.
Хорошо, теперь понял. С этим предложенным правилом файрвола мне всё равно нужно заново включать свои правила файрвола? Это никак не повлияет на мой скрипт no-ip и то правило файрвола, которое ты предлагаешь? Спасибо, nka!