Wie kann ich automatisch den CloudFlare DNS Eintrag auf die IP meines Servers setzen?
Im November stellt CloudFlare auf die APIv4 um. Ich habe hier ein Bash-Skript mit dem ihr den DNS-Eintrag den CloudFlare kontrolliert auf die IP eures Servers anpassen könnt. Zusätzlich sorgt das Skript dafür das die Anfragen an die neue IP-Adresse über den CloudFlare-Proxy geleitet werden. Kein anderes Skript macht das automatisch. Ich habe das Skript von GitHub-Benutzer benkulbertis genommen und verändert. Das Original-Skript funktioniert mit den letzten Änderungen in der CloudFlare-API nicht mehr. Hier ist meine angepasste Version:
#!/bin/bash
# CHANGE THESE
auth_email="Eure CloudFlare e-Mail Adresse"
auth_key="Der CloudFlare API-Key, zu finden im CloudFlare Dashboard" # found in cloudflare account settings
zone_name="Der Name eurer Zone, meistens eure Domain"
record_name="Record Name aus dem DNS-Eintrag, meistens eure Domain"
# MAYBE CHANGE THESE
ip=$(curl -s ifconfig.co)
ip_file="ip.txt"
id_file="cloudflare.ids"
log_file="cloudflare.log"
# LOGGER
log() {
if [ "$1" ]; then
echo -e "[$(date)] - $1" >> $log_file
fi
}
# SCRIPT START
log "Check Initiated"
if [ -f $ip_file ]; then
old_ip=$(cat $ip_file)
if [ $ip == $old_ip ]; then
echo "IP has not changed."
exit 0
fi
fi
if [ -f $id_file ] && [ $(wc -l $id_file | cut -d " " -f 1) == 2 ]; then
zone_identifier=$(head -1 $id_file)
record_identifier=$(tail -1 $id_file)
else
zone_identifier=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$zone_name" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" | grep -Po '(?<="id":")[^"]*' | head -1 )
record_identifier=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records?type=A&name=$record_name&proxied=true" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" | grep -Po '(?<="id":")[^"]*')
echo "$zone_identifier" > $id_file
echo "$record_identifier" >> $id_file
fi
update=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records/$record_identifier" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" --data "{\"id\":\"$zone_identifier\",\"type\":\"A\",\"name\":\"$record_name\",\"content\":\"$ip\",\"proxiable\":true,\"proxied\":true}")
if [[ $update == *"\"success\":false"* ]]; then
message="API UPDATE FAILED. DUMPING RESULTS:\n$update"
log "$message"
echo -e "$message"
exit 1
else
message="IP changed to: $ip"
echo "$ip" > $ip_file
log "$message"
echo "$message"
fi
Wenn ihr das Skript auf eurem Linux-System verwenden wollt, dann gebt folgendes ein:
cd && wget "https://xvt-blog.tk/wp-content/cloudflare/cloudflare-update-record.sh" && chmod +x cloudflare-update-record.sh
Einfach diese Eingabe kopieren, in das Terminal einfügen und Enter drücken. Das Skript landet danach in eurem Benutzerverzeichnis und ist Einsatzbereit. Jetzt solltet ihr einen Cronjob für das Skript einrichten:
Gebt folgendes in das Terminal ein: crontab -e Danach geht ihr zur letzten Zeile und fügt eine neue Zeile ein. Dort schreibt ihr folgendes rein: */15 * * * * bash /home/BENUTZER/cloudflare-update-record.sh & Dort wo BENUTZER steht gebt ihr euren Benutzernamen auf diesem Linux-System ein. Der Pfad muss auf die Datei zeigen, kontrolliert ob der Pfad korrekt ist. Danach speichert ihr und schließt euren Texteditor.
Ihr könnt zum testen euer Skript einmal ausführen. Überprüft ob das Skript den Eintrag auf CloudFlare verändert.
