Skip to content

Instantly share code, notes, and snippets.

@takuya
Created December 5, 2024 05:06
Show Gist options
  • Save takuya/34fddefa87b2ed1d612e6b17dc44460b to your computer and use it in GitHub Desktop.
Save takuya/34fddefa87b2ed1d612e6b17dc44460b to your computer and use it in GitHub Desktop.
Cloudflare DNS update for openwrt
ddns の更新用
```sh
#!/bin/bash
## ddns updater に指定するためのもの
#grep=/usr/libexec/grep-gnu
#NGN_IF=eth1
#NEW_IP=$(curl -s https://api.ipify.org )
expr match $CURRENT_IP $IPV4_REGEX && is_v4=1;
expr match $CURRENT_IP $IPV6_REGEX && is_v6=1;
DNS_RECORD_TYPE='x'
DNS_RECORD_HOST=$lookup_host
NEW_IP=$CURRENT_IP
[ -n "$is_v4" ] && DNS_RECORD_TYPE=A
[ -n "$is_v6" ] && DNS_RECORD_TYPE=AAAA
d=/etc/config/custom/ddns
updater=$d/cloudflare-update-dns.sh
[ "$DNS_RECORD_TYPE" = 'x' ] && exit;
##
$updater $DNS_RECORD_HOST $DNS_RECORD_TYPE $NEW_IP
root@FukaeWrt:/etc/config/custom/ddns# cat cloudflare-update-dns.sh
#!/bin/bash
ZONE_ID=86xxxxxxxxxxxxxxxxxxxxxx
API_TOKEN=vt_a5xxxxxxxxxxxxxxxxxxxxxxxP3Q-A
function update_cloudflare_dns_record(){
##
DNS_RECORD_ID=$1
DNS_RECORD_HOST=$2
DNS_RECORD_TYPE=$3
NEW_IP=$4
##
JSON=$(cat <<EOS
{
"comment": "",
"name": "$DNS_RECORD_HOST",
"proxied": false,
"settings": {},
"tags": [],
"ttl": 1,
"content": "$NEW_IP",
"type": "$DNS_RECORD_TYPE"
}
EOS
)
JSON=$( echo $JSON | jq . -rc )
##
result=$(echo curl -s -X PATCH \
"https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$DNS_RECORD_ID" \
-H "'Authorization: Bearer $API_TOKEN'" \
-H "'Content-Type: application/json'" \
--data "'$JSON'" | bash )
echo $result | jq .
if [[ 'true' != $(echo $result | jq .success) ]]; then
exit 1
fi
}
function record_id(){
f=`readlink -f $0`
d=`dirname $f`
lists=$d/cloudflare-list-records.sh
$lists | grep $1 | grep $2
}
function main(){
if (( 3> $# )) ; then
echo arguments required.
echo
echo Usage:
echo
echo $0 DNS_RECORD_TYPE DNS_RECORD_TYPE NEW_IP
echo
exit 1
fi
result=($( record_id $1 $2 ))
DNS_RECORD_ID=${result[0]}
DNS_RECORD_HOST=$1
DNS_RECORD_TYPE=$2
NEW_IP=$3
update_cloudflare_dns_record $DNS_RECORD_ID $DNS_RECORD_HOST $DNS_RECORD_TYPE $NEW_IP
}
main $@
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment