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.