====== Dyndns selber aufsetzen ======
WIP
* Diese Anleitung ist noch nicht vollständig!
* IPv6 fehlt noch
* Weitere Details zum DNS gibt es auch im [[https://wiki.pinneberg.freifunk.net/dns|Wiki von Freifunk Pinneberg]]
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
[...]
dyn NS ns1.example.com.
NS ns2.example.com.
Zonendatei für die Subdomain
$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:
// 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.
Current IP Check
==== Protokollierung ====
Zur Verbesserung der Übersicht können die Änderungsanforderungen in eine
spezielle Logdatei geschrieben werden: ''var/log/named/update.log''.
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:
#
# 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/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