Я хочу использовать скрипт для информирования DNSdynamic о моём IP. Я изменил пример для No-IP и составил этот скрипт для DNSdynamic:
# DNSdynamic update
# User account info
:local dnsdynamicuser "amuliar@protonmail.ch"
:local dnsdynamicpass "YL6a1##DynaPietist"
:local dnsdynamichost "pietist.ssh22.net"
# Измените на имя интерфейса, который получает динамический IP
:local inetinterface "pppoe-out-langate"
: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 "IP: Текущий IP $currentIP не равен предыдущему, нужно обновление"
:set previousIP $currentIP
# URL для обновления dnsdynamic. \3F — это hex-код для знака вопроса (?), нужен, т.к. ? — спецсимвол в командах.
:local url "https://www.dnsdynamic.org/api/\3Fhostname=$dnsdynamichost&myip=$currentIP"
:log info "dnsdynamic: $url"
:local dnsdynamichostarray
:set dnsdynamichostarray [:toarray $dnsdynamichost]
:foreach host in=$dnsdynamichostarray do={
:log info "dnsdynamic: Отправляю обновление для $host"
/tool fetch url=$url user=$dnsdynamicuser password=$dnsdynamicpass mode=https dst-path=("dnsdynamic_ddns_update-" . $host . ".txt")
:log info "dnsdynamic: Хост $host обновлён в dnsdynamic с IP $currentIP"
}
} else={
:log info "IP: Предыдущий IP $previousIP совпадает с текущим, обновление не нужно"
}
} else={
:log info "IP: Интерфейс $inetinterface сейчас не работает, обновление не будет выполнено."
}
Я подозреваю, что что-то не так, потому что в логах не появляется сообщение "dnsdynamic: Хост $host обновлён в dnsdynamic с IP $currentIP". Не мог бы кто-нибудь помочь понять, что не так? RouterOS v6.40.4
# DNSdynamic update
# User account info
:local dnsdynamicuser "amuliar@protonmail.ch"
:local dnsdynamicpass "YL6a1##DynaPietist"
:local dnsdynamichost "pietist.ssh22.net"
# Измените на имя интерфейса, который получает динамический IP
:local inetinterface "pppoe-out-langate"
: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 "IP: Текущий IP $currentIP не равен предыдущему, нужно обновление"
:set previousIP $currentIP
# URL для обновления dnsdynamic. \3F — это hex-код для знака вопроса (?), нужен, т.к. ? — спецсимвол в командах.
:local url "https://www.dnsdynamic.org/api/\3Fhostname=$dnsdynamichost&myip=$currentIP"
:log info "dnsdynamic: $url"
:local dnsdynamichostarray
:set dnsdynamichostarray [:toarray $dnsdynamichost]
:foreach host in=$dnsdynamichostarray do={
:log info "dnsdynamic: Отправляю обновление для $host"
/tool fetch url=$url user=$dnsdynamicuser password=$dnsdynamicpass mode=https dst-path=("dnsdynamic_ddns_update-" . $host . ".txt")
:log info "dnsdynamic: Хост $host обновлён в dnsdynamic с IP $currentIP"
}
} else={
:log info "IP: Предыдущий IP $previousIP совпадает с текущим, обновление не нужно"
}
} else={
:log info "IP: Интерфейс $inetinterface сейчас не работает, обновление не будет выполнено."
}
Я подозреваю, что что-то не так, потому что в логах не появляется сообщение "dnsdynamic: Хост $host обновлён в dnsdynamic с IP $currentIP". Не мог бы кто-нибудь помочь понять, что не так? RouterOS v6.40.4
