Homelab [Teil 1]: Update Script für neoz.de GRE und tunnelbroker.net unter RouterOS mit dynamischer IP

Veröffentlicht: / Letztes Update:

Das Homelab Projekt - Teil 1

Info vorweg:
Die beiden Tunnel von noez.de und tunnelbroker.net richten wir in den nächsten Teilen dieser Anleitungsserie ein. Es ist von enormen Vorteil, wenn die öffentlichen IP Adressen bereits bei der Einrichtung aktuell gehalten werden. Dies erleichtert das Debuggen enorm.

In den voran gegangenen Anleitungen haben wir uns bereits eine komplette Umgebung mit IPv4 Adresse von noez.de und IPv6 Adressen von tunnelbroker.net eingerichtet, damit wir diese auf einem Proxmox Server verwenden können.

Nun möchten wir den Server aber Zuhause im Homelab betreiben, da wird es dann mit einer dynamischen IP-Adresse schon etwas komplizierter, da die gesamten IP's nach einem Reconnect des Routers nicht mehr erreichbar wären.

Da wir in weiteren Anleitungen, den Aufbau der Tunnel nicht mehr auf dem Server direkt durchführen möchten, um zusätzlich zu dem Proxmox VE Host auch noch weitere Server im Netzwerk nutzen zu können und über die getunnelten IP's erreichbar zu machen, setzen wir einen zusätzlichen Router ein.'

In meinem Fall ist dies ein Mikrotik RouterBOARD mit RouterOS. Das Routerboard hat den Vorteil, dass es deutlich weniger Strom benötigt, als die ganzen DIY Router mit pfSense oder ähnliches.

Das RouterOS kann natürlich auch auf einem DIY Router aufgesetzt werden und hat wie die anderen System auch, alles was man benötigt dabei. Es ist ein vollständiger Router mit einer vielzahl an unterstützen Protokollen inkl. einer Firewal für IPv4 und IPv6.

Funktionsweise

Das Update Script führt die Updates der Endpunktpunkt IP's für noez.de und tunnelbroker.net durch. Sollte einer der beiden Dienste nicht genutzt werden, können die jeweiligen farblich markierten Bereiche aus dem Script entfernt werden.

Zur Funktion: Das Script fragt die aktuelle öffentliche IPv4 Adresse über die API von ipify.org ab. Wenn die aktuelle IP mit der in der mydynipv4.txt gespeicherten IP übereinstimmt, wird kein Update durchgeführt. Wenn die IP's unterschiedlich sind, werden die Update URL's aufgerufen.

Welche Daten müssen in des Script eingefügt werden?

API Daten für noez.de GRE:

Die füür das Script benötigenten Daten finden Ihr wie folgt: Im Control Panel von noez.de wählen unter dem Menüpunkt "Services" Euren GRE Tunnel auswählen und dann scrollt Ihr zum dem Punkt "API Endpunkt" herunter. Dort findet Ihr die benötigten Daten innerhalb der URL:

Die Service ID tragt Ihr hinter dem Parameter "noezservideid" und den API Key hintern den Paameter "neozauthkey" ein.

API Daten für für Tunnelbroker.net:

Im Control Panel von Tunnelbroker.net findet Ihr Eure API zugangsdaten wie folt:
Im linken Menü "Account Menu" klickt Ihr auf den Link "Main Page" und wälht dort Euren IPv6 Tunnel aus. Ihr gelangt dann zu den "Tunnel Details" und wählt den Reiter "Advanced".

Euren Benutzernamen, mit dem Ihr Euch auf Tunnelbroker.net einloggt, trag Ihr hinter dem Parameter "heuser" ein.
Die Tunnel ID findet Ihr am Ende der URL in der Adressleiste Eures Browsers und tragt diese hinter dem Parameter "hetunnelid" ein.
Den Update Key trag Ihr zum Schluss noch hinter dem Parameter "heapipass" ein.

######### neoz.de GRE Daten ################
:local noezservideid "xxxxx"
:local neozauthkey "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
############################################
######### tunnelbroker.net Daten ###########
:local heuser "xxxxxxxxx"
:local heapipass "xxxxxxxxx"
:local hetunnelid "xxxxxx"
############################################
:local ipaddress

# Datei zur Ablage der IP anlegen
:if ([/file find name=mydynipv4.txt] = "") do={
    :put "Die Datei mydynipv4.txt existiert nicht, sie wird erstellt."
    /file print file=mydynipv4.txt
    /file set mydynipv4.txt content=""
}

# Gespeicherte IP abfragen
:local currentip [/file get mydynipv4.txt contents]
:if ($currentip = "") do={
    :put ("Die IP-Adresse ist nicht in der Datei " . mydynipv4.txt . " gespeichert.")
} else={
    :put ("Die aktuell gespeicherte IP-Adresse ist: " . $currentip)
}

# Aktuelle IP abfragen
/tool fetch url="https://api.ipify.org/" mode=https dst-path=mydynipv4.txt
:delay 1s

# Wenn IP unterschiedlich, dann Update
:set ipaddress [/file get mydynipv4.txt contents]
:if ($ipaddress != $currentip) do={
    :log info ("Die neue IP-Adresse ist: " . $ipaddress)
    /file set mydynipv4.txt contents=$ipaddress

    # Updates senden'

    ############ Auskommentieren, wenn noez.de nicht genutzt wird!
    :log info ("Update des noez.de Tunnels")
    :local neozurluri "/api/greendpointupdate/$noezservideid/$ipaddress/$neozauthkey"
    /tool fetch url=("https://noez.de" . neozurluri) mode=https
    :delay 1s
    ############ Auskommentieren, wenn tunnelbroker.net nicht genutzt wird!
    :log info ("Update des Tunnelbroker.net Tunnels")
    :local heurluri "/nic/update/?username=$heuser&password=$heapipass&hostname=$hetunnelid&myip=$ipaddress"
    /tool fetch url=("https://ipv4.tunnelbroker.net" . heurluri) mode=https
    :delay 1s
} else={
    :log info "Die IP-Adresse hat sich nicht geaendert."
}

In RouterOS einbrinden

Das Update Script speichern wir auf dem Router und lassen es alle 60 Sekunden ausführen.

1. Script anlegen

Um das Script auf RouterOS anzulegen, loggen wir uns mit der Winbox auf dem Router ein und wählen im linken Menü den Prunkt System -> Scripts aus, worauf sich die Script List öffnet.

Hier klichen wir dann im Reiter Scripts auf das blaue Plus.

Nun öffnet sich eine Eingabemaske zum Anlegen eines Scriptes:

Als Namen geben wir zum Beispiel "dyndns" ein. Dieser Name ist später sehr wichtig, wenn wir das Script automatisch über den Scheduler alle 60 Sekunden ausführen lassen.

Den Quelltext mit den eingetragenen API Zugangsdaten unserer Accounts fügen wir dann in das große Feld "Source" ein und stellen die Policy wie auf dem Bild zu sehen ein.

Um das Script zu speichern, klicken wir einmal auf "Apply" und auf "Run Script", um das Script zu testen. Wenn keine Fehlermeldungen in der Log zu finden sind, klicken wir auf "OK". Die Log ist im linken Menü unter "Log" zu finden.

Script alle 60 Sekunden laufen lassen

Damit das Script nun regelmäßig gestartet wird, benötigen wir noch einen Scheduler.

Hierzu wählen wir im linken Menü unter "System" den Punkt "Scheduler" aus. In der sich nun öffnenden "Scheduler"-Fenster, klicken wir auf das blaue Plus.

In der nun geöffneten "Schedule"-Eingabemaske vergeben wir als erste einen Namen. (Dieser ist relativ unbedeutend. Aber wir tragen in diesem Beispiel trotzdem "dyndns" ein.)

Danach tragen wir im Feld "Intervall;" den Wert 00:01:00 für eine Minute ein. Wenn man es alle 30 Sekunden starten lassen möchte, wäre es dann 00:00:30. In dem großen Feld "On Event" tragen wir folgendes ein:

/system script run dyndns

Der Parameter "dyndns" ist der Name des Scriptes.

Wenn alles fertig ist klicken wir auf "Apply" und "OK". Das Update Script ist nun vollständig eingerichtet und wir im vorgegeben Intervall aufgerufen.

Bitte beachtet, dass Ihr den Intervall nicht zu kurz einstellt, da es bei der API von ipify.org eine Beschränkung der Aufrufe geben kann.

Im Teil 2 des Homelabs werden wir die Tunnelinterfaces und IP Routen anlegen.