Cloudflare DynDNS API - Updating Cloudflare DynDNS with Synology Dynamic IP
Heres a script I use to update my Domain DNS Records to point to my Synology NAS dynamic ip adress.
#!/usr/bin/env bash
DOMAIN="mydomain.com"
SYNOLOGY_ID=""
# get zone id from cloudflare dashboard
ZONE_ID=""
# get cloudlare creds from here
# https://developers.cloudflare.com/fundamentals/api/get-started/create-token/
CLOUDFLARE_EMAIL=""
CLOUDFLARE_API_KEY=""
if [ "$(hostname)" = "NAS_USERNAME" ]; then
# when run as a script on my NAS
echo internal
IP="$(curl ifconfig.me)"
else
# when run externally
echo external
IP="$(dig +short "$SYNOLOGY_ID".synology.me)"
fi
echo "IP: $IP"
cloudflare_update_dyndns() {
curl https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$DNS_RECORD_ID \
-X PATCH \
-H 'Content-Type: application/json' \
-H "X-Auth-Email: $CLOUDFLARE_EMAIL" \
-H "X-Auth-Key: $CLOUDFLARE_API_KEY" \
-d '{
"name":"'"$RECORD_NAME"'",
"ttl": 3600,
"type": "A",
"comment": "DynDNS IP",
"content":"'"$IP"'",
"proxied": true
}'
echo
}
# get dns record id for *, www, and the root domain
# curl -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=$RECORD_NAME" \
# -H "X-Auth-Email: $CLOUDFLARE_EMAIL" \
# -H "X-Auth-Key: $CLOUDFLARE_API_KEY" \
# -H "Content-Type: application/json"
RECORD_NAME="$DOMAIN"
DNS_RECORD_ID=""
cloudflare_update_dyndns
RECORD_NAME="www.$DOMAIN"
DNS_RECORD_ID=""
cloudflare_update_dyndns
RECORD_NAME="*.$DOMAIN"
DNS_RECORD_ID=""
cloudflare_update_dyndns