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.