Created
December 5, 2024 05:06
-
-
Save takuya/34fddefa87b2ed1d612e6b17dc44460b to your computer and use it in GitHub Desktop.
Cloudflare DNS update for openwrt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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