DDNSUpdate

DDNSUpdate is a simple wrapper around nsupdate and dig to make updating a dynamic dns host easier. Right now, options are quite limited (single host with optionnal wildcard) but it may change over time.

Author: Hugues Lismonde

Version: 0.1.6 (2011-09-09)

Copyright: Copyright (c) 2011 Hugues Lismonde. All rights reserved.

License: WTFPL 2.0 (http://sam.zoy.org/wtfpl/)

Website: http://github.com/epicagency/ddnsupdate/

Installation

gem install ddnsupdate

Usage

ddnsupdate [options]

Commands:

            up:   Updates host
           gen:   Generate secret key from password
            ip:   Display current local or remote ip

Update options:

 --key, -k <s>:   DNS Key
--host, -h <s>:   Hostname to update
  --remote, -r:   Use remote IP (default: local ip)
    --wild, -w:   Add a wildcard on the same IP (i.e. *.host IN A ip)
     --soa, -s:   Specify soa/server to update instead of trying to autodetect

Generate options:

--pass, -p <s>:   Password to hash
--bind, -b <s>:   Output as a bind key definition

IP options:

  --remote, -r:   Display remote ip instead of local

Usage example

First you have to setup your dns server (see below for an example). Once done, generate a key for your host by running:

ddnsupdate gen -p <password>

Append -b <hostname> to output to a bind key format if that's what you use.

After your setup is complete, periodicaly run:

ddnsupdate up -h <hostname> -k <key>

This will update with your local ip (usefull for testing on a local network). If you want it to be your remote IP simply add -r.

You can also use the -w flag to add a wildcard to your host, pointing on the same IP (so host.name and *.host.name both point on the same address).

Bind configuration example

For DDNSUpdate to be of any use you need to have a DNS server that accepts dynamic update through nsupdate. Here you'll find a quick example how to setup a zone to do just that.

First you'll have to chose a subdomain to use. While it's possible to set it up on the root domain, I strongly recommand you do not so if you have static hosts defined. nsupdate will mess with your zone file, rendering it unreadable.

So, let's say we have example.com as our root domain and we want to use dyn.example.com for our dynamic needs. First thing to do is delegate the subdomain to another server (it doesn't need to be a physically different host).

In the example.com zone file add:

$ORIGIN dyn.example.com.
@ IN NS dns.example.com.

Where dns.example.com is the server that will host the sub zone.

Then, create a new zone file for the sub zone and add the SOA:

$ORIGIN .
$TTL 300  ; 5 minutes
@    IN SOA  dns.example.com. info.example.com. (
    2011090933 ; serial
    1800       ; refresh (30 minutes)
    900        ; retry (15 minutes)
    604800     ; expire (1 week)
    1800       ; minimum (30 minutes)
    )
  NS  dns.example.com.

A TTL of 5 minutes is good but change according to your needs.

Finally you need to update your named.conf to allow ddnsupdate to update the zone.

zone "dyn.example.com" {
  type master;
  file "/var/named/dyn.example.com.conf";
  update-policy {
    grant *.dyn.example.com. self dyn.example.com. A;
    };
  };

Add your key files (use ddnsupdate gen -p <pass> -b <host> to get one suitable for ddnsupdate):

key "host1.dyn.example.com." {
  algorithm hmac-md5;
  secret "YWNiZDE4ZGI0Y2MyZjg1Y2VkZWY2NTRmY2NjNGE0ZDg=";
};

Reload named and you should be good to go.

If you want to allow wildcard updates, you will need to add one grant line per host allowed using the following model:

grant host1.dyn.example.com. subdomain host1.dyn.example.com. A;

Know issues

  • If ddnsupdate can't find the SOA for the given host it will probably loop infinitely. That will be corrected in the near future.

License


            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 
                    Version 2, December 2004 

 Copyright (C) 2004 Sam Hocevar <[email protected]> 

 Everyone is permitted to copy and distribute verbatim or modified 
 copies of this license document, and changing it is allowed as long 
 as the name is changed. 

            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 

  0. You just DO WHAT THE FUCK YOU WANT TO.