Einrichtung
Nach dem Anlegen eines Hostnamens im Dashboard erhÀltst du Benutzername (= Hostname) und ein Passwort. Damit richtest du dein GerÀt ein:
đĄ FritzBox
- Internet → Freigaben → DynDNS (oder Internet → Zugangsdaten → DynDNS)
- DynDNS-Anbieter: Benutzerdefiniert
- Update-URL:
https://9dyn.de/nic/update?hostname=<domain>&myip=<ipaddr>&myipv6=<ip6addr> - Domainname: dein Hostname, z. B.
zuhause.9dyn.de - Benutzername: derselbe Hostname
- Kennwort: das angezeigte Passwort
Dieser eine Eintrag reicht fĂŒr IPv4 und IPv6 — die FritzBox ersetzt <ipaddr>
und <ip6addr> automatisch und schickt beides in einer Anfrage, sofern sie eine echte
IPv6-Adresse hat (kein zweiter Eintrag nötig, anders als bei pfSense/OPNsense).
đ¶ Weitere Router & NAS
MikroTik (RouterOS)
Kein fertiges Formular wie bei der FritzBox — stattdessen ein kleines
RouterOS-Script (System → Scripts) per Scheduler alle paar Minuten, das /tool fetch mit dem
fertigen Update-Link aufruft. Ein Aufruf kann IPv4 und IPv6
zusammen mitschicken, wenn das Script beide aus den lokalen Interfaces ausliest. Sag Bescheid, wenn du das Script brauchst.
OPNsense
Wie pfSense: ein Account pro IP-Version. Zwei EintrÀge unter
Services → Dynamic DNS anlegen (Check-IP-Method einmal auf eine IPv4-, einmal auf eine IPv6-Quelle stellen)
— Update-URLs wie oben bei pfSense, einmal mit v4.9dyn.de, einmal mit v6.9dyn.de.
Synology DSM
Externer Zugriff → DDNS → HinzufĂŒgen → Anbieter âAnpassen".
DSMs eigenes Custom-DDNS-Formular unterstĂŒtzt nur IPv4 (__MYIP__) — fĂŒr IPv6 gibt es dort keine
eingebaute Variable. FĂŒr IPv6 stattdessen eine Aufgabe in der Aufgabenplanung anlegen, die den
IPv6-erzwungenen Link per curl aufruft.
Ubiquiti UniFi (UDM/UDM Pro)
Settings → Internet → WAN → Dynamic DNS → Service âdyndns", Server-Feld mit der Update-URL. UniFi unterstĂŒtzt hier nativ nur IPv4 — fĂŒr IPv6 gibt es (Stand jetzt) keine native UnterstĂŒtzung, nur ein Workaround ĂŒber ein Script auf einem GerĂ€t im Netz (z. B. Cronjob auf einem NAS/Raspberry Pi), das den IPv6-erzwungenen Link aufruft.
đĄïž pfSense
pfSense kann pro Dynamic-DNS-Eintrag immer nur eine IP-Version verfolgen — das gilt fĂŒr
jeden Anbieter, nicht nur 9DYN. FĂŒr IPv4 und IPv6 automatisch braucht es daher zwei EintrĂ€ge:
einen mit Service-Type Custom und einen mit Custom(v6). Beide laufen danach
unabhÀngig automatisch, ohne dass du irgendetwas manuell nachtragen musst.
Eintrag 1 — IPv4:
- Services → Dynamic DNS → Add
- Service Type: Custom
- Update URL:
https://v4.9dyn.de/nic/update?hostname=zuhause.9dyn.de&key=DEIN_TOKEN - Result Match:
good|nochg
Eintrag 2 — IPv6:
- Services → Dynamic DNS → Add
- Service Type: Custom(v6)
- Update URL:
https://v6.9dyn.de/nic/update?hostname=zuhause.9dyn.de&key=DEIN_TOKEN - Result Match:
good|nochg
Beide Update-URLs (mit deinem echten Token) findest du fertig zum Kopieren im Dashboard unter âDual-Stack" bei deinem Hostnamen. Username/Password brauchst du hier nicht — das Token steckt schon in der URL.
đ» Manuell / Cronjob / einfacher Aufruf
Am einfachsten: einfach den fertigen Link aus dem Dashboard aufrufen — kein Benutzername/Passwort nötig, die IP wird automatisch aus der aufrufenden Verbindung erkannt:
curl "https://9dyn.de/nic/update?hostname=zuhause.9dyn.de&key=DEIN_TOKEN"
Antwortet mit good <ip> bei Ănderung oder
nochg <ip> wenn sich nichts geÀndert hat. Weitere Auth-Varianten (Bearer-Header, Account-Token
fĂŒr mehrere Hosts) siehe unten.
đ Weitere Auth-Wege
Neben dem Query-Parameter (token oder key) und klassischem HTTP Basic Auth
(Hostname als Benutzername, Host-Passwort) akzeptiert die Update-URL auch einen Bearer-Header.
Alle nicht-Basic-Auth-Varianten benötigen immer den hostname-Parameter — ohne
Benutzername kann sonst nicht ermittelt werden, welcher Host gemeint ist.
Statt eines einzelnen Host-Tokens kannst du auch dein Account-Token
verwenden, das fĂŒr alle deine Hostnamen gilt.
Bearer-Header:
curl "https://9dyn.de/nic/update?hostname=zuhause.9dyn.de" \
-H "Authorization: Bearer DEIN_TOKEN"
Hinweis: bei der Query-Parameter-Variante landet das Token in der URL und damit im Zugriffslog des Reverse-Proxys — wie bei jedem DynDNS-Anbieter, der diese Methode anbietet (kein zusĂ€tzliches Risiko gegenĂŒber Basic Auth, das Passwort geht dort ebenso im Klartext ĂŒber HTTPS). Wer das bewusst vermeiden will, nutzt Basic Auth oder den Bearer-Header.
đ Wildcard-Zertifikate (Let's Encrypt / ACME DNS-01)
HTTP-01 funktioniert bei Wildcard-Zertifikaten grundsĂ€tzlich nicht — die Zertifizierungsstelle
verlangt stattdessen einen _acme-challenge-TXT-Eintrag in der DNS-Zone (DNS-01). Mit dem
DNS-API-Token aus dem Konto kann
certbot/acme.sh das automatisiert fĂŒr deine eigenen Hostnamen erledigen — beschrĂ€nkt auf genau
diesen einen TXT-Namen, nicht auf beliebige DNS-EintrÀge.
certbot Auth-Hook (9dyn-auth-hook.sh):
#!/bin/bash
TOKEN="DEIN_DNS_API_TOKEN"
ID_FILE="/tmp/9dyn-acme-${CERTBOT_DOMAIN}.id"
curl -s -X POST "https://9dyn.de/api/dns/acme-challenge" \
-H "Authorization: Bearer ${TOKEN}" -H "Content-Type: application/json" \
-d "{\"fqdn\": \"${CERTBOT_DOMAIN}\", \"value\": \"${CERTBOT_VALIDATION}\"}" \
| grep -o '"id":"[^"]*"' | cut -d'"' -f4 >> "$ID_FILE"
certbot Cleanup-Hook (9dyn-cleanup-hook.sh):
#!/bin/bash
TOKEN="DEIN_DNS_API_TOKEN"
ID_FILE="/tmp/9dyn-acme-${CERTBOT_DOMAIN}.id"
while read -r ID; do
curl -s -X DELETE "https://9dyn.de/api/dns/acme-challenge" \
-H "Authorization: Bearer ${TOKEN}" -H "Content-Type: application/json" \
-d "{\"fqdn\": \"${CERTBOT_DOMAIN}\", \"id\": \"${ID}\"}"
done < "$ID_FILE"
rm -f "$ID_FILE"
Aufruf (Apex + Wildcard in einem Zertifikat):
certbot certonly --manual --preferred-challenges dns \ --manual-auth-hook /pfad/zu/9dyn-auth-hook.sh \ --manual-cleanup-hook /pfad/zu/9dyn-cleanup-hook.sh \ -d meinhost.9dyn.de -d '*.meinhost.9dyn.de'
Die ID-Datei sammelt beide Challenge-Werte (Apex und Wildcard landen auf demselben TXT-Namen), damit der Cleanup-Hook gezielt nur die eigenen EintrĂ€ge entfernt und keinen parallel laufenden zweiten Challenge-Wert löscht. TTL bei Porkbun ist 600 Sekunden — certbots eigene Wiederholungslogik bei der Validierung ist der eigentliche Verlass, unser Propagations-Check ist nur eine Komfort-Absicherung.
đ ZusĂ€tzliche Adress-Slots (Round-Robin)
Pro Host lassen sich im Dashboard bis zu drei zusĂ€tzliche Adress-Slots anlegen — jeder mit
eigenem Token und eigenem Update-Link (/nic/update/slot/<id>). Ein zweites GerÀt
oder ein zweiter Uplink kann damit unabhÀngig eine eigene IP zum selben Hostnamen beitragen, ohne
die PrimĂ€r-Adresse zu ĂŒberschreiben — alle Adressen bestehen als separate A/AAAA-EintrĂ€ge
nebeneinander (DNS-Round-Robin).
đ CGNAT-Tunnel: eigenen Dienst trotz CGNAT/DS-Lite erreichbar machen
Wichtig zu wissen, wofĂŒr das gedacht ist: der Tunnel unter /cgnat macht einen Dienst,
der auf deinem GerÀt zuhause lÀuft (z. B. ein Spieleserver, eine eigene Website, ein NAS-Dienst),
ĂŒber einen festen Port-Bereich auf unserer IP fĂŒr andere im Internet erreichbar. Er ist
kein allgemeines VPN, mit dem
du selbst von unterwegs auf dein ganzes Heimnetz zugreifst oder ĂŒber den Tunnel im Internet surfst —
dafĂŒr brĂ€uchte es eine andere Art von Verbindung. Siehe dazu den Abschnitt
Road-Warrior-VPN weiter unten.
So funktioniert's:
- Unter
/cgnateinen Tunnel anlegen — wir richten automatisch alles ein und zeigen dir eine fertige WireGuard-Konfiguration (Text + QR-Code) mit einer festen Tunnel-IP und einem dir zugewiesenen Port-Bereich (z. B. 5200-5209). - Diese Konfiguration auf dem GerĂ€t importieren, auf dem der Dienst lĂ€uft (Router mit WireGuard-UnterstĂŒtzung, Raspberry Pi, Server, ...) — per QR-Code-Scan (WireGuard-App) oder Datei-Import.
- Deinen Dienst auf diesem GerÀt so einrichten, dass er auf einem Port aus deinem zugewiesenen Bereich lauscht.
- Von auĂen ist der Dienst dann ĂŒber
9dyn.de(bzw. dessen öffentliche IP) und den jeweiligen Port erreichbar — die Weiterleitung ĂŒbernehmen wir automatisch.
AllowedIPs in der Konfiguration ist bewusst nicht 0.0.0.0/0, sondern nur auf
unseren Server beschrĂ€nkt — dein GerĂ€t surft weiterhin ganz normal ĂŒber seine eigene Internetverbindung,
nur der Traffic fĂŒr den zugewiesenen Port-Bereich lĂ€uft ĂŒber den Tunnel. Nur UDP wird aktuell weitergeleitet.
Jeder Tunnel ist vollstĂ€ndig vom Server getrennt geregelt — andere Nutzer (z. B. Familienmitglieder
mit eigenem Tunnel) können deinen Tunnel nicht sehen oder erreichen.
đ§ł Road-Warrior-VPN: von unterwegs auf dein eigenes Heimnetz
DafĂŒr betreibt 9DYN kein eigenes Relay — der WireGuard-Server lĂ€uft direkt auf deinem eigenen Router (FritzBox, pfSense, OPNsense), der auch das Routing in dein Heimnetz automatisch ĂŒbernimmt. 9DYN liefert dafĂŒr nur den stabilen Hostnamen, der bei jedem IP-Wechsel automatisch aktuell bleibt.
FritzBox (ab FRITZ!OS 7.50):
- Internet → Freigaben → VPN (WireGuard) → Verbindung hinzufĂŒgen.
- Als Verbindungstyp "FĂŒr einen Nutzer, z. B. mit Smartphone" wĂ€hlen — die FritzBox zeigt einen QR-Code, den du direkt mit der WireGuard-App scannst.
- Als Hostname deinen eigenen 9DYN-Host verwenden (den du wie im FritzBox-Abschnitt oben beschrieben als DynDNS-Anbieter eingetragen hast).
pfSense/OPNsense:
VPN → WireGuard → eigenen Server + Peer anlegen, gleiches Prinzip — als Endpoint deinen 9DYN-Hostnamen eintragen.
Hinter CGNAT/DS-Lite (das Dashboard warnt automatisch, falls das bei dir zutrifft)? Dann den
WireGuard-Server-Port deines Routers zusĂ€tzlich ĂŒber den CGNAT-Tunnel
weiter oben erreichbar machen. Dein Handy verbindet sich dann mit
9dyn.de:<zugewiesener Tunnel-Port> statt mit dem rohen Router-Port.
âčïž Protokoll
Kompatibel zum dyndns2-Protokoll (HTTP Basic Auth, Query-Parameter oder Bearer-Header, GET /nic/update bzw.
/update). Parameter: hostname, myip, myipv6, token/key.
Antworten: good <ip>, nochg <ip>, badauth,
nohost, notfqdn, 911.