STUN (Session Traversal Utilities for NAT) ist ein leichtgewichtiges Client-Server-Protokoll, mit dem ein Gerät hinter einem NAT-Router seine eigene öffentliche IP-Adresse und seinen öffentlichen Port ermitteln kann. Es ist die Grundlage für direkte Verbindungen bei WebRTC, VoIP und anderen Echtzeit-Anwendungen.

Wie STUN funktioniert

Der Client schickt einen Binding Request an einen STUN-Server im Internet. Der Server liest aus dem eingehenden Paket die Absenderadresse ab — das ist die öffentliche IP-Adresse und der Port, den der NAT-Router dem Client zugewiesen hat — und schickt sie als Binding Response zurück. Der Client kennt damit seine von außen sichtbare Adresse, ohne selbst in den Router schauen zu können.

STUN ist ausdrücklich keine vollständige NAT-Traversal-Lösung: Es bohrt keine Löcher in Firewalls und stellt keine Verbindung zum Partner her. Es liefert nur die Information, die andere Verfahren wie ICE oder SIP-Clients für den Verbindungsaufbau benötigen. Details sind in NAT und RFC 8489 definiert.

Technische Details

  • Standard-Port 3478 (UDP und TCP), 5349 für TLS-geschützte Verbindungen.
  • Nachrichten sind binär: 20-Byte-Header mit Magic Cookie 0x2112A442 und einer 96-Bit-Transaction-ID zur Zuordnung von Antworten.
  • Nachrichtentypen: Binding Request, Binding Response, Binding Error Response und Indications.
  • Fehlerklassen: 400er (Client-Fehler) und 500er (Server-Fehler).

Einsatz und Grenzen

In WebRTC wird der STUN-Server in der iceServers-Konfiguration angegeben, zum Beispiel stun:stun.l.google.com:19302. Dahinter steckt die Idee: Das Gerät schickt einen STUN-Request und erhält die öffentliche Adresse als sogenannten Server-Reflexiv-Kandidaten für ICE.

Die Grenze von STUN zeigt sich bei symmetrischem NAT: Dort vergibt der Router für jede Zieladresse ein neues Port-Mapping, die per STUN ermittelte Adresse gilt dann nur für den STUN-Server, nicht für den eigentlichen Gesprächspartner. In solchen Fällen hilft nur TURN mit seinem Relay. STUN läuft meist über UDP, weil es nur wenige kleine Pakete austauscht.

Verwandte Grundlagen: NAT, WebRTC, Firewall.