CloudFlare APIv4 – Dynamic DNS Update

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.

Facebooktwittergoogle_plusredditpinterestlinkedintumblrmail
mxvt Verfasst von:

Administrator