RTP-Problem bei Anrufweiterleitung über SIP

ricardok

Neuer User
Mitglied seit
11 Jan 2008
Beiträge
40
Punkte für Reaktionen
0
Punkte
6
Hi,

ich habe ien Problem bei der Weiterletung von Anrufen an eine externe Rufnummer über eine SIP-Trunk. Ich vermute, dass es mit RTP zu tun hat.

Szenario A:

Anruf über SIP-Provider -> Asterisk -> Dial/SIP-Provider/externe Nummer -> SIP/trunk-PROVIDER answered + Native bridging -> externer Partner klingelt

aber:
* zu hören ist gar nichts, keine Sprache, nicht
* nicht einmal beim Anrufenden ist das Kligenln zu hören

Szenario B:
ich habe zufällig herausgefunden, dass wenn ich auf der Asterisk ein Playback mache, dann funktioniert alles, wie es soll

Anruf über SIP-Provider -> Asterisk -> Playback(invalid)-> Dial/SIP-Provider/externe Nummer -> SIP/trunk-PROVIDER answered + Native bridging -> externer Partner klingelt und es ist alles zu hören



Bereits getestet
* Dialplan mit Answer
* sip.conf / canreinvite(yes/no)
* directmedia / directrtpsetup / progressinband

Auf der Firewall kann ich die RTP-Pakete sehen. Sobald der Sip-Provider den Ruf übernimmt (Log: Native bridging), werden auch keine mehr gesendet.

Hat jemand eine Idee, woran es liegen könnte? Bin über jede Hilfe Dankbar!
 
Native bridging trotz directmedia=no? Wie sieht denn Aufbau und Config aus?
 
Hi,

damit wollte ich sagen, dass ich damit schon getestet habe. Ob Native bridging (canreinvite yes), oder paket2paket (canreinvite no) spielt keine Rolle, das Verhalten ist immer gleich.
Im dialplan mache ich einfach ein Dial auf die externe Nummer. Damit hatte ich bisher (ISDN/PMX) keinerlei Probleme.
Aktuell sieht so sip.conf so aus:

Code:
[general]
rtcachefriends=yes
srvlookup=yes
port = 5060
bindaddr = 0.0.0.0
language=de
disallow=all 
allow = alaw,ulaw,gsm
allowguest = yes
alwaysauthreject = yes
srvlookup = yes
localnet = xx.xx.xx.xx/255.255.255.0
externhost = xx.xx.xx.xx
externrefresh = 300
encryption = no
maxexpiry = 600
defaultexpiry = 480
sendrpid=pai
register_retry_403=yes
registerattempts=0
registertimeout=60

canreinvite = no

register => Nummer:[email protected]

context=sip-incoming

[trunk]
type = peer
host = xxx
outboundproxy = xxx
port = 5060
defaultuser=user
fromdomain = xxx
secret = xxx
dtmfmode = rfc2833
insecure = invite; port
registertimeout = 300
disallow = all
allow = alaw
allow = ulaw
nat = yes
insecure = port,invite
 
Zuletzt bearbeitet von einem Moderator:
warum wird 'nat = yes' gesetzt? Es soll doch anscheinend gerade *kein* Natting zum Einsatz kommen. Ansonsten macht weiter oben 'externhost = xx.xx.xx.xx' ja keinen SInn.
 
das stammt wahrscheinlich aus verschiedenen Versuchen. Der externhost wird aber genommen. Ich habe es raus genommen, das Problem besteht weiterhin.
 
Ob Native bridging (canreinvite yes), oder paket2paket (canreinvite no) spielt keine Rolle

Seit 1.8 gibt es canreinvite nicht mehr. Wurde ersetzt durch directmedia und directrtpsetup, das hast Du in Deiner Config nicht gesetzt.

nat=yes ist übrigens ebenfalls veraltet, auto_force_rport,auto_comedia ist die neue (mehr oder weniger) Entsprechung.

Wenn alles nichts hilft setz mal testweise ein Answer() vor dem Dial und bau im Dial das Flag t ein, damit sollte Asterisk im Audiopfad bleiben.
 
ich bin etwas am verzeifeln, weil es nicht geht. Ich habe jetzt den Dialplan angepasst:
Code:
[sip-incoming]
exten => s,1,NoOp(einkommend fuer ${EXTEN} von ${CALLERID(num)}) 
same => n,Answer()
same  => n,Set(CALLERID(num)=NummerDesTrunks)
same  => n,Dial(SIP/MeineMobileNummer@trunk,,t)
same => n,Hangup
Komischerweise muss ich die Nummer des Trunks angeben, da ich sonst ein "Forbidden" vom Sip-Provider bekomme. Das sollte aber auch keine Rolle spielen, da der Ruf ja zu stande kommt, nur die RTP-Pakete sich irgendwie verlaufen. Wie macht ihr den eine Rufweiterleitung? Gibt es eine andere Möglichkeit, die ich gerade irgendwie nicht sehe?
Der Einbau eines playback, finde ich, ist keine gute Problemlösung.
 
Benutze für Code oder Logs bitte [noparse]
Code:
...
[/noparse] Blöcke, das verbessert die Lesbarkeit.

Hast Du so jetzt Ton?

Lass zum Testen das Answer und das t noch mal raus, setze directmedia=no und directrtpsetup=no im sip.conf [general]. Dann schaltest Du mit sip set debug on das Debug ein und rufst Dich an. Da kommt ein ganzer Haufen Text, interessant sind die INVITE und OK Pakete, dort kann man die RTP Aushandlung sehen.

Wenn der Provider das unterstützt kannst Du den Anrufe mit Transfer() auf Dein Handy umleiten.
 
Ich habe alles versucht, kein Ton.
Sip debug hab ich eingeschaltet, ich sehe alles mögliche. Gibt aber keinen Fehler oder ähnliches, sieht alles normal aus.

- - - Aktualisiert - - -

Ich habe mal auf der Firewall geschaut, was passiert:
Code:
tcpdump -i any udp portrange 30000-38500 -n
habe ich das PlayBack nicht drin, kommt kein RTP Paket an. Mache ich ein playBack dann seh ich die RTP Pakete, und sobald der DIAL zur Weiterleitungsnummer durch ist, kommen keine Pakete mehr an. So wie es meiner Meinung nach sein müsste.
 
Fehler in dem Sinn wird es im SIP Debug nicht geben, aber man könnte die RTP Aushandlung sehen, wer wen zu welcher Adresse schickt.

Es soll eben nicht so sein, sondern das RTP soll auch nach dem Dial weiterhin über Asterisk laufen. Das ist für mich ein klares Zeichen, dass hier ein Re-Invite erfolgt in dem ein native bridging ausgelöst wird. Das funktioniert erwartungsgemäß aber nicht.

Mit sip show settings kannst Du überprüfen, ob Asterisk das directmedia=no und directrtpsetup=no auch wirklich gefressen hat.
 
Er scheint es zu übernehmen:
Code:
sip show settings
...
Direct RTP setup:       No
...
Ich werde jetzt erstmal mit
Code:
same => n,Playback(silence/1)
arbeiten. Es ist zwar keine schöne Lösung, aber ich komme sonst nicht weiter. Ich danke dir für deine Hilfe. Wenn du noch eine Idee hast, kannst du ja nochmal antworten.
 
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.