[Howto:] DDNS auf Ubiquiti EdgeRouter (inklusive IPv6-DDNS!)

Hilfe bei der Einrichtung unsere DDNS Dienste in Routern und anderen Geräte sowie Updateclients
Post Reply
phanft
Posts: 3
Joined: Thu 28. May 2015, 00:45

[Howto:] DDNS auf Ubiquiti EdgeRouter (inklusive IPv6-DDNS!)

Post by phanft »

Hallo zusammen,


da meine Versuche, den DDNS-Dienst von feste-ip.net auf meinem Ubiquiti EdgeRouter Lite einzurichten letztendlich von Erfolg gekrönt sind, möchte ich auf Vorschlag des Supports gern meine Anleitung teilen.

Vorweg: als Dual-Stack-Kunde meines Providers nutze ich nur den DDNS-Dienst für die Erreichbarkeit mehrerer IPv6-Hosts von außen. Das heißt, ich habe keine Erfahrung mit dem Portmapping-Services und kann dazu mit bei der Nutzung von EdgeOS nichts sagen. Wer ansonsten einen Ubiquiti Edgerouter betreibt, dem kann man eine gewisse Affinität zu CLI-Bedienung unterstellen, ich versuche mich also aufs nötigste zu beschränken.

Diese Anleitung funktioniert so erst mit der Version 1.7.0 des Betriebssystem, die zum Zeitpunkt des Verfassens nur als Beta-Version verfügbar ist, aber sehr bald erscheinen soll. Grund dafür ist der Support für Custom DDNS in dieser Version, die ein Setup ermöglicht, das Update-stabil sein sollte. Auch unter 1.6.0 konnte ich es irgendwie zum Laufen bringen, das war aber weder schön noch Update-robust.


Schritt 1: Custom DDNS für feste-ip.net (IPv4)


Dies kann auch über die Web-UI eingerichtet werden. Dazu unter Services wie im Screenshot ausfüllen. Das auszuwählende Interface ist das Interface, auf dem die öffentliche IPv4-Adresse konfiguriert ist, oft also typischerweise die Schnittstelle pppoe0.
ddns_webui.png
ddns_webui.png (31.29 KiB) Viewed 13206 times
Für ein reines IPv4-DDNS muss nichts weiter getan werden und man kann es dabei belassen. Da uns aber auch DDNS für IPv6 interessiert, muss in Schritt 3 eine Option per CLI gesetzt werden, so dass auch dieser Schritt zusammen mit Schritt 3 im CLI konfiguriert werden kann

Login also via SSH oder CLI im Web-UI und anschließend

Code: Select all

    configure 
    set service dns dynamic interface pppoe0 service custom-festeipv4 host-name <name.feste-ip.net>
    set service dns dynamic interface pppoe0 service custom-festeipv4 login <id, z.B. 12345>
    set service dns dynamic interface pppoe0 service custom-festeipv4 password <passwort>
    set service dns dynamic interface pppoe0 service custom-festeipv4 protocol dyndns2
    set service dns dynamic interface pppoe0 service custom-festeipv4 server v4.members.feste-ip.net
    commit
    save
    exit
Schritt 2: Eigenes Skript für IPv6


Um feste-ip.net das richtige IPv6-Präfix mitzuteilen*), um die Hosts im internen LAN nach draußen verfügbar zu machen, dürfen wir nicht die zugewiesene IPv6-Adresse auf dem pppoe0-Interface verwenden, sondern müssen eine geeignete Adresse auf dem LAN-Interface verwenden. Um das sicherzustellen und dann auch das passende Update der v6-Adresse durchzuführen benutzen wir ein eigenes Skript "festeipv6.sh" (oder so), das wir in /config/scripts ablegen, damit es auch Updates überstehen kann. Der Inhalt (editierbar beispielsweise mit vi) sieht dann etwa so aus:

/config/scripts/festeipv6.sh

Code: Select all

    #!/bin/sh

    hostid="<id, z.B. 12345>"
    hostpw="<passwort>"
    hostname="<name.feste-ip.net>"
    
    ip6=`vbash -ic "ip -f inet6 addr show dev eth0 scope global to 2000::/3" | awk '/inet6/{print $2}' | cut -d / -f 1`
    
    curl "http://$hostid:$hostpw@v6.members.feste-ip.net/nic/update?hostname=$hostname&myip=$ip6"
Das Skript ermittelt zunächst die IPv6-Adresse auf dem LAN-Interface und updated quasi "manuell" den v6-Eintrag bei feste-ip.net. Es versteht sich von selbst, dass gleichzeitige Updates für v4 und v6 bei feste-ip.net erlaubt sein müssen.

Als LAN-Schnittstelle wird hier eth0 angenommen. Bei einem VLAN-Interface mit VLAN 100 auf eth1 stünde nach "dev" ein "eth1.100". Mit der verwendeten Syntax stellen wir sicher, dass wir nur global gültige ipv6-Adressen benutzen. Wie robust oder deterministisch diese Syntax bei mehreren gültigen global-unicast-Präfixen ist, wird sich zeigen müssen.

Das Skript machen wir noch anschließend ausführbar:

Code: Select all

    chmod +x /config/scripts/festeipv6.sh

*) Natürlich ist für all das eine korrekte Konfiguration von DHCPv6-Prefix-Delegation Voraussetzung, damit wir überhaupt gültige dynamische IPv6-Präfixe haben. Falls wir diese nicht per Prefix-Delegation bekommen, unterstelle ich jetzt einmal, dass wir dieses dynamische Update gar nicht brauchen!


Schritt 3: Das Skript bei Bedarf ausführen

Damit das IPv6-Update auch dann ausgeführt wird, wenn ein Update erforderlich ist (und beispielsweise nicht immer wieder, um die Server nicht zu überlasten), binden wir uns einfach an den Update-Mechanismus der DDNS-Funktionalität im EdgeRouter. Dazu konfigurieren wir via CLI das Skript als post-Update-Skript zu unserem bestehenden IPv4-Update-Eintrag aus Schritt 1:

Code: Select all

    configure 
    set service dns dynamic interface pppoe0 service custom-festeipv4 options postscript=/config/scripts/festeipv6.sh
    commit
    save
    exit
Das sollte bereits genügen.

Ich habe diese Anleitung selbst nicht auf einer frischen Installation mit neuer Konfiguration ausprobiert. Es kann daher sein, dass ich möglicherweise einen notwendigen Schritt zu beschreiben vergessen habe. Freue mich daher über Feedback, Korrekturen und Ergänzungen!

Danke fürs Lesen und viel Erfolg!
rema
Feste-IP.Net Support
Posts: 407
Joined: Thu 5. Feb 2015, 10:24

Re: [Howto:] DDNS auf Ubiquiti EdgeRouter (inklusive IPv6-DDNS!)

Post by rema »

Vielen Dank für die Anleitung.
frostnacht
Posts: 1
Joined: Sun 6. Aug 2017, 22:07

Re: [Howto:] DDNS auf Ubiquiti EdgeRouter (inklusive IPv6-DDNS!)

Post by frostnacht »

Läuft auch unter 1.9.7Beta2 einwandfrei!

Vielen Dank!

Gruß
frostl

Edit: Nach dem Upgrade auf die neuste 1.9.7 (stable) ist mir aufgefallen, dass nach dem Reboot respektive bei jedem Reboot (!) die Global Address (IPv6) auf dem PPPoE-Interface announced wurde. Erst nach einem manuellen Update wurde dann die entsprechende IP des zugewiesenen Interfaces bzw. der PD abgeholt.
Vermutlich die kleine Schwäche des "ungeduldigen" Scripts... :roll:
Post Reply