Mein Heimserver ist seit Jahren über eine dynamische-DNS-Adresse von spDYN per SSH erreichbar. Da ich einer der letzten glücklichen kleinen Lichter bin, die noch eine echte IP4-Adresse erhalten (und keine genattete), kann ich mich so immer von überall auf meine Kiste einloggen.
Bislang habe ich meine aktuellen IP-Adressen mittels Script geupdatet. Im Zuge notwendiger Aktualisierungen bin ich über ddclient gestolpert und nutze es seit dem ausschließlich - mein Script ist in Rente gegangen.
ddclient
ddclient ist ein Perl-Client, der dynamische DNS-Einträge für Konten vieler dynamischer DNS-Dienste aktualisieren kann. Auf der Github-Seite steht eine Liste der kompatiblen Dienste bereit, viele weitere Dienste funktionieren aber ebenfalls, da sie die selben Protokolle verwenden.
Ich nutze ddclient mit folgenden freien DynDNS-Anbietern:
Da ich einen echten Dual-Stack habe, sollen IPv4 und IPv6 gleichzeitig aktualisiert werden.
Installation
ddclient kann installiert werden mittels:
Konfiguration
systemd
Ich bereite mir ein Systemd-Skellet vor, so dass ich alle .conf
-Dateien im Verzeichnis /etc/ddclient/
steuern kann.
sudo nano /etc/systemd/system/ddclient@.service
[Unit]
Documentation=man:ddclient(8)
Description=Update dynamic domain name service entries
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
Environment=daemon_interval=10m
EnvironmentFile=-/etc/default/ddclient
ExecStart=/sbin/ddclient -syslog -file /etc/ddclient/%I.conf -cache /var/cache/ddclient/%I.cache
Restart=on-failure
[Install]
WantedBy=multi-user.target
Jetzt müssen die Services neu geladen werden,…
sudo systemctl daemon-reload
…und schon kann es losgehen. Alle FOO.conf
-Dateien im Verzeichnis /etc/ddclient
lassen sich nun steuern mittels systemctl start ddclient@FOO
(ohne .conf
).
Dafür müssen wir aber diese Config-Dateien erstellen, und wir sollten wissen, wie wir unsere “echten” globalen IPv4 und IPv6-Adressen abrufen können.
IP-Adressen abrufen
ddclient kann die Adressen entweder über die Interfaceschnittstelle oder über das Web beziehen. Das führt bei mir allerdings zu Probleme:
- über die Interface-Schnittstelle (z.B.
eth0
) finde ich nur meine lokal LAN-IP (weil ich hinter meiner FritzBox sitze) - über die
web
-Methode finde ich nur eine IPv6-Adresse, nicht aber meine IPv4.
Daher muss ich sicherstellen, dass für IPv4 wirklich die gültige IPv4 gefunden wird, und für IPv6 ebenso. Ich kann diese externen IP-Adressen mittels curl
abrufen:
Dies mache ich mir in ddclient zu nutze, denn neben “Interface” und “Web” kann über den Parameter cmd=<PROGRAM>
ein custom Script angegeben werden, welches die IP-Adressen ermittelt. Ich erzeuge mir diese Scripte jeweils für IPv4 und IPv6 direkt im Verzeichnis /etc/ddclient
.
sudo nano /etc/ddclient/myipv4address.sh
sudo nano /etc/ddclient/myipv6address.sh
Die Scriptdateien müssen noch ausführbar gemacht werden: sudo chmod +x /etc/ddclient/myipv6address.sh /etc/ddclient/myipv4address.sh
ddclient für meinen Anbieter konfigurieren
Für jeden DynDNS-Dienst lege ich mir eine eigene Config-Datei an. So sieht z.B. meine Client-Config für DuckDNS aus:
sudo nano /etc/ddclient/duckdns.conf
daemon=300 # check every 300 seconds
syslog=yes # log update msgs to syslog
pid=/var/run/ddclientduckdns.pid # record PID in file.
ssl=yes # use ssl-support.
debug=yes # write to journal log
verbose=yes # write to journal log
usev4=cmdv4, cmdv4=/etc/ddclient/myipv4address.sh # IPv4
usev6=cmdv6, cmdv6=/etc/ddclient/myipv6address.sh # IPv6
#### DUCKDNS.org ########
#------------------------
protocol=duckdns, # Komma muss bleiben
password=9a5dc6a5-FUCK-AFD-bbaf-foobar # ersetze dein Token
YOURNAME.duckdns.org # deinen Namen ersetzen
Für Dynv6.com sieht diese so aus:
sudo nano /etc/ddclient/dynv6.conf
daemon=300 # check every 300 seconds
syslog=yes # log update msgs to syslog
pid=/var/run/ddclientdynv6.pid # record PID in file.
ssl=yes # use ssl-support.
debug=yes # write to journal log
verbose=yes # write to journal log
usev4=cmdv4, cmdv4=/etc/ddclient/myipv4address.sh # für IPv4
usev6=cmdv6, cmdv6=/etc/ddclient/myipv6address.sh # für IPv6
#### DYNv6.com ##########
#------------------------
protocol=dyndns2
server=dynv6.com
password='sKx3hF_stPT_fuck_AfD_1rPmskxiTga'
login=none
YOURNAME.dynv6.net
ddclient starten
Zunächst können die Einstellungen getestet werden, ohne Daten zum Server zu senden:
ddclient -daemon=0 -debug -verbose -noquiet -file /etc/ddclient/dynv6.conf
Sieht alles gut aus, können wir die Dienste wie folgt aktivieren:
# aktivieren und starten
sudo systemctl enable --now ddclient@duckdns
sudo systemctl enable --now ddclient@dynv6
# Logs ansehen
journalctl -u ddclient@duckdns -f
journalctl -u ddclient@dynv6 -f
Tolle Sache, funktioniert prima!
Weblinks
- https://github.com/ddclient/ddclient
- https://dynv6.com/
- https://www.duckdns.org
- https://wiki.ubuntuusers.de/Archiv/DDNS-Clients/
- https://wiki.archlinux.org/title/Dynamic_DNS