Kenntnisstand

Juli 2022

Einleitung

Direkte Audio/Video-Kommunikation ist ein wichtiger Bestandteil moderner Zusammenarbeit geworden.

Um dies technisch effizient umsetzen zu können und gleichzeitig dabei interne Netzwerke sicher zu halten, müssen Rahmenbedingungen eingehalten werden, die es auf den ersten Blick schwierig machen, eine direkte Kommunikation über Netzwerkgrenzen hinaus zu etablieren.

In privaten IPv4 Netzwerken wird zur Erhöhung der Sicherheit oft ein NAT-Router eingesetzt, der es einem externen Computer erschwert bzw. unmöglich macht, einen internen Client ohne Aufforderung zu kontaktieren.

Leider werden hierdurch auch die für die effiziente Audio/Video-Kommunikation notwendigen Verbindungen gesperrt.

Um diese und ähnliche, eigentlich gewünschten Verbindungen dennoch herstellen zu können, wurden Techniken entwickelt, die es ohne Verminderung der Sicherheit erlauben, Audio/Video-Kommunikation zu betreiben. Zu diesen Techniken gehören STUN und TURN.

In dieser Dokumentation wird beschrieben, wie Sie einen STUN (RFC5398)/TURN (RFC5766)-Server im Internet in Betrieb nehmen können, der interoperabel mit den estos Produkten ist.

Als Grundlage hierfür dient der bekannte TURN-Server "coTurn"https://github.com/coturn/coturn

Wir haben hier für eine möglichst einfache Inbetriebnahme die Voraussetzungen  und die Möglichkeiten zur Überprüfung zusammen gestellt. 

Die hier beschriebene Vorgehensweise setzt detaillierte IT-Fachkenntnis in Konfiguration und Administration voraus.

Video-Tutorial 

Webinar-Aufzeichnung der estos Tech Essentials LIVE von Mai 2022

In der Aufzeichnung aus unserer Webinar-Reihe "Tech Essentials LIVE" vom 17. Mai 2022 erhalten Sie einen Überblick über die Neuheiten in Service Release 4 von ProCall 7 Enterprise.
Außerdem stellen estos Experten hier die Voraussetzungen und Inbetriebnahme für die Einrichtung von STUN/TUN mit der neuen Alternative coTurn vor.

  • Sprache: deutsch
  • Dauer: ca. 52 Minuten

Voraussetzungen

Die Voraussetzungen orientieren sich an einer möglichst einfachen Inbetriebnahme und Wartung. Sie können auch mit anderen Voraussetzungen diesen STUN/TURN-Server in Betrieb nehmen.

Rechner

  • Linux-Rechner mit installiertem Docker direkt gehostet im Internet (nicht im LAN/DMZ des Unternehmens)

    • min. 2 vCPU, 4GB RAM and 20GB Disk

    • öffentliche IP-Adresse, die direkt der Maschine zugeordnet ist oder einer 1:1 NAT mit öffentlicher IP-Adresse

Ports

  • in der Firewall/NAT veröffentlichte oder auf die Maschine weitergeleitete Ports

    • 3478/TCP (kann je nach Einstellung bei der Installation variieren)

    • 3478/UDP (kann je nach Einstellung bei der Installation variieren)

    • 49152-65535/UDP 

    • hinter einer NAT: 1:1 portmapping

      • Für diese "externe" IP muss die NAT die Ports direkt weiterleiten (der weitergeleitete Port 54321 muss immer auf denselben "externen" Port 54321 abgebildet werden)

Netzwerkleistung

  • Stellen Sie sicher, dass das Netzwerk der gehosteten Maschine folgendes bietet:

    • hohe PPS (Paket-per-Sekunde-Leistung)

    • geringer Netzwerk-Jitter (<= 30ms)

    • niedrige Latenzzeiten (<= 150ms)

Bandbreite

  • Bandbreite: weitere Netzwerkanforderungen 

    • für Audio-Gespräche (AudioChat oder Softphone-Gespräche) über den TURN-Server:

      • Opus Codec, „Fullband Speech“ bei (Nutz-) Bitraten zwischen 28 – 40 Kbit/s, pTime 20ms

      • insgesamt typische 45 Kbit/s pro Richtung, gesamt 90 Kbit/s

    • für Video-Gespräche über den TURN-Server

      • Video Codec VP8 mit 640x480, 30 f/s, Audio Codec Opus, 50 f/s.

      • 300kbit/s bis 2,3 MBit/s pro Richtung

      • insgesamt 600 Kbit/s bis 4,6 MBit/s max.

        Bandbreite

        Bei der Berechnung der benötigten Bandbreite müssen nur Gespräche berücksichtigt werden, die auch wirklich über den TURN-Server weitergeleitet werden.

Beispiele für bekannte Hosting Angebote

Bei der Auswahl des Service Providers für das Hosting der Linux-Maschine sollten die oben genannten Voraussetzungen beachtet werden. Da vor allem die Netzwerkleitung einen entscheidenden Einfluss auf das Verhalten der TURN-Komponente in Bezug auf das Weiterleiten (Relay) der Medienströme hat, sollte hier untersucht werden, ob der Anbieter spezielle Merkmale dazu aufweist. Des Weiteren sollten Sie auch auf die Kosten achten, die durch den Verbrauch von Bandbreite entstehen. estos kann hierzu keine Empfehlungen aussprechen, weil zu viele individuelle Faktoren bei der Auswahl eine Rolle spielen. im Folgenden finden Sie Hinweise, die aber auch auf andere Anbieter zutreffen.

AWS Amazon Web Services

Wird der TURN-Server in AWS-Instanzen betrieben, kann man für eine verbesserte Netzwerkleistung "Enhanced Networking" verwenden. Dies ist aber nur verfügbar, wenn die Instanz mit HVM-AMI gestartet wurde. 
Verwenden Sie vorzugsweise C3/C4/R3-Instanzen. Details zu den AWS EC2-Instanztypen finden Sie hier.

Microsoft Azure

Um eine verbesserte Netzwerkleitung bei Microsoft Azure Umgebungen zu bekommen, kann das Feature "Accelerated Networking" verwendet werden. Beachten Sie dazu die Hinweise in der Dokumentation: https://docs.microsoft.com/en-us/azure/virtual-network/create-vm-accelerated-networking-powershell

Bei der Auswahl des Anbieters sollten Sie auf ähnliche Stichwörter achten.

Inbetriebnahme

Als Grundlage steht ein Linux-Rechner zur Verfügung, der direkt im Internet verfügbar (öffentliche IP-Adresse) und auf dem Docker installiert ist.

Bitte setzen Sie sich im Vorfeld mit den gängigen Befehlen Ihrer Linux-Distribution und der Docker-Installation auseinander. Eine Übersicht zu Docker finden Sie hier: https://docs.docker.com/engine/install/

Schnellstart Docker-Installation

curl -sSL https://get.docker.com | sudo bash -
BASH

Privilegien

Im Normalfall müssen Docker-Befehle immer mit "root" oder "sudo" Privilegien ausgeführt werden. Für Details beachten Sie die Anleitung zur Docker-Installation passend zu Ihrer Linux-Distribution.

Zum Beispiel für Ubuntuhttps://docs.docker.com/engine/install/ubuntu/
"You need to use sudo to run Docker commands"

coTurn mit einem Docker-Image von estos (Schnellstart ohne Optionen)

Verwenden Sie diesen Befehl, um mit den Standardwerten zu arbeiten (siehe Tabelle unten):

sudo docker run -d --name stunturn --network host --restart always estos/stunturn
BASH

optional: coTurn mit einem Docker-Image von estos (mit allen Optionen)

Falls Sie nicht die Standardwerte verwenden wollen, passen Sie den folgenden Befehl auf Ihre Bedürfnisse an:

sudo docker run -d --name stunturn --network host --restart always \
-e EXTERNAL_IP_ADDRESS=YourExternalIPAddress \
-e LISTENING_IP_ADDRESS=YourLocalIPAddress \
-e TURN_PORT=3478 \
-e TURN_USERNAME=YourTurnUsername \
-e TURN_PASSWORD=YourTurnPassword \
-e LOG_LEVEL=moderate \
estos/stunturn
BASH
ParameterBenötigtStandardwertBeschreibung
LISTENING_IP_ADDRESSneinalle lokalen NetzwerkschnittstellenLokale IP-Netzwerkschnittstelle. Wenn nicht eingestellt, werden alle lokalen Netzwerkschnittstellen abgehört.
EXTERNAL_IP_ADDDRESSneinautomatisch erkanntÖffentliche IP-Adresse, die STUN/TURN als Relay-Adresse verwenden wird.
Nützlich in Szenarien mit NAT. Wird automatisch erkannt, wenn nicht gesetzt.
TURN_PORTnein3478TCP-Port (für TURN) und UDP-Port (für STUN), auf die der STUN/TURN-Server hört
TURN_USERNAMEneinstunturnBenutzername für die TURN-Authentifizierung
TURN_PASSWORDneinzufälliges PasswortPasswort für die TURN-Authentifizierung
LOG_LEVELneinnormalErlaubte Werte: "normal", "moderate", "debug"

Überprüfen des Zustands der Container

sudo docker container list
CODE

Überprüfen der Logs für die Konfiguration des UCServers

sudo docker logs stunturn
CODE

Ergebnis

No TURN_PORT env variable set. Default 3478 UDP and TCP will be used
No TURN_USERNAME env variable set, user will be set to 'stunturn' and password will be randomly generated
Created TURN user 'stunturn' with password 'RLYmta9lTFQM0ClqECWq'. Please use said credentials into your estos application
Executing TURN service... 
Your STUN and TURN server is now running
Please configure your estos UCServer own STUN and TURN servers according to the following template: 
STUN Server --> stun:1.123.456.254:3478
TURN Server --> turn:1.123.456.254:3478
TURN username: stunturn
TURN password: RLYmta9lTFQM0ClqECWq
CODE

Konfiguration in der UCServer Verwaltung

STUN/TURN - eigene Server verwenden - Server konfigurieren

In der UCServer Verwaltung konfigurieren Sie den erstellten STUN/TURN-Server im Punkt "STUN/TURN" → "Eigene Server verwenden" → "Server konfigurieren..."

Im Punkt "Überprüfen der Logs" wurde nach dem Starten des Docker-Containers eine Log-Ausgabe angezeigt. Diese enthält auch die zur Konfiguration notwendigen Daten:

Beispiel Screenshot: UCServer Verwaltung - Eigene Server konfigurieren - URI für STUN/TURN angeben

Bestätigen Sie die Daten mit OK und Übernehmen.

Diagnose/Test 

Führen Sie dann einen Test über die Schaltfläche "Diagnose ausführen" aus.

Test OK

Sind beide Tests mit "OK" erfolgreich, kann der UCServer den STUN/TURN-Server verwenden.

Beachten Sie, dass dieser Test aus der "Sicht" des UCServer und damit auch aus der "Sicht" des mit diesem lokal ausgelieferten Kurento Media Servers durchgeführt wurde.
Falls Sie weitere Clients verwenden, wie z. B. eine Mobile App im LTE Netz oder einen ProCall Client für Windows im Homeoffice, dann bedeutet ein erfolgreicher Test am UCServer nicht, dass der ProCall Client im Homeoffice auch erfolgreich getestet wurde. Hier sollte lokal ein Test durchgeführt werden, wie z. B. mit https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

Test fehlgeschlagen

Ist der ausgeführte Test in der UCServer Verwaltung fehlgeschlagen, dann können Sie sich über die Schaltfläche "Logdatei öffnen" Details zum Test und zum Ergebnis anschauen.

Diese geben Hinweise darauf, wo der Fehler zu suchen ist.

Überprüfung möglicher Fehlerquellen
  • Authentifizierung → Überprüfen des erstellten Benutzernamens und Passworts
  • Timeout → Überprüfen der gesamten Netzwerkstrecke zwischen UCServer und dem im Docker-Container laufenden coTurn Server.
    Kann der UCServer überhaupt die Linux-Maschine im Internet erreichen?
    Sind die benötigen Ports ausgehend vom UCServer aus freigeben und eingehend zur Linux Maschine freigegeben und/oder weitergeleitet usw.
  • Topologiefehler → Befindet sich die Linux-Maschine wirklich im Internet und nicht im LAN der UCServer Installation?
    Ist eine falsche öffentliche IP-Adresse eingerichtet?

Logs zur Diagnose des STUN/TURN-Servers

Protokolle

Die Protokolle werden in einer lokalen Datei innerhalb des Containers im folgenden Namensformat gespeichert: /var/tmp/stunturn_DD_MM_YYYY.log

Um alle Protokolle aufzulisten, führen Sie aus:

sudo docker exec stunturn ls /var/tmp/
CODE

Um ein bestimmtes Protokoll auszugeben (z. B. vom 26/04/2022):

sudo docker exec stunturn cat /var/tmp/stunturn_26_04_2022.log
CODE

Versions-Historie

Datumestos stunturn tagoriginal docker imagecoturnlatest
08.03.20224.5.2-r84.5.2-r84.5.2
21.07.20224.5.2-r134.5.2-r134.5.2(tick)

Update auf aktuelle Version

Ein direktes Update ist nicht möglich. Sie müssen den laufenden Container und das lokale Image löschen und dann mit dem neuen Image wieder in Betrieb nehmen. Wenn Sie individuelle Paramater zum Starten des Containers verwendet haben, müssen Sie diese wieder verwenden.

Folgende Schritte müssen ausgeführt werden, um die aktuelle Version zu installieren:

  • Überprüfen der aktuell installierten Version, ob ein Update überhaupt verfügbar ist

    sudo docker inspect stunturn | grep image.version
    CODE
  • Aktuell laufenden Container löschen

    sudo docker container rm -f stunturn
    CODE
  • Lokales Image der alten Version löschen

    sudo docker image rm estos/stunturn:latest
    CODE
  • Aktuelles Image herunterladen und als Container laufen lassen (beachten Sie oben unter "Inbetriebnahme" individuelle Einstellungen)

    sudo docker run -d --name stunturn --network host --restart always estos/stunturn
    CODE
  • Versionsnummer überprüfen

    sudo docker inspect stunturn | grep image.version
    CODE

Weitere nützliche Docker-Befehle

Laufende Container darstellen

sudo docker container list
CODE

Container stunturn stoppen und dann löschen

sudo docker container stop stunturn
sudo docker rm stunturn
CODE

Weiterführende Informationen zur Funktionsweise ICE, STUN, TURN

Wenn Sie sich für weitere Informationen bzgl. STUN/TURN interessieren oder auch mehr Details über weiteren Funktionsumfang von coTurn suchen, dann finden Sie hier Anhaltspunkte: