Привет всем! Мы используем сервис dyndns от на наших Mikrotik роутерах за NAT, которые распределены по сайтам Connectivia. По этой причине мы разработали (тестировали на RouterOs 5.x) новый скрипт, объединив два отличных скрипта, уже доступных на wiki.mikrotik.com. Получился скрипт обновления dyndns, специально для сервиса No-IP, когда устройства Mkt работают за NAT. Спасибо создателю скрипта changeip, опубликованного на Wiki — надеемся, никто не будет против использования базы или отдельных частей.
Вот сам скрипт:
# Скрипт динамического обновления DNS для No-IP за NAT
# Устанавливаем необходимые переменные
:local username "uzername"
:local password "pazzword"
:local host "dreammachine.no-ip.org"
:global previousIP
# выводим немного отладочной информации
:log info ("Обновление No-IP DNS: username = $username")
:log info ("Обновление No-IP DNS: hostname = $host")
:log info ("Обновление No-IP DNS: previousIP = $previousIP")
#
# За NAT — получаем публичный IP через dyndns url
/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 DNS: currentIP = $currentIP"
:if ($currentIP != $previousIP) do={
:log info "No-IP: Текущий IP $currentIP не совпадает с предыдущим, требуется обновление"
:set previousIP $currentIP
:local url "http://dynupdate.no-ip.com/nic/update\3Fmyip=$currentIP&hostname=$host"
:log info "No-IP DNS: Отправляем обновление для $host"
/tool fetch url=$url user=$username password=$password mode=http dst-path=("no-ip_ddns_update.txt")
:log info "No-IP DNS: Хост $host обновлён на No-IP с IP $currentIP"
}
else={
:log info "No-IP: обновление не требуется"
}
# конец, команда RouterOs @ Connectivia S.r.l
Вот сам скрипт:
# Скрипт динамического обновления DNS для No-IP за NAT
# Устанавливаем необходимые переменные
:local username "uzername"
:local password "pazzword"
:local host "dreammachine.no-ip.org"
:global previousIP
# выводим немного отладочной информации
:log info ("Обновление No-IP DNS: username = $username")
:log info ("Обновление No-IP DNS: hostname = $host")
:log info ("Обновление No-IP DNS: previousIP = $previousIP")
#
# За NAT — получаем публичный IP через dyndns url
/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 DNS: currentIP = $currentIP"
:if ($currentIP != $previousIP) do={
:log info "No-IP: Текущий IP $currentIP не совпадает с предыдущим, требуется обновление"
:set previousIP $currentIP
:local url "http://dynupdate.no-ip.com/nic/update\3Fmyip=$currentIP&hostname=$host"
:log info "No-IP DNS: Отправляем обновление для $host"
/tool fetch url=$url user=$username password=$password mode=http dst-path=("no-ip_ddns_update.txt")
:log info "No-IP DNS: Хост $host обновлён на No-IP с IP $currentIP"
}
else={
:log info "No-IP: обновление не требуется"
}
# конец, команда RouterOs @ Connectivia S.r.l
