@imagomundi:
Für ein "funktionieren" von STUN (falls man das überhaupt so bezeichnen kann) spielen eine Menge Faktoren mit:
1. (der wichtigste) welchen Typ von NAT verwendet der eingesetzte Router? Billige Router haben meist nur das unsichere Full cone NAT oder Adress-restricted cone NAT. Da funktioniert STUN. Beim symmetric NAT oder Masquerading NAT versagt es.
Eine Übersicht der NAT Typen findet man z.B. hier:
http://www.jenkinssoftware.com/raknet/manual/nattypedetection.html
http://web.archive.org/web/20061029001038/www.suse.de/~mha/linux-ip-nat/diplom/node4.html
2. wo geht der Ruf hin? Die SIP-Provider setzen auf ihren PSTN-Gateways meist SBC oder andere Unterstüzung ein, die ein NAT beim Client erkennen und Gegenmassnahmen treffen können. Nicht umsonst rät Sipgate von der Verwendung von STUN ab. Grund: dann sendet der Client eine lokale IP die der SBC erkennt und ignoriert, stattdessen entnimmt er die IP einfach aus der Absenderadresse. Der RTP-Port kann dabei auch nicht vom STUN blockiert sein, sodaß das erste ausgehende UDP-Paket den gewünschten Port auf dem Router öffnet.
3. Wird ein Router mit integriertem ATA eingesetzt (z.B. Fritzbox)? Dann gibt es keine NAT Probleme, weil der ATA auf der WAN-Seite sitzt und mit der öffentlichen IP arbeiten kann.
4. Wann wird die STUN-Abfrage vom Client durchgeführt? Periodisch (z.B. einmal pro Stunde) oder direkt vor dem Call? Vergeht zwischen STUN-Abfrage und Call eine Zeit die länger ist als das UDP Timeout (oft 3 Minuten) dann ist der Port auf dem Router wieder frei und es klappt wie gewünscht. Das hat dann den Anschein als würde STUN helfen. Bei stündlichem STUN und 3 Minuten Timeout funktioniert es aber nur 57 Minuten in einer Stunde. Die restlichen 3 Minuten kommt es zu One-way-Audio. Man freut sich das auf den ersten Blick alles klappt, und wundert sich über gelegentliches One-way-Audio, welches man dann auf eine Fehlfunktion beim Provider schiebt. Je kürzer man das STUN-Intervall macht, umso häufiger kommt es zum Problem.
5. Für Linux gibt es diverse NAT-Helper-Module für Protokolle die eine zweite Verbindung benötigen (z.B. FTP). Hat der Router evtl. ein NAT-Helper-Modul für SIP drin?
Die SIP-Provider setzen auf ihren Gateways meist irgendeine Form von NAT-Unterstüzung ein, sodaß man hier nicht sagen kann ob das STUN wie gedacht funktioniert. Ob STUN funktioniert (oder auch nicht) sieht man am schnellsten bei direkten SIP-Calls ohne Provider-Beteilung (z.B. durch direkten Anruf einer Dyndns SIP-URI ohne Verwendung eines SIP-Proxy. Einfach einer Fritzbox eine Dyndns Adresse geben und versuchen die mit einem guten IP-Telefon welches keinen Proxy benötigt (z.B. Snom) anzurufen. Ich beschäftige mich schon seit 10 Jahren mit VoIP und habe die NAT-Probleme ausgiebig untersucht. Dabei bin ich zu dem Schluss gekommen dass STUN nichts taugt. Es gibt einen STUN Client in Python (hab die Adresse grad nicht parat, einfach mal danach googeln), mit dem lässt sich das sehr schön nachvollziehen.
Eine sehr gute Beschreibung (englisch) über die NAT-problematik findet man in diesem Dokument:
NAT Traversal in SIP
Für die Eiligen: Kapitel 4.3
The solution shown in Figure 5 (NAT probe or STUN server) will only work
for the first 3 types of NAT. The 4th case – symmetric NATs – will not allow
this scheme since they have different mappings depending on the target IP. So
the mapping that the NAT assigns between the client and the NAT probe is
different than that assigned between the client and the gateway.