Benutzer-Werkzeuge

Webseiten-Werkzeuge


dyndns

Dyndns selber aufsetzen

WIP

Es wird ein Server im Internet mit einem laufenden Nameserver „bind“ benötigt. Zusätzlich ist ein laufender Webserver erforderlich, der für die Adreßermittlung zuständig ist, sowie eine Domäne, für die eine Subdomäne mit NS-Records angelegt werden kann.

Server

Der Nameserver sollte für eine neu angelegte Subdomain eingerichtet werden, z.B. dyn.example.com:

In der übergeordneten Zone

/etc/bind/example.com.zone
[...]
dyn		NS	ns1.example.com.
		NS	ns2.example.com.

Zonendatei für die Subdomain

/etc/bind/dyn.example.com.zone
$ORIGIN dyn.example.com.
$TTL 90 ; seconds
@	IN	SOA	ns1.example.com. hostmaster.example.com. (
                        2015122401      ; serial
                        1h              ; refresh
                        20m             ; retry
                        4d              ; expire
                        15m             ; nxdomain ttl
                        )
		NS	ns1.example.com.
		NS	ns2.example.com.
		TXT	"Dynamic Domain Example/Pinneberg, Germany"

Bind muß Schreibberechtigung auf diese Datei bekommen.

chmod g+w dyn.example.com.zone

Bekanntmachen der neuen Zone für den Nameserver in named.conf.local und Updates für die A- und AAAA-Records in der Subdomain dyn zulassen:

named.conf.local
// DynDNS in spezieller Subdomain bereitstellen
zone "dyn.example.com" IN {
    type master;
    file "/etc/bind/dyn.example.com.zone";
    notify no;
    update-policy {
        grant ddns-key.example.com subdomain dyn.example.com. A AAAA;
    };
};

Schlüssel anlegen, daß die dyn-Subdomain hier nicht enthalten ist, soll wirklich so sein!

  ddns-confgen -z example.com

Den ersten Teil der Ausgabe in eine Datei namens dyndns.keys eintragen. Werden für verschiedene Clients unterschiedliche Schlüssel verwendet, kann die Datei dann entsprechend erweitert werden.

chmod 640 dyndns.keys

Die Datei mit den Schlüsseldefinitionen muß vom Nameserver gelesen werden, dazu muß in der Datei named.conf folgende Anweisung enthalten sein:

include "/etc/bind/dyndns.keys";

Damit die Clients ihre Adresse ermitteln können ist auf unter der Adresse http://www.example.com/myip.php ein entsprechendes Programm abgelegt. Die Funktion ist checkip.dyndns.org nachempfunden.

/var/www/myip.php
<html><head><title>Current IP Check</title></head><body><?php
echo "Current IP Address: ", $_SERVER['REMOTE_ADDR'];
?></body></html>

Protokollierung

Zur Verbesserung der Übersicht können die Änderungsanforderungen in eine spezielle Logdatei geschrieben werden: var/log/named/update.log.

/etc/bind/named.conf.local
logging {
[...]
        channel update_file {
                file "/var/log/named/update.log" versions 3 size 30m;
                severity info;
                print-time yes;
        };
[...]
        category update {
                update_file; 
        };
        category update-security {
                update_file;   
        };
[...]
}

Client

Der Client besteht lediglich aus einem Bash-Script, welches aufgrund Informationen aus verschiedenen Quellen zusammengestellt wurde. Die Funktionsweise ist ähnlich dem Programm ddclient, es wird eine Cache-Datei mit (hoffentlich) kompatiblem Aufbau verwendet.

Voraussetzungen

  • curl
  • nsupdate aus dem paket dnsutils
  • Programm: /usr/local/bin/ddns-update (Bash-Script)

Die Konfiguration erfolgt über das Verzeichnis /etc/dyndns

  • Konfiguration: /etc/dyndns/ddns.key → Ausgabe von ddns-confgen -z, wie auf dem Server ausgeführt
  • chmod 600 /etc/dyndns/ddns.key
  • Hauptkonfigurationsdatei:
    /etc/dyndns/ddns.conf
    #
    # Configuration for ddns-update script
    #
    KEYFILE=/etc/dyndns/ddns.key
    HOST=homeserver
    ZONE=example.com
    TIMEOUT=90
    MAXAGE=86400
    IPV4=1
    IPV6=0
    MYIPURL=https://www.example.com/myip.php
    CACHEFILE=/var/cache/ddclient/ddclient.cache
  • Die Aktualisierung sollte regelmäßig, aber nicht zu oft stattfinden, wir realisieren das über einen Cronjob:
    /etc/cron.d/dyndns
    # /etc/cron.d/ddns: crontab fragment for ddns-update
     
    # Renew dynamic IP address every 15 minutes
    05,20,35,50 *     * * *     root   /usr/local/bin/ddns-update > /dev/null 2>&1
dyndns.txt · Zuletzt geändert: 06.08.2017 09:46 von thooge