onlinechanged für IPv4 und IPv6 Aktualisierung; Wie geht das ?

NanoBot

Mitglied
Mitglied seit
27 Jun 2005
Beiträge
439
Punkte für Reaktionen
32
Punkte
28
Hallo Leute,

ich habe seit gestern einen neuen ISP, welcher IPv4 und IPv6 als echtes Dual-Stack anbietet. Nun suche ich nach einer Möglichkeit, die IPv4 und IPv6 Adressen mit Hilfe von "onlinechanged", also per Script, unabhängig voneinander zu aktualisieren. Der genutze Dyndns-Anbieter dabei ist freedns.afraid.org

Für IPv4 ist sie Sache relativ einfach und funktioniert schon länger problemlos:

Code:
#!/bin/sh

case "$1" in
   online )
        wget http://freedns.afraid.org/dynamic/update.php?GEHEIMES_TOKEN1 -q -O /dev/null
      ;;
esac

Hierdurch wird die genutzte IPv4-Adresse automatisch vom Server festgestellt und der A Record aktualisiert.

Nun möchte ich gerne auf ähnliche Art und Weise auch den AAAA Record, also die aktuelle IPv6 Adresse der Box bei FreeDNS aktualisieren. Also habe ich bei FreeDNS den gleichen Domainnamen, aber diesmal als AAAA statt als A Record eingerichtet. Um den AAAA Eintrag zu aktualisieren, soll man die folgende Update-URL nutzen:

Code:
wget http://freedns.afraid.org/dynamic/update.php?GEHEIMES_TOKEN2&address=<ip6addr> -q -O /dev/null

Nun wird der Ausdruck "<ip6addr>" aber offenbar nur durch die aktuelle IPv6-Adresse ersetzt, wenn man ihn auf der Webseite für dynamische DNS ( http://fritz.box/internet/dyn_dns.lua ) verwendet. Durch welchen Befehl kann ich innerhalb des onlinechanged Scriptes am elegantesten die aktuelle externe ipv6 Adresse der Box auslesen und ggf. in einer Variablen hinterlegen, um sie dann in die Update-URL "einbauen" zu können ?

Da ich mich mit sed oder ähnlichen so gut wie gar nicht auskenne, wäre ich für entsprechende Vorschläge dankbar.

C.U. NanoBot
 
@HabNeFritzbox:
Dein Tisch ... endlich mal jemand, der das Skript zum Auslesen der IPv6-Adresse gebrauchen kann.
 
Moins

Auch auf der aktuellen Release 6.30 geht...
Code:
cat $(which ipv6.sh)
#!/bin/sh
ipv6 () {
#local MYIP6ENABLED=$(ctlmgr_ctl r ipv6 settings/enabled)
local MYIP6=$(ctlmgr_ctl r ipv6 settings/ip)
#local MYIP6PRE=$(ctlmgr_ctl r ipv6 settings/prefix)
#local MYIP6STATE=$(ctlmgr_ctl r ipv6 settings/state)
#echo -ne ${MYIP6} ${MYIP6PRE} ${MYIP6STATE} ${MYIP6ENABLED}'\n'
echo -ne ${MYIP6}
}
ipv6
#EOF
...noch.

Anstatt ...
Code:
wget http://freedns.afraid.org/dynamic/update.php?GEHEIMES_TOKEN2&address=<ip6addr> -q -O /dev/null
...mal...
Code:
wget http://freedns.afraid.org/dynamic/update.php?GEHEIMES_TOKEN2&address=$(ctlmgr_ctl r ipv6 settings/ip) -q -O /dev/null
...ausprobieren?
 
Hi,

perfekt, vielen Dank für deine Hilfe.

wget http://freedns.afraid.org/dynamic/update.php?GEHEIMES_TOKEN2&address=$(ctlmgr_ctl r ipv6 settings/ip) -q -O /dev/null

ist genau das, wonach ich gesucht hatte. Ich hatte woanders im Netz schon den Befehl gefunden, mit dem man mit Hilfe von ctlmgr_ctl die aktuelle IPv4 Adresse auslesen kann, aber leider hatte ich nirgends den entsprechenden Parameter für die IPv6 Adresse gefunden. Und zum anderen wäre mit dann nicht klar gewesen, wie man die Antwort auf diesen Befehl dann in die URL einbindet, nämlich mit Hilfer von "$(...)"

C.U. NanoBot
 
@NanoBot:
Dann mußt Du das in #1 gezeigte Skript-Fragment nur noch so nachhärten, daß es tatsächlich auch die richtigen Parameter bei seinem Aufruf auswertet ... da hat sich auch etwas getan und ob der "pure" Aufruf mit "online" überhaupt noch erfolgt, darf bei der von Dir verwendeten 06.24 bezweifelt werden - wobei nicht deutlich wird, aus welchen Skript dieser Ausschnitt eigentlich stammt. Jedenfalls sind die Parameter beim Aufruf an einem DS-Anschluß nicht mehr einfach "online" und "offline", da hängt jeweils noch die Info dran, welcher Adresstyp denn jetzt tatsächlich online oder offline ist ... das ist keine Angabe, was sich gerade geändert hat (s. Ticket 2663).
 
So, ich habe eben nochmal getestet:

Code:
wget "http://freedns.afraid.org/dynamic/update.php?GEHEIMES_TOKEN2&address=$(ctlmgr_ctl r ipv6 settings/ip)" -q -O /dev/null

bewirkt genau das, was ich möchte, nämlich das der AAAA Record, also die IPv6 Adresse, aktualisiert wird. Allerdings muß die Update-URL tatsächlich, so wie es oben steht, in Anführungszeichen gesetzt werden, denn sonst wird der Teil "&address=$(ctlmgr_ctl r ipv6 settings/ip)" nicht in die abgerufene URL übernommen und somit wird dann fälschlicherweise die IPv4 Adresse aktualisiert.
 
Das hat zwar wenig mit dem Rest zu tun, aber solange da ein & außerhalb einer Zeichenkette auftaucht, wird das eben als "execute in background" und Ende eines Kommandos interpretiert. Da hilft ggf. auch das Escapen mit einem Backslash ... also
Code:
wget http://freedns.afraid.org/dynamic/update.php?GEHEIMES_TOKEN2\&address=$(ctlmgr_ctl r ipv6 settings/ip) -q -O /dev/null
sollte genauso funktionieren. Ohne den Backslash wird halt nur das Kommando bis zum & "gesehen" und anschließend eine Variablenzuweisung an "address" ausgeführt für den Teil hinter dem Ampersand. Wenn man da dann noch ein ";echo $address" anhängen würde, sähe man genau diesen zugewiesenen Inhalt.

EDIT:
Ich mache nur noch mal darauf aufmerksam, daß es nicht feststeht, ob "onlinechanged" mit "online" oder "onlineipv6" aufgerufen wird und schon gar nicht, daß es auch beide Aufrufe nacheinander gibt. Je nach der Zeitdifferenz zwischen der Zuweisung einer IPv4- und einer IPv6-Adresse (und auch je nach Reihenfolge), kommt mal "online", mal "onlineipv6" und mal auch beide nacheinander. Ein "modernes" Skript für onlinechanged sollte also mit allen Parametern als $1 umgehen können - ein entsprechendes CS im Freetz findest Du auch alleine.

Wenn Du Pech hast, das Skript wie in #1 angegeben nur auf "online" reagiert und dieser Aufruf bei einem echten DS-Anschluß fehlt (entsprechende Meldungen findest Du auch in Ticket 2663), dann fehlt Dir u.U. genau dann die richtige externe Adresse (weil das DynDNS-Update nicht reagiert hat), wenn Du es von unterwegs mal brauchst.

Auch die Tatsache, daß jetzt, heute und hier bei Dir ein Aufruf mit "online" erfolgt, muß noch nicht heißen, daß das immer so ist und daß nicht beim nächsten Mal nur "onlineipv6" signalisiert wird ... das kann schwanken, ggf. macht schon die Frage, ob die Box neu gestartet wurde und wie schnell nach dem Start DSL synchron ist, einen Unterschied aus.
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.