Skip to content

Instantly share code, notes, and snippets.

@Coxxs
Forked from dd-han/README.md
Created March 11, 2018 06:17
Show Gist options
  • Save Coxxs/cae53ef037ae80d0ea2d40ec55cd966c to your computer and use it in GitHub Desktop.
Save Coxxs/cae53ef037ae80d0ea2d40ec55cd966c to your computer and use it in GitHub Desktop.
using Cloudflare as DDNS in ASUSWRT-Merlin firmware

ASUSWRT-MERLIN custom DDNS Script for Cloudflare

for Cloudflare as DDNS

using Cloudflare API v4

Using

put ddns-start at /jffs/scripts/, setting values and set DDNS type to Custom at web Admin panel.

setting

EMAIL is your Cloudflare account

API is your Cloudflare API Key. You can find at My Setting -> API Key -> Global API Key -> View API Key

ZONEID can find by following command

curl -X GET "https://api.cloudflare.com/client/v4/zones" \\
    -H "X-Auth-Email: $EMAIL" \\
    -H "X-Auth-Key: $API" \\
    -H "Content-Type: application/json"

RECORDID can find by following command

curl -X GET "https://api.cloudflare.com/client/v4/zones/${ZONE}/dns_records?page=1&per_page=1000&order=type&direction=asc" \\
     -H "Content-Type:application/json" \\
     -H "X-Auth-Key: $API" \\
     -H "X-Auth-Email: $EMAIL"

RECORDNAME is target domain name like ddns.dd-han.tw

RECORDTTL is record TTL in minute (1=auto)

if you don't want skip SSL check, run opkg install ca-certificates and change command from curl -ks to curl -s

Reference

#!/bin/sh
EMAIL="Your CloudFlare E-mail address"
API="Your Cloudflare API Key"
ZONEID="Your zone id, hex16 string"
RECORDID="You DNS record ID, hex16 string"
RECORDNAME="Your DNS record name, e.g. sub.example.com"
RECORDTTL="Your DNS record TTL (1=auto)"
IP=${1}
RES=`curl -ks -X PUT "https://api.cloudflare.com/client/v4/zones/${ZONEID}/dns_records/${RECORDID}" \
-H "X-Auth-Email: ${EMAIL}" \
-H "X-Auth-Key: ${API}" \
-H "Content-Type: application/json" \
--data "{\"type\":\"A\",\"name\":\"${RECORDNAME}\",\"content\":\"${IP}\",\"ttl\":${RECORDTTL},\"proxied\":false}"`
echo $RES | grep '"success":\ *true' > /dev/null
if [ $? -eq 0 ]; then
/sbin/ddns_custom_updated 1
else
/sbin/ddns_custom_updated 0
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment