Using ddclient with Cloudflare

CloudFlare is the perfect dynamic DNS host because, unlike the other major ones, CloudFlare is completely free. Unfortunately if your ISP dosen’t allow use of a static IP, maintaining regular internet uptime can be quite annoying. Here’s how I got DDNS working on Ubuntu 18.04.1 LTS with Cloudflare and ddclient running as a daemon to check and renew our IP if it changes.

Install ddclient

sudo apt install ddclient libdata-validate-ip-perl

Install with the below options

  • Dynamic DNS service provider: select other
  • Dynamic DNS server: leave blank
  • Dynamic DNS update protocol: select dyndns2
  • Username for dynamic DNS service: leave blank
  • Password for dynamic DNS service: leave blank
  • Re-enter password to verify: leave blank
  • Network interface used for dynamic DNS service: leave blank
  • DynDNS fully qualified domain names: leave blank

Now let’s rerun the configuration and answer the additional questions that were not asked on the first run! You can just provide the same answers, but the additional questions are what we need to pay attention to.

sudo dpkg-reconfigure ddclient
  • Run ddclient on PPP connect?: select No (the default is “Yes”).
  • Run ddclient as a daemon: select Yes (the default is “No”).
  • Interval between ddclient runs: leave as 300 (if you want a 5 minute interval).

Update ddclient

Since the Ubuntu repository installs ddclient version 3.8.3 (released 2015-05-30), and the latest version is 3.9.0 (released 2018-08-09), we should probably update it.

wget https://sourceforge.net/projects/ddclient/files/ddclient/ddclient-3.9.0/ddclient-3.9.0.tar.gz
tar -xvf ddclient-3.9.0.tar.gz

Overwrite our existing 3.8.3 install

sudo cp -f ddclient-3.9.0/ddclient /usr/sbin/ddclient

The ddclient.config file location has changed in 3.9.0, so we need to resolve that issue.

sudo mkdir /etc/ddclient
sudo mv /etc/ddclient.conf /etc/ddclient

Let’s cleanup by removing the old package files

rm ddclient-3.9.0.tar.gz
rm -R ddclient-3.9.0

Configuration

sudo nano /etc/ddclient/ddclient.conf

Let’s review and update the config values.

# Configuration file for ddclient generated by debconf
#
# /etc/ddclient.conf
# For more information, see https://jacobjangles.com/free-ddns-using-ddclient-and-cloudflare/

daemon=900
ssl=yes

protocol=cloudflare
use=web
login=YOUR-CLOUDFLARE-EMAIL-ADDRESS
password=YOUR-CLOUDFLARE-API-KEY
zone=dotmycom.com ( replace with your domain )
dotmycom.com ( replace with your domain )

Testing

Google your IP address and verity it matches below.

sudo ddclient -query

Verify that ddclient is returning your correct ip address (10.10.10.10 is our example).

use=if, if=enp2s0f0 address is 10.10.10.10
use=if, if=lo address is 127.0.0.1
WARNING:  found neither ipv4 nor ipv6 address
use=web, web=dnspark address is NOT FOUND
use=web, web=dyndns address is 10.10.10.10
use=web, web=loopia address is 10.10.10.10

Try to update your DNS records for the first time.

sudo ddclient -daemon=0 -verbose -noquiet

You will see the following output:

CONNECT:  checkip.dyndns.org
CONNECTED:  using HTTP
SENDING:  GET / HTTP/1.0
SENDING:   Host: checkip.dyndns.org
SENDING:   User-Agent: ddclient/3.9.0
SENDING:   Connection: close
SENDING:
SENDING:
RECEIVE:  HTTP/1.1 200 OK
RECEIVE:  Content-Type: text/html
RECEIVE:  Server: DynDNS-CheckIP/1.0.1
RECEIVE:  Connection: close
RECEIVE:  Cache-Control: no-cache
RECEIVE:  Pragma: no-cache
RECEIVE:  Content-Length: 105
RECEIVE:
RECEIVE:  <html><head><title>Current IP Check</title></head><body>Current IP Address: 10.10.10.10</body></html>
SUCCESS:  dotmycom.com: skipped: IP address was already set to 10.10.10.10.

Pay attention to the last line. Note the SUCCESS:

If you do have problems, you can get a lot more information by running:

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

Verify Daemon

ps ax | grep ddclient

You will see the following output:

1471 ?        S      0:00 ddclient - sleeping for 310 seconds
5613 pts/0    S+     0:00 grep --color=auto ddclient

You can see ddclient is active and waiting to update. If it’s not running as a daemon, the file /etc/default/ddclient will probably need to be adjusted and you might need to make a Unit File. Check out running ddclient as a service.