Всем привет, у меня проблема с обновлением моего внешнего IP на Dyndns и No-Ip. Eth 1 подключен к DSL-модему, поэтому мне нужен скрипт, который будет работать за NAT. Я искал и пробовал разные скрипты почти неделю! Я запускаю скрипты ниже, но ничего не обновляется. В логе RouterOS для хоста Dyndns указывается, что новый IP должен быть отправлен на dyndns, но когда я захожу на Dyndns, имя хоста не обновилось. Мне нужно это исправить как можно скорее, так как я настраиваю удаленные локации, буду очень признателен за помощь!!!
NO-IP SCRIPT
#Скрипт обновления динамического DNS для No-IP за NAT
Установите необходимые переменные:
:local username “MY USERNAME TO LOGIN TO NO-IP”
:local password “MY PASSWORD”
:local host “MY NO-IP HOST NAME”
:global previousIP
выводите отладочную информацию
:log info (“Update No-IP DNS: username = $username”)
:log info (“Update No-IP DNS: hostname = $host”)
:log info (“Update No-IP DNS: previousIP = $previousIP”)
за NAT - получаем публичный адрес, используя 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 “” -1]
:local currentIP [:pick $result $startLoc $endLoc]
:log info “No-IP DNS: currentIP = $currentIP”
:if ($currentIP != $previousIP) do={
:log info “No-IP: Current IP $currentIP не равен предыдущему IP, обновление необходимо”
:set previousIP $currentIP
:local url “”
: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: обновление не требуется"
}
end
Установите необходимые переменные:
:local username “DYNDNS SITE LOGIN”
:local password “DYNDNS SITE PASSWORD”
:local hostname “HOST NAME”
:global dyndnsForce
:global previousIP
выводите отладочную информацию
:log info (“UpdateDynDNS: username = $username”)
:log info (“UpdateDynDNS: password = $password”)
:log info (“UpdateDynDNS: hostname = $hostname”)
:log info (“UpdateDynDNS: previousIP = $previousIP”)
получаем текущий IP адрес из интернета (в случае двойного NAT)
/tool fetch mode=http address=“checkip.dyndns.org” src-path=“/” dst-path=“/dyndns.checkip.html”
:delay 1
: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 “” -1]
:local currentIP [:pick $result $startLoc $endLoc]
:log info “UpdateDynDNS: currentIP = $currentIP”
Уберите # на следующей строке, чтобы принудительно обновлять каждый раз - полезно для отладки, но вы можете в итоге попасть в черный список DynDNS!
#:set dyndnsForce true
Определите, нужно ли обновление dyndns больше
подробности о запросе обновления dyndns
:if (($currentIP != $previousIP) || ($dyndnsForce = true)) do={
:set dyndnsForce false
:set previousIP $currentIP
:log info “$currentIP или $previousIP”
/tool fetch user=$username password=$password mode=http address=“members.dyndns.org” src-path=“nic/update?system=dyndns&hostname=$hostname&myip=$currentIP&wildcard=no ” dst-path=“/dyndns.txt”
:delay 1
:local result [/file get dyndns.txt contents]
:log info (“UpdateDynDNS: требуется обновление Dyndns”)
:log info ("UpdateDynDNS: Результат обновления Dyndns: ".$result)
:put ("Результат обновления Dyndns: ".$result)
} else={
:log info (“UpdateDynDNS: Обновление dyndns не требуется”)
}
NO-IP SCRIPT
#Скрипт обновления динамического DNS для No-IP за NAT
Установите необходимые переменные:
:local username “MY USERNAME TO LOGIN TO NO-IP”
:local password “MY PASSWORD”
:local host “MY NO-IP HOST NAME”
:global previousIP
выводите отладочную информацию
:log info (“Update No-IP DNS: username = $username”)
:log info (“Update No-IP DNS: hostname = $host”)
:log info (“Update No-IP DNS: previousIP = $previousIP”)
за NAT - получаем публичный адрес, используя 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 “” -1]
:local currentIP [:pick $result $startLoc $endLoc]
:log info “No-IP DNS: currentIP = $currentIP”
:if ($currentIP != $previousIP) do={
:log info “No-IP: Current IP $currentIP не равен предыдущему IP, обновление необходимо”
:set previousIP $currentIP
:local url “”
: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: обновление не требуется"
}
end
Установите необходимые переменные:
:local username “DYNDNS SITE LOGIN”
:local password “DYNDNS SITE PASSWORD”
:local hostname “HOST NAME”
:global dyndnsForce
:global previousIP
выводите отладочную информацию
:log info (“UpdateDynDNS: username = $username”)
:log info (“UpdateDynDNS: password = $password”)
:log info (“UpdateDynDNS: hostname = $hostname”)
:log info (“UpdateDynDNS: previousIP = $previousIP”)
получаем текущий IP адрес из интернета (в случае двойного NAT)
/tool fetch mode=http address=“checkip.dyndns.org” src-path=“/” dst-path=“/dyndns.checkip.html”
:delay 1
: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 “” -1]
:local currentIP [:pick $result $startLoc $endLoc]
:log info “UpdateDynDNS: currentIP = $currentIP”
Уберите # на следующей строке, чтобы принудительно обновлять каждый раз - полезно для отладки, но вы можете в итоге попасть в черный список DynDNS!
#:set dyndnsForce true
Определите, нужно ли обновление dyndns больше
подробности о запросе обновления dyndns
:if (($currentIP != $previousIP) || ($dyndnsForce = true)) do={
:set dyndnsForce false
:set previousIP $currentIP
:log info “$currentIP или $previousIP”
/tool fetch user=$username password=$password mode=http address=“members.dyndns.org” src-path=“nic/update?system=dyndns&hostname=$hostname&myip=$currentIP&wildcard=no
:delay 1
:local result [/file get dyndns.txt contents]
:log info (“UpdateDynDNS: требуется обновление Dyndns”)
:log info ("UpdateDynDNS: Результат обновления Dyndns: ".$result)
:put ("Результат обновления Dyndns: ".$result)
} else={
:log info (“UpdateDynDNS: Обновление dyndns не требуется”)
}
