pfSense – Aktualisierung der IPv6 Adresse im DynDNS
Erstellt am: 14.09.2018 - letztes Update: 16.02.2022
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%
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.2 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" # Die Selfhost URL unterstützt nur das unsichere TLS 1.0 Protokoll! ###################################################################################################################### # Aktuell zugewiesene IPv6 Adresse am WAN Interface INTERFACE=$(ifconfig | grep autoconf | 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 '(::[A-Fa-f0-9])|((:[A-Fa-f0-9]{1,4}){2,})' > /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.2 - Das ermitteln der IPv6 Adresse am WAN Interface geändert
- Version 1.1 - Überprüfung ob eine gültige öffentliche IPv6 Adresse am WAN Interface existiert