Dynamiczny DNS (changeip.com) – Mikrotik

Poniżej pokazano prosty skrypt służący do aktualizowania adresu ip w usłudze dynamic DNS. W tym przykładzie skrypt przetestowano na usłudze oferowanej przez changeip.org. Skrypt działa również dla routerów znajdujących się za natem. Aby zautomatyzować aktualizację adresu ip należy dodać wywołanie skryptu do systemowego scheduler-a.
UWAGA:

Każdy test powoduje ściągnięcie i zapisanie małego pliku na dysku systemowym. Ponieważ pamięci flash mają ograniczoną ilość operacji WE/WY należy ograniczyć częstość wykonywania skryptu. Sugerowana częstość uruchomień skryptu to 1 raz na godzinę.

—————-
# Dynamic DNS Update
# Written by Kacper Nowak
# Copyright vberry.net 2011
# Tested on RouterOS 4.13
#
# DESCRIPTION:
# This script will update a ChangeIP.com (probably will work with other services of this type)
# dynamic dns hostnamewith an ip address detected using checkip.dyndns.org page.
# WORKS WITH NAT.
#
# CONFIGURATION:
# ddnsuser: Enter your ChangeIP.com user id.
# ddnspass: Enter your ChangeIP.com password.
# ddnshost: Enter the hostname (example.changeip.com) to update.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# EDIT CONFIGURATION HERE
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:global ddnsuser „login”
:global ddnspass „password”
:global ddnshost „domain.changeip.org”
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# END OF CONFIGURATION
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:global ddnssystem („mt-” . [/system package get [/system package find name=system] version] )
# get the current IP address from the internet (in case of double-nat)
/tool fetch mode=http address=”checkip.dyndns.org” src-path=”/” dst-path=”/dyndns.checkip.html”
:local result [/file get dyndns.checkip.html contents]
# parse the current IP result
:local resultLen [:len $result]
:local startLoc [:find $result „: ” -1]
:set startLoc ($startLoc + 2)
:local endLoc [:find $result „” -1]
:local currentIP [:pick $result $startLoc $endLoc]
:global ddnsip $currentIP
:global ddnslastip
:log info „CurrentIP: ddnsip = $ddnsip”
:log info „LastIP: lastIP = $ddnslastip”
:if ($currentIP != $ddnslastip) do={
:global ddnslastip $ddnsip
:log info „DDNS: Sending UPDATE!”
:log info [ :put [/tool dns-update name=$ddnshost address=$ddnsip key-name=$ddnsuser key=$ddnspass ] ]
} else={
:log info „DDNS: No changes necessary.”
}

Leave a Comment