Cloudflare DDNS für dynamische IP mit Proxmox / LXC
Diese Anleitung beschreibt Schritt für Schritt, wie eine Domain bei Cloudflare automatisch aktualisiert wird, wenn sich die öffentliche IP-Adresse eines Internetanschlusses ändert. Dies wird häufig benötigt, wenn Server zuhause betrieben werden (z.B. TeamSpeak, VoIP oder Webserver), da viele Internetanschlüsse eine dynamische IP-Adresse besitzen.
Durch ein kleines Script wird regelmäßig geprüft, ob sich die öffentliche IP-Adresse geändert hat. Falls dies der Fall ist, wird der DNS-Eintrag bei Cloudflare automatisch aktualisiert.
Voraussetzungen
- Eine Domain, die bei Cloudflare verwaltet wird
- Ein Server oder Container, der dauerhaft läuft (z.B. Proxmox Host oder LXC Container)
- Zugriff per SSH auf diesen Server
- Ein Cloudflare API Token mit DNS Bearbeitungsrechten
Architekturübersicht
Die Infrastruktur funktioniert nach folgendem Prinzip:
Internet │ Cloudflare DNS │ DDNS Script (Server oder Container) │ Router / FritzBox │ Lokaler Server (z.B. TeamSpeak)
Der Server prüft regelmäßig seine öffentliche IP-Adresse und aktualisiert bei Bedarf automatisch den DNS Eintrag der Domain.
Schritt 1 – Cloudflare API Token erstellen
Damit ein Script DNS Einträge bei Cloudflare ändern kann, wird ein API Token benötigt.
- Öffne das Cloudflare Dashboard
- Klicke oben rechts auf dein Profil
- Wähle API Tokens
- Klicke auf Create Token
- Wähle die Vorlage Edit zone DNS
- Wähle deine Domain aus
- Token erstellen und sicher speichern
Dieses Token wird später im Script verwendet.
Schritt 2 – Zone ID herausfinden
Die Zone ID identifiziert deine Domain innerhalb von Cloudflare.
- Öffne das Cloudflare Dashboard
- Wähle deine Domain aus
- Gehe auf Overview
- Rechts im Bereich API findest du die Zone ID
Beispiel einer Zone ID:
9a3c1f1e8b8d1c4e8e5c9a4d2a1fxxxx
Schritt 3 – Script auf dem Server installieren
Verbinde dich per SSH mit deinem Server oder LXC Container.
Installiere die benötigten Programme:
sudo apt update sudo apt install curl jq -y
Diese Programme werden benötigt, um API Anfragen zu senden und Antworten zu verarbeiten.
Schritt 4 – DDNS Script erstellen
Erstelle eine neue Datei:
nano /opt/cloudflare-ddns.sh
Füge folgenden Inhalt ein:
#!/bin/bash
ZONE_ID="DEINE_ZONE_ID"
RECORD_NAME="subdomain.deinedomain.de"
API_TOKEN="DEIN_API_TOKEN"
IP=$(curl -s https://api.ipify.org)
RECORD=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=$RECORD_NAME" \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json")
RECORD_ID=$(echo $RECORD | jq -r '.result[0].id')
CURRENT=$(echo $RECORD | jq -r '.result[0].content')
if [ "$IP" != "$CURRENT" ]; then
curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
--data "{\"type\":\"A\",\"name\":\"$RECORD_NAME\",\"content\":\"$IP\",\"ttl\":120,\"proxied\":false}"
fi
Wichtig:
- DEINE_ZONE_ID durch deine Cloudflare Zone ID ersetzen
- DEIN_API_TOKEN durch dein API Token ersetzen
- subdomain.deinedomain.de durch deine gewünschte Domain ersetzen
Schritt 5 – Script ausführbar machen
Damit das Script ausgeführt werden kann, muss es ausführbar gemacht werden:
chmod +x /opt/cloudflare-ddns.sh
Schritt 6 – Automatische Ausführung einrichten
Damit das Script regelmäßig ausgeführt wird, wird ein Cronjob eingerichtet.
Öffne die Cronjob Konfiguration:
crontab -e
Füge folgende Zeile hinzu:
*/5 * * * * /opt/cloudflare-ddns.sh >/dev/null 2>&1
Bedeutung dieser Zeile:
- Das Script wird alle 5 Minuten ausgeführt
- Die öffentliche IP wird geprüft
- Falls sich die IP geändert hat, wird der DNS Eintrag automatisch aktualisiert
Option A – Script im LXC Container ausführen
Das Script kann direkt in einem LXC Container laufen, beispielsweise im TeamSpeak Container.
Vorteile:
- Einfache Einrichtung
- Kein Zugriff auf den Proxmox Host erforderlich
- Container kann selbstständig DNS aktualisieren
Da Container dieselbe öffentliche IP sehen wie der Host, funktioniert diese Methode problemlos.
Option B – Script auf dem Proxmox Host ausführen (empfohlen)
In professionellen Homelab Umgebungen wird das DDNS Script häufig direkt auf dem Proxmox Host ausgeführt.
Vorteile:
- Zentrale Infrastrukturkomponente
- Unabhängig von einzelnen Containern
- Läuft auch wenn Container neu gestartet werden
Die Installation erfolgt identisch wie im Container:
apt update apt install curl jq -y
Danach Script erstellen und Cronjob einrichten.
Wichtiger Hinweis zur Cloudflare Konfiguration
Für Dienste wie TeamSpeak oder VoIP muss der Cloudflare Proxy deaktiviert sein.
Der DNS Eintrag muss daher auf:
DNS only (graue Wolke)
gesetzt werden.
Der Cloudflare Proxy funktioniert nicht mit UDP Diensten.
Ergebnis
Nach erfolgreicher Einrichtung wird die Domain automatisch aktualisiert, sobald sich die öffentliche IP-Adresse ändert.
Dadurch bleiben Dienste wie TeamSpeak, VoIP Server oder Webserver dauerhaft über dieselbe Domain erreichbar, auch bei dynamischen Internetanschlüssen.