После обновления RouterOS с 6.1 на 6.2 возникла проблема с обновлением внешнего IP через скрипт DynDNS. Использую следующий скрипт:
Устанавливаем необходимые переменные:
`:local username "ahedxx"`
`:local password "1642@1642"`
`:local hostname " izone-me.dyndns.org "`
`: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 or $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 update needed”)`
`:log info ("UpdateDynDNS: Dyndns Update Result: ".$result)`
`:put ("Dyndns Update Result: ".$result)`
`} else={`
`:log info (“UpdateDynDNS: No dyndns update needed”)`
`}
С уважением.
Устанавливаем необходимые переменные:
`:local username "ahedxx"`
`:local password "1642@1642"`
`:local hostname " izone-me.dyndns.org "`
`: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 or $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 update needed”)`
`:log info ("UpdateDynDNS: Dyndns Update Result: ".$result)`
`:put ("Dyndns Update Result: ".$result)`
`} else={`
`:log info (“UpdateDynDNS: No dyndns update needed”)`
`}
С уважением.
