Nachdem ich auf das Problem von Nobody im Draytek-Forum gestoßen bin und mir exemplarisch 2 Invite-Messages ansehen konnte, die Nobody mit Wireshark eingefangen hat, hier vielleicht mal eine Zusammenfassung des Problems, wie es sich für mich derzeit darstellt.
Vorab. Es ist wie fast immer bei SIP/RTP, dass man wegen der Vielschichtigkeit der Thematik, nicht einfach eine Lösung oder einen Verantwortlichen für das Problem findet.
Ausgangslage:
Am Telekom-VDSL-Anschluss sind Draytek Modem und Draytek Router angeschlossen. Im LAN hinter dem Router arbeitet eine Software-TA von 3CX als SIP user agent mit SIP-Account der Telekom.
Problem:
Einige Anrufer können diesen SIP-Account nicht anrufen (niemals und reproduzierbar). Bei einem Anrufversuch tut sich lange nichts, dann erhält der Anrufer die Ansage: Bitte rufen Sie den Teilnehmer zu einem späteren .... Eine Umleitung des Anrufers auf die Sprachbox der Telekom, wie sie bei nicht registriertem SIP-Client normalerweise gemacht wird, erfolgt nicht.
Analyse:
Versucht einer der bekannten Problemanrufer einen Anruf, dann kommt am WAN-Interface des Draytek-Routers eine UDP-SIP-Invite-Message an, die größer ist als die MTU der PPPOE Verbindung (1492 Byte?). D.h. es kommen zwei IP-Pakete mit UDP-Fragmentierungskennung.
Die beiden IP-Pakete mit UDP-Fragmentierungskennung werden vom Draytek Router verworfen.
Eine der langen Invite-Messages, die mit Wireshark eingefangen wurden, die ich gesehen habe, stammte von einem Speedport W 724V mit t-online SIP-Account. Das was die Message (unnötig?) lang machte, stammte offensichtlich alles vom Speedport. z.B. ca. 350 Byte SDP-Content-Length mit ewig vielen Optionen, umfassende und längliche USER-AGENT Angabe mit Firmwareversion des Speedports, ein doppeltes P-Asserted-Identity Header Feld, Header-Bezeichner in Langform.
Hier ist das Problem ganz gut beschrieben
http://thomas.gelf.net/blog/archives/Smaller-SIP-packets-to-avoid-fragmentation,27.html
Bewertungsversuche:
* Warum verwirft der Draytek-Router fragmentierten UDP-Traffic?
Der Router scheint Regeln ab Level4 aufwärts anwenden zu wollen. Dazu müsste er fragmentierten UDP-Traffic zusammensetzen.
Da es aus Sicht der Routerprogrammierer keinen sinnvollen Anwendungsfall für fragmentierten UDP-Traffic gibt und das Zusammensetzen von IP-Paketen zu einem vollständigen UDP-Datagramm keine naheliegende Aufgabe für einen Router ist, werden IP-Pakete, die Fragmente eines UDP-Datagramms sind, verworfen.
Diese Erklärungen hier erschienen mir plausibel für das Verhalten
http://www.cisco.com/c/en/us/suppor...ncapsulation-gre/25885-pmtud-ipfrag.html#anc2
Prinzipiell machen so etwas wohl überhaupt erst Router ab einer bestimmten Leistungsklasse. Draytek scheint da auch nicht ganz allein zu sein wenn man sich das hier anschaut
https://support.software.dell.com/kb/sw10958
* Warum schickt der SIP-Server der Telekom große Invite-Messages als fragmentierten UDP-Traffic?
UDP ist wegen der deutlich geringeren Serverlast die bevorzugte Übertragungsvariante für SIP-Provider.
RFC3261 sagt zwar "MUST" zu TCP wenn sich die SIP-Messagegröße bis auf 200Byte an die MTU angenähert hat, es sagt aber auch "MUST" zur Unterstützung von UDP-Datagrammen bis zur theoretischen Größe von ca. 64 KByte für SIP-Clients.
Da das Problem mit fragmentiertem UDP-Traffic aber an Routern auftritt, liefert der SIP-RFC wahrscheinlich nicht die richtige Begründung, in wie weit Router mit fragmentiertem UDP-Traffic rechnen müssen. In so fern liefert RFC3261 mit dem Hinweis auf TCP nur einen Anhaltspunkt, dass fragmentierter UDP-Traffic bei SIP nicht sein soll.
Bisherige Lösungsversuche seitens nobody:
* einen "accept fragmented UDP-Traffic" Schalter gibt es im Draytek Router nicht
* RFC3261 liefert den Hinweis auf TCP.
Manche SIP-Clients kann man dazu zwingen, bei der Registrierung TCP zu verwenden. Vermutung: Wenn sich der SIP-Client per TCP registriert, dann verwendet der SIP-Server auch TCP für die Rufsignalisierung. Das funktioniert bei den Telekom SIP-Servern auch tatsächlich so. Problem: Nur die wenigsten SIP-Clients lassen sich explizit zu TCP für die Registrierung zwingen.
* Umleitung des Telekom-SIP-Accounts im Kundencenter auf einen DUS.net-SIP-Account.
Die Problemanrufer kommen jetzt durch. Aber auch der DUS SIP-Server macht die Signalisierung nicht per TCP.
Vermutung1:
Falls die Telekom die Anrufe in Folge der Umleitung über PSTN an DUS vermittelt, entfernt wahrscheinlich das SIP-PSTN Gateway der Telekom die lange Invite-Message des Speedports. Die kurze Invite-Message, die bei Nobody per UDP ankommt, hat wahrscheinlich das PSTN-SIP-Gateway von DUS erzeugt.
Vermutung2:
DUS entfernt überflüssigen Ballast aus den SIP-Messages und hält die Messages dadurch unter der Grenze von 1292 Byte bis zu der SIP per UDP ohne Fragmentierung funktioniert. (Verkürzungsvorschläge siehe z.B. hier, Abschnitt "let's brake the rules"
http://thomas.gelf.net/blog/archives/Smaller-SIP-packets-to-avoid-fragmentation,27.html )
Einen Wireshark Mitschnitt der Invite Message von DUS, wenn der selbe Speedport W 724V anruft, will nobody noch machen.