STUN/TURN-Server: Voraussetzungen und Inbetriebnahme
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 -
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 Ubuntu: https://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
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
Parameter | Benötigt | Standardwert | Beschreibung |
---|---|---|---|
LISTENING_IP_ADDRESS | nein | alle lokalen Netzwerkschnittstellen | Lokale IP-Netzwerkschnittstelle. Wenn nicht eingestellt, werden alle lokalen Netzwerkschnittstellen abgehört. |
EXTERNAL_IP_ADDDRESS | nein | automatisch 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_PORT | nein | 3478 | TCP-Port (für TURN) und UDP-Port (für STUN), auf die der STUN/TURN-Server hört |
TURN_USERNAME | nein | stunturn | Benutzername für die TURN-Authentifizierung |
TURN_PASSWORD | nein | zufälliges Passwort | Passwort für die TURN-Authentifizierung |
LOG_LEVEL | nein | normal | Erlaubte Werte: "normal", "moderate", "debug" |
Überprüfen des Zustands der Container
sudo docker container list
Überprüfen der Logs für die Konfiguration des UCServers
sudo docker logs stunturn
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
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/
Um ein bestimmtes Protokoll auszugeben (z. B. vom 26/04/2022):
sudo docker exec stunturn cat /var/tmp/stunturn_26_04_2022.log
Versions-Historie
Datum | estos stunturn tag | original docker image | coturn | latest |
---|---|---|---|---|
08.03.2022 | 4.5.2-r8 | 4.5.2-r8 | 4.5.2 | |
21.07.2022 | 4.5.2-r13 | 4.5.2-r13 | 4.5.2 |
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
CODEAktuell laufenden Container löschen
sudo docker container rm -f stunturn
CODELokales Image der alten Version löschen
sudo docker image rm estos/stunturn:latest
CODEAktuelles 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
CODEVersionsnummer überprüfen
sudo docker inspect stunturn | grep image.version
CODE
Weitere nützliche Docker-Befehle
Laufende Container darstellen
sudo docker container list
Container stunturn stoppen und dann löschen
sudo docker container stop stunturn
sudo docker rm stunturn
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:
- Wissenswertes zu STUN/TURN für die Nutzung von Audio/Video und Softphone bei ProCall Enterprise
- https://github.com/coturn/coturn