homeserverdns: Dynamic DNS updater for home servers
homeserverdns monitors the IPv6 addresses (using the ip tool from iproute2). When it detects a change, it updates the A and AAAA records for a set of domains (and subdomains).
So far it has modules for these domain provider APIs:
- miniupnpc (optional, see the Configuration section)
- bind (optional, when using the http.net DNS API)
There's no automated installation yet. As an example we install the two scripts
/usr/bin and the configuration file to
sudo cp homeserverdns-daemon homeserverdns-update /usr/bin sudo cp homeserverdns.cfg /etc
We create a user and adjust the permissions of the config file, so only that user can read it (and the credentials in it).
sudo useradd --system homeserverdns sudo chown homeserverdns:root /etc/homeserverdns.cfg sudo chown 0600 /etc/homeserverdns.cfg
If we want to use systemd to control homeserverdns, we need to install the service file
homeserverdns.service. We have to make sure that the path of the config file and the
User variable are correct in that file.
sudo cp homeserverdns.service /etc/systemd/system
Once the configuration is done we can start homeserverdns using
sudo systemctl start homeserverdns
All configuration options are described in more detail in
homeserverdns.cfg. This is only an overview on the most important options.
First a protocol has to be defined, e.g.
For authentication at the domain provider, an authentication token has to be given. Some protocols require a user name and an API address, too.
auth_key=g5Hdsfkj5J49li8HH3jfhsJp user= # not required for gandi api_address= # not required for gandi
Now the domains (and subdomains) we want to update A and AAAA records for have to be defined.
UPNP is used for detecting the server's public IPv4 address. So we should check if upnp works and returns the correct IPv4 address.
$ upnpc -s [...] ExternalIPAddress = 220.127.116.11 [...]
If we don't get a value for
ExternalIPAddress, we should check our router and firewall settings. If
UPNP does not work for us (e.g. in case the server is behind a Carrier Grade NAT), we can define our own method for looking up our public IPv4 address using the
public_ip4_hook config option, e.g.
public_ip4_hook=curl -s -4 https://ipecho.net/plain