[Problem] PJSIP: keine Neu-Registrierung nach Wechsel d. öffentlichen IP

sunnyman

Mitglied
Mitglied seit
13 Jan 2006
Beiträge
465
Punkte für Reaktionen
33
Punkte
28
Hallo zusammen,

gegeben:
  • Telekom AllIP-PK Anschluss (DSL+VoIP)
  • Fritzbox
  • Asterisk 13 mit PJSIP
Ich hatte das Problem, dass bei Rufumleitungen teilweise keine Sprache zustande kam:

Asterisk Rufumleitung: Sprache kommt nicht zustande bei bestimmten Zielen

Dieses Problem habe ich gelöst, indem ich in dem transport external_signaling_address und external_media_address
explizit setze. Meine IP kann sich ja nun mal ändern. Zum Glück nicht mehr alle 24h, aber dennoch unvorhersehbar, wenn die VDSL-Gegenstelle mal durchgestartet wird, meine Fritzbox mal neu startet o.ä.

Ich habe die beiden Adressen mit meinem DynDNS-Namen bestückt und den dnsmgr von Asterisk aktiviert.

Wenn ich nun mal einen IP-Adresswechsel erzwinge durch DSL-Reconnect via Fritzbox und dann den dnsmgr per hand anschubse, wird die IP auch intern korrekt aktualisiert.

Allerdings bekommt Asterisk/PJSIP nicht mit, dass die Registrierung nicht mehr gültig ist:
Asterisk sendet OPTIONS Pakete an den Telekom-Server (mit der aktualisierten IP im Contact Header), diese werden mit 403 Forbidden quittiert.

Ich dachte, forbidden_retry_interval (habe ich auf 10 s gesetzt) käme hier zum tragen, aber das ist wohl nicht so. Es werden lustig weitere OPTIONS Pakete geschickt die mit 403 beantwortet werden, bis die expiration Dauer erreicht ist.
 
Zuletzt bearbeitet:

gehtdoch

Mitglied
Mitglied seit
3 Feb 2019
Beiträge
234
Punkte für Reaktionen
16
Punkte
18
Hmm, gemäß diesem Blog-Eintrag sollte Asterisk das aber automatisch merken. Ich selber nutze es nicht (daher im Folgenden disabled) - kann daher nicht sagen, ob das derzeit läuft.
Was sagt denn
Code:
CLI> dnsmgr status
DNS Manager: disabled
Refresh Interval: 300 seconds
Number of entries: 0

Wenn eine Änderung der IP-Adresse entdeckt wird, muss eine Neuregistrierung durchgeführt werden. Passiert das? Ich weiß nicht, wie der DNS-Manager konkret agiert, wenn er eine Änderung bemerkt. Falls nicht, wird das nichts. Am Besten mal mittracen.

Wenn die OPTIONS-Pakete mit forbidden quittiert werden, heißt das, dass beim entsprechenden angesprochenen Server keine Registrierung vorliegt. Aber da gilt dann grundsätzlich dieses Thema (Stichwort RPZ - Asterisk unterstützt das Betriebskonzept der Telekom nicht).
 

sunnyman

Mitglied
Mitglied seit
13 Jan 2006
Beiträge
465
Punkte für Reaktionen
33
Punkte
28
Hmm, gemäß diesem Blog-Eintrag sollte Asterisk das aber automatisch merken. Ich selber nutze es nicht (daher im Folgenden disabled) - kann daher nicht sagen, ob das derzeit läuft.
Doch in dem Blog-Post ist beschrieben, dass chan_sip das selbstständig kann, PJSIP aber nicht. Und damit PJSIP das kann, wurde in dnsmgr eine Erweiterung eingebaut.

Wenn eine Änderung der IP-Adresse entdeckt wird, muss eine Neuregistrierung durchgeführt werden. Passiert das?
Nein. Ich fürchte genau das Problem ist, dass es in PJSIP einen entsprechenden Mechanismus nicht gibt und deswegen der dnsmgr es reinpopelt, damit es überhaupt geht.

Der dnsmgr soll ja verwendet werden, so steht's auch im Blogpost. Der erkennt auch die geänderte IP und ordnet die dem (D)DNS-Namen von mir neu zu. Aber dann passiert halt nix.
Ich weiß nicht, wie der DNS-Manager konkret agiert, wenn er eine Änderung bemerkt. Falls nicht, wird das nichts. Am Besten mal mittracen.

Wenn die OPTIONS-Pakete mit forbidden quittiert werden, heißt das, dass beim entsprechenden angesprochenen Server keine Registrierung vorliegt.
Klarer Fall, wenn Asterisk der Ansicht ist, die Registrierung ist noch gültig, die Telekom von meiner neuen IP noch nix gesehen hat :)


Es gibt ja das forbidden_retry_interval, aber ich fürchte, die das greift wohl nur für einen Registrierungsversuch, nicht für generelle Antworten.
 

gehtdoch

Mitglied
Mitglied seit
3 Feb 2019
Beiträge
234
Punkte für Reaktionen
16
Punkte
18
Es gibt ja das forbidden_retry_interval, aber ich fürchte, die das greift wohl nur für einen Registrierungsversuch, nicht für generelle Antworten.
Korrekt.

Wie ich ja schon geschrieben habe, unterstützt Asterisk ein Betriebskonzept, welches mehrere Server anbietet aber man nur einen davon nutzen kann (nämlich den, bei dem man sich mit seiner aktuell gültigen IP registriert hat), nicht. Man nennt das auch Security.

Ich mache das so, dass ich Asterisk beim Wegfallen der Netzwerkverbindung schlicht beende und neu starte, wenn die Verbindung wieder steht (habe aber einen komplett eigenen Rotuer und daher kein NAT im Spiel - daher ist Asterisk auch ganz einfach an ppp gekoppelt). Du kannst eh nicht (nach draußen) telefonieren ohne bestehende Internetverbindung. Falls das nicht sinnvoll ist für Dich, weil Du Asterisk auch für die interne Telefonie nutzt, musst Du die Netzwerkverbindung selbst überwachen (sollte ja recht einfach gehen) und bei einem Change schlicht und ergreifend ein unregister und register durchführen:

Code:
asterisk -x "pjsip send unregister *all"
sleep 5
asterisk -x "pjsip send register *all"

Dies wäre für mich die Herangehensweise. Dass Dir laufende Calls dabei abbrechen, sollte ja irrelevant sein, weil die auf Grund des Abbruchs der Internetverbindung eh schon abgebrochen sind.
Wobei nach einem Register-Timeout (der liegt bei 900s) der Drops auch ohne weiteres Zutun gelutscht sein sollte. Es würde also maximal 900s dauern - nicht betrachtet natürlich die grundsätzliche Ausfallzeit, die ja sowieso vorhanden ist und während der grundsätzlich nichts geht.
 
Zuletzt bearbeitet:

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