pfSense – Aktualisierung IPv6 Adresse DynDNS

Da es auf der pfSense nicht für jeden DynDNS Anbieter ein vorgefertigten Dienst zur IPv6 Aktualisierung gibt, ein Beispiel Script für die APU2C4 und den DynDNS Anbieter Selfhost. Der Custom (v6) Dienst funktionierte in meinem Fall auch nicht, da es durch die verschiedenen Schreibweisen von IPv6 Adressen zu Problemen mit dem Ergebnis kam.

Der Script überprüft ob der DNS IPv6 Eintrag mit dem 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, anschließend eine neue Datei mit dem Script anlegen und zum Schluss die notwendigen Berechtigungen setzen.

vi /etc/dyndns-ipv6

#!/bin/sh
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' # Domain fuer die IPv6 Abfrage
# Update URL für die Aktualisierung der IPv6 im DynDNS Account (in meinem Bsp. Selfhost)
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: | sed -n '3p' | 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 | mail.php -s='pfSense - Notification';
/usr/bin/logger -t dyndns-ipv6 "Update IPv6 Adresse wurde durchgefuehrt" $INTERFACE;
fi
fi

chmod 750 /etc/dyndns-ipv6

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

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