Dynamic DNS with ddclient and Cloudflare

From the Cloudflare side, add desired subdomain you want to map.

add subdomain

Put a dummy IP address (, deactivate orange cloud and click Add Record.

Next, from My profile page get Global API Key.

get global api key

On a machine with a dynamic public ip, install ddclient with:

sudo apt update
sudo apt install ddclient libjson-any-perl

Update /etc/default/ddclient:
Check for run_daemon="true" and update daemon_interval to preferred value, default is 300 seconds.

# Configuration for ddclient scripts
# generated from debconf on Fri 24 Nov 21:37:56 EET 2017
# /etc/default/ddclient

# Set to "true" if ddclient should be run every time DHCP client ('dhclient'
# from package isc-dhcp-client) updates the systems IP address.

# Set to "true" if ddclient should be run every time a new ppp connection is
# established. This might be useful, if you are using dial-on-demand.

# Set to "true" if ddclient should run in daemon mode
# If this is changed to true, run_ipup and run_dhclient must be set to false.

# Set the time interval between the updates of the dynamic DNS name in seconds.
# This option only takes effect if the ddclient runs in daemon mode.

Insert valid email, API Key and update the subdomains you want to update in /etc/ddclient.conf:

# Configuration file for ddclient generated by debconf
# /etc/ddclient.conf

### CloudFlare config

use=web, web=dyndns

# set domain and subdomain to update

# sub2.domain1.com

# zone=domain2.com
# sub1.domain2.com

Test current config with:

sudo ddclient -daemon=0 -debug -verbose -noquiet

Restart ddclient service:

sudo service ddclient restart

Now ddclient is up and running as is checking for DNS updates every 60 seconds.

Check service status with:

sudo service ddclient start

These instructions have been tested on ubuntu 16.04 and raspberry pi with raspbian stretch.

Future work:

  • pack the service as a docker container, run service from a single command.

For more in depth instructions read Dynamic DNS with ddclient on Raspberry Pi and Ubuntu.