pfSense – Aktualisierung der IPv6 Adresse im DynDNS

Da die pfSense Software nicht für jeden DynDNS Anbieter einen vorgefertigten Dienst zur IPv6 Aktualisierung anbietet, ein Beispiel Script für den DynDNS Anbieter Selfhost (ein anderer Anbieter ist möglich). Getestet wurde dieser Script mit einer APU.1D4 und APU.2C4, er sollte aber auch unter jeder anderen Umgebung laufen.

Der Custom (v6) Dienst der pfSense funktionierte in meinem Fall nicht, da es durch die verschiedenen Schreibweisen von IPv6 Adressen zu Problemen mit dem Ergebnis kam.

Ein Beispiel:
Um zu überprüfen, ob die IPv6 Adresse am WAN Interface gleich der des DynDNS Anbieters ist, gibt es das Feld Result Match (Ergebnis passt) in den Custom (v6) Einstellungen.
Konfiguriert kann es z.B. so aussehen:
Result Match (Ergebnis passt): good|nochg|good %IP%

pfSense DynDNS Custom IPv6

Nach Aktualisierung der IPv6 Adresse steht im Logfile:
/services_dyndns_edit.php: phpDynDNS (): (Fehler) Das Ergebnis passt nicht. [status=401 ]

Die Ursache liegt an den unterschiedlichen Schreibweisen von IPv6 Adressen.

Selfhost gibt als Ergebnis die voll ausgeschriebene IPv6 Adresse zurück:
2003:00c1:e2ff:33ef:020d:b9ff:fe45:c514

pfSense nimmt zum Vergleich die regulär gekürzte IPv6 Adresse vom WAN Interface:
2003:c1:e2ff:33ef:20d:b9ff:fe45:c514

Damit passt das Ergebnis nicht, da 2003:00c1:e2ff:33ef:020d:b9ff:fe45:c514 ≠ 2003:c1:e2ff:33ef:20d:b9ff:fe45:c514 ist, obwohl es sich um die gleiche IPv6 Adresse handelt. Es kommt zu der oben genannten Fehlermeldung im Logfile.

Meine Lösung für dieses Problem war, auf die Custom (v6) Funktion der pfSense zu verzichten und das mit einem eigenen Script zu realisieren. Dieser Script überprüft regelmäßig, ob die beim DynDNS Anbieter hinterlegte IPv6 Adresse noch mit der des WAN Interfaces der pfSense übereinstimmt. Ist das nicht der Fall, wird die aktuelle WAN IPv6 Adresse an den DynDNS Anbieter übermittelt.

Als erstes per SSH auf der pfSense einloggen und anschließend mit einem Editor des Vertrauens (z.B. der vi-Editor) folgenden Script erstellen. Die markierten Stellen müssen an die eigenen Gegebenheiten angepasst werden. Ebenfalls muss die im Script eingetragene Update-URL vom DynDNS Anbieter Selfhost durch den eigenen Anbieter ersetzt werden.

vi /etc/dyndns-ipv6
#!/bin/sh
# Version 1.1
PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin:/usr/local/bin

USERNAME='user' # Hier den Benutzername des DynDNS Accounts eintragen
PASSWORD='geheim' # Hier das Passwort des DynDNS Accounts eintragen
DOMAIN='example.com' # eigene Domain die überwacht werden soll
UPDATEURL="https://carol.selfhost.de/update?username=$USERNAME&password=$PASSWORD&myip=$INTERFACE"

######################################################################################################################

# Aktuell zugewiesene IPv6 Adresse am WAN Interface
INTERFACE=$(ifconfig | grep -A 4 pppoe0: | egrep '2001|2002|2003|240|260|261|262|280|2a0|2b0|2c0' | awk '{print $2}');
echo oeffentliche IPv6 Adresse Netzwerkinterface $INTERFACE;
# /usr/bin/logger -t dyndns-ipv6 oeffentliche IPv6 Adresse Netzwerkinterface $INTERFACE;

# Aktuelle IPv6 Adresse im DNS
DIG=$(dig $DOMAIN AAAA | sed -n '14p' | awk '{print $5}');
echo oeffentliche IPv6 Adresse DNS $DIG
# /usr/bin/logger -t dyndns-ipv6 oeffentliche IPv6 Adresse DNS $DIG

# Ueberpruefen ob eine gueltige oeffentliche IPv6 Adresse am WAN Interface existiert
echo "$INTERFACE" | egrep '2001|2002|2003|240|260|261|262|280|2a0|2b0|2c0' > /dev/null 2>&1;

if [ "$?" != "0" ]
     then
         echo "WARNING - Keine IPv6 Adresse am WAN Interface!";
# /usr/bin/logger -t dyndns-ipv6 "WARNING - Keine IPv6 Adresse am WAN Interface!";
         exit 1

     else

# Vergleich ob die WAN IPv6 Adresse gleich der DNS IPv6 Adresse ist
    if [ "$INTERFACE" == "$DIG" ]
       then
           echo "Update IPv6 Adresse nicht notwendig";
# /usr/bin/logger -t dyndns-ipv6 "Update IPv6 Adresse nicht notwendig";

       else

# Update der aktuellen IPv6 Adresse im DynDNS Account
       curl -s -L $UPDATEURL;
           echo "Update IPv6 Adresse wurde durchgefuehrt" $INTERFACE;
           /usr/bin/logger -t dyndns-ipv6 "Update IPv6 Adresse wurde durchgefuehrt" $INTERFACE;
    fi
fi

Anschließend noch die korrekte Berechtigung setzen und den Script für einen Funktionstest auf der Konsole ausführen. Da jeder Befehl eine Ausgabe auf der Kommandozeile erzeugt, ist eine Fehlereingrenzung leicht möglich.

chmod 750 /etc/dyndns-ipv6

$ /etc/dyndns-ipv6

Für den Script noch einen Cronjob erstellen, der in diesem Fall alle 5 Minuten aufgerufen wird.

*/5 * * * * root /usr/bin/nice -n20 /etc/dyndns-ipv6

Zur einfacheren Eingabe des Cronjob gibt es in der Paketverwaltung der pfSense die Erweiterung Cron. Nach der Installation von Cron, lassen sich die Cronjobs einfach über das Webinterface konfigurieren.

Historie

  • Version 1.1 - Überprüfung ob eine gültige öffentliche IPv6 Adresse am WAN Interface existiert