DYN

Einrichtung

Nach dem Anlegen eines Hostnamens im Dashboard erhÀltst du Benutzername (= Hostname) und ein Passwort. Damit richtest du dein GerÀt ein:

📡 FritzBox

  1. Internet → Freigaben → DynDNS (oder Internet → Zugangsdaten → DynDNS)
  2. DynDNS-Anbieter: Benutzerdefiniert
  3. Update-URL: https://9dyn.de/nic/update?hostname=<domain>&myip=<ipaddr>&myipv6=<ip6addr>
  4. Domainname: dein Hostname, z. B. zuhause.9dyn.de
  5. Benutzername: derselbe Hostname
  6. 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:

  1. Services → Dynamic DNS → Add
  2. Service Type: Custom
  3. Update URL: https://v4.9dyn.de/nic/update?hostname=zuhause.9dyn.de&key=DEIN_TOKEN
  4. Result Match: good|nochg

Eintrag 2 — IPv6:

  1. Services → Dynamic DNS → Add
  2. Service Type: Custom(v6)
  3. Update URL: https://v6.9dyn.de/nic/update?hostname=zuhause.9dyn.de&key=DEIN_TOKEN
  4. 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:

  1. Unter /cgnat einen 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).
  2. 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.
  3. Deinen Dienst auf diesem GerÀt so einrichten, dass er auf einem Port aus deinem zugewiesenen Bereich lauscht.
  4. 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):

  1. Internet → Freigaben → VPN (WireGuard) → Verbindung hinzufĂŒgen.
  2. 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.
  3. 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.