Ein einfacher IPv6-DynDNS-Client
Nachdem ich nun erfolgreich IPv6 in meinem Haushalt einsetze, wollte ich meinen Server auch per IPv6 erreichbar machen. Ich verwendet einen privaten DynDNS-Dienst, der das offizielle Protokoll nachbaut. Da für IPv6 der DynDNS-Client auf dem Gerät laufen muss, welches den Serverdienst bereitstellt, habe ich ein einfaches, CURL-basiertes Skript gebastelt, welches die Adresse bei Bedarf aktualisiert und per Cron aufgerufen wird.
#!/bin/bash
HOSTNAME=my.host.name
MYIP=$(/sbin/ip -6 addr show dev enp1s0 | grep 'inet6.*global' | grep -v 'deprecated' | awk -F'[[:blank:]]+|/' '{ print $3 }')
DIEIP=$(dig @my.dyndns.service +short AAAA $HOSTNAME)
if [[ "$MYIP" != "$DIEIP" ]]; then
curl -Ss -n -X POST -d "hostname=$HOSTNAME&myip=$MYIP" 'https://my.dyndns.service/nic/update' > /dev/null
else
echo 'IP already set.'
fi
my.host.name
muss durch den eigenen Hostname ausgetauscht werden, my.dyndns.service
muss durch den DNS-Server bzw. den Webserver für die
Updates ersetzt werden.
Die Zugangsdaten werden in der Datei .netrc
im Home-Verzeichnis
hinterlegt. Der Eintrag sieht beispielsweise so aus:
machine my.dyndns.service user example password secret
Zunächst ruft das Skript mit dem ip-Befehl die aktuellen IPv6-Adressen ab, die einen global Scope haben und nicht als veraltet markiert sind. Außerdem wird der aktuelle AAAA-Eintrag für den Hostname abgerufen, um festzustellen, ob überhaupt eine Aktualisierung notwendig ist. Ist dies der Fall, wird per CURL das Update ausgeführt.