Mikrotik Routerboard: DDNS-Update per Script

In meinem Netzwerk arbeitet ein Mikrotik Routerboard RB2011UAS-RM und managed den Datenverkehr ins Internet. Zurecht werden Mikrotik-Router vielerorts gelobt. Allerdings haben sie auch eine kleine Schwäche: Dynamische DNS-Dienste wie DynDNS, NoIp, oder andere werden nicht unterstützt, sondern lediglich Mikrotiks Cloud-Lösung. Mein Domain-Anbieter bietet ebenfalls einen DDNS-Dienst und diesen möchte ich auch nutzen. Möglich macht das ein Script.

Grundlagen zur Scriptverarbeitung

Der Aufbau erfolgt in zwei Stufen:

  1. Das Script anlegen
  2. Einen Timer einsetzen, der das Script regelmäßig antriggert

Den Timer habe ich bei mir auf eine Minute gestellt, also wird das Script jede Minute ausgeführt. Jedoch bedeutet das nicht, dass auch jede Minute ein Update gesendet wird, denn das Script wertet aus, ob sich die IP-Adresse überhaupt geändert hat. Hat sie das nicht, wird auch kein Update an den DDNS-Dienst gesendet.

DDNS-Update-URL

Das DDNS-Update wird per einfachem HTTP-Request durchgeführt. Man könnte also die passende URL auch in einem Browserfenster eintippen und würde das gewünschte Ergebnis erreichen.

Mein Anbieter (Formality Deutschland) hatte mir folgende Angaben zum DDNS-Update gemacht.

Fritz-Box Dynamic DNS-Einstellungen
Dynamic DNS-Anbieter: Benutzerdefiniert
Update-URL:
https://dyndns.formality.de/nic/update/?username=<username>&password=<pass>&hostname=<domain>&myip=<ipaddr>

Domain: xxx.domain.com
Benutzername: xxxxxxxxxxx
Kennwort: xxxxxxxxxxx

Beispiel-Update-URL:
https://dyndns.formality.de/nic/update/?username=xxxxxxxxxxx&password=xxxxxxxxxxx&hostname=xxx.domain.com&myip=127.0.0.1

Update-Script

Scripte sind in WinBox unter System > Scripts zu finden. Dort klicken wir auf das +, tragen einen passenden Namen ein und kopieren das Script in das Source-Feld.

Mikrotik: DDNS-Update-Script

Mikrotik: DDNS-Update-Script

Die Vorlage für das Script habe ich aus dem Mikrotik-Forum und so angepasst, dass die URL wie durch meinen Anbieter vorgegeben zusammengesetzt wird. Auf den ersten 4 Zeilen müssen noch die Werte angepasst werden:

  • Zeile 1: Der vom Anbieter zugewiesene Benutzername
  • Zeile 2: Das vom Anbieter zugewiesene Passwort
  • Zeile 3: Das Interface, dessen IP-Änderung überwacht werden soll
  • Zeile 4: Den Hostnamen, unter dem der heimische Anschluss erreichbar sein soll
:global ddnsuser "xxxxxxxxxxx"
:global ddnspass "xxxxxxxxxxx"
:global theinterface "pppoe-out1"
:global ddnshost1 "xxx.domain.com"

:global ipddns
:global ipfresh [/ip address get [find where interface=$theinterface] value-name=address]     

:if ([ :typeof $ipfresh ] = nil ) do={

    :log info ("DynDNS: No ip address on $theinterface .")

} else={

    :for i from=( [:len $ipfresh] - 1) to=0 do={ 

        :if ( [:pick $ipfresh $i] = "/") do={ 

            :set ipfresh [:pick $ipfresh 0 $i];

        } 
    }

    :if ($ipddns != $ipfresh) do={

        :log info ("DynDNS: IP-DynDNS = $ipddns")
        :log info ("DynDNS: IP-Fresh = $ipfresh")
        :log info "DynDNS: Update IP needed, Sending UPDATE...!"

        :global str1 "/nic/update/\?username=$ddnsuser&password=$ddnspass&hostname=$ddnshost1&myip=$ipfresh"
        /tool fetch address=dyndns.formality.de src-path=$str1 mode=https dst-path=("/DynDNS.".$ddnshost1)

        :delay 1

        :global str1 [/file find name="DynDNS.$ddnshost1"];
        /file remove $str1
        :global ipddns $ipfresh
        :log info "DynDNS: IP updated to $ipfresh!"

    } else={

        :log info "DynDNS: dont need changes";

    }
}

Auf den Zeilen 30 und 31 kann man den Aufbau der URL und den Zielserver nach belieben anpassen.

Periodischer Aufruf per Timer

Fehlt nur noch, das Script regelmäßig aufzurufen, damit es seinen Dienst verrichten kann. Dazu nutzen wir die Funktion Scheduler, die unter System > Scheduler zu finden ist. Wir legen mit + einen neuen Timer an, verpassen ihm einen gefälligen Namen, tragen als Intervall 00:01:00 ein und als Event den Scriptaufruf /system script run dynDNS.

Mikrotik: der Scheduler ruft das Script regelmäßig auf

Mikrotik: der Scheduler ruft das Script regelmäßig auf

Das ganze läuft ziemlich zuverlässig. Zu beachten gibt es eigentlich nur eins: Wenn man das Script umbenennt, muss mal auch den Aufruf im Timer entsprechend anpassen.

Weblinks

Sebastian

Sebastian

...ist staatlich geprüfter Techniker für Elektrotechnik, Schwerpunkt Prozessautomatisierung und Energietechnik. Die Themen Automatisierung und Programmierung haben es ihm besonders angetan.
Außerdem ist er für jede technische Spielerei zu haben 😉
Sebastian

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.