#!/bin/bash LOGTIME=$(date "+%Y-%m-%d %H:%M:%S") # CHANGE THESE auth_email="user@example.com" auth_key="c2547eb745079dac9320b638f5e225cf483cc5cfdda41" # find in cloudflare account settings record_name="www.example.com" zone_identifier="023e105f4ecef8ad9ca31a8372d0c353" # get zone ID via API and store it here record_identifier_ipv4="372e67954025e0ba6aaa6d586b9e0b59" # use List DNS Records api to get record id, link below ↓ record_identifier_ipv6="372e67954025e0ba6aaa6d586b9e0b5a" # https://api.cloudflare.com/#dns-records-for-a-zone-list-dns-records # Get zone ID #domain_name=example.com #zone=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=${domain_name}&status=active&page=1&per_page=20&order=status&direction=desc&match=all" \ # -H "X-Auth-Email: ${auth_email}" \ # -H "X-Auth-Key: ${auth_key}" \ # -H "Content-Type: application/json") #zone_identifier=${zone:18:32} #echo $zone_identifier # List DNS Records #records=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/${zone_identifier}/dns_records" \ # -H "X-Auth-Email: ${auth_email}" \ # -H "X-Auth-Key: ${auth_key}" \ # -H "Content-Type: application/json") #echo $records | jq # MAYBE CHANGE THESE ipv4=$(curl -s https://ipv4.icanhazip.com) # ipv6=$(curl -s https://ipv6.icanhazip.com) ipv6=$(/sbin/ip -6 addr | grep inet6 | awk -F '[ \t]+|/' '{print $3}' | grep -v ^::1 | grep -v ^f | head -1) # /sbin/ip -6 addr show eth0 (to specify eth0) # SCRIPT START update_ipv4=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records/$record_identifier_ipv4" \ -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\":\"$ipv4\"}") update_ipv6=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records/$record_identifier_ipv6" \ -H "X-Auth-Email: $auth_email" \ -H "X-Auth-Key: $auth_key" \ -H "Content-Type: application/json" \ --data "{\"id\":\"$zone_identifier\",\"type\":\"AAAA\",\"name\":\"$record_name\",\"content\":\"$ipv6\"}") if [[ $update_ipv4 == *"\"success\":false"* ]]; then message="API UPDATE A RECORD FAILED. DUMPING RESULTS:\n$update_ipv4" echo -e "['$LOGTIME'] $message" exit 1 else message="A record updated to: $ipv4" echo "['$LOGTIME'] $message" fi if [[ $update_ipv6 == *"\"success\":false"* ]]; then message="API UPDATE AAAA RECORD FAILED. DUMPING RESULTS:\n$update_ipv6" echo -e "['$LOGTIME'] $message" exit 1 else message="AAAA record updated to: $ipv6" echo "['$LOGTIME'] $message" fi