[HowTo] VOIP-Accounts einer Fritz als IP-Client nach IP-Wechsel registrieren

Novize

Moderator
Teammitglied
Mitglied seit
17 Aug 2004
Beiträge
21,482
Punkte für Reaktionen
248
Punkte
63
Vorwort:
Hier im Forum tauchen in letzter Zeit immer wieder die Berichte auf, dass eine Fritzbox, die als IP-Client hinter einem anderen Router angeschlossen ist, sporadisch die Verbindung zum SIP-Provider verliert. Hier will ich eine Möglichkeit vorstellen, wie die Fritzbox die Verbindung zum VoIP-Provider von sich aus wieder aktiviert.
Bitte beachtet: Es geht hier ausschliesslich um die Fritz!Box Fon als IP-Client innerhalb eines Netzwerkes (mit wechselnder externer IP-Adresse). Trifft das auf Euer Problem nicht zu, dann könnt ihr an dieser Stelle aufhören, weiterzulesen. ;)

-Fehlerdiagnose:
Den Beobachtungen nach ist das Problem der verlorenen VoIP-Registrierung bei gegenteiliger Anzeige auf der Fritz-Oberfläche im Moment am gravierendsten bei UI (1&1 / GMX). Bei anderen Providern wird die Funktionalität nach kurzer Zeit wieder gegeben sein und fällt daher nicht weiter auf bzw. wird einfach als kurzzeitiger Aussetzer des VoIP-Providers abgetan. Der Grund ist relativ einfach:
Die Clientbox bekommt von dem IP-Wechsel des eigentlichen Routers nichts mit und vertraut weiterhin auf die Registrierungsintervalle für eine Neuregistrierung, die der Provider vorgibt. Diese sind in der Regel 30 Minuten. Aus unerfindlichen Gründen hat nun aber UI diese Zeitspanne zur Neuregistrierung auf 8 Stunden(!) hochgesetzt. Diese wird bei jeder Registrierung der VoIP-Accounts der Fritz vom Provider übermittelt.
Weil die Fritz so brav ist, hält sie sich auch daran. :) Fällt nun die DSL-Verbindung kurzzeitig aus oder liegt die Zwangstrennung genau in dieser Zeitspanne, so bekommt der Router vom Internetprovider wie üblich eine neue IP zugewiesen. Leider weiss die Client-Fritz davon nichts und wartet brav ab, um erst nach Ablauf der Zeitspanne die Neuregistrierung beim VoIP-Provider vorzunehmen.
Solange in dieser Zeit kein VoIP-Telefonat rausgeht, weiss also der Provider nichts von der geänderten IP und versucht, ankommende Gespräche auf die alte IP zu lenken mit dem Resultat, dass der Anrufversuch erfolglos abgebrochen wird.
Überlegung zur Problembeseitigung:
Ziel ist es, auf der Clientbox den IP-Wechsel möglichst zeitnah zu erfassen und daraufhin eine Neuregistrierung der VoIP-Accounts zu erwingen.
Als Holzhammermethode könnte man z.B. alle 5 Minuten eine Neuregistrierung auslösen, was aber garantiert auf wenig Gegenliebe seitens des VoIP-Providers stossen dürfte. ;) Bevor dieser den Account nun deshalb kurzzeitig deaktiviert, lassen wir es lieber gleich bleiben.
Also suchen wir eine Möglichkeit, die Neuregistrierung nur beim IP-Wechsel anzustossen, denn diese ist ja normalerweise sehr selten der Fall und auch für einen fehlerfreien VoIP-Betrieb unerlässlich. Somit sollte auch kein Provider was dagegen haben, denn schliesslich ändert sich da ja auch jedesmal die IP-Adresse.
Zur Abfrage der externen IP-Adresse des Routers nutzen wir die WEB-Site http://whatismyip.org, die als einzige Rückgabe die gesuchte IP liefert. Bitte beachtet, dass die Site kontrolliert, in welchen Abständen die IP abgerufen wird. Kürzere Intervalle als 10 Minuten werden nach dem 3. Versuch abgelehnt. Dadurch ergiebt sich für uns ein minimales Abfrageintervall von 10 Minuten, was aber in der Regel völlig ausreichend ist. Die durchschnittliche Nichterreichbarkeit von aussen beträgt dabei dann 5 Minuten / 24 Std und das in der Regel in den Nachtstunden (dem Zeitpunkt der Zwangstrennung des Internetproviders).
Diese zurückgelieferte der IP speichern wir nun und vergleichen alle 10 Minuten den alten Wert mit einem neu angeforderten Wert und starten nur bei Unterschieden der beiden IPs eine Neuregistrierung mittels voipd -R.
Vorbereitung:
Diese gesamte "Manipulation" der VoIP-Registrierung geschieht mit Hilfe der debug.cfg in der Fritzbox. Es brauchen also keine weiteren Programme geladen werden oder gar die Firmware mit diverses Patches geändert werden, um die benötigten Funktionen bereitzustellen. Lediglich eine (halbwegs) aktuelle Firmware und ein funktionierender telnet-Zugang zu Fritz wird benötigt.
Dieser kann mit jedem an der Fritz angeschlossenen analogen Telefon aktiviert werden durch Wahl von #96*7*. Bei einem ISDN-Telefon muss zuvor der sogenannte "Keypad"-Mode aktiviert werden. Das aber ist nicht Inhalt dieses Threads und sollte einfach im Handbuch des Telefons nachgeschaut werden oder mit Hilfe der Suchfunktion hier im Forum geklärt werden.
Umsetzung:
Aus obiger Überlegung ergibt sich das Script, das in einer Schleife solange durchläuft, wie die Fritzbox läuft:
Code:
#!/bin/sh
sleep 60[COLOR=DarkRed]
voipd -s
sleep 30
voipd -P 5061
sleep 30[/COLOR]
[COLOR=Green]syslogd -C[/COLOR]
{
new_ip="$(wget -q -O - [URL]http://whatismyip.org[/URL])"
[COLOR=Green]logger [/COLOR][COLOR=Green]"VoIP auf folgender Adresse registriert: $new_ip"[/COLOR][COLOR=Red]
eventadd 1 "VoIP auf folgender Adresse registriert: $new_ip"[/COLOR]
old_ip="$new_ip"
while true; do
  if [ "$old_ip" != "$new_ip" ] ; then
        [COLOR=Green]logger "[/COLOR][COLOR=Green]Neue IP-Adresse: $new_ip => VoIP neu registriert[/COLOR][COLOR=Green]"
[/COLOR][COLOR=Green]        [COLOR=Red]eventadd 1 "Neue IP-Adresse: $new_ip => VoIP neu registriert"[/COLOR][/COLOR]
        voipd -R
    fi
    sleep 600
    old_ip="$new_ip"
    new_ip="$(wget -q -O - [URL]http://whatismyip.org[/URL])"
done
}&
Der gesamte Code ist als simples Script innerhalb der debug.cfg abgespeichert und überlebt damit auch jeden Neustart und (im Moment auch) jeden Firmware-Wechsel. Nur ein Recover macht auch der debug.cfg den Garaus und muss danach neu angelegt werden!
Eine kurze Beschreibung des Codes:
stellt sicher, dass die Box mit allen Programmteilen fertig gestartet ist und damit auch Zugang zum Internet hat, bevor wir loslegen.
voipd -s
sleep 30
voipd -P 5061
sleep 30
beendet den VoIP-Daemon, wartet 30 Sekunden für ein gesichertes Ende und startet den Daemon mit einer geänderten Port-Konfiguration erneut. Nach weiteren 30 Sek., um die VoIP-Verbindungen wieder zu starten, kann das Script nun weiterlaufen
new_ip="$(wget -q -O - http://whatismyip.org)"
old_ip="$new_ip"
initialisiert die notwendigen Variablen und holt auch erstmalig die externe IP ein.
Die anschließende
Schleife wird solange abgearbeitet, wie die Box lebt.
if [ "$old_ip" != "$new_ip" ] ; then
voipd -R
fi
kontrolliert den Wert der Variable "new_ip" mit dem Wert der Variable "old_ip"
und führt im Falle einer Differenz den Befehl "voipd -R" aus.
Nun legen wir die Schleife mittels
für 10 Minuten schlafen, um nicht in das Timeout der Seite http://whatismyip.org zu geraten und fragen anschliessend wiederum die externe IP ab, nachdem wir den letzten Wert in der Variable "old_ip" gesichert haben
old_ip="$new_ip"
new_ip="$(wget -q -O - http://whatismyip.org)"
Besondere Beachtung solltet ihr den farbigen Zeilen widmen:
Diese sind nur relevant, wenn ihr die Prozedur auch überwachen wollt. Bei Fritzboxen mit einer USB-Host-Schnittstelle (wie der von mir getesteten 7170) ist der rote Code-Teil relevant. Bei den anderen Boxen funktioniert leider nur der grüne Code-Teil.
Die Zeile
eventadd 1 "Neue IP-Adresse: $new_ip => VoIP neu registriert"
missbraucht die Funktion des USB-Treibers für Einträge ins Ereignisprotokoll der WEB-Oberfläche. Die grünen Zeilen
syslogd -C
logger "VoIP auf folgender Adresse registriert: $new_ip"sowie
logger "Neue IP-Adresse: $new_ip => VoIP neu registriert"
ergänzen das Script um den Aufruf des Syslog-Dienstes und loggen anschliessend die Daten mit.
Leider ist der Log-Bereich sehr schnell mit anderen Meldungen zugespammt, sodass hier nur eine Kontrolle der letzten ca. 4 Stunden stattfinden kann.
Ein Abruf des Logs ereicht man per
auf der telnet-Oberfläche.​
Wie bekommen wir diesen Code nun in die Box?
Im Grunde genommen ist das ganz einfach. Ich schilder das mal hier aus Sicht des normalen Windows-XP-Users:
Per Windows-Start-Button/Ausführen tippen wir in den nun öffnenden Dialog telnet fritz.box ein:
telnet.JPG und bestätigen mit "ok".
In dem nun offenen Telnet-Terminalfenster fragt die Fritz nun nach dem Passwort, wenn die Fritz über die normale Oberfläche auch per Passwort gesichert ist. Nach der Eingabe erscheinen erst einmal jede Menge Status-Meldungen, die getrost ignoriert werden können. ;)
:arrow: 1) Die Eingabe von
führt Euch nun ins richtige Verzeichnis, in dem auch die debug.cfg auf Euch wartet. Nun kommt es auf euch und eure Fritzbox an, wo es weiter geht:
Die drei anschliessenden Beiträge beschreiben die unterschiedlichen Wege
  1. ohne Protokollierungsfunktion (nur der schwarze Script-Code)
  2. Mit der Syslog-Fkuntion (incl. der grünen Zeilen)
  3. mit der AVM-Log-Funktion (incl. der roten Programmzeilen)
Welches Script in Frage kommt, wurde oben schon erwähnt. ;)
:arrow: 2) Der betreffende Code ist nun in der debug.cfg gelandet und kann noch einmal kontrolliert werden. Dazu einfach
eintippen und mit obigem Script vergleichen. Ein Neustart der Fritzbox aktiviert den Code nun und lässt Euch nun hoffentlich immer erreichbar sein - so ihr denn möchtet ;)
Danksagung:
An dieser Stelle möchte ich kriegaex für seine Unterstützung und sein Script danken, sowie leo22 für die Erkenntnisse der Protokollierung im Systemlog :)
EDIT:
Da es bei www.whatismyip.org in letzter Zeit einige Serverausfälle und Unregelmäßigkeiten mit der IP-Rückgabe gab, kann man den vergleichbaren Service von
"http://checkip.dyndns.org" als Alternative nutzen. Die dazu notwendige Änderungen im Script hat Zarquon hier aufgezeigt. Eine weitere Alternative mittels "http://www.whatismyip.de" habe ich hier aufgezeigt
EDIT2:
In letzter Zeit musste ich mehrmals eine Fritz hinter einem anderen VoIP-Router aufstellen. Leider kollidieren dann die default-UDP-Ports (5060) beider Router des Öfteren, sodass ich hier kurzerhand den UDP-Port der Fritz auf einen anderen Port (5061) umgebogen habe. Die dazu notwendige Erweiterung ist im oberen Script in braun eingefügt. Weiterhin bedarf es nun noch einer Portweiterleitung (UDP) im ersten Router von Port 5061 auf die IP-Adresse der Fritzbox. Da diese Erweiterung nur für Sonderfälle gedacht ist, habe ich diese auch nicht in die anschließenden Scripte mit eingebaut. Das sollte aber jeder bedarfte User im Einzelfall selbst tun können.
 

Novize

Moderator
Teammitglied
Mitglied seit
17 Aug 2004
Beiträge
21,482
Punkte für Reaktionen
248
Punkte
63
Nur die VoIP-Accounts registrieren ohne Log-Funktion

Hier einmal der Script-Code, der nur die VoIP-Neu-Registrierung erzwingt, ohne irgendein Protokoll zu schreiben. Dabei nutze ich eine Möglichkeit den Code ohne den Editor vi (der leider nicht bei allen Firmwareversionen dabei ist) in die Datei debug.cfg zu bekommen, die dabei allerdings den gesamten bestehenden Inhalt der debug.cfg löscht. Wer sich mit dem Bildschirmeditor vi auskennt, der weiss auch, wie er dieses Script eleganter in die debug.cfg hineinbekommt. ;)
Hinweis: Es werden hierbei alle Modifikationen, die auf der debug.cfg beruhen, überschrieben. Das betrifft das Telefonsparbuch ebenso, wie andere Erweiterungen z.B. aus diesem Thread von Evil Dead!
Es gibt sicher noch einige andere Methoden, den Code in die debug.cfg hineinzubekommen. Auch ist ein Anhängen an eine vorhandene debug.cfg ebenso möglich. Dies lasse ich aber bewusst einmal außen vor, denn es gibt auch genug Möglichkeiten, die Box zu einem Briefbeschwerer umzufunktionieren. Das ist nicht Sinn dieses Threads und sollte bei Bedarf für jeden Einzelfall geklärt werden.
Tippt also einfach folgenden Code in das Terminalfenster.
Beachtet dabei, dass es 100%ig fehlerfrei eingetippt wird.
Code:
cat << 'EOF' >>/var/tmp/debug.cfg
#!/bin/sh
sleep 60
{
new_ip="$(wget -q -O - [URL="http://whatismyip.org/"]http://whatismyip.org[/URL])"
old_ip="$new_ip"
while true; do
  if [ "$old_ip" != "$new_ip" ] ; then
    voipd -R
  fi
  sleep 600
  old_ip="$new_ip"
  new_ip="$(wget -q -O - [URL="http://whatismyip.org/"]http://whatismyip.org[/URL])"
done
}&
EOF
cat /var/tmp/debug.cfg > /var/flash/debug.cfg
rm -f /var/tmp/debug.cfg
Tipp: Markiert den Code und kopiert ihn in die Zwischenablage. Im Terminalfenster könnt ihr diesen dann mittels rechtem Mausklick/Einfügen das Geschriebene einfügen. ;)
 

Novize

Moderator
Teammitglied
Mitglied seit
17 Aug 2004
Beiträge
21,482
Punkte für Reaktionen
248
Punkte
63
VoIP registrieren mit Systemlog-Funktion

Hier nun der Script-Code, der die VoIP-Neu-Registrierung erzwingt, und dabei die geänderten Adressen in das Systemlog einträgt. Auch hier nutze ich eine Möglichkeit den Code ohne den Editor vi (der leider nicht bei allen Firmwareversionen dabei ist) in die Datei debug.cfg zu bekommen, die dabei allerdings den gesamten bestehenden Inhalt der debug.cfg löscht. Wer sich mit dem Bildschirmeditor vi auskennt, der weiss auch, wie er dieses Script eleganter in die debug.cfg hineinbekommt.
Hinweis: Es werden hierbei alle Modifikationen, die auf der debug.cfg beruhen, überschrieben. Das betrifft das Telefonsparbuch ebenso, wie andere Erweiterungen z.B. aus diesem Thread von Evil Dead!
Es gibt sicher noch einige andere Methoden, den Code in die debug.cfg hineinzubekommen. Auch ist ein Anhängen an eine vorhandene debug.cfg ebenso möglich. Dies lasse ich aber bewusst einmal außen vor, denn es gibt auch genug Möglichkeiten, die Box zu einem Briefbeschwerer umzufunktionieren. Das ist nicht Sinn dieses Threads und sollte bei Bedarf für jeden Einzelfall geklärt werden.
Tippt also einfach folgenden Code in das Terminalfenster.
Beachtet dabei, dass es 100%ig fehlerfrei eingetippt wird.
Code:
cat << 'EOF' >>/var/tmp/debug.cfg
#!/bin/sh
sleep 60
syslogd -C
{
new_ip="$(wget -q -O - [URL="http://whatismyip.org/"]http://whatismyip.org[/URL])"
[COLOR=black]logger [/COLOR][COLOR=black]"VoIP auf folgender Adresse registriert: $new_ip"[/COLOR]
old_ip="$new_ip"
while true; do
  if [ "$old_ip" != "$new_ip" ] ; then
[COLOR=Green]    [COLOR=Black]logger "[/COLOR][/COLOR][COLOR=Black]Neue IP-Adresse: $new_ip => VoIP neu registriert[/COLOR][COLOR=Black]"[/COLOR]
    voipd -R
  fi
  sleep 600
  old_ip="$new_ip"
  new_ip="$(wget -q -O - [URL="http://whatismyip.org/"]http://whatismyip.org[/URL])"
done
}&
EOF
cat /var/tmp/debug.cfg > /var/flash/debug.cfg
rm -f /var/tmp/debug.cfg
Tipp: Markiert den Code und kopiert ihn in die Zwischenablage. Im Terminalfenster könnt ihr diesen dann mittels rechtem Mausklick/Einfügen das Geschriebene einfügen. ;)
 

Novize

Moderator
Teammitglied
Mitglied seit
17 Aug 2004
Beiträge
21,482
Punkte für Reaktionen
248
Punkte
63
VoIP registrieren mit AVM-Log-Funktion

And last but not least der Script-Code, der die VoIP-Neu-Registrierung erzwingt, und dabei die geänderten Adressen in das AVM-Systemereignis einträgt. Dies funktioniert natürlich nur bei Boxen mit einem USB-Hostanschluss, also einem USB-Anschluss, an den man Drucker Memorysticks ect. anschliessen kann! Klar nutze ich auch hier eine Möglichkeit den Code ohne den Editor vi (der leider nicht bei allen Firmwareversionen dabei ist) in die Datei debug.cfg zu bekommen, die dabei allerdings den gesamten bestehenden Inhalt der debug.cfg löscht. Wer sich mit dem Bildschirmeditor vi auskennt, der weiss auch, wie er dieses Script eleganter in die debug.cfg hineinbekommt.
Hinweis: Es werden hierbei alle Modifikationen, die auf der debug.cfg beruhen, überschrieben. Das betrifft das Telefonsparbuch ebenso, wie andere Erweiterungen z.B. aus diesem Thread von Evil Dead!
Es gibt sicher noch einige andere Methoden, den Code in die debug.cfg hineinzubekommen. Auch ist ein Anhängen an eine vorhandene debug.cfg ebenso möglich. Dies lasse ich aber bewusst einmal außen vor, denn es gibt auch genug Möglichkeiten, die Box zu einem Briefbeschwerer umzufunktionieren. Das ist nicht Sinn dieses Threads und sollte bei Bedarf für jeden Einzelfall geklärt werden.
Tippt also einfach folgenden Code in das Terminalfenster.
Beachtet dabei, dass es 100%ig fehlerfrei eingetippt wird.
Code:
cat << 'EOF' >>/var/tmp/debug.cfg
#!/bin/sh
sleep 60
{
new_ip="$(wget -q -O - [URL="http://whatismyip.org/"]http://whatismyip.org[/URL])"
[COLOR=Black]eventadd 1 "VoIP auf folgender Adresse registriert: $new_ip"
[/COLOR]old_ip="$new_ip"
while true; do
  if [ "$old_ip" != "$new_ip" ] ; then
    [COLOR=Black]eventadd 1 "Neue IP-Adresse: $new_ip => VoIP neu registriert"[/COLOR]
    voipd -R
  fi
  sleep 600
  old_ip="$new_ip"
  new_ip="$(wget -q -O - [URL="http://whatismyip.org/"]http://whatismyip.org[/URL])"
done
}&
EOF
cat /var/tmp/debug.cfg > /var/flash/debug.cfg
rm -f /var/tmp/debug.cfg
Tipp: Markiert den Code und kopiert ihn in die Zwischenablage. Im Terminalfenster könnt ihr diesen dann mittels rechtem Mausklick/Einfügen das Geschriebene einfügen. ;)
 

henniero

Neuer User
Mitglied seit
4 Okt 2006
Beiträge
83
Punkte für Reaktionen
0
Punkte
6
Novize.....du bist mein HELD :)

Habe das script gerade in meine fritze gedengelt.
Es funktioniert...danke!

Mein Netgear hatte aufgrund von Kabelaufräumarbeiten seinen Reconnect seit einer Woche ca. um 09:00 Uhr morgens. Leider kann man in diesem Router den reconnect nicht auf eine bestimmte Zeit legen. (Man könnte sich natürlich den Wecker stellen um den reconnect auf eine bestimmte Nachtschlafende Zeit zu bekommen....ist aber unpraktisch)

Meine 1&1 Voip-Nummern wahren immer erst gegen Mittags von außen erreichbar.
Ich habe die ganze Woche nen dicken Hals vor mir her geschoben....und kurz bevor ich einen verzweifelten "bitte helft mir doch" Thread hier starten wollte, kommst du Novize mit der Lösung um die Ecke...genial.

Auf immer währende Erreichbarkeit....

Henniero
 

kriegaex

Aktives Mitglied
Mitglied seit
7 Nov 2006
Beiträge
2,927
Punkte für Reaktionen
0
Punkte
36
Novize, ich glaubte, Dir das Skript in der Form geschickt zu haben:
Code:
[COLOR="Blue"]cat /var/flash/debug.cfg > /var/tmp/debug.cfg[/COLOR]
cat << 'EOF' >>/var/tmp/debug.cfg
Damit würde das neue Skript einfach angehängt, ohne den vorherigen Inhalt zu überschreiben.

Edit: So, und jetzt noch, wie vor ein paar Tagen mal versprochen, die Variante, die sich auch automatisch wieder deinstallieren oder aktualisieren läßt, indem man Anfang und Ende des eingefügten Abschnitts mit eindeutigen Markierungen versieht:

Installation/Update
Code:
# Evtl. vorhandene Version erst mal löschen
cat /var/flash/debug.cfg \
  [COLOR="blue"]| sed '/^# >> VoIP-Reconnect ATA/,/^# << VoIP-Reconnect ATA/d'[/COLOR] \
  > /var/tmp/debug.cfg

# Code mit Markern neu einfügen
cat << 'EOF' >>/var/tmp/debug.cfg
[COLOR="Blue"]# >> VoIP-Reconnect ATA[/COLOR]
# Hier folgt der eigentliche Code
[COLOR="blue"]# << VoIP-Reconnect ATA[/COLOR]
EOF

# Zurück kopieren und aufräumen
cat /var/tmp/debug.cfg > /var/flash/debug.cfg
rm -f /var/tmp/debug.cfg

Deinstallation
Hier verkürzt sich der obige Code einfach, Neues gibt es hier nicht:
Code:
# Evtl. vorhandene Version löschen
cat /var/flash/debug.cfg \
  [COLOR="blue"]| sed '/^# >> VoIP-Reconnect ATA/,/^# << VoIP-Reconnect ATA/d'[/COLOR] \
  > /var/tmp/debug.cfg

# Zurück kopieren und aufräumen
cat /var/tmp/debug.cfg > /var/flash/debug.cfg
rm -f /var/tmp/debug.cfg

Wenn man sich das Ganze nun noch in ein Fritz!Box-kompatibles Pseudo-Image bäckt, kann man die (De-)Installation auch bequem mittels Firmware-Update via Web-Oberfläche durchführen. So macht es im Grunde "The Construct" auch, nehme ich an (nicht angeschaut).
 
Zuletzt bearbeitet:

henniero

Neuer User
Mitglied seit
4 Okt 2006
Beiträge
83
Punkte für Reaktionen
0
Punkte
6
Huch.
Da habe ich doch glatt die Danksagung oben überlesen.

Zitat von Novize:
Danksagung:

An dieser Stelle möchte ich kriegaex für seine Unterstützung und sein Script danken, sowie leo22 für die Erkenntnisse der Protokollierung im Systemlog

Natürlich wird mein Lob aus Post #5 hiermit erweitert: kriegaex und leo22 ihr seid auch Helden!
 

Novize

Moderator
Teammitglied
Mitglied seit
17 Aug 2004
Beiträge
21,482
Punkte für Reaktionen
248
Punkte
63
Hallo Alexander,
:mrgreen: In der Tat habe ich die von Dir genannte Code-Zeile einfach unterschlagen:
Ich wollte das Script so kurz wie möglich halten und dabei gleichzeitig fixe Umgebungsbedingungen definieren. Deshalb ja auch die rote Warnung, dass die gesamte debug.cfg gelöscht wird. Und ebenso der Hinweis, dass andere Möglichkeiten bei Bedarf anschliessend diskutiert werden können.
Das hast Du ja damit gemacht. ;)
Wer noch eine busybox mit vi in der Fritz sein Eigen nennt und auch damit umgehen kann, wird das Ganze ja sowieso per "nvi debug.cfg" komfortabler eingeben können. Das aber nur zur Vollständigkeit.
 

kriegaex

Aktives Mitglied
Mitglied seit
7 Nov 2006
Beiträge
2,927
Punkte für Reaktionen
0
Punkte
36
Ich würde den Weg mit Installer/Uninstaller per Kommandozeile vorziehen, denn vi versemmelt gern Einrückungen in der Voreinstellung.
 

bart99

Neuer User
Mitglied seit
1 Jun 2007
Beiträge
40
Punkte für Reaktionen
0
Punkte
0
und hier noch eine weitere Skript-Variante mit interner Abfrage der IP über Rudi Shell auf der 1. DSL Box mit vorhandenem ds-mod.
Der Großteil des Skriptes beruht auf der Vorlage von schandmaennchen.
Code:
# >> VoIP-Reconnect ATA
cat > /var/tmp/sipreg.sh << 'ENDCHECK'
#!/bin/sh
#
# Ueberpruefung auf Aenderung der IP (intern)
# Gegebenenfalls SIP REGISTER
#
wget -q -O - http://admin:[PWD]@[IP]:81/cgi-bin/rudi_shellcmd.cgi?script=get_ip | sed -n 's/.*id="cmd_output">//p' > /var/tmp/neu.ip
if [ "`cat /var/tmp/neu.ip`" = "" ]
then
# logger -p WARN "sipreg: Kann IP nicht ermitteln -> Ende"
eventadd 1 "sipreg: Kann IP nicht ermitteln -> Ende"
else
if [ "`cat /var/tmp/neu.ip`" = "`cat /var/tmp/alt.ip`" ]
then
# logger -p INFO "sipreg: Keine neue IP -> Ende"
# eventadd 1 "sipreg: Keine neue IP -> Ende"
else
/bin/voipd -R
# logger -p INFO "sipreg: Neue IP $(cat /var/tmp/neu.ip) -> SIP-Register"
eventadd 1 "sipreg: Neue IP $(cat /var/tmp/neu.ip) -> SIP-Register"
fi
mv -f /var/tmp/neu.ip /var/tmp/alt.ip
fi
ENDCHECK
chmod +x /var/tmp/sipreg.sh
# << VoIP-Reconnect ATA
wobei natürlich [PWD] und [IP] angepasst werden müssen und im Crontab die Zeile
Code:
*/2 * * * * /var/tmp/sipreg.sh
einzufügen ist.
Das Einspielen müsste wie von kriegaex oben beschrieben funktionieren. Ich habe alles mit "nvi debug.cfg" eingegeben und hatte bis jetzt keine Probleme damit.
Grüße
bart99
 

level20peon

Mitglied
Mitglied seit
11 Jul 2007
Beiträge
270
Punkte für Reaktionen
0
Punkte
16
DynDNS

Hallo,

ich möchte an dieser Stelle gerne eine meines Erachtens und bei Bedarf sinnvolle Ergänzung anfügen:

Code:
[...]
[COLOR="Red"]wget -q -O - http://USERNAME:[email protected]/nic/update?hostname=DYNDNSHOSTNAME[/COLOR]
/bin/voipd -R
[...]

Wenn der rot markierten code unmittelbar an die Ausführung von "/bin/voipd -R" angefügt bzw vorangestellt wird, so wird bei einer Änderung der externen IP gleichzeitig die DynDNS Registrierung erneuert. Ich finde es sinnvoller DynDNS auf diese Weise mittels einer Zeile code zu aktualisieren als ein extra-Paket im DS-Mod für diesen Zweck zu installieren.
Hinweis: Wegen eines Problems mit dem wget Befehl im DS-Mod 15.1 benötigt ihr entweder den DS-Mod 15.2 oder ihr müsst die Busybox der 15.1 patchen. (Diese DS-Mod Versionen beziehen sich auf den Kernel 2.6.)
 

frank_m24

IPPF-Urgestein
Mitglied seit
20 Aug 2005
Beiträge
17,746
Punkte für Reaktionen
38
Punkte
48
Hallo,

@level20peon: Sollte man die Aktualisierung eines dyndns Accounts nicht besser der Masterbox überlassen?

Viele Grüße

Frank
 

level20peon

Mitglied
Mitglied seit
11 Jul 2007
Beiträge
270
Punkte für Reaktionen
0
Punkte
16
Nun, wie ich schrieb ist dies bei Bedarf eine sinnvolle Ergänzung. Nicht jeder Hardware-client ist mit den DynDNS Restriktionen konform, sprich er updated auch bei unveränderter externer IP, was zu einer Accountsperrung führt. Es soll ja Leute geben, die keine FritzBox als Router benutzen :).

Ich gehe in meinem Beispiel auf den wahrscheinlichen Fall ein, dass die "Slave-Box" ständig aktiv ist, da sie nunmal den VOIP- und häufig auch Festnetz-Betrieb komplett übernimmt. Bevor nun mehrere Applikationen (von welcher Stelle im Netzwerk auch immer dies geschieht) auf eine geänderte externe IP prüfen, kann man mit diesem script nach erfolgreicher Prüfung auf eine geänderte externe IP direkt beide Dienste (VOIP und DynDNS) aktualisieren lassen. Im Endeffekt ist der client auf der "Masterbox" eben auch nur ein client, der sich die Leitung mit dem Rest des Netzwerkes teilt, ich sehe da keinen großen Unterschied von wo im Netzwerk nun dieses Update verschickt werden soll.
Nunja, das soll jeder sehen wie er es will, ich dachte es ja nur als potentielle Ergänzung für Interessierte an :D.
 

kriegaex

Aktives Mitglied
Mitglied seit
7 Nov 2006
Beiträge
2,927
Punkte für Reaktionen
0
Punkte
36
Ich weise darauf hin, daß die hier vorgestelllte Lösung weder DS-Mod voraussetzt, noch daß wir uns im DS-Mod-Forum befinden - nur, damit keine "Mistverständnisse" aufkommen.
 
A

andilao

Guest
@level20peon
Danke! Eine feine Idee, dem Slave auch einen DynDNS zu geben. Ich arbeite mit >2 x DynDNS auf 2 DSL-Leitungen, z.B. zur Protokoll-Trennung oder um einfach meinen privaten Account nicht verfallen zu lassen, wenn ich 6-8 Wochen im Urlaub bin.

Nun wird aber jegliches Provider-DNS-Problem als IP-Änderung interpretiert werden. So sollte man doch ein "$new_ip" != "" einbauen.
 

bart99

Neuer User
Mitglied seit
1 Jun 2007
Beiträge
40
Punkte für Reaktionen
0
Punkte
0
um dies zu verhindern hab ich das o.g. Script bei mir noch etwas verfeinert. teilweise kommt ein "-" bei der wget Abfrage, also geh ich ganz auf Nummer sicher. Das sollte auch mit whatsmyip.org Abfragen funktionieren.. (siehe Script)

Code:
#!/bin/sh
#
# Ueberpruefung auf Aenderung der IP (intern)
# Gegebenenfalls SIP REGISTER
#
new_ip=$(wget -q -O - http://admin:[PWD]@[IP]:81/cgi-bin/rudi_shellcmd.cgi?script=get_ip | sed -n 's/.*id="cmd_output">//p')

# teste auf korrektes IP Format *.*.*.*
if echo $new_ip |egrep -q '.*\..*\..*\..*'; then
  if test -f /var/tmp/current.ip -a $new_ip = "`cat /var/tmp/current.ip`"; then
    logger -t sipreg -p cron.notice "Keine neue IP -> Ende"
  else
   /bin/voipd -R
   # logger -t sipreg -p cron.notice "Aktualisiere SIP-Register ($new_ip)."
   eventadd 1 "sipreg: Aktualisiere SIP-Register ($new_ip)."
   echo $new_ip > /var/tmp/current.ip
  fi
else
  # logger -t sipreg -p warn "Keine Verbindung. Kann IP nicht ermitteln."
  eventadd 1 "sipreg: Keine Verbindung. Kann IP nicht ermitteln."
fi
ich hoffe, dass hilft weiter..
Grüße
bart99
 
Zuletzt bearbeitet:

fritzUser2

Neuer User
Mitglied seit
31 Aug 2007
Beiträge
43
Punkte für Reaktionen
0
Punkte
0
Hi allerseits,

habe mich heute an einem Script für eine FBF hinter einem wrt54g [und andere kompatible Router] mit tomato Firmware versucht.
Es wird also die WAN_IP vom Wrt54g verwendet.
Grundlage war das Script von Novize incl. USB Zeug.

das ist bisher raus gekommen:
Code:
#!/bin/sh
sleep 60
{
new_ip="$(wget -q -O - http://root:[email protected]/status-data.jsx | grep  wan_ipaddr: |  tr -d wan_ipaddr: | tr -d \' |tr -d , tr -d space)"
eventadd 1 "VoIP auf folgender Adresse registriert: $new_ip"
old_ip="$new_ip"
while true; do
  if [ "$old_ip" != "$new_ip" ] ; then
    eventadd 1 "Neue IP-Adresse: $new_ip => VoIP neu registriert"
    voipd -R
  fi
  sleep 600
  old_ip="$new_ip"
  new_ip="$(wget -q -O - http://root:[email protected]/status-data.jsx | grep  wan_ipaddr: |  tr -d wan_ipaddr: | tr -d \' |tr -d , tr -d space)"
done
}&
Also im Prinzip habe ich nur die zwei Zeilen für die Wan_IP verändert, nicht wirklich elegant, aber nun gut.
Die tomato FW bietet leider keine Möglichkeit, einfach mal nur die IP abzurufen.
Daher die umständliche verwurstelung mit den vielen tr commands.
Mit

new_ip="$(expr "$new_ip" : '\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\)')"

wollte es irgendwie nicht.

Wichtig: ich hab es noch nicht getestet, habe mir eben noch ein pseudo Image Construieren lassen, werde es gleich mal testen.
Für verbesserungsvorschläge bin ich natürlich jederzeit offen, da ich nicht vorhabe meine FBF 7170zu modden, habe ich mir die Mühe fürs saubere verpacken gespart.

EDIT: scheint zu funktionieren.
 
Zuletzt bearbeitet:

Marcov

Neuer User
Mitglied seit
1 Jan 2006
Beiträge
98
Punkte für Reaktionen
0
Punkte
0
kriegaex schrieb:
Ich weise darauf hin, daß die hier vorgestelllte Lösung weder DS-Mod voraussetzt, noch daß wir uns im DS-Mod-Forum befinden - nur, damit keine "Mistverständnisse" aufkommen.
Habe die Lösung von Novize umgegesetzt, trotzdem kommen 4 von 10 anrufen nicht durch - wie kann ich denn raus bekommen ob es daran liegt, bzw. würde es helfen die Version mit der Abfrage in der Masterbox zu benutzen?
Du schreibst, dass dafür kein DS-Mod Vorraussetzung ist, aber wie soll das dann funktionieren (ohne DS-Mod läuft auch kein Rudi-shell?!)
 

kriegaex

Aktives Mitglied
Mitglied seit
7 Nov 2006
Beiträge
2,927
Punkte für Reaktionen
0
Punkte
36
Mit der Frage kann ich nichts anfangen. Wo taucht in Novizes Skript die Rudi-Shell auf?
 

Marcov

Neuer User
Mitglied seit
1 Jan 2006
Beiträge
98
Punkte für Reaktionen
0
Punkte
0
Dachte, dass sich Deine Antwort auf das Script vonn Bart bezog und war etwas verwundert, da das ohne DS-MOD wohl nicht funktioniert.
Also ich habe jetzt DS-MOD auf beiden Boxen installiert und Barts Script benutzt, seit dem funktioniert es (warum auch immer) zuverlässiger.
 

Erhalten Sie 3CX für 1 Jahr kostenlos!

Gehostet, in Ihrer privaten Cloud oder on-Premise! Ganz ohne Haken. Geben Sie Ihren Namen und Ihre E-Mail an und los geht´s:

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.
oder via