TURN (Traversal Using Relays around NAT) ist ein Protokoll, mit dem zwei Geräte hinter strikten NAT-Routern oder Firewalls über einen zentralen Relay-Server kommunizieren können. Es ist der letzte Ausweg, wenn direkte Verbindungen über STUN scheitern — typisch bei WebRTC, VoIP und Online-Spielen.

Wie TURN funktioniert

Der Client schickt einen Allocate-Request an den TURN-Server und erhält dafür eine Relay-Adresse: eine öffentliche IP-Adresse und einen Port auf dem Server. Beide Kommunikationspartner senden ihre Datenpakete nun an diese Relay-Adresse, der Server leitet sie an den jeweils anderen weiter. Die Daten fließen also nicht direkt von Gerät zu Gerät, sondern immer über den Server.

TURN ist technisch eine Erweiterung von STUN (RFC 5766, aktualisiert durch RFC 8656) und ergänzt dessen Nachrichten um Allocate, Refresh, CreatePermission und ChannelBind.

Wann TURN nötig ist

  • Bei symmetrischem NAT: Der Router vergibt für jede Zieladresse ein eigenes Port-Mapping, wodurch Hole Punching unmöglich wird.
  • Bei Firewalls, die ausgehende UDP-Verbindungen blockieren oder stark einschränken.
  • In restriktiven Unternehmens- und Mobilfunknetzen mit Carrier-Grade-NAT.

Preis der Zuverlässigkeit

Die Relay-Verbindung kostet Latenz (jedes Paket macht einen Umweg), Bandbreite auf dem Server und damit Geld für den Betreiber. Deshalb priorisiert ICE direkte Wege und nutzt den TURN-Relay-Kandidaten nur, wenn alle anderen scheitern.

Öffentliche TURN-Server sind ein beliebtes Missbrauchsziel als kostenloses Relay — seriöse Dienste vergeben deshalb kurzlebige Zugangsdaten (temporäre Benutzername-Passwort-Paare über eine REST-API) statt fester Schlüssel. Verbreitete Implementierung ist der Open-Source-Server coturn, Standard-Port wie bei STUN ist 3478 (UDP/TCP) und 5349 für TLS.

Verwandte Grundlagen: NAT, WebRTC, Firewall.