You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lurchi e2324e8093 lookup IPv4 address only when IPv6 address has changed 3 years ago
LICENSE add license 3 years ago
README.md use second level headings 3 years ago
homeserverdns-daemon lookup IPv4 address only when IPv6 address has changed 3 years ago
homeserverdns-update remove NixOS-specific shebangs 3 years ago
homeserverdns.cfg don't require update_hook to be a shell script 3 years ago
homeserverdns.service make scripts executable; give advice about config file permissions 3 years ago

README.md

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:

Dependencies

  • iproute2
  • curl
  • miniupnpc (optional, see the Configuration section)
  • bind (optional, when using the http.net DNS API)

Installation

There's no automated installation yet. As an example we install the two scripts homeserverdns-daemon and homeserverdns-update to /usr/bin and the configuration file to /etc.

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

Configuration

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.

protocol=gandi

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.

domains=mydomain.com sub.mydomain.com

By default 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 = 85.98.82.44
[...]

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