- Mitglied seit
- 17 Aug 2004
- Beiträge
- 23,104
- Punkte für Reaktionen
- 1,003
- Punkte
- 113
Vorwort:
-Fehlerdiagnose:
Die anschließende
und führt im Falle einer Differenz den Befehl "voipd -R" aus.
Nun legen wir die Schleife mittels
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
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 perWie 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:
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.
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.
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: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.
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: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.
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: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.
Aus obiger Überlegung ergibt sich das Script, das in einer Schleife solange durchläuft, wie die Fritzbox läuft:
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:
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
}&
stellt sicher, dass die Box mit allen Programmteilen fertig gestartet ist und damit auch Zugang zum Internet hat, bevor wir loslegen.sleep 60
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 weiterlaufenvoipd -s
sleep 30
voipd -P 5061
sleep 30
initialisiert die notwendigen Variablen und holt auch erstmalig die externe IP ein.new_ip="$(wget -q -O - http://whatismyip.org)"
old_ip="$new_ip"
Die anschließende
Schleife wird solange abgearbeitet, wie die Box lebt.while
...
done
kontrolliert den Wert der Variable "new_ip" mit dem Wert der Variable "old_ip"if [ "$old_ip" != "$new_ip" ] ; then
voipd -R
fi
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 habensleep 600
Besondere Beachtung solltet ihr den farbigen Zeilen widmen:old_ip="$new_ip"
new_ip="$(wget -q -O - http://whatismyip.org)"
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
missbraucht die Funktion des USB-Treibers für Einträge ins Ereignisprotokoll der WEB-Oberfläche. Die grünen Zeileneventadd 1 "Neue IP-Adresse: $new_ip => VoIP neu registriert"
ergänzen das Script um den Aufruf des Syslog-Dienstes und loggen anschliessend die Daten mit.syslogd -C
logger "VoIP auf folgender Adresse registriert: $new_ip"sowie
logger "Neue IP-Adresse: $new_ip => VoIP neu registriert"
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.logread
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:
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
Die drei anschliessenden Beiträge beschreiben die unterschiedlichen Wege
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:cd /var/flash
Die drei anschliessenden Beiträge beschreiben die unterschiedlichen Wege
- ohne Protokollierungsfunktion (nur der schwarze Script-Code)
- Mit der Syslog-Fkuntion (incl. der grünen Zeilen)
- mit der AVM-Log-Funktion (incl. der roten Programmzeilen)
:arrow: 2) Der betreffende Code ist nun in der debug.cfg gelandet und kann noch einmal kontrolliert werden. Dazu einfach
Danksagung: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 cat debug.cfg
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:"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
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.