Поскольку у меня были проблемы с этим скриптом для обновления IP-адреса на No-IP DNS сервере, я переписал его, чтобы сделать совместимым с RouterOS версии 6.7. Проблема в том скрипте была в функции :toarray, строка :set noiphostarray [:toarray $noiphost] вызывает сбой скрипта, потому что он никогда не сохраняет значение текущего IP в переменной $previousIP. Из-за этого скрипт постоянно обновляет IP-адрес, даже когда это не нужно, ведь он не менялся. Вот мой отлаженный скрипт, работающий на RouterOS версии 6.7:
# No-IP автоматическое обновление Dynamic DNS
#--------------- Измените значения в этом разделе под вашу конфигурацию ------------------
# Данные пользователя No-IP
:local noipuser "YOUR-NO-IP-USERNAME";
:local noippass "YOUR-NO-IP-PASSWORD";
# Установите имя хоста или метку сети, которую надо обновлять
:local noiphost "YOUR-NO-IP-HOSTNAME";
# Укажите интерфейс, который получает динамический IP-адрес
:local inetinterface "INTERFACE-THAT-YOU-WANT-TO-UPDATE-IP-ADDRESS";
#------------------------------------------------------------------------------------
# Больше изменений не требуется
: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;
:local url "http://dynupdate.no-ip.com/nic/update\3Fmyip=$currentIP";
:log info "No-IP: Отправка обновления для $noiphost";
/tool fetch url=($url . "&hostname=$noiphost") user=$noipuser password=$noippass mode=http dst-path=("no-ip_ddns_update-" . $host . ".txt")
:log info "No-IP: Хост $noiphost обновлен на No-IP с IP $currentIP";
} else={
:log info "No-IP: Предыдущий IP $previousIP совпадает с текущим, обновление не требуется";
}
} else={
:log info "No-IP: Интерфейс $inetinterface сейчас не работает, обновление не выполняется.";
}
Благодарности Riverron
# No-IP автоматическое обновление Dynamic DNS
#--------------- Измените значения в этом разделе под вашу конфигурацию ------------------
# Данные пользователя No-IP
:local noipuser "YOUR-NO-IP-USERNAME";
:local noippass "YOUR-NO-IP-PASSWORD";
# Установите имя хоста или метку сети, которую надо обновлять
:local noiphost "YOUR-NO-IP-HOSTNAME";
# Укажите интерфейс, который получает динамический IP-адрес
:local inetinterface "INTERFACE-THAT-YOU-WANT-TO-UPDATE-IP-ADDRESS";
#------------------------------------------------------------------------------------
# Больше изменений не требуется
: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;
:local url "http://dynupdate.no-ip.com/nic/update\3Fmyip=$currentIP";
:log info "No-IP: Отправка обновления для $noiphost";
/tool fetch url=($url . "&hostname=$noiphost") user=$noipuser password=$noippass mode=http dst-path=("no-ip_ddns_update-" . $host . ".txt")
:log info "No-IP: Хост $noiphost обновлен на No-IP с IP $currentIP";
} else={
:log info "No-IP: Предыдущий IP $previousIP совпадает с текущим, обновление не требуется";
}
} else={
:log info "No-IP: Интерфейс $inetinterface сейчас не работает, обновление не выполняется.";
}
Благодарности Riverron
