SIP-Blockade bei Internetausfall #2

jobisoft

Mitglied
Mitglied seit
18 Mrz 2006
Beiträge
206
Punkte für Reaktionen
1
Punkte
0
Ich habe zu diesem Thema bereits dein Eintrag

http://www.ip-phone-forum.de/showthread.php?t=129096

gefunden, in diesem wird aber das Problem glaube ich falsch angegangen. Wollte es als Referenz kurz mit erwähnen, beziehe mich später darauf.

Kurz das Szenario:

Im LAN ein Asterisk mit ISDN-Anbindung und 8 lokalen SIP-Clients. Außerdem registriert sich der Asterisk bei 4 1&1 und 4 dus.net Accounts.

Server ist 192.168.78.1 und alle SIPs hängen im selben Subnetz. Server ist außerdem DMZ bezüglich des Routers der das LAN ins Internet wirft. Somit habe ich kein NAT. Damit sich 1und1 registrieren kann, muss ich dem asterisk über ein dyndns-account die externe IP zugänglich machen.

nat=no
externhost=xxxxxx.bounceme.net
localnet=192.168.0.0/255.255.0.0
canreinvite=yes

Das funzt auch, solange ich online bin und xxxx.bounceme.net auch wirklich meine IP auflöst. Sollte das NICHT passieren, geht keine lokale SIP-Komunikation. Das Schlimme ist auch, das ISDN von außen nicht geht, es kommt zwar bis auf die Anlage, kann von dort aber nicht auf die SIPs weitergeleitet werden, weil der Aufbau nicht klappt (sie werden ja nie angefragt, weil asterisk versucht meine dyndns aufzulösen, er weiß einfach nicht wohin er anfragen soll).

Es hat aber nix damit zu tun das der Server beschäftigt ist die Adressen der externen VOIP-Anbieter abzufragen (wie in dem referenz-Artikel beschrieben), sondern er kommt einfach nicht raus!

Kleiner Workaround in diesem Fall: Ich editiere die host-Datei meines Systems und mappe den xxx.bounceme.net auf 192.168.78.1 und sofort klappt die lokale Kommunikation (ISDN-> loakales SIP, lokales SIP->ISDN, und lokales SIP -> lokales SIP).

Wenn jetzt Internet wieder geht, kann sich asterisk aber immer noch nicht bei 1und1 registrieren (keine reinkommenden Anrufe) und rausgehende Anrufe sind halbseitig ohne Audio (weil der rückläufige Audiostrom im nirvana=192.168.78.1 auf Seite des Angerufenen verschwindet) und ich muss erst wieder den host-eintrag entfernen.

So, jetzt meine Frage, bin ich der einzige der dieses Problem bei Internetausfall hat? Wie habt ihr das Dilemma gelöst, das die externen Anbieter wirklich die externe IP benötigen, für die interen Kommunikation aber die loakle IP des Servers ausreicht? Gibt es da nen Trick bei der Konfiguration?

Die Änderung der IP die hinter meiner dyndns-Adresse steht (nur lokal für meinen asterisk) möchte ich gerne automatisieren, habt Ihr da Vorschläge? Ein skript das regalmäßig testet und wenn kein Internet da ist den host eintrag setzt und sobald internet da ist ihn wieder entfernt? Wenn Internet da ist muss es auch testen, ob der dyndnseintrag auch wiklich zu mir zeigt (manchmal sind die down und die automatische aktualisierung funzt nicht), auch dann muss aus sicherheitsgründen der hosteintrag gesetzt werden.

-> Ich denke ein mini-webserver auf der kiste mit einer datei die ich über wget versuche zu holen ist der einfachste Test. Wenn es "meine" Datei ist, weiß ich das a) das Internet geht und b) mein dyndns-Eintrag auch zu mir zurückkommt.

Trotzdem bleibt die Frage ob man asterisk nicht so konfigurieren kann, das er für "interne" Gespräche die lokale IP in den SIP-Header schreibt.

Vielen Dank
John Bieling
 
Zuletzt bearbeitet:
Hi,

also bei mir treten die Probleme nicht auf. Kannst Du vielleicht noch die Einträger der clients aus der sip.conf posten?.
 
Das Problem scheint abhängig vom verwendeten Router zu sein, denn bei einer FBF 7170 und 7050 tritt das Problem nicht auf, allerdings bei einem Netgear-Router aus der Pro Serie, einem Zyxelrouter und einem PC mit IPCop.
Soweit ich mich erinnern kann lag es daran, das die nach einer IP-Änderung nicht mitbekommen haben, das Pakete an die dynamische Adresse trotzdem korrekt sind. Das ist leider alles was mir einfällt und sicher ist es nicht 100% technisch korrekt, aber ich würde mal in der Richtung suchen.
 
Ich habe gerade auf 1.2.16 geupdated und schaue mal was jetzt passiert, mehr dazu heute Abend.

Jedoch ist die Annahme falsch, das es mit der FB 7050 gehen könnte, weil ich genau diese als router einsetzte! Sobald Internet tot ist kann mein asterisk seine eigene externe ip nicht mehr auflösen und baut keine SIP-Gespräche auf, AUCH WENN sie eigentlich lokal sind!

Nochmal meine Frage, die das Problem an der Wurzel betrifft: kann man irgndwie ZWEI externe IPs definieren, jenachdem ob das SIP-Ziel lokal oder wirklich extern ist? Müsste das der asterisk nicht über localnet wissen, was intern und was extern ist? Das wäre die beste Lösung!
 
Es bleibt dabei, auch mit 1.2.16 und der sip.conf von chaos2000: ziehe ich das DSL-Kabel aus dem Splitter (um DSL-Ausfall zu simulieren) und warte 5min bis asterisk "re-lokkup of xxx.dyndns.org failed" ausspuckt und versuche dann ein interne SIP-Verbindung aufzubauen ist alles tot. Erst wenn ich in der host datei den xxx.dyndns.org auf die IP des servers mappe (192.168.78.1) geht es (sofort!)

Ich würde chaos2000 auch noch mal bitten das genau so bei sich zu testen... ich glaubs einfach nicht....

Ideen?

John
 
Class C Netzmaske falsch?
 
hm... ist

localnet=192.168.0.0/255.255.0.0

falsch? Oder was meinst du? Das lokale Netzwerk ist 192.168.78.1-254 und das sollte doch durch die localnet-Angabe getroffen werden oder? Alles andere wird ins Internet geroutet....

Oder sehe ich da was falsch
 
In diesem Falle wäre die korrekte Angabe 192.168.78/24 oder 192.168.78.1-254 mit jeweiliger Netzmaske von 255.255.255.0

Also hier:

localnet = 192.168.78.0/255.255.255.0


Grüsse
 
jobisoft schrieb:
Ich würde chaos2000 auch noch mal bitten das genau so bei sich zu testen... ich glaubs einfach nicht....


Ok, DU hast recht. Habe jetzt mal meinen Router komplett vom Netz genommen und ein sip reload gemacht. Danach versagt chan_sip jegliche Kommunikation.
Was mir dann noch eingefallen ist; Im router habe ich meine xxx.dyndns.org adresse auf meinen lokalen Webserver gemappt, um die gleiche Verhältnisse zw. internen und externen Netz zu simulieren.
 
Nimm halt externip, die wird nur beim Start von Asterisk oder reload aufgelöst.
 
externip kann ich nicht benutzen, weil ich sie nicht weiß (bekommen doch jedes mal wenn mein ISP mich trennt ne neue)

Ich werde die Änderung der localnet-Einstellung heute Abend testen!

Gestern habe ich das "FallBack2ISDN"-Script fertig gestellt, dies läuft jede Minute und überprüft, ob die Verbindung ins Internet funktioniert (mein dyndns zu mir zurück aufgelöst wird). Wenn nicht wird der host-eintrag geändert, sodass der externhost direkt lokal zu 192.168.78.1 aufgelöst wird. Wenn die Verbindung irgendwann wieder gehen sollte, wird der Host-Eintrag automatisch wieder entfernt.

Im "ISDN-Mode" kann natürlich weder von draußen über Internet reintelefoniet noch über Internet raustelefoniert werden, dafür bleibt die Anlage aber stabil und die interne SIP Kommunikation funktioniert immer. *Puh*

Wenn Interesse besteht poste ich das hier.

Jetzt daumendrücken, das das mit den neuen localnet-Einstellungen funzt.
 
jobisoft schrieb:
externip kann ich nicht benutzen, weil ich sie nicht weiß (bekommen doch jedes mal wenn mein ISP mich trennt ne neue)

externip = domain.tld
 
Danke! Wusste nicht das bei externip auch ein hosteintrag stehen darf.

Also für mich ist das Problem jetzt GELÖST aber es bedarf weiterhin eines externen Skripts, Asterisk ist von sich aus nicht in der Lage in einer Umgebung mit "nicht fester IP" und "sporadischen Internettrennungen" einwandfrei zu arbeiten.

Hier meine abschließenden Gedanken:

1. Der ganz oben verlinkte Artikel hat mit der Aussage "Asterisk hängt sich auf" doch teilweise recht. Setzt man in externhost eine Adresse rein, löst asterisk diese in regelmäßigen Abständen zu einer IP auf, die er dann in die SIP header wirft. Es gibt keinen timeout für diese Anfrage, ist also Internet mal tot, kann asterisk das nicht ausflösen und "hängt" dadurch bei jeder Anfrage ziemlich lange. Wenn nun externrefresh recht "knapp bemessen" ist, kann es passieren, dass asterisk nichts anderes mehr macht als die dns aufzulösen -> nix geht mehr.

2. Dieses Problem kann umgangen werden, indem man den hostnamen bei externip einträgt, dann löst asterisk das ganze nur beim starten oder sip reload auf und arbeitet dann mit dieser IP. (Danke thomas007)

3. Fällt Internet dann aus, hängt sich asterisk nicht mehr auf, in meiner Testumgebug ging dann auch lokale SIP-Telefonie. Trotzdem ist dieser Zustand von "Instabilitätserscheinungen" begleitet (z.B. versucht sich asterisk immer wieder bei den externen Anbietern zu registrieren, was den Server evtl. langsamer macht...). Außerdem habe ich das Gefühl, dass der Eintrag unter localnet nicht das macht wofür er gedacht ist, nämlich die lokale IP zu benutzen wenn ich lokal anrufe, aber egal...

4. Kommt Internet wieder zurück, haben wir ein Problem: asterisk kann sich noch immer nicht bei den externen Anbietern registrieren, weil er die neue IP nicht kennt, erst durch einen sip reload funzt alles wieder 100%.

5. Durch ein externens "checkdsl" Skript kann Punkt 4 auf jeden Fall behoben werden, sobald der Server eine neue IP hat wird ein sip reload ausgeführt (asterisk -rx "sip reload").

6. Ich habe diese Skript dann noch etwas aufgebort, um auch die unter Punkt 3 aufgelisteten Probleme zu beheben:

Meine sip.conf habe ich in 3 Teile zerlegt

sip.general.conf
sip.external.conf (<- alle Registers und externen peers und externip=xxx.dyndns.org)
sip.local.conf (<- alle SIP-Konten der lokalen Telefone)


Das Skript wird jede Minute ausgeführt und versucht mit

wget -t 1 -T 5 http://xxx.dyndns.org/testfile

eine Datei von meinem eigenen Server zu laden (der Test ist auf 5 Sekunden begrenzt). Ist dies möglich gibts den status "up", wenn nicht dann "down". Nun wird der Status mit dem Status der letzten Skriptausführung verglichen, daraus resultieren dann

"still up", "still down", "went up", "went down"

Bei den "still"s wird nix gemacht, bei "went down" schreibe ich meine sip.conf neu, zusammengesetzt aus

sip.general.conf + "externip=192.168.78.1" + sip.local.conf
und mache danach ein sip reload

bei "went up" schreibe ich sip.conf ebenfalls neu mit

sip.general.conf + sip.external.conf + sip.local.conf
und mache danach ein sip reload.

Damit läuft das System stabil und ohne Probleme, das tolle ist auch, das dadurch die Anlage nicht nur gegen einen Internetausfall geschützt ist, sondern auch bei einem Problem bei dyndns (wie am Montag den 12.03) die externe Anbindung abschaltet.

Wenn gewünscht kann ich das ganze Skript hier auch posten.

Vielen Dank für Eure Hilfe
John Bieling
 
Zuletzt bearbeitet:
Kostenlos!

Neueste Beiträge

Statistik des Forums

Themen
248,904
Beiträge
2,304,581
Mitglieder
378,604
Neuestes Mitglied
Duggy