Skip to main content

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.

  1. Öffne das Cloudflare Dashboard
  2. Klicke oben rechts auf dein Profil
  3. Wähle API Tokens
  4. Klicke auf Create Token
  5. Wähle die Vorlage Edit zone DNS
  6. Wähle deine Domain aus
  7. 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.

  1. Öffne das Cloudflare Dashboard
  2. Wähle deine Domain aus
  3. Gehe auf Overview
  4. 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.