Wer sich mit Self-Hosting und dem Betrieb eines eigenen Webservers beschäftigt, kommt meiner Meinung nach an Cloudflare nicht vorbei. Selbst wenn eure Domain bei einem anderen Anbieter registriert wurde, lässt sie sich problemlos zu Cloudflare umziehen.
In dieser Anleitung zeige ich euch Schritt für Schritt, wie ihr eure Domain – in meinem Fall banke.cloud
– von Strato zu Cloudflare migriert. Zudem erkläre ich, wie ihr Subdomains mit A-Records anlegt und eure externe IP automatisch aktualisieren lasst, selbst wenn sie sich täglich ändert.
Zwar bieten Anbieter wie Strato solide Dienste, doch gerade im Bereich Self-Hosting stößt man schnell an Grenzen. Ein Beispiel:
Bei Strato ist es aktuell nicht möglich, DynDNS für mehrere Domains gleichzeitig zu nutzen. Zudem erlauben die meisten Router nur eine einzige Domain, um automatisch die externe IP zu aktualisieren.
Mit Cloudflare könnt ihr diese Einschränkungen umgehen und habt gleichzeitig Zugriff auf leistungsstarke Funktionen wie:
Diese Anleitung zeigt euch, wie ihr eure DNS-Einträge zu Cloudflare umzieht und dabei Subdomains sowie A-Records verwaltet. Außerdem erkläre ich, wie ihr eure externe IP automatisch per Shell aktualisieren könnt, um auch mit einer dynamischen IP-Adresse zuverlässig erreichbar zu bleiben.
1️⃣ Registriert euch kostenlos bei Cloudflare und meldet euch anschließend an.
Klickt auf der Konto-Startseite auf "+ Domäne hinzufügen".
2️⃣ Gebt eure bestehende Domain ein und lasst die Standard-Einstellung bei "Schnell nach DNS-Einträgen suchen".
Cloudflare scannt dann automatisch eure bisherigen DNS-Einträge.
Falls bereits ein A-Record vorhanden ist, wird dieser übernommen. Klickt anschließend auf Weiter.
3️⃣ Bezahlungsplan auswählen
Wählt den Plan "Free" aus und klickt auf Weiter.
4️⃣ Cloudflare zeigt eine Liste der gefundenen DNS-Einträge an.
Achtet darauf, dass mindestens ein A-Record für eure Domain vorhanden ist. Falls kein A-Record eingetragen ist, scrollt bitte weiter nach unten. Dort ist beschrieben wie Ihr eine A-Record manuell eintragen könnt, ansonsten klickt auf "Weiter zur Aktivierung".
5️⃣ In der Mitte der Seite seht ihr die neuen Cloudflare-Nameserver.
Notiert euch beide Nameserver, da ihr sie gleich beim Domain-Anbieter eintragen müsst und klickt auch hier auf weiter.
Nun müsst ihr euch beim bisherigen Domain-Anbieter anmelden und die Nameserver ändern.
1️⃣ Nameserver-Einstellungen aufrufen
Jeder Anbieter hat eine andere Oberfläche, aber die Einstellung ist überall gleich.
Geht in die Domainverwaltung eures Anbieters und klickt auf das Zahnrad-Symbol.
2️⃣ DNS-Tab öffnen & Nameserver ändern.Wechselt in den Reiter "DNS".
Klickt auf "NS-Record verwalten" und tragt die Cloudflare-Nameserver ein.
Abschließend auf "NS-Record speichern" klicken.
3️⃣ Warten, bis die Änderung aktiv ist
Die DNS-Umstellung kann zwischen wenigen Minuten bis zu 24 Stunden dauern.
Cloudflare schickt euch eine E-Mail, sobald die Umstellung abgeschlossen ist.
Ihr könnt dann in Cloudflare weiterarbeiten, um DynDNS und andere Einstellungen zu konfigurieren.
banke.cloud
) immer auf die aktuelle IP-Adresse verweist, unter der eure Website oder euer Server erreichbar ist.Damit wir die automatische IP-Aktualisierung einrichten können, benötigen wir zwei wichtige Informationen von Cloudflare:
1️⃣ Die Zonen-ID
2️⃣ Einen API-Token
1️⃣ Melde dich bei Cloudflare an und wähle deine Domain aus.
2️⃣ Scrolle auf der Übersichtsseite nach unten, bis du die Zonen-ID siehst.
3️⃣ Kopiere die Zone-ID, da wir sie später für das Skript benötigen.
1️⃣ Klicke in Cloudflare auf "Ihr API-Token erhalten".
2️⃣ Wähle anschließend "Token erstellen" aus.
1️⃣ Wähle die Option "Zonen-DNS bearbeiten".
2️⃣ Klicke auf den Button "Vorlage verwenden".
1️⃣ Wähle nun deine Domain aus.
2️⃣ Klicke auf "Weiter zur Zusammenfassung".
1️⃣ Klicke auf den Button "Token erstellen".
2️⃣ Sobald der Token generiert wurde, kopiere ihn sofort und speichere ihn sicher.
1️⃣ Kopiere deine Zone-ID und deinen API-Token und bewahre sie sicher auf.
2️⃣ Diese beiden erte werden im nächsten Schritt für das Automatisierungs-Skript benötigt.
Jetzt wo wir beide notwendigen Information haben, können wir uns daran machen das Shell Script zu schreiben.
Erstellt mit Hilfe von nano
ein leere Shell-Datei.
Das könnt ihr mit folgenden Befehl machen:
sudo nano /usr/shells/cloudflare-auto-update.sh
in welchen Ordner ihr das Shell erstellt bleibt euch überlassen, aber bedenkt Datenstuktur ist wichtig.
Kopiert dort folgenden Inhalt rein. Ersetzt "Zonen-ID" durch eure Zonen-ID und "API-Token" durch euren Token.Achtet daraufdas eure ID und das Token zwischen den beiden Anführungsstrichen ist.
#!/bin/bash
# Cloudflare DynDNS Auto-Update Script
# Dieses Skript holt automatisch alle A-Record-IDs und aktualisiert danach die DNS-Einträge
############################################
# 1. Konfiguration
############################################
CF_API_TOKEN="API-Token"
CF_ZONE_ID="Zonen-ID"
CONFIG_FILE="$HOME/.cloudflare.conf"
RECORD_TYPE="A"
# Sicherstellen, dass jq installiert ist
if ! command -v jq &> /dev/null; then
echo "Fehler: 'jq' ist nicht installiert! Bitte installiere es mit 'sudo apt install jq'."
exit 1
fi
############################################
# 2. A-Record-IDs automatisch abrufen und speichern
############################################
RESPONSE=$(curl -s -X GET \
"https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records?type=A&match=all&per_page=100" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json")
if [[ "$RESPONSE" == *"\"success\":false"* ]]; then
echo "Fehler: Cloudflare API konnte nicht abgefragt werden!"
echo "$RESPONSE"
exit 1
fi
# Konfigurationsdatei neu erstellen
echo "# Automatisch generierte Cloudflare A-Record-IDs" > "$CONFIG_FILE"
echo "$RESPONSE" | jq -r '.result[] | "\(.name) \(.id)"' > "$CONFIG_FILE"
echo "Alle A-Record-IDs wurden aktualisiert:"
cat "$CONFIG_FILE"
############################################
# 3. 1 Sekunde Pause zur Sicherheit
############################################
sleep 1
############################################
# 4. Öffentliche IP ermitteln
############################################
CURRENT_IP="$(curl -s4 ifconfig.co)"
if [ -z "$CURRENT_IP" ]; then
echo "Konnte keine öffentliche IPv4-Adresse ermitteln!"
exit 1
fi
echo "Neue IP (lokal ermittelt): $CURRENT_IP"
############################################
# 5. DNS-Einträge aktualisieren
############################################
declare -A RECORDS
while read -r DOMAIN RECORD_ID; do
RECORDS["$DOMAIN"]="$RECORD_ID"
done < "$CONFIG_FILE"
for DOMAIN in "${!RECORDS[@]}"; do
RECORD_ID="${RECORDS[$DOMAIN]}"
echo "Bearbeite DNS-Record für: $DOMAIN"
# Alte IP bei Cloudflare abfragen
RESPONSE=$(curl -s -X GET \
"https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records/${RECORD_ID}" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json")
OLD_IP=$(echo "$RESPONSE" | grep -oP '"content":"\K[^"]+')
if [[ "$RESPONSE" == *"\"success\":false"* ]]; then
echo "FEHLER beim Abfragen des DNS-Records für $DOMAIN. Prüfe die Konfiguration!"
echo "$RESPONSE"
continue
fi
echo "Alte IP (laut Cloudflare): $OLD_IP"
# Prüfen, ob Update notwendig ist
if [ "$CURRENT_IP" == "$OLD_IP" ]; then
echo "Die IP hat sich nicht geändert. Kein Update notwendig."
continue
fi
echo "IP hat sich geändert, Update wird durchgeführt..."
# DNS-Eintrag aktualisieren
UPDATE_DATA=$(cat <<EOF
{
"type": "${RECORD_TYPE}",
"name": "${DOMAIN}",
"content": "${CURRENT_IP}",
"ttl": 120,
"proxied": false
}
EOF
)
UPDATE_RESPONSE=$(curl -s -X PUT \
"https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records/${RECORD_ID}" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json" \
--data "${UPDATE_DATA}")
SUCCESS=$(echo "$UPDATE_RESPONSE" | grep -o '"success":true')
if [ -n "$SUCCESS" ]; then
echo "✅ DNS-Record für $DOMAIN erfolgreich auf '${CURRENT_IP}' aktualisiert."
else
echo "❌ FEHLER beim Aktualisieren des DNS-Records für $DOMAIN:"
echo "$UPDATE_RESPONSE"
fi
done
echo "✅ Die DNS-Records für alle Domains sind erfolgreich aktualisiert worden."
exit 0
Speichert das Ganze und schließt den Editor wieder.
Jetzt müssen wir das Shell noch ausführbar, gebt dazu folgenden Befehl ein:
sudo chmod +x cloudflare-auto-update.sh
Startet dann das Script mit
./cloudflare-auto-update.sh
das Shell sollte fehlerfrei durchlaufen und euch darüber informieren was es gemacht habt.
Wenn das funktioniert hat müssen wir noch dafür sorgen dass das Shell alle 5 minuten ausgeführt wird.
DAs lässt sich am einfachsten mit ein cronjob erledigen
Gebt dazu folgenden Befehl ein:
crontab -e
und tragt dort die fogende Zeile ein
*/5 * * * * /usr/shells/cloudflare-auto-update.sh >/dev/null 2>&1
und speichert das Ganze ab.
der Wert >/dev/null 2>&1
sorgt dafür das eine Systemail unterdrückt wird. Ansonsten wird der cronjob
alle 5 Minuten eine Systemmail generieren und somit euer System vollmüllen.
Das Skript wurde so geschrieben, dass keine manuellen Anpassungen erforderlich sind, egal ob eine neue Subdomain hinzugefügt oder entfernt wird.
Es erkennt automatisch alle A-Records der Hauptdomain und Subdomains und aktualisiert die externe IP-Adresse bei Cloudflare, falls sich diese ändert.
Dadurch entfällt die Notwendigkeit, für jede neue Subdomain manuell einen Eintrag im Skript vorzunehmen.
Das sorgt dafür, dass das Skript ohne manuelle Pflege zuverlässig arbeitet, selbst wenn neue Subdomains hinzugefügt oder alte entfernt werden.
Im nächsten Abschnitt geht es darum, wie neue Subdomains bei Cloudflare eingerichtet oder entfernt werden können, sodass sie automatisch im Update-Skript berücksichtigt werden.