Using the Cloudflare API to provide free Dynamic DNS with Windows and Powershell

This post details my switch over to using Powershell and Cloudflare to update a DNS record to a server’s current IP. This effectively emulates dyndns for this host – except it’s free.

There are a load of other options out there, which even include some simple-but-quite-clunky apps for domain registrars like NameCheap; but installing third party software is not the route I want to take.

I previously had my target domain (let’s call it targetdomain.com) hosted on a Linux box, and used SSH to update the DNS settings via a Windows server. This worked well for three years without a blip – but was clunky. I was using a scheduled task to start a bat file, which then ran Putty to run the shell script…to update a config on a server which was only hosting the domain to serve this purpose.

Although the scheduler>bat>shell tasks have been running well for years, it’s time to simplify!

I’ve been using Cloudflare for years, and set aside time to write a script to use their service for this purpose. As it turns out, people have done this for years – so I’ve taken one off the shelf.

Introducing “CloudFlareDynDns”

To use the script (which is a Powershell module) available on GitHub, I dropped it over to the windows server, and imported it.

To do this, I copied the file into the all users directory (check $Env:PSModulePath if it’s unknown).

The default public path for Powershell modules is C:\Program Files\WindowsPowerShell\Modules\[Module Name]\[Module files]

You can then import the module and check it’s available

PS cd C:\Program Files\WindowsPowerShell\Modules\CloudFlareDynamicDns
PS Import-Module .\CloudFlareDynamicDns

PS Get-Module
The module is now imported

Setting up our task

I’m using task scheduler for this, as it’s straight forward and easy to use. To test this, I simply ran the command on Powershell directly, which works. After, I switched it to calling it from a file and added some logging.

Let’s get the script set up with some basics (including run when not logged on)
Something like every hour seems appropriate
I’m cheating on the action here, but it works fine for testing

All done!

Considerations

At the current time, the two things on my mind are:

Further reading

Leave a Reply

Your e-mail address will not be published. Required fields are marked *