Da ich offenbar nicht der einzige bin, der IPv4 und IPv6 durch seine gefreezte Box updaten lassen möchte, hier das Script in anonymisierter Form. Vorab dazu die folgende Infos:
Bei dem von mir genutzten Anbieter freedns.afraid.org müssen die Einträge für IPv4 ( Typ A ) und IPv6 ( Typ AAAA ) seperat angelegt und seperat geupdatet werden. Dabei ist es sowohl möglich für die gleiche Subdomain sowohl einen Typ A als auch einen Typ AAAA Record anzulegen. Es ist aber auch möglich, für eine Subdomain entweder nur einen Typ A oder nur einen Typ AAAA Record anzulegen. Die Begrenzung für FreeUser besteht allerdings darin, daß maximal 5 Records pro Account angelegt werden können.
Ansonsten noch der Hinweis: FreeDNS bietet eine sehr große Anzahl von Subdomains, aus denen wählen kann. Allerdings "gehören" dem Betreiber dieses Dienstes nur sehr wenige dieser Domains, die meisten sind im nur zur Verwaltung anvertraut worden. Ich empfehle daher bevorzugt eine Subdomain unter "mooo.com", "strangled.net" etc., also einer Domain, welche dem Betreiber selbst gehört, zu wählen.
Zur Aktualisierung der jeweiligen IP-Adressen bietet freedns.afraid.org verschiedene Möglichkeiten, durch Aufruf einer bestimmten URL ein Update der IP-Adresse mitzuteilen. Das von mir mit Hilfe der User hier im Board entworfene Script nutzt die Methode "Randomized Update Token", da hierbei kein Login und kein Passwort erforderlich ist, was die Sache natürlich vereinfacht. Wie die URL mit diesem Token jeweils aussehen muß ( jeder Eintrag hat ein eigenes Token ), kann man, sobald bei bei FreeDNS eingeloggt ist, auf dieser Seite sehen:
https://freedns.afraid.org/dynamic/v2/
Wichtig ist hierbei, daß irgendeine eine Änderung an einem der Records, wie z.B. von Typ A auf Typ AAAA, oder das Löschen und Neuanlegen einer Subdomain ( sprich umbennen ), zu einem neuen Token führt. Also wenn irgendwas nicht klappt, dann schadet es nie zu prüfen, ob sich das Token zwischenzeitlich durch irgendeine Änderungen mitverändert hat.
Die generelle Update-URL für IPv4-Adressen ( also Typ A Records ) sieht so aus:
http://sync.afraid.org/u/RandomizedUpdateToken/
während die Update-URL für IPv6-Adressen ( also Typ AAAA ) so aussieht:
http://v6.sync.afraid.org/u/RandomizedUpdateToken/
Ruft man einfach nur diese URL auf, so ermittelt FreeDNS die IP-Adresse aus dem eingehenden Datenpaket. Ruft man also eine solche URL von der Fritz!Box aus auf, dann übermittelt man die IPv4 bzw. IPv6-Adresse der Box an sich. Ruft man die URL von einem der angeschlossenen Endgeräte aus auf, so funktioniert dies bei IPv4 dank NAT problemlos. Bei IPv6 wird dagegen dann nicht die Adresse der Fritz!Box, sondern die Adresse des Endgerätes hinterlegt. Dies macht in der Praxis aber selten Sinn, weil die abgehend genutzte IPv6-Adresse des Endgerätes bei aktivierten "privacy extensions" temporär ist und sich alle paar Stunden ändert.
Glücklicherweise kann man der Update-URL aber explizit eine IP-Adresse "mitgeben"; die URLs sehen hierzu dann so aus:
http://sync.afraid.org/u/RandomizedUpdateToken/?address=Neue_IPv4_Adresse
bzw.
http://v6.sync.afraid.org/u/RandomizedUpdateToken/?address=Neue_IPv6_Adresse
wobei uns nur die Version für IPv6 interessieren braucht, denn die ( externe ) IPv4 ist ja durch NAT für alle Geräte im eigenen LAN die gleiche.
Das Script dient also in Endeffekt dazu, die spezifischen Update-URLs für die einzelnen Subdomains mit dem jeweils korrekten Token, dem aktuellen Präfix und den Suffixen der einzelnen Geräte zusammen zu bauen, um diese anschliessend per wget aufzurufen.
Die Geräte heißen bei mir ALADIN, CREST_LAN und CREST_WLAN ( wobei dies der gleiche Laptop ist, aber eben zwei Netzwerkschnittstellen besitzt). Von diesen Geräten muß zuerst der jeweilige Suffix ermittelt werden. Dies geht unter Windows mit ipconfig oder unter Linux mit ifconfig auf der Kommandozeile. Ob der Suffix aus der MAC-ID oder bei der Installation des OS per Zufallsgenerator erzeugt wurde, spielt keine Rolle. Es muß aber der Suffix der "festen" IPv6-Adresse sein, und nicht etwa der Suffix eine temporären Adresse, welcher sich ja sehr oft ändert.
Unter Windows sähe dies dann zum Beispiel so aus:
Code:
C:\Users\Nanobot>ipconfig
Windows-IP-Konfiguration
Ethernet-Adapter Atheros:
Verbindungsspezifisches DNS-Suffix:
IPv6-Adresse. . . . . . . . . . . : 2001:16b8:40f1:5e00:0011:2233:4455:6677
Temporäre IPv6-Adresse. . . . . . : 2001:16b8:40f1:5e00:8899:aabb:ccdd:eeff
....
Richtig wäre in diesem Fälle der Suffix 0011:2233:4455:6677, denn dies ist der Suffix der "festen" IPv6-Adresse. Natürlich kann man auch 11:2233:4455:6677 verwenden, da führende 0en ja weggelassen werden dürfen. FreeDNS akzeptiert sowohl die "volle", als auch die verkürzte Notation.
Und nun das Script für "onlinechanged":
Code:
#!/bin/sh
case "$1" in
online )
# Update der IP-Adressen der Fritz!Box selbst
# Bei der ersten Methode erkennt FreeDNS anhand der Quell-IPs die richtigen Adressen allein
wget http://sync.afraid.org/u/RandomizedUpdateToken1/ -q -O /dev/null
wget http://v6.sync.afraid.org/u/RandomizedUpdateToken2/ -q -O /dev/null
# Die zweite Methode dient nur als Fallback, falls v6.sync.afraid.org mal wieder streikt ;-)
# Sie ist daher auskommentiert
# ip4addr=$(ctlmgr_ctl r dslstatistic status/ifacestat0/ipaddr)
# ip6addr=$(ctlmgr_ctl r ipv6 settings/ip)
# url4=http://sync.afraid.org/u/RandomizedUpdateToken1/?address=$ip4addr
# wget $url4 -q -O /dev/null
# url6=http://sync.afraid.org/u/RandomizedUpdateToken2/?address=$ip6addr
# wget $url6 -q -O /dev/null
# Update der IP-Adressen mehrerer Geräte im LAN
SUFFIX_ALADIN=0011:2233:4455:6677
SUFFIX_CREST_LAN=8899:aabb:ccdd:eeff
SUFFIX_CREST_WLAN=7766:5544:3322:1100
UPDATE_ALADIN=http://v6.sync.afraid.org/RandomizedUpdateToken3/?address=
UPDATE_CREST_LAN=http://v6.sync.afraid.org/u/RandomizedUpdateToken4/?address=
UPDATE_CREST_WLAN=http://v6.sync.afraid.org/u/RandomizedUpdateToken5/?address=
PREFIX=$(ctlmgr_ctl r ipv6 settings/prefix)
PREFIX=${PREFIX%:/*}
URL_ALADIN=$UPDATE_ALADIN$PREFIX$SUFFIX_ALADIN
URL_CREST_LAN=$UPDATE_CREST_LAN$PREFIX$SUFFIX_CREST_LAN
URL_CREST_WLAN=$UPDATE_CREST_WLAN$PREFIX$SUFFIX_CREST_WLAN
wget $URL_ALADIN -q -O /dev/null
wget $URL_CREST_LAN -q -O /dev/null
wget $URL_CREST_WLAN -q -O /dev/null
;;
esac
Der erste Teil updatet die IPs der Box an sich, wobei FreeDNS die IPv4- und IPv6-Adresse anhand der Quell-IP alleine ermittelt. Hierbei nicht wundern, daß die Box selbst, sofern sie als Router agiert, eine IPv6 hat, welche nicht zum zugeteilten Präfix "passt", das ist richtig so.
Der zweite Teil ermittelt mit Hilfe von ctlmgr_ctl den aktuellen Präfix, trennt die Subnetzmaske ab, und baut dann für die einzelnen Geräte die korrekten Update-URLs aus dem jeweiligen Token, dem aktuellen Präfix und dem Suffix zusammen, um sie per wget aufzurufen.
Vielleicht wundert sich jetzt jemand, wieso hier nirgends die Namen der Subdomains auftauchen, welche geupdatet werden sollen. Dies ist bei der Methode "RandomizedUpdateToken" schlicht und einfach überflüssig, weil FreeDNS anhand des Tokens erkennen kann, auf welchen Dyndns-Namen sich das Update beziehen soll. Ich hoffe, daß ich mich nicht vertippt habe und Ihr meinen Ausführungen folgen könnt.
C.U. NanoBot