STUN: die eigene öffentliche Adresse herausfinden
Session Traversal Utilities for NAT (STUN), spezifiziert in RFC 8489, ist ein schlankes Anfrage-Antwort-Protokoll. Ein Gerät schickt eine Binding-Anfrage an einen STUN-Server, und die Antwort nennt die öffentliche Adresse und den Port, von denen die Anfrage kam, also die Server-Reflexive-Adresse des Geräts. STUN hilft zwei Geräten, eine direkte Verbindung zu versuchen, trägt die Sitzung selbst aber nie; ein STUN-Server braucht daher sehr wenig Bandbreite.
TURN: weiterleiten, wenn direkt scheitert
Traversal Using Relays around NAT (TURN), spezifiziert in RFC 8656 als Erweiterung von STUN, reserviert eine Adresse auf einem Relay-Server. Beide Seiten schicken ihren Verkehr an das Relay, das ihn weiterleitet. TURN funktioniert, wenn nichts anderes mehr geht, aber jedes Byte der Sitzung läuft über das Relay. Das kostet Latenz und den Betreiber Bandbreite.
ICE: zwischen beiden wählen
Interactive Connectivity Establishment (ICE), RFC 8445, verbindet beides. Jede Seite sammelt Kandidaten (lokale Adressen, Server-Reflexive-Adressen von STUN und Relay-Adressen von TURN), tauscht sie aus, prüft Paare und behält das beste funktionierende, wobei direkte Pfade Vorrang haben. Genau so nutzt WebRTC ICE, STUN und TURN.
Wie Vexaro Desk es macht
Vexaro Desk nutzt kein TURN. Lässt ein Netzwerk keine direkte Verbindung zu, läuft die Sitzung stattdessen über die eigenen Relays von Vexaro, und der Client verbindet sich nur mit einem Relay, dessen Echtheit er prüfen kann.
Direkte Sitzungen sind Ende-zu-Ende-verschlüsselt. Erzwingt ein Netzwerk eine Verbindung über ein Relay, bleibt der Datenverkehr auf dem Übertragungsweg über die von Vexaro betriebenen Relays verschlüsselt.