Asterisk 16 RTP NAT Problem

DG3AWM

Neuer User
Mitglied seit
30 Nov 2016
Beiträge
7
Punkte für Reaktionen
0
Punkte
1
Nach langjährigen Betrieb meines Asterisk 1.4 auf dem VServer ist mir dieser gecrasht. So musste ich auf Version 16 upgraden und somit meine Konfig anpassen. Seitdem kriege ich kein RTP Stream mehr zu den Telefonen hinter dem NAT mehr durch. Bei den NAT Einstellungen habe ich alles durchprobiert (force_rport ...).
Beim RTP Debug ist mir aufgefallen das der Server versucht die RTP Pakete an die interne IP zu senden.
(Strict RTP learning after remote address set to: 10.90.1.41:10000). Welche wichtigen Unterschiede gibt es bei der Konfig im Vergleich zu den alten Versionen?

[306]
qualify=yes
qualifyfreq=60
transport=udp
context = alf

nat=force_rport
;localnet =10.90.1.0/255.255.255.0
callerid=Buero
type=friend
username=200
secret=xxxx
host=dynamic

canreinvite=no
language=de
allow=g729
directmedia=no





Gruß Thomas
 
Gelöst . Das Problem lag in der rtp.conf . strictrtp=no muss hier gesetzt werden.
 
Ich bezweifele, dass das die richtige Lösung ist. Es löst zwar Dein Problem, ist aber eher ein Workaround. Wenn Du wie ich kein STUN oder ICE nutzt, dann reichte bei mir nat=force_rport,comedia und localnet=x.x.x.x/255.255.255.255.
  1. Befinden sich die Telefone im selben Netz wie der Asterisk?
  2. Ist in den Telefonen ein Domain-Name oder eine IP-Adresse eingetragen?
  3. Falls IP-Adresse: Ist es eine private IP-Adresse?
  4. Falls Du in einem anderen Netz bist: Hat das zufällig die gleiche IP-Struktur?
 
Mein Asterisk befindet sich auf einem VServer mit fester IP. Die Clients sind alle hinter einem NAT. Mit V1.4 war das alles kein Problem. Beim RTP Debug war mir aufgefallen das die RTP Packete immer an die Adresse im SIP Header versand wurden (priv. IP). Egal wie NAT konfiguriert war. Ich habe dann die RTP.conf geänder und alles war gut.
 
Bei einem Workaround hat man zwar das Problem gelöst, aber soviel anderes verstellt, dass man irgendwann wieder auf die Nase fällt oder sogar sich die Sicherheit ruiniert hat (zu dem Quell-Code mehr auf der Mailing-Liste asterisk-dev, der dann zum Issue-Ticket ASTERISK-18587 verlinkt, der dann zu einer Angriffsbeschreibung verlinkt).

Daher ist „Problem gelöst“ kein Argument. Du hast laut Deiner Schilderung ein Routing-Problem und kein Ankomm-Problem. Daher ist auch eine NAT erstmal nicht die Ursache. Die Ursache kann von einem Software-Bug über Konfigurationsfehler bis hin zu Archtektur-Problem (ist halt so) alles sein.
Mein Asterisk befindet sich auf einem VServer mit fester IP.
Was soll mir das sagen? Ich weiß immer noch nicht, ob das eine öffentliche oder eine private Adresse ist. Ich weiß nicht, ob Du selbst den VServer hostest oder irgendwo gemietet hast (Subnetz ungleich). Beantworte doch bitte meine vier Fragen.
 
Habe ein ähnliches Problem mit bluesip und Asterisk 16. Aber bei sipgate und freevoipdeal dagegen keine Probleme.

Telefoniere ich ausgehend auf eine 0800er (das Konto bei bluesip hat noch kein Guthaben), sieht es in sngrep so wie ein normaler Call aus. Im rtp debug sehe ich das vom VoIP Anbieter keine RTP Pakete ankommen (also "got rtp packet from" mit der entsprechenden IP fehlt.
Zusätzlich erscheint:
0x7fd004033b80 -- Strict RTP learning complete - Locking on source address 192.168.5.100:8000
Die .100 ist mein Telefon.


strictrtp=no (dann erscheint obige Meldung nicht) und alle möglichen NAT settings hatte ich auch probiert. Es ist normalerweise force_rport eingestellt, weil ich denke das es kein symmetric rtp ist. Es handelt sich um einen DS Lite Anschluss von O2 über LTE.
directmedia ist natürlich auch aus.

Der Anbieter meint er würde die ausgehenden Calls normal sehen und das RTP Pakete zurückgesendet würden. Er meint es würde an fehlerhaften Portforwardings liegen. Bei ausgehenden Calls müsste das aber doch egal sein.

Wenn ich versuche meine eigene Nummer von aussen anzurufen, kommt bei Asterisk dagegen gar nichts an bzw signalisiert.

Was ich eben nicht verstehe das die anderen Accounts alle funktionieren.
 
Der Anbieter meint …
Die Frage ist,
a) auf welchem Port schickt er die Datenpakete zu Dir? Und​
b) auf welchen Port schickst Du die Pakete zu ihm hin?​
Es kann passieren, dass die Firewall (bei O₂ Germany sitzt auch eine) die Pakete umsetzt. Anbieter wie Sipgate schicken immer an den Port von dem die Pakete kommen. Auf dieser Strecke ist die Firewall offen. Keine Ahnung wie blueSIP das macht – vielleicht halten die sich an SDP (dort steht die Port-Adresse für RTP im Header c=) bzw. SIP (dort steht die Port-Adresse im Header Contact). In so Fällen könnte IPv6 oder STUN weiterhelfen.

xrated, hast Du überhaupt dasselbe Probleme wie hier im Thread? DG3AWM hat vermutlich einen eigenen zentralen Asterisk (SIP-B2BUA) und seine VoIP-Telefone (SIP-User-Agent) verteilt in privaten Netzen. Bei Dir klingt es so, als wären B2BUA und die User-Agents im selben Netz. Auch dürftest Du zwei Firewalls haben, einmal bei O₂ Germany und einmal in Deinem LTE-Router. Welchen Router nutzt Du genau?
 
korrekte Annahmen, bei mir ist alles im LAN.
Es handelt sich um einen Vodafone B2000 Router (Huawei).
Dort steht u.a. in der Firewall:
SPI (Stateful Packet Inspection) ist aktiviert.
Eingehende (aus Internet, Intranet) Richtlinie: Verworfen.
Fernzugriff überschreibt die eingehende Richtlinie.
Ausgehende (von Intranet, Internet) Richtlinie: Akzeptiert.


Wo muss man denn bei Asterisk stun definieren? Ich verwende noch den alten chan_sip
 
Moinsen


sip.conf
( Hab stun.1und1.de eingetragen weil stun.counterpath.com/stun.ekiga.net heute nicht geantwortet hat, checkt also immer vorher, was ihr nutzen wollt )
Rich (BBCode):
[general]
stunaddr=stun.1und1.de                                                                                             
stunrefresh=300                                                                             
localnet=192.168.0.0/255.255.255.0 ; RFC 1918 addresses                                     
      localnet=10.0.0.0/255.0.0.0      ; Also RFC1918                                   
      localnet=172.16.0.0/12           ; Another RFC1918 with CIDR notation             
      localnet=169.254.0.0/255.255.0.0 ; Zero conf local network
Dann musst du dich noch entscheiden für externaddr= oder externhost=, je nachdem ob du eine feste IP oder dynamisches DNS nutzt.
Ob ein STUN noch in der rtp.conf vonöten ist, weiss ich aus dem Stegreif nicht.

Komplette Info mit: sip show settings
...unter: Network Settings:
 
xrated, kannst Du
  1. Deinen Anbieter nach den Ports fragen die bei einer konkreten abgehenden Telefon-Verbindung aufgemacht wurden? Dann kannst Du mittels Wireshark sehen, ob Deine RTP-Pakete auch bei genau diesem Port Dein Netz verließen.
  2. die Firewall in Deinem LTE-Router testweise so einstellen, dass auch ankommend alles zum Asterisk geleitet wird? Nicht dass diese Firewall irgendwie blockiert.
STUN im Asterisk … nicht einfach. stunaddr ist bereits mit Asterisk 1.8 rausgeflogen. Aktuell machst Du das über die Konfigurationsdatei rtp.conf. Aber nach meinen Tests funktioniert das zugehörige Modul hinten und vorne nicht, jedenfalls nicht so wie man das normal von einem STUN-Client gewohnt ist. Man müsste einen echten STUN-Client nehmen und dann mittels Skript die sip.conf ändern und neu laden lassen.
 
Bluesip war so nett und hat mir einen Screenshot von VoIPmonitor geschickt und dort steht als Caller: RTP Port 7086.
Bin mir nicht sicher was ich zu dem Zeitpunkt eingestellt hatte aber das könnte hinkommen wenn es 7078-7097 war. Aber wird da normalerweise nicht der erste Port also 7078 verwendet, wenn der Rest nicht benutzt wird?
Ausserdem, die RTP Pakete sind wohl bei bluesip angekommen aber nicht die zurück.
Bei CALLED (also die 0800 Nr) steht bei RTP gar kein Port.

SIP ALG habe ich am Router aus.

Wenn man mehrere SIP Anbieter gleichzeitig nutzt, geht das doch mit STUN nicht mehr oder?

An meinem Handy über Zoiper und Mobilfunk (auch o2, aber anderer Anbieter) kann ich mit Bluesip ganz normal telefonieren.
Funfact: Wenn ich das Konto direkt am Router hinterlege, dann funktioniert es auch. Aber nur ausgehend.

Besonderheit bei bluesip ist auch das man in asterisk bei registry den Pfad mit udp://bluesip/user@... angeben muss, weil die da unbedingt einen / reinmachen müssen.



IndexProtokollRemote-HostRemote-PortnummernbereichLokaler HostLokale PortnummerStatusEinstellungen
1UDP5060192.168.5.25060Aktiviert
2UDP7078 - 7097192.168.5.27078Aktiviert
 
Zuletzt bearbeitet:
Wenn man mehrere SIP Anbieter gleichzeitig nutzt, geht das doch mit STUN nicht mehr oder?
Warum nicht? Erstmal mit blueSIP probieren und dann sehen wir weiter.
Die RTP Pakete sind wohl bei bluesip angekommen aber nicht die zurück.
Das habe ich verstanden. Die Frage ist, an welchen Port die gesendet werden und welchen Port Du abgehend genutzt hast. Das siehst Du, wenn Du Wireshark auf der selben Maschine die Digium Asterisk laufen lässt (oder einen Switch mit Port-Mirroring zwischen Asterisk und Router setzt).
 
Ich dachte mir das stun die ganzen Einträge mit nat und externip bzw. externhost ersetzt und das dann nur noch mit einem ITSP klappt.
Hatte stun.bluesip.net mal zusätzlich in rtp.conf und res_stun_monitor.conf eingetragen aber kein Unterschied.

sngrep zeigt die rtp ports an
yealink 12082->7092 asterisk
asterisk 7086 -> 26908 bluesip

eingestellt war: yealink 11780-12780 und asterisk 7078-7097

Anbei der Screenshot von bluesip vor 2 Tagen und von sngrep
 

Anhänge

  • Screenshot_2021-02-23 VoIPmonitor.png
    Screenshot_2021-02-23 VoIPmonitor.png
    148.2 KB · Aufrufe: 5
  • sngrep.png
    sngrep.png
    56.2 KB · Aufrufe: 5
Wenn ich das Konto direkt am Router hinterlege, dann funktioniert es auch. Aber nur ausgehend.
In diesem Vodafone B2000? Wenn der VoIP selbst kann, viel Spaß. Kann glatt sein, dass der auch noch ein SIP-ALG hat. Du machst da wirklich Blindflug, weil Du nicht weißt, was alles auf dem Weg von Dir zum Anbieter (und umgekehrt) verwurschtelt wird.
Einträge mit nat und externip bzw. externhost ersetzt
Die bleiben aus Sicht aller VoIP/SIP-Anbieter gleich. Problematisch ist manchmal der Port – kann sein, dass ein NAT/Firewall auf dem Weg zwischen Dir und dem Anbieter den Port umsetzt. Du bräuchtest daher für eine konkrete Verbindung mit Gewissheit die Ports (lokal bei Dir und entfernt beim Anbieter).

Mal ganz anders herangegangen: Warum überhaupt den Digium Asterisk? Was passiert, wenn Du das Yealink direkt bei blueSIP anmeldest?
 
SIP ALG ist aus und Sipgate funktioniert dort ja auch.
Hab auch eben nochmal Sipcall getestet, da gingen zumindest ausgehende Gespräche.

Der * ist nicht ohne Grund da wegen zusätzlicher Features.
In anderen Endgeräten oder Softclients hat es auch nicht funktioniert.
Deren Stun Server scheint derzeit auch nicht zu funktionieren laut Zoiper.
 
Zuletzt bearbeitet:
Du kannst jeden STUN-Server nehmen, den Du willst. Sipgate ist keine Referenz, weil die alle IPs in SIP/SDP ignorieren, allein die Sende-IP nehmen und auch noch (aggressiv) von sich aus die Ports aufhalten.
 
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.