Build a Dynamic DNS Client with Rackspace API

How to Build a Dynamic DNS via API

This time I’ve want to create a homemade Server with my Raspberry Pi2 and publish it using my own sub-domain, the main problem is that the ISP provide me an dynamic IP and we should ensure that if my IP address change the sub-domain record should point to the new IP.

The instructions assume that you:

  • Have a domain

  • Have already changed your NS records to point to and

  1. You should download the latest version of rsdns from github

    cd ~/bin/
    git clone
  2. Go to your Rackspace portal and grab your Username & API key (It’s under “Your Account” -> “Account Settings” -> “API Key”)

  3. Create a configuration file for rsdns (~/.rsdns_config) with your settings.

  4. You need your domain created on Rackspace(It’s under “Networking” -> “Cloud DNS” -> “Create Domain”) if you don’t have your domain created you are able to created using rsdns:

    ./ -d -e [email protected]
  5. Once you have a domain setup you need to create an A record. To create the A record you going to need an IP address, you can use to get your actual current IP. Again to create a record you are able to do it from Rackspace panel (It’s under “Networking” -> “Cloud DNS” -> YOUR_DOMAIN -> “Add Record”) or you can use rsdns:

    ./ -n -i -t 3600

    In the above the TTL is set to 1hr (3600 secs), this is so that DNS caches do not keep the record too long. That’s all the pre-work done, now lets get your dynamic host setup!

  6. The script to update your a record is, and you run it like this:

    ./ -n

    The script uses icanhazip to get your current IP, it then update the A record with it.

    I never switch off my router so I have create a created a cronjob to run that script every 2 hours, plus the 1hr TTL should mean that the record is roughly in sync with my IP without making unnecessary requests

  7. I use CentOS, so I can simply drop the following file called rsdns-dc into /etc/cron.d/ with this…

    vim /etc/cron.d/rsdns-dc
    * */2  * * *     lcacho /home/lcacho/bin/rsdns/ -n &>/dev/null

Now we are done! Private Dynamic DNS on your own zone using the Rackspace API.

Edit this page

Luis Cacho
Luis Cacho
Senior Container Infrastructure Consultant

Senior Container Infrastructure Consultant at Red Hat | DevOps Practitioner | Kubernetes Enthusiast | Ansible Ninja | Data Science Noob