Blog

STUN- und TURN-Server: Was ein Videoanruf braucht, um sich zu verbinden

· Andrij Tkachenko · 5 Min. Lesezeit

Zwei App-Fenster in einem Videoanruf, deren direkter Weg an einer Firewall endet und die ein Relay-Turm darüber verbindet

Ein Videoanruf im Browser sieht aus, als müsste er einfach sein. WebRTC sendet Audio und Video direkt von einem Gerät zum anderen, ohne Server dazwischen. Dann testen Sie ihn außerhalb Ihres eigenen Netzwerks, und manche Anrufe klingeln, werden angenommen und bleiben stumm und schwarz. Meist ist der Code in Ordnung. Was fehlt, ist ein STUN-Server, ein TURN-Server oder beides.

Dieser Beitrag erklärt, was jeder der beiden tut, warum ein Anruf sie braucht, was der Betrieb eines eigenen TURN-Servers verlangt und was sich bei den Anrufen tun lässt, die selbst ein Relay nicht verbinden kann.

Warum sich zwei Geräte nicht einfach verbinden können

Fast kein Gerät im Internet hat eine eigene öffentliche Adresse. Ein Laptop zu Hause steht hinter einem Router, ein Smartphone hinter seinem Mobilfunkanbieter und ein Bürocomputer hinter einer Firewall. Jedes von ihnen kennt nur seine private Adresse, etwa 192.168.1.23, und die sagt der anderen Seite des Anrufs nichts.

Bevor ein Anruf beginnen kann, muss jedes Gerät herausfinden, wie das andere zu erreichen ist, und beide müssen diese Wege ausprobieren, bis einer funktioniert. WebRTC erledigt das mit ICE, das für jedes Gerät Kandidatenadressen sammelt und sie paarweise testet. Einige dieser Kandidaten kommen von STUN und TURN.

Was ein STUN-Server tut

Ein STUN-Server beantwortet eine Frage: „Wie lautet meine Adresse, so wie du sie siehst?“ Ein Gerät schickt ihm eine kleine Anfrage, und der Server antwortet mit der öffentlichen Adresse und dem Port, von denen die Anfrage kam. Das Gerät nimmt diese Adresse in seine Kandidaten auf, die andere Seite probiert sie aus, und in den meisten Heimnetzwerken verbindet sich der Anruf direkt.

STUN ist günstig. Ein STUN-Server sieht zu Beginn eines Anrufs ein paar kleine Pakete und danach nichts mehr. Deshalb kann ein STUN-Server sehr viele Anrufe bedienen, und es gibt öffentliche, die jeder nutzen kann. Gibt es einen direkten Weg, braucht ein Anruf nichts weiter als STUN.

Was ein TURN-Server tut

Manchmal gibt es keinen direkten Weg. Eine strenge Firewall lässt nichts herein, ein Mobilfunkanbieter gibt einem Smartphone für jedes neue Ziel einen anderen öffentlichen Port, oder ein Firmennetzwerk erlaubt nur Web-Traffic. Die Adresse, die STUN gemeldet hat, funktioniert für die andere Seite nicht, und der Anruf scheitert.

Ein TURN-Server ist ein Relay für diese Anrufe. Beide Geräte bauen eine ausgehende Verbindung zu ihm auf, und er reicht ihr Audio und Video zwischen ihnen weiter. Da die Geräte nur ausgehende Verbindungen aufbauen, die fast jedes Netzwerk erlaubt, kommt der Anruf dort durch, wo ein direkter nicht durchkommt.

Das Weiterleiten hat Kosten, die STUN nicht hat: Jede Sekunde Audio und Video läuft durch das Relay, in beide Richtungen, so lange der Anruf dauert. Ein Videoanruf zu zweit kann mehrere Megabit pro Sekunde hindurchschicken. Deshalb gibt es öffentliche STUN-Server, aber keine verlässlichen kostenlosen TURN-Server: Ein Relay, das jedem offensteht, trägt bald Traffic, den sein Betreiber nie tragen wollte, und wird abgeschaltet oder hinter Zugangsdaten gestellt.

Einen eigenen TURN-Server betreiben

Es gibt Open-Source-TURN-Server, und sie laufen gut. Viele Teams fangen damit an. Das braucht es dafür:

  • Einen Server mit öffentlicher Adresse und viel Bandbreite, nah bei Ihren Nutzern. Ein Relay auf einem anderen Kontinent bringt eine Verzögerung, die man hört.
  • Die richtigen Ports. Der übliche Port ist 3478 über UDP und TCP. Für Netzwerke, die nur Web-Traffic erlauben, muss das Relay auch auf Port 443 mit TLS antworten. Dafür braucht es ein Zertifikat für seinen Namen, das rechtzeitig erneuert wird.
  • Zugangsdaten, die ablaufen. Ein TURN-Server sollte nie einen festen Benutzernamen und ein festes Passwort annehmen, die in Ihrer Seite stehen, wo jeder sie kopieren kann. Üblich ist ein Secret, das Ihre App und das Relay teilen: Ihr Server erzeugt für jeden Anruf einen Benutzernamen und ein Passwort, die nach einer Weile nicht mehr funktionieren.
  • Mehr als einen, wenn Sie wachsen. Ein einziges Relay ist eine einzige Stelle, an der jeder Anruf scheitern kann. Nutzer in anderen Regionen wollen eines in ihrer Nähe, und jedes braucht Überwachung, Updates und Platz zum Wachsen.
  • Tests aus echten Netzwerken. Ein Relay, das aus Ihrem Büro funktioniert, kann von einem Smartphone im Mobilfunknetz oder einem Laptop im Wi-Fi eines Hotels aus scheitern. Testen Sie aus den Netzwerken, in denen Ihre Nutzer sind.

Nichts davon ist schwer, aber es ist ein Dienst, den Sie am Laufen halten müssen, solange Ihre App Anrufe hat.

Wenn selbst TURN einen Anruf nicht verbinden kann

Ein Relay löst das Problem für die meisten gescheiterten Anrufe, aber nicht für jeden. Manche Netzwerke blockieren das UDP, das das Relay bevorzugt, und manche stören lange Verbindungen sogar auf Port 443. Für diese Fälle kann ein Anruf einen Schritt weitergehen, in einen Raum auf einem Medienserver, wie Gruppenanrufe ihn nutzen. Die beiden Personen senden dann an den Medienserver und empfangen einander von dort. Dieser Weg hält auch in Netzwerken, in denen Peer-to-Peer-Medien jeder Art Probleme haben.

Ein Anruf, der erst nach dem Scheitern dorthin wechseln kann, würde vorher auflegen. Besser ist es, den Anruf weiterlaufen zu lassen, während er den Weg wechselt. So bemerken die Personen darin einen Moment lang ein eingefrorenes Bild, keinen abgebrochenen Anruf.

Wie WordPlus Cloud Anrufe verbindet

WordPlus Cloud betreibt alle drei Wege, sodass sich ein Anruf zwischen zwei Personen immer verbindet, egal in welchem Netzwerk:

  1. Direkt, zwischen den beiden Geräten, in den meisten Netzwerken. Der schnellste Weg.
  2. Über unsere Relays, wenn eine Firewall den direkten Weg blockiert. Sie antworten auf den Ports des Webs, 443 und 80, sowie auf 3478, sodass ein Anruf überall durchkommt, wo auch Websites durchkommen. Jede Person in jedem Anruf erhält eigene Relay-Zugangsdaten, die nach ein paar Stunden ablaufen, sodass niemand die Relays außerhalb Ihrer Anrufe nutzen kann.
  3. Über unsere Medienserver, wenn selbst die Relays den Anruf nicht tragen können. Er wechselt dorthin und geht weiter, ohne aufzulegen.

Anrufe sind auf jedem Weg Ende-zu-Ende-verschlüsselt, mit einem Schlüssel, den nur Ihr Server ausgibt. Die Relays und Medienserver übertragen also, was sie nicht lesen können. Anrufe zwischen zwei Personen sind in jedem Tarif enthalten, ob über ein Relay oder nicht. Ihr Server entscheidet weiterhin, wer wen anrufen darf, und die Cloud setzt es durch.

Das funktioniert genauso in Better Messages auf WordPress und in Ihren eigenen Apps auf Next.js, Laravel, Django und anderen Stacks, über unsere SDKs. Videoanrufe und Gruppenanrufe für Ihre App zeigt, was Ihnen die SDKs bieten, und unsere Dokumentation zeigt den Code dazu, wie Anrufe funktionieren.