|
|
(56 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
| Ein '''TURN-Server''' ist ein VoIP-Medienverkehr-NAT-Traversal-Server und -Gateway
| | [[Kategorie:Netzwerk/Dienst]] |
| | |
| Ein '''TURN-Server''' ist ein NAT-Traversal-Server und -Gateway für den VoIP-Medienverkehr.
| |
| | |
| == Beschreibung ==
| |
| * Er kann auch als allgemeiner TURN-Server und -Gateway für den Netzwerkverkehr verwendet werden.
| |
| * Free open source implementation of TURN and STUN Server
| |
| * Das Projekt entwickelte sich aus dem rfc5766-turn-server Projekt (<nowiki>https://code.google.com/p/rfc5766-turn-server/</nowiki>).
| |
| * Es gibt viele neue erweiterte TURN-Spezifikationen, die weit über das ursprüngliche <nowiki>RFC 5766</nowiki>-Dokument hinausgehen.
| |
| * Dieses Projekt nimmt den Code von rfc5766-turn-server als Ausgangspunkt und fügt ihm neue erweiterte Funktionen hinzu.
| |
| * Eine Online-Verwaltungsschnittstelle (über Telnet oder über HTTPS) für den TURN-Server ist verfügbar.
| |
| * Enthält auch einige zusätzliche experimentelle Funktionen.
| |
| | |
| Die Implementierung soll einfach, leicht zu installieren und konfigurieren sein.
| |
| * Der Schwerpunkt des Projekts liegt auf Leistung, Skalierbarkeit und Einfachheit.
| |
| * Ziel ist es, eine unternehmenstaugliche TURN-Lösung bereitzustellen.
| |
| | |
| === Unterstützte Betriebssysteme ===
| |
| * Linux (Debian, Ubuntu, Mint, CentOS, Fedora, Redhat, Amazon Linux, Arch Linux, OpenSUSE)
| |
| * BSD (FreeBSD, NetBSD, OpenBSD, DragonFlyBSD)
| |
| * Solaris 11
| |
| * Mac OS X
| |
| * Cygwin (for non-production R&D purposes)
| |
| * Dieses Projekt kann auch auf anderen *NIX-Plattformen erfolgreich eingesetzt werden, aber das wird nicht offiziell unterstützt
| |
| * Andere Serverplattformen können auf Anfrage unterstützt werden
| |
| | |
| ; Client-Plattform
| |
| Jede Client-Plattform wird unterstützt, einschließlich
| |
| *Android
| |
| *iOS
| |
| *Linux
| |
| *OS X
| |
| *Windows
| |
| *Windows Phone
| |
| | |
| === Projekte, die TURN/STUN verwenden ===
| |
| * Nextcloud-Talk
| |
| * Jitsi-Meeting
| |
| * Matrix-Server
| |
| * Ejabberd
| |
| | |
| Wenn Sie eine dieser Anwendungen selbst hosten, können Sie dort Ihren eigenen TURN/STUN-Server verwenden.
| |
| | |
| === Voraussetzungen ===
| |
| * Mindestens ein kleiner virtueller Server, zB Cloud Server CX11 , mit einer Root-Shell
| |
| | |
| === Annahmen ===
| |
| * Domain: example.com
| |
| * Server-IPv4: 10.0.0.1
| |
| * Server-IPv6: 2001:db8:1234::1
| |
| * Öffentliche Client-IPv4: 78.47.166.55
| |
| * Private Client-IPv4: 192.168.0.10
| |
| | |
| == Installation ==
| |
| # apt install coturn
| |
| | |
| '''Hinweis'''
| |
| coturn startet nicht automatisch, bis eine Konfiguration angewendet wird (siehe unten).
| |
| | |
| Um den TURN-Server zu aktivieren, öffnen Sie die Datei
| |
| | |
| <tt>/etc/default/coturn</tt>
| |
| # Uncomment it if you want to have the turnserver running as
| |
| # an automatic system service daemon
| |
| #
| |
| TURNSERVER_ENABLED=1
| |
| | |
| == Konfiguration ==
| |
| | |
| ; Konfigurationsdatei
| |
| <tt>/etc/turnserver.conf</tt>
| |
| * Es stehen viele Optionen zur Verfügung, die alle in Kommentaren in der Standardkonfigurationsdatei dokumentiert sind.
| |
| * Im Folgenden finden Sie eine Beispielkonfiguration mit den empfohlenen Einstellungen (weitere Informationen zu den Einstellungen finden Sie in der Standardkonfigurationsdatei).
| |
| | |
| Verwenden Sie die folgende Datei für <tt>/etc/turnserver.conf</tt> und nehmen Sie folgende Änderungen vor:
| |
| * Ersetzen '''<tt><turn.example.com></tt>''' mit dem Hostnamen Ihres TURN-Servers und
| |
| * Ersetzen '''<tt><example.com></tt>''' mit dem Bereich Ihres TURN-Servers und
| |
| * Ersetzen '''<tt><secret_value></tt>''' auf einen zufälligen Wert für ein gemeinsames Geheimnis
| |
| ** Sie können einen durch Ausführen generieren <tt>openssl rand -hex 16</tt>
| |
| * Ersetzen '''<tt><IP></tt>''' mit der externen IP Ihres TURN-Servers
| |
| | |
| Diese Konfigurationsdatei setzt voraus, dass sich Ihr TURN-Server nicht hinter NAT befindet und eine öffentliche IP-Adresse hat.
| |
| listening-port=3478
| |
| tls-listening-port=443
| |
|
| |
| listening-ip=$IP
| |
| relay-ip=$IP
| |
|
| |
| # If the server is behind NAT, you need to specify the external IP address.
| |
| # If there is only one external address, specify it like this:
| |
| #external-ip=172.17.19.120
| |
| # If you have multiple external addresses, you have to specify which
| |
| # internal address each corresponds to, like this. The first address is the
| |
| # external ip, and the second address is the corresponding internal IP.
| |
| #external-ip=172.17.19.131/10.0.0.11
| |
| #external-ip=172.17.18.132/10.0.0.12
| |
|
| |
| min-port=32769
| |
| max-port=65535
| |
| verbose
| |
|
| |
| fingerprint
| |
| lt-cred-mech
| |
| use-auth-secret
| |
| static-auth-secret=<secret_value>
| |
| realm=<example.com>
| |
|
| |
| cert=/etc/turnserver/fullchain.pem
| |
| pkey=/etc/turnserver/privkey.pem
| |
| From https://ssl-config.mozilla.org/ Intermediate, openssl 1.1.0g, 2020-01
| |
| cipher-list="ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384" dh-file=/etc/turnserver/dhp.pem
| |
|
| |
| keep-address-family
| |
| no-cli
| |
| no-tlsv1
| |
| no-tlsv1_1
| |
|
| |
| # Block connections to IP ranges which shouldn't be reachable
| |
| no-loopback-peers
| |
| no-multicast-peers
| |
| # CVE-2020-26262
| |
| # If running coturn version older than 4.5.2, uncomment these rules and ensure
| |
| # that you have listening-ip set to ipv4 addresses only.
| |
| #denied-peer-ip=0.0.0.0-0.255.255.255
| |
| #denied-peer-ip=127.0.0.0-127.255.255.255
| |
| #denied-peer-ip=::1
| |
| # Private (LAN) addresses
| |
| # If you are running BigBlueButton within a LAN, you might need to add an "allow" rule for your address range.
| |
| # IPv4 Private-Use
| |
| denied-peer-ip=10.0.0.0-10.255.255.255
| |
| denied-peer-ip=172.16.0.0-172.31.255.255
| |
| denied-peer-ip=192.168.0.0-192.168.255.255
| |
| # Other IPv4 Special-Purpose addresses
| |
| denied-peer-ip=100.64.0.0-100.127.255.255
| |
| denied-peer-ip=169.254.0.0-169.254.255.255
| |
| denied-peer-ip=192.0.0.0-192.0.0.255
| |
| denied-peer-ip=192.0.2.0-192.0.2.255
| |
| denied-peer-ip=198.18.0.0-198.19.255.255
| |
| denied-peer-ip=198.51.100.0-198.51.100.255
| |
| denied-peer-ip=203.0.113.0-203.0.113.255
| |
| # IPv6 Unique-Local
| |
| denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
| |
| # IPv6 Link-Local Unicast
| |
| denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
| |
| # Other IPv6 Special-Purpose assignments
| |
| denied-peer-ip=::ffff:0:0-::ffff:ffff:ffff
| |
| denied-peer-ip=64:ff9b::-64:ff9b::ffff:ffff
| |
| denied-peer-ip=64:ff9b:1::-64:ff9b:1:ffff:ffff:ffff:ffff:ffff
| |
| denied-peer-ip=2001::-2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff
| |
| denied-peer-ip=2001:db8::-2001:db8:ffff:ffff:ffff:ffff:ffff:ffff
| |
| denied-peer-ip=2002::-2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff
| |
| | |
| === DNS ===
| |
| * Es wird ein vollständig qualifizierten Domänennamen benötigt
| |
| ** der in die externe IP-Adresse Ihres Turn-Servers aufgelöst
| |
| * Mit diesem Domänennamen werden TLS-Zertifikat mit Let's Encrypt erstellt
| |
| | |
| ==== Allgemeine DNS-Einträge ====
| |
| turn.example.com. 14400 IN A 10.0.0.1
| |
| turn.example.com. 14400 IN AAAA 2001:db8:1234::1
| |
| stun.example.com. 14400 IN A 10.0.0.1
| |
| stun.example.com. 14400 IN AAAA 2001:db8:1234::1
| |
|
| |
| @ IN NAPTR 10 0 "s" "RELAY:turn.udp" "" _turn._udp.example.com.
| |
| | |
| ===== Folgende DNS-Einträge sollten verwendet werden, wenn Sie nur '''einen''' TURN/STUN-Server installieren: =====
| |
| _stun._udp.example.com. 14400 IN SRV 5 0 3478 turn.example.com.
| |
| _stun._tcp.example.com. 14400 IN SRV 5 0 3478 turn.example.com.
| |
| _stuns._tcp.example.com. 14400 IN SRV 5 0 5349 turn.example.com.
| |
|
| |
| _turn._udp.example.com. 14400 IN SRV 5 0 3478 turn.example.com.
| |
| _turn._tcp.example.com. 14400 IN SRV 5 0 3478 turn.example.com.
| |
| _turns._tcp.example.com. 14400 IN SRV 5 0 5349 turn.example.com.
| |
| | |
| ===== Für beste Leistung und Ausfallsicherheit sollten Sie mindestens zwei TURN/STUN-Server haben. Wir müssen die DNS-Einträge für zwei geringfügig ändern: =====
| |
| _stun._udp.example.com. 14400 IN SRV 5 50 3478 turn1.example.com.
| |
| _stun._udp.example.com. 14400 IN SRV 10 50 3478 turn2.example.com.
| |
| _stun._tcp.example.com. 14400 IN SRV 5 50 3478 turn1.example.com.
| |
| _stun._tcp.example.com. 14400 IN SRV 10 50 3478 turn2.example.com.
| |
| _stuns._tcp.example.com. 14400 IN SRV 5 50 5349 turn1.example.com.
| |
| _stuns._tcp.example.com. 14400 IN SRV 10 50 5349 turn2.example.com.
| |
| _turn._udp.example.com. 14400 IN SRV 5 50 3478 turn1.example.com.
| |
| _turn._udp.example.com. 14400 IN SRV 10 50 3478 turn2.example.com.
| |
| _turn._tcp.example.com. 14400 IN SRV 5 50 3478 turn1.example.com.
| |
| _turn._tcp.example.com. 14400 IN SRV 10 50 3478 turn2.example.com.
| |
| _turns._tcp.example.com. 14400 IN SRV 5 50 5349 turn1.example.com.
| |
| _turns._tcp.example.com. 14400 IN SRV 10 50 5349 turn2.example.com.
| |
| | |
| ; DNS-Einträge (A und AAAA) für turn1.example.comund turn2.example.com
| |
| * Ws kann auch ein zweiter A- und AAAA-Eintrag für turn.example.com und stun.example.com bereitgestellt werden
| |
| ** Dies wird nicht empfohlen
| |
| | |
| === Erforderliche Ports ===
| |
| Auf dem Coturn-Server müssen die folgenden Ports erreichbar sein, damit Clients eine Verbindung herstellen können (Port 3478 und 443) und Coturn eine Verbindung zu Ihrem zu den Clients herstellen kann (32768 - 65535).
| |
| {| class="wikitable"
| |
| |-
| |
| ! | Ports
| |
| ! | Protokoll
| |
| ! | Beschreibung
| |
| |-
| |
| || 3478
| |
| || TCP / UDP
| |
| || Coturn Listening Port
| |
| |-
| |
| || 443
| |
| || TCP / UDP
| |
| || TLS-Abhörport
| |
| |-
| |
| || 32768-65535
| |
| || UDP
| |
| || Relaisanschlussbereich
| |
| |-
| |
| |}
| |
| | |
| === Erstellen der Datei <tt>dph.pem</tt> ===
| |
| # mkdir -p /etc/turnserver
| |
| # openssl dhparam -dsaparam -out /etc/turnserver/dhp.pem 2048
| |
| | |
| === Konfiguration ===
| |
| /etc/turnserver.conf.
| |
| Zuerst verschieben wir die Originalversion dieser Datei mit:
| |
| # mv /etc/turnserver.conf /etc/turnserver.conf.orig
| |
| | |
| Dann öffnen/erstellen wir /etc/turnserver.confin einem Editor unserer Wahl und fügen folgende Konfiguration ein:
| |
| listening-port=3478
| |
| tls-listening-port=5349
| |
|
| |
| fingerprint
| |
| lt-cred-mech
| |
|
| |
| use-auth-secret
| |
| static-auth-secret=replace-this-secret
| |
|
| |
| realm=turn.example.com
| |
|
| |
| total-quota=100
| |
| stale-nonce=600
| |
|
| |
| cert=/etc/letsencrypt/live/turn.example.com/cert.pem
| |
| pkey=/etc/letsencrypt/live/turn.example.com/privkey.pem
| |
| cipher-list="ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384"
| |
|
| |
| no-sslv3
| |
| no-tlsv1
| |
| no-tlsv1_1
| |
| #no-tlsv1_2
| |
|
| |
| dh2066
| |
|
| |
| no-stdout-log
| |
| log-file=/var/tmp/turn.log
| |
| #log-file=/dev/null
| |
|
| |
| no-loopback-peers
| |
| no-multicast-peers
| |
|
| |
| proc-user=turnserver
| |
| proc-group=turnserver
| |
| | |
| Generieren Sie das Geheimnis mit
| |
| sed -i "s/replace-this-secret/$(openssl rand -hex 32)/" /etc/turnserver.conf
| |
| | |
| === Systemd konfigurieren ===
| |
| Fügen Sie die folgende systemd-Override-Datei hinzu
| |
| * Dateihandle-Limit für den TURN-Server erhöhen
| |
| * ermöglichen Port 443 zu öffnen
| |
| | |
| # mkdir -p /etc/systemd/system/coturn.service.d
| |
| | |
| <tt>/etc/systemd/system/coturn.service.d/override.conf</tt>
| |
| [Service]
| |
| LimitNOFILE=1048576
| |
| AmbientCapabilities=CAP_NET_BIND_SERVICE
| |
| ExecStart=
| |
| ExecStart=/usr/bin/turnserver --daemon -c /etc/turnserver.conf --pidfile /run/turnserver/turnserver.pid --no-stdout-log --simple-log --log-file /var/log/turnserver/turnserver.log
| |
| Restart=always
| |
| | |
| === Zertifikate ===
| |
| ; TLS-Zertifikate von [[Let's Encrypt|Let’s Encrypt]]
| |
| # certbot certonly --standalone --preferred-challenges http -d <turn.example.com>
| |
| | |
| Aktuelle Versionen des Befehls certbot richten standardmäßig eine automatische Verlängerung ein.
| |
| | |
| ; Renewal-Hook
| |
| * Um sicherzustellen, dass die Zertifikate von lesbar sind <tt>coturn</tt>, die als läuft <tt>turnserver</tt>Benutzer, fügen Sie den folgenden Erneuerungs-Hook zu Let's Encrypt hinzu.
| |
| * Erstellen Sie zunächst das Verzeichnis <tt>/etc/letsencrypt/renewal-hooks/deploy</tt>.
| |
| # mkdir -p /etc/letsencrypt/renewal-hooks/deploy
| |
| | |
| ; Renewal-Hook Skript
| |
| <tt>/etc/letsencrypt/renewal-hooks/deploy/coturn</tt>
| |
| | |
| #!/bin/bash -e
| |
| for certfile in fullchain.pem privkey.pem ; do
| |
| cp -L /etc/letsencrypt/live/<turn.example.com>/"${certfile}" /etc/turnserver/"${certfile}".new
| |
| chown turnserver:turnserver /etc/turnserver/"${certfile}".new
| |
| mv /etc/turnserver/"${certfile}".new /etc/turnserver/"${certfile}"
| |
| done
| |
|
| |
| systemctl kill -sUSR2 coturn.service
| |
| | |
| Datei ausführbar machen
| |
| # chmod 0755 /etc/letsencrypt/renewal-hooks/deploy/coturn
| |
| | |
| === Protokollrotation ===
| |
| So drehen Sie die Protokolle für <tt>coturn</tt>Installieren Sie die folgende Konfigurationsdatei in <tt>/etc/logrotate.d/coturn</tt>
| |
| | |
| /var/log/turnserver/*.log
| |
| {
| |
| rotate 7
| |
| daily
| |
| missingok
| |
| notifempty
| |
| compress
| |
| postrotate
| |
| /bin/systemctl kill -s HUP coturn.service
| |
| endscript
| |
| }
| |
| | |
| Und erstellen Sie das zugehörige Protokollverzeichnis
| |
| # mkdir -p /var/log/turnserver
| |
| # chown turnserver:turnserver /var/log/turnserver
| |
| | |
| === Coturn neu starten ===
| |
| Starten Sie den TURN-Server nach Abschluss der obigen Schritte neu
| |
| # /etc/letsencrypt/renewal-hooks/deploy/coturn <nowiki># Initial copy of certificates </nowiki>
| |
| # systemctl daemon-reload <nowiki># Ensure the override file is loaded</nowiki>
| |
| # systemctl restart coturn <nowiki># Restart</nowiki>
| |
| * Stellen Sie sicher, dass die <tt>coturn</tt> hat an Port 443 mit gebunden <tt>netstat -antp | grep 443</tt>.
| |
| * Starten Sie auch Ihren TURN-Server neu und stellen Sie dies sicher <tt>coturn</tt> wird ausgeführt (und nach dem Neustart an Port 443 gebunden).
| |
| | |
| === Testen ===
| |
| * Standardmäßig versucht Ihr Browser, über WebRTC eine direkte Verbindung zu Kurento oder FreeSWITCH herzustellen.
| |
| * Wenn keine direkte Verbindung hergestellt werden kann, wird der TURN-Server als einer der ICE-Kandidaten (Interconnectivity Connectivity Exchange) zum Weiterleiten der Medien verwendet.
| |
| | |
| ==== Mit FireFox testen ====
| |
| * Mit FireFox können Sie direkte Verbindungen deaktivieren und einen Fallback zu Ihrem TURN-Server benötigen.
| |
| * Starten Sie FireFox und öffnen Sie es <tt>about:config</tt> und suchen Sie nach 'Relais <tt>. You should see a parameter</tt> media.peerconnection.ice.relay_only <tt>. Set this value to </tt>wahr`.
| |
| * Wenn FireFox so konfiguriert ist, dass nur ein TURN-Server verwendet wird, öffnen Sie eine neue Registerkarte, nehmen Sie an einer BigBlueButton-Sitzung teil und geben Sie Ihre Webcam frei.
| |
| * Wenn Ihre Webcam angezeigt wird, können Sie überprüfen, ob FireFox Ihren TURN-Server verwendet, indem Sie eine neue Registerkarte öffnen und auswählen <tt>about:webrtc</tt>.
| |
| * Klicken <tt>show details</tt> und Sie sehen eine Tabelle für ICE-Statistiken.
| |
| * Die erfolgreiche Verbindung, die oben in der Tabelle angezeigt wird, sollte haben <tt>(relay-tcp)</tt>in der Spalte Lokaler Kandidat.
| |
| * Dies bedeutet, dass die Videoverbindung erfolgreich über Ihren TURN-Server weitergeleitet wurde.
| |
| * Wenn Sie jedoch beim Freigeben einer Webcam eine 1020 erhalten haben (Verbindung kann nicht hergestellt werden), kann der Browser möglicherweise keine Verbindung zum TURN-Server herstellen oder der TURN-Server wird nicht ordnungsgemäß ausgeführt oder konfiguriert.
| |
| Überprüfen der Browserkonsole in FireFox
| |
| WebRTC: ICE failed, your TURN server appears to be broken, see about:webrtc for more details
| |
| * FireFox kann nicht mit dem TURN-Server kommunizieren
| |
| | |
| ==== test.bigbluebutton.org ====
| |
| * Um sicherzustellen, dass Ihre Firewall keine UDP-Verbindungen über Port 443 blockiert, öffnen Sie einen Test-Besuch unter https://test.bigbluebutton.org/
| |
| * starten Sie eine Testsitzung und versuchen Sie, Ihre Webcam freizugeben.
| |
| * Der Browser kann möglicherweise keine Verbindung zum TURN-Server herstellen, oder der TURN-Server wird nicht ordnungsgemäß ausgeführt oder konfiguriert.
| |
| * Der TURN-Server fungiert auch als STUN-Server, sodass Sie zunächst überprüfen können, ob der STUN-Teil mit dem funktioniert
| |
| | |
| ==== stunclient ====
| |
| ===== Installation =====
| |
| # apt install stuntman-client
| |
| | |
| ===== Anwendungen =====
| |
| # stunclient --mode full --localport 30000 <your-turn-server-host> 3478
| |
| | |
| Bei Erfolg sollte die Ausgabe für angezeigt werden <tt>stunclient</tt> sollte ähnlich wie folgt sein.
| |
| Binding test: success
| |
| Local address: xxx.xxx.xxx.xxx:30000
| |
| Mapped address: xxx.xxx.xxx.xxx:30000
| |
| Behavior test: success
| |
| Nat behavior: Direct Mapping
| |
| Filtering test: success
| |
| Nat filtering: Endpoint Independent Filtering
| |
| | |
| Wenn Sie eine Fehlermeldung erhalten, überprüfen Sie dies <tt>coturn</tt> wird auf dem TURN-Server mit ausgeführt <tt>systemctl status coturn.service</tt>.
| |
| | |
| * Überprüfen Sie die Protokolle, indem Sie dies tun <tt>tail -f /var/log/turnserver/coturn.log</tt>.
| |
| * Sie können ausführliche Protokolle erhalten, indem Sie hinzufügen <tt>verbose</tt> zu <tt>/etc/turnserver.conf</tt> und Neustart des TURN-Servers <tt>systemctl restart coturn.service</tt>
| |
| * Sie können Ihren TURN-Server mithilfe der testen [https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/ Trickle-ICE-] Seite.
| |
| * Auf diese Weise erhalten Sie ein Protokoll der Relaiskandidaten, wenn diese von der ICE-Sammlung zurückgegeben werden.
| |
| * Um auf dieser Seite zu testen, müssen Sie einige Testanmeldeinformationen generieren.
| |
| * Führen Sie das folgende BASH-Skript aus und ersetzen Sie es <tt><turn.example.com></tt> mit dem Hostnamen Ihres TURN-Servers und <tt><secret_value></tt> mit dem Passwort für Ihren TURN-Server.
| |
| | |
| #!/bin/bash
| |
|
| |
| HOST=<turn.example.com>
| |
| SECRET=<secret_value>
| |
|
| |
| time=$(date +%s)
| |
| expiry=8400
| |
| username=$(( $time + $expiry ))
| |
|
| |
| echo
| |
| echo " https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/"
| |
| echo
| |
| echo URI : turn:$HOST:443
| |
| echo username : $username
| |
| echo password : $(echo -n $username | openssl dgst -binary -sha1 -hmac $SECRET | openssl base64)
| |
| echo
| |
| | |
| * Geben Sie die Werte in URI, Benutzername und Passwort auf der Trickle ICE-Seite ein und klicken Sie auf "Kandidaten sammeln".
| |
| * Sie sollten eine Liste der Staffelkandidaten sehen.
| |
| * Wenn Sie dies nicht tun, überprüfen Sie erneut, ob Ihr TURN-Server ausgeführt wird, und beenden Sie die Protokolle, über die der TURN-Server protokolliert <tt>tail -f /var/log/turnserver/coturn.log</tt> oder <tt>journalctl -f -u coturn.service</tt>.
| |
| | |
| Sie können ausführliche Protokolle erhalten, indem Sie hinzufügen <tt>verbose</tt> zu <tt>/etc/turnserver.conf</tt> und dann den TURN-Server neu starten <tt>systemctl restart coturn.service</tt>und versuchen Sie es erneut mit FireFox oder der obigen Tricke ICE-Seite.
| |
| | |
| === Dateien ===
| |
| | |
| == Anwendungen ==
| |
| === Starten und testen ===
| |
| * Wir werden wiederum mit der Ausführung beginnen systemctl start coturn. Verwenden systemctl status coturnwir können testen, ob coturn läuft.
| |
| * Wir wissen noch nicht, ob unsere Konfiguration erfolgreich war, aber zum Glück gibt es einen Tester: WebRTC-Beispiele Trickle ICE
| |
| | |
| Entfernen Sie den Standardserver aus der Liste. Das Feld für „STUN or TURN URI“ sollte so aussehen:
| |
| stun:stun.example.com
| |
| | |
| Sie können aber auch die IP verwenden:
| |
| stun:10.0.0.1:3478
| |
| | |
| Um die SSL/TLS-Verschlüsselung zu testen, verwenden Sie port 5349. Sie können TURN hier nicht testen, da der Tester dies nicht unterstützt.
| |
| | |
| Klicken Sie anschließend auf Add Serverund dann weiter Gather candidates.
| |
| | |
| Die Ausgabe sollte etwa so aussehen:
| |
| Time Component Type Foundation Protocol Address Port Priority
| |
| 0.019 1 host 0 UDP 192.168.0.10 41904 126 | 32512 | 255
| |
| 0.024 1 host 2 TCP 192.168.0.10 9 125 | 32704 | 255
| |
| 0.027 2 host 0 UDP 192.168.0.10 53438 126 | 32512 | 254
| |
| 0.030 2 host 2 TCP 192.168.0.10 9 125 | 32704 | 254
| |
| 0.134 1 srflx 1 UDP 78.47.166.55 41904 100 | 32543 | 255
| |
| 0.152 2 srflx 1 UDP 78.47.166.55 53438 100 | 32543 | 254
| |
| 0.153 Done
| |
| | |
| ; Wenn Sie ein Timeout mit bekommen Not reachable?
| |
| * Die Verbindung wird wahrscheinlich durch eine Firewall blockiert.
| |
| * Überprüfen Sie erneut, ob die Ports 3478und 5349für den TURN-Server sind offen.
| |
| * Testen Sie auch, ob Sie es von Ihrem Computer oder einem anderen Server aus erreichen können, telnet oder nmap.
| |
| | |
| Wenn alles wie erwartet funktioniert
| |
| * ersetzen log-file=/var/log/turn.logmit log-file=/dev/null in deiner Konfigurationsdatei
| |
| * Dies deaktiviert die Protokollierung von IP-Adressen und dient der besten Privatsphäre
| |
| | |
| == Syntax ==
| |
| === Optionen ===
| |
| === Parameter ===
| |
| === Umgebungsvariablen ===
| |
| === Exit-Status ===
| |
| | |
| == Sicherheit ==
| |
| | |
| == Dokumentation ==
| |
| === Supported RFCs ===
| |
| ==== TURN specs ====
| |
| * <nowiki>RFC 5766</nowiki> - base TURN specs
| |
| * <nowiki>RFC 6062</nowiki> - TCP relaying TURN extension
| |
| * <nowiki>RFC 6156</nowiki> - IPv6 extension for TURN
| |
| * <nowiki>RFC 7443</nowiki> - ALPN support for STUN & TURN
| |
| * <nowiki>RFC 7635</nowiki> - oAuth third-party TURN/STUN authorization
| |
| * DTLS support (<nowiki>http://tools.ietf.org/html/draft-petithuguenin-tram-turn-dtls-00</nowiki>).
| |
| * Mobile ICE (MICE) support (<nowiki>http://tools.ietf.org/html/draft-wing-tram-turn-mobility-02</nowiki>).
| |
| * TURN REST API (<nowiki>http://tools.ietf.org/html/draft-uberti-behave-turn-rest-00</nowiki>)
| |
| * Origin field in TURN (Multi-tenant TURN Server) (<nowiki>https://tools.ietf.org/html/draft-ietf-tram-stun-origin-06</nowiki>)
| |
| * TURN Bandwidth draft specs (<nowiki>http://tools.ietf.org/html/draft-thomson-tram-turn-bandwidth-01</nowiki>)
| |
| * TURN-bis (with dual allocation) draft specs (<nowiki>http://tools.ietf.org/html/draft-ietf-tram-turnbis-04</nowiki>).
| |
| | |
| ==== STUN specs ====
| |
| * <nowiki>RFC 3489</nowiki> - "classic" STUN
| |
| * <nowiki>RFC 5389</nowiki> - base "new" STUN specs
| |
| * <nowiki>RFC 5769</nowiki> - test vectors for STUN protocol testing
| |
| * <nowiki>RFC 5780</nowiki> - NAT behavior discovery support
| |
| * <nowiki>RFC 7443</nowiki> - ALPN support for STUN & TURN
| |
| * <nowiki>RFC 7635</nowiki> - oAuth third-party TURN/STUN authorization
| |
| | |
| ==== Supported ICE and related specs ====
| |
| * <nowiki>RFC 5245</nowiki> - ICE
| |
| * <nowiki>RFC 5768</nowiki> – ICE–SIP
| |
| * <nowiki>RFC 6336</nowiki> – ICE–IANA Registry
| |
| * <nowiki>RFC 6544</nowiki> – ICE–TCP
| |
| * <nowiki>RFC 5928</nowiki> - TURN Resolution Mechanism
| |
| | |
| ==== The implementation fully supports the following client-to-TURN-server protocols ====
| |
| * UDP (per <nowiki>RFC 5766</nowiki>)
| |
| * TCP (per <nowiki>RFC 5766</nowiki> and <nowiki>RFC 6062</nowiki>)
| |
| * TLS (per <nowiki>RFC 5766</nowiki> and <nowiki>RFC 6062</nowiki>): TLS1.0/TLS1.1/TLS1.2; ECDHE is supported.
| |
| * DTLS (<nowiki>http://tools.ietf.org/html/draft-petithuguenin-tram-turn-dtls-00</nowiki>): DTLS versions 1.0 and 1.2.
| |
| * SCTP (experimental implementation).
| |
| | |
| === Supported relay protocols ===
| |
| * UDP (per <nowiki>RFC 5766</nowiki>)
| |
| * TCP (per <nowiki>RFC 6062</nowiki>)
| |
| | |
| === Supported user databases ===
| |
| For user repository, with passwords or keys, if authentication is required
| |
| * SQLite
| |
| * MySQL
| |
| * PostgreSQL
| |
| * Redis
| |
| ** kann auch für die Speicherung von Status und Statistiken sowie für Benachrichtigungen verwendet werden.
| |
| * MongoDB
| |
| | |
| Standardmäßig ist ein Prometheus-Export-Endpunkt deaktiviert
| |
| * wenn er aktiviert ist, wird er auf Port 9641 unter dem Pfad /metrics überwacht.
| |
| | |
| === Unterstützte Algorithmen zur Überprüfung der Nachrichtenintegrität ===
| |
| * HMAC-SHA1, mit MD5-gehashten Schlüsseln (wie von STUN- und TURN-Standards gefordert)
| |
| | |
| === Unterstützte TURN-Authentifizierungsmechanismen ===
| |
| * 'klassischer' Langzeit-Authentifizierungsmechanismus;
| |
| * TURN REST API (eine Modifikation des Langzeit-Mechanismus, für zeitlich begrenzte geheimnisbasierte Authentifizierung, für WebRTC-Anwendungen: <nowiki>http://tools.ietf.org/html/draft-uberti-behave-turn-rest-00</nowiki>);
| |
| * experimentelle oAuth-basierte Client-Autorisierungsoption eines Drittanbieters;
| |
| | |
| Wenn er als Teil einer ICE-Lösung für VoIP-Konnektivität eingesetzt wird, kann dieser TURN-Server Tausende von gleichzeitigen Anrufen pro CPU (bei Verwendung des TURN-Protokolls) oder Zehntausende von Anrufen, wenn nur das STUN-Protokoll verwendet wird, verarbeiten.
| |
| * Für praktisch unbegrenzte Skalierbarkeit kann ein Lastausgleichsschema verwendet werden.
| |
| | |
| === Lastausgleich kann mit den folgenden Tools implementiert werden ===
| |
| Eentweder eines oder eine Kombination davon
| |
| * DNS SRV-basierter Lastausgleich;
| |
| * eingebauter 300 ALTERNATE-SERVER-Mechanismus (erfordert die Unterstützung von 300 Antworten durch den TURN-Client);
| |
| * Netzwerk-Load-Balancer-Server.
| |
| | |
| Algorithmen zur Begrenzung der Verkehrsbandbreite und zur Vermeidung von Überlastungen.
| |
| | |
| === Leistung und Skalierbarkeit ===
| |
| Um eine hohe Leistung und Skalierbarkeit zu erreichen, wird der TURN-Server mit den folgenden Eigenschaften implementiert
| |
| * Verwendung der hochleistungsfähigen, industrietauglichen Network IO Engine libevent2
| |
| * Konfigurierbares Multi-Threading-Modell zur vollen Nutzung der verfügbaren CPU-Ressourcen (wenn das Betriebssystem Multi-Threading erlaubt)
| |
| * Mehrere Abhör- und Relaisadressen können konfiguriert werden Effizientes Speichermodell verwendet
| |
| * Der TURN-Projektcode kann in einer benutzerdefinierten, proprietären Netzwerkumgebung verwendet werden.
| |
| * Im TURN-Server-Code wird eine abstrakte Netzwerk-API verwendet.
| |
| * Nur ein paar Dateien im Projekt müssen neu geschrieben werden, um den TURN-Server in eine proprietäre Umgebung einzubinden.
| |
| * Mit diesem Projekt wird nur eine Implementierung für die Standard UNIX Networking/IO API zur Verfügung gestellt, aber der Anwender kann jede andere Umgebung implementieren.
| |
| * Der Code des TURN-Servers wurde ursprünglich für eine hochperformante proprietäre Unternehmensumgebung entwickelt und dann für die UNIX Networking API übernommen.
| |
| * Der TURN-Server arbeitet als User-Space-Prozess, ohne besondere Anforderungen an das System zu stellen
| |
| | |
| Um die TURN Server Software, die Client Messaging Library und die Testprogramme herunterzuladen, klicken Sie auf den Reiter "Downloads".
| |
| | |
| ==== Kontaktinformationen ====
| |
| # https://groups.google.com/forum/#!forum/turn-server-project-rfc5766-turn-server
| |
| | |
| === Man-Pages ===
| |
| === Info-Pages ===
| |
| == Siehe auch ==
| |
| # [[TURN-Protokoll]]
| |
| | |
| == Links ==
| |
| | |
| === Projekt-Homepage ===
| |
| # Downloads page
| |
| # Docker image
| |
| # Wiki pages
| |
| | |
| === Weblinks ===
| |
| == Weblinks ==
| |
| # https://community.hetzner.com/tutorials/install-turn-stun-server-on-debian-ubuntu-with-coturn
| |
| # https://community.letsencrypt.org/t/are-pre-hook-and-post-hook-and-etc-letsencrypt-renewal-hooks-scripts-mutually-exclusive/96471
| |
| # https://certbot.eff.org/docs/using.html?highlight=hooks#pre-and-post-validation-hooks
| |
| # https://github.com/certbot/certbot/issues/5935
| |
| # https://serverfault.com/questions/849683/how-to-setup-coturn-with-letsencrypt
| |
| # https://github.com/coturn/coturn/issues/268
| |
| # https://www.google.com/search?client=firefox-b-d&q=turnserver%3A+0%3A+WARNING%3A+cannot+find+certificate+file
| |
| # https://decatec.de/home-server/nextcloud-talk-mit-eigenem-turn-server-coturn/
| |
| | |
| === Einzelnachweise ===
| |
| <references />
| |
| == Testfragen ==
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 1''
| |
| <div class="mw-collapsible-content">'''Antwort1'''</div>
| |
| </div>
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 2''
| |
| <div class="mw-collapsible-content">'''Antwort2'''</div>
| |
| </div>
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 3''
| |
| <div class="mw-collapsible-content">'''Antwort3'''</div>
| |
| </div>
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 4''
| |
| <div class="mw-collapsible-content">'''Antwort4'''</div>
| |
| </div>
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 5''
| |
| <div class="mw-collapsible-content">'''Antwort5'''</div>
| |
| </div>
| |
| | |
| [[Kategorie:Entwurf]]
| |
| [[Kategorie:Server]]
| |
| [[Kategorie:BigBlueButton]] | | [[Kategorie:BigBlueButton]] |
| [[Kategorie:Nextcloud:Talk]] | | [[Kategorie:Nextcloud/Talk]] |