This is a bash script to act as a Cloudflare DDNS client, useful replacement for ddclient.
This gist will no longer update, instead please go to https://github.com/lifehome/systemd-cfddns for more updated versions.
- Put the
cfupdater
files to/usr/local/bin
- If you are using IPv4 for A record, append
-v4
tocfupdater
in the following systemd service unit. - If you are using IPv6 for AAAA record, append
-v6
tocfupdater
in the following systemd service unit. - If you prefer a dual-stack record, append
-dualstack
tocfupdater
in the following systemd service unit.
chmod +x /usr/local/bin/cfupdater
- Create a systemd service unit at
/etc/systemd/system/
, thecfupdate.service
is shown as an example. - Create a systemd timer unit at the same location of the service unit, the
cfupdate.timer
is shown as an example. sudo systemctl enable cfupdate.timer
sudo systemctl start cfupdate.timer
The default cfupdate.timer
is set to execute the script every minute.
Please keep in mind not to spam the API or you will be rate limited.
The dual-stack script has NOT been tested, use with caution. The dual-stack script will always sync upon either IPv4 or IPv6 has changed.
A quote from Cloudflare FAQ:
All calls through the Cloudflare Client API are rate-limited to 1200 every 5 minutes.
-- https://support.cloudflare.com/hc/en-us/articles/200171456
I've updated the script using @ofit 's ideea ... to update multiple sub domains like s1.example.com, s2.example.com, s3.example.com ... but also to a more programmer like idea... using bash functions and arrays
Also there was a bug when updating proxied IP's... default settings set by the API is false ... so I had to read besides "id", those optional settings: "proxiable","proxied" and "ttl". After that I added them to the update string.
Using those options, now the IP stays behind Cloudflare's IP's (like I wanted them to be)