Cloudflare DDNS on Linux
Adam Mateusz Brożyński
Posted on June 14, 2022
1. Generate token in My profile → API Tokens → Create Token
with Zone.DNS
permission for selected DNS zone.*
Note that it is not possible to select only one subdomain and token will have permission to change all DNS entries.
2. Use the following script to update DNS entry automatically on your server and save it as /usr/local/bin/ddns
:
#!/bin/bash
# Check for current external IP
IP=`dig +short txt ch whoami.cloudflare @1.0.0.1| tr -d '"'`
# Set Cloudflare API
URL="https://api.cloudflare.com/client/v4/zones/DNS_ZONE_ID/dns_records/DNS_ENTRY_ID"
TOKEN="YOUR_TOKEN_HERE"
NAME="DNS_ENTRY_NAME"
# Connect to Cloudflare
cf() {
curl -X ${1} "${URL}" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${TOKEN}" \
${2} ${3}
}
# Get current DNS data
RESULT=$(cf GET)
IP_CF=$(jq -r '.result.content' <<< ${RESULT})
# Compare IPs
if [ "$IP" = "$IP_CF" ]; then
echo "No change."
else
RESULT=$(cf PUT --data "{\"type\":\"A\",\"name\":\"${NAME}\",\"content\":\"${IP}\"}")
echo "DNS updated."
fi
3. Add script to crontab, so it will be executed every minute:
# crontab -e
* * * * * /usr/local/bin/ddns > /dev/null 2>&1
💖 💪 🙅 🚩
Adam Mateusz Brożyński
Posted on June 14, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.