Dynamic DNS auf dem Homeserver einrichten

#server #software

Ich beginne direkt mit einem Fallbeispiel, an dem man sieht, warum Dynamic-DNS auf dem Homeserver wichtig ist:

Der Router im lokalen Netz fällt aus und muss neu gestartet werden. Dabei bekommt er vom ISP eine neue öffentliche IP-Adresse zugewiesen. Daraufhin sind alle Services nicht mehr aus dem Internet erreichbar und auch der VPN-Tunnel ins lokale Netz geht nicht mehr.

Was macht man in diesem Fall, wenn man nicht vor Ort ist? Eigentlich gar nichts — deshalb braucht man Dynamic-DNS.

Was ist eigentlich passiert?

Das Internet basiert historisch auf IPv4-Adressen mit einem Adressraum von 0.0.0.0 bis 255.255.255.255, also insgesamt ~4,3 Milliarden Adressen. Dadurch, dass dein lokaler ISP deutlich weniger öffentliche IPv4-Adressen hat als Kunden, werden diese Adressen dynamisch an aktive Geräte vergeben und bei Bedarf neu zugeteilt. Dadurch kann es passieren, dass sich dein Internetprovider dafür entscheidet, alle 24h deine öffentliche IP-Adresse zu ändern.

In meinem Fall hat sich meine öffentliche IP-Adresse das erste Mal geändert, als mein Router sich neu gestartet hat. Das hat zu den folgenden Problemen geführt:

  • Bei meinem DNS-Anbieter (Cloudflare) haben sich die DNS-Records meiner Domain nicht automatisch aktualisiert, sodass meine Domains und Subdomains nicht mehr funktioniert haben.
  • In meiner VPN-Konfigurationsdatei ist die IP-Adresse des EndPoints fest eingetragen. Durch das Ändern der öffentlichen Adresse des Routers war mein VPN-Tunnel nutzlos geworden.

Die Lösung: Dynamic-DNS einrichten

Der manuelle Fix ist simpel: die neue öffentliche IPv4-Adresse in den DNS-Record beim DNS-Anbieter eintragen, dann sind die Dienste wieder erreichbar. Das behebt das Problem aber nur kurzfristig — beim nächsten IP-Wechsel steht man wieder vor dem gleichen Problem.

Die dauerhafte Lösung ist ein Dynamic-DNS-Dienst auf dem Server. Ein solcher Dienst läuft im Hintergrund und aktualisiert bei deinem DNS-Anbieter automatisch die DNS-Records, sobald sich die öffentliche IP-Adresse ändert.

Ich habe intern eine OPNSense-Firewall, die auch als Reverse-Proxy zuständig ist, und habe den DynDNS deshalb direkt darauf installiert.

Anleitung: OPNSense mit Cloudflare

  1. In die Konfigurationsoberfläche von OPNSense gehen.
  2. Bei System → Firmware → Plugins das Plugin os-ddclient installieren (Community-Plugin).
  3. Die Seite neu laden.
  4. Bei Services → Dynamic DNS → Settings unter Accounts einen neuen Account hinzufügen.
  5. Folgende Felder ausfüllen:
    • Description: ein beliebiger Name für den Account
    • Service: Cloudflare
    • Username: token (also einfach das Wort token)
    • Password: Ein API-Token aus dem Cloudflare Dashboard erstellen:
      1. Manage Account → Account API Tokens → Create Token
      2. Bei Zone Resources All zones oder Specific zone wählen
      3. Unter DNS & Zones bei DNS ein Häkchen bei Edit und bei Zone ein Häkchen bei Read setzen
      4. Den generierten Token hier einfügen
    • Zones: deine Domain (für mehrere Domains jeweils einen eigenen Account anlegen)
    • Hostname: gewünschte Subdomain, oder das Gleiche wie bei Zones wenn du die ganze Domain nutzt
    • Interface to Monitor: WAN
  6. Abspeichern und in den Log Files prüfen, ob es funktioniert.

Account-Einstellungen in OPNSense

Was ich dadurch gelernt habe

Ich habe momentan meinen VPN-Tunnel über den Router laufen. Wenn sich die öffentliche IP-Adresse ändert, funktioniert der Tunnel nicht mehr. Der nächste Schritt ist daher, den VPN auf den Server zu verlegen. In der WireGuard-Konfigurationsdatei trägt man im Endpoint-Feld dann statt einer IP-Adresse direkt die Domain ein. WireGuard löst den Hostnamen bei jedem Verbindungsaufbau neu auf — ein IP-Wechsel ist damit kein Problem mehr, solange Dynamic-DNS den DNS-Record aktuell hält.

Auf lange Sicht will ich zusätzlich einen VPN-Zugang außerhalb des Servers einrichten, damit ich auch dann per VPN eingreifen kann, falls der Server selbst ausfällt.