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.