Coturn: Unterschied zwischen den Versionen
Dirkwagner verschob die Seite Coturn nach Kategorie:Coturn Markierung: Neue Weiterleitung |
K Textersetzung - „== Syntax ==“ durch „== Aufruf ==“ |
||
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
# | '''Coturn''' - ist ein TURN-Server/Gateway für VoIP-Medienverkehr-NAT-Traversal | ||
== Beschreibung == | |||
; TURN-Server und -Gateway für den Netzwerkverkehr | |||
* Free open source Implementation of TURN and STUN Server | |||
; Entwickelte sich aus dem rfc5766-turn-server Projekt | |||
* https://code.google.com/p/rfc5766-turn-server/ | |||
; Es gibt viele neue erweiterte TURN-Spezifikationen, die weit über das ursprüngliche RFC 5766-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 | |||
; Ziele | |||
* 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 | |||
; Projekte, die TURN/STUN verwenden | |||
* [[:Kategorie:Nextcloud/Talk | Nextcloud-Talk]] | |||
* [[:Kategorie:BigBlueButton|Big Blue Button]] | |||
* Jitsi-Meeting | |||
* Matrix-Server | |||
* Ejabberd | |||
; Voraussetzungen | |||
* Mindestens ein kleiner virtueller Server mit einer Root-Shell | |||
== Installation == | |||
# apt install coturn | |||
== Konfiguration == | |||
=== 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 | |||
=== Konfigurationsdatei === | |||
<tt>/etc/turnserver.conf</tt> | |||
* Es sind viele Optionen in der Standardkonfigurationsdatei dokumentiert | |||
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. | |||
==== Ein Server ==== | |||
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. | |||
==== Zwei Server ==== | |||
Für beste Leistung und Ausfallsicherheit sollten mindestens zwei TURN/STUN-Server betrieben werden: | |||
_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 === | |||
Sichern der Originalversion | |||
# mv /etc/turnserver.conf /etc/turnserver.conf.orig | |||
<tt> /etc/turnserver.conf </tt> | |||
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 | |||
; Geheimnis erzeugen | |||
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 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). | |||
=== TURN-Server aktivieren === | |||
; /etc/default/coturn | |||
# Uncomment it if you want to have the turnserver running as | |||
# an automatic system service daemon | |||
# | |||
TURNSERVER_ENABLED=1 | |||
=== 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. | |||
==== FireFox ==== | |||
; 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 | |||
===== Anwendung ===== | |||
# 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 === | |||
== Anwendung == | |||
=== 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-Kryptografie 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 | |||
Deaktivieren der Protokollierung von IP-Adressen | |||
* dient der besten Privatsphäre | |||
# log-file=/var/log/turn.log | |||
log-file=/dev/null | |||
== Aufruf == | |||
=== Optionen === | |||
=== Parameter === | |||
=== Umgebung === | |||
=== Rückgabewert === | |||
== Sicherheit == | |||
== Dokumentation == | |||
=== 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 | |||
** http://tools.ietf.org/html/draft-uberti-behave-turn-rest-00 | |||
* 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. | |||
=== Tools zum Lastausgleich === | |||
Einzeln oder in Kombination | |||
* DNS SRV-basierter Lastausgleich | |||
* eingebauter 300 ALTERNATE-SERVER-Mechanismus | |||
** erfordert die Unterstützung von 300 Antworten durch den TURN-Client | |||
* Netzwerk-Load-Balancer-Server | |||
=== 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". | |||
=== Man-Page === | |||
=== Info-Pages === | |||
== Siehe auch == | |||
# [[TURN-Protokoll]] | |||
== Links == | |||
=== Projekt === | |||
# https://github.com/coturn/coturn | |||
# https://groups.google.com/forum/#!forum/turn-server-project-rfc5766-turn-server | |||
=== 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/ | |||
[[Kategorie:Coturn]] |
Aktuelle Version vom 12. November 2024, 18:43 Uhr
Coturn - ist ein TURN-Server/Gateway für VoIP-Medienverkehr-NAT-Traversal
Beschreibung
- TURN-Server und -Gateway für den Netzwerkverkehr
- Free open source Implementation of TURN and STUN Server
- Entwickelte sich aus dem rfc5766-turn-server Projekt
- Es gibt viele neue erweiterte TURN-Spezifikationen, die weit über das ursprüngliche RFC 5766-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
- Ziele
- 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
- Projekte, die TURN/STUN verwenden
- Nextcloud-Talk
- Big Blue Button
- Jitsi-Meeting
- Matrix-Server
- Ejabberd
- Voraussetzungen
- Mindestens ein kleiner virtueller Server mit einer Root-Shell
Installation
# apt install coturn
Konfiguration
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
Konfigurationsdatei
/etc/turnserver.conf
- Es sind viele Optionen in der Standardkonfigurationsdatei dokumentiert
Verwenden Sie die folgende Datei für /etc/turnserver.conf und nehmen Sie folgende Änderungen vor:
- Ersetzen <turn.example.com> mit dem Hostnamen Ihres TURN-Servers und
- Ersetzen <example.com> mit dem Bereich Ihres TURN-Servers und
- Ersetzen <secret_value> auf einen zufälligen Wert für ein gemeinsames Geheimnis
- Sie können einen durch Ausführen generieren openssl rand -hex 16
- Ersetzen <IP> 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.
Ein Server
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.
Zwei Server
Für beste Leistung und Ausfallsicherheit sollten mindestens zwei TURN/STUN-Server betrieben werden:
_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).
Ports | Protokoll | Beschreibung |
---|---|---|
3478 | TCP / UDP | Coturn Listening Port |
443 | TCP / UDP | TLS-Abhörport |
32768-65535 | UDP | Relaisanschlussbereich |
Erstellen der Datei dph.pem
# mkdir -p /etc/turnserver # openssl dhparam -dsaparam -out /etc/turnserver/dhp.pem 2048
Konfiguration
Sichern der Originalversion
# mv /etc/turnserver.conf /etc/turnserver.conf.orig
/etc/turnserver.conf
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
- Geheimnis erzeugen
sed -i "s/replace-this-secret/$(openssl rand -hex 32)/" /etc/turnserver.conf
Zertifikate
- TLS-Zertifikate von 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 coturn, die als läuft turnserverBenutzer, fügen Sie den folgenden Erneuerungs-Hook zu Let's Encrypt hinzu.
- Erstellen Sie zunächst das Verzeichnis /etc/letsencrypt/renewal-hooks/deploy.
# mkdir -p /etc/letsencrypt/renewal-hooks/deploy
- Renewal-Hook Skript
/etc/letsencrypt/renewal-hooks/deploy/coturn
#!/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 coturnInstallieren Sie die folgende Konfigurationsdatei in /etc/logrotate.d/coturn
/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 starten
Starten Sie den TURN-Server nach Abschluss der obigen Schritte neu
# /etc/letsencrypt/renewal-hooks/deploy/coturn # Initial copy of certificates # systemctl daemon-reload # Ensure the override file is loaded # systemctl restart coturn # Restart
- Stellen Sie sicher, dass die coturn hat an Port 443 mit gebunden netstat -antp | grep 443.
- Starten Sie auch Ihren TURN-Server neu und stellen Sie dies sicher coturn wird ausgeführt (und nach dem Neustart an Port 443 gebunden).
TURN-Server aktivieren
- /etc/default/coturn
# Uncomment it if you want to have the turnserver running as # an automatic system service daemon # TURNSERVER_ENABLED=1
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.
FireFox
- Mit FireFox können Sie direkte Verbindungen deaktivieren und einen Fallback zu Ihrem TURN-Server benötigen.
- Starten Sie FireFox und öffnen Sie es about:config und suchen Sie nach 'Relais . You should see a parameter media.peerconnection.ice.relay_only . Set this value to 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 about:webrtc.
- Klicken show details und Sie sehen eine Tabelle für ICE-Statistiken.
- Die erfolgreiche Verbindung, die oben in der Tabelle angezeigt wird, sollte haben (relay-tcp)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
Anwendung
# stunclient --mode full --localport 30000 <your-turn-server-host> 3478
Bei Erfolg sollte die Ausgabe für angezeigt werden stunclient 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 coturn wird auf dem TURN-Server mit ausgeführt systemctl status coturn.service.
- Überprüfen Sie die Protokolle, indem Sie dies tun tail -f /var/log/turnserver/coturn.log.
- Sie können ausführliche Protokolle erhalten, indem Sie hinzufügen verbose zu /etc/turnserver.conf und Neustart des TURN-Servers systemctl restart coturn.service
- Sie können Ihren TURN-Server mithilfe der testen 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 <turn.example.com> mit dem Hostnamen Ihres TURN-Servers und <secret_value> 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 tail -f /var/log/turnserver/coturn.log oder journalctl -f -u coturn.service.
Sie können ausführliche Protokolle erhalten, indem Sie hinzufügen verbose zu /etc/turnserver.conf und dann den TURN-Server neu starten systemctl restart coturn.serviceund versuchen Sie es erneut mit FireFox oder der obigen Tricke ICE-Seite.
Dateien
Anwendung
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-Kryptografie 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
Deaktivieren der Protokollierung von IP-Adressen
- dient der besten Privatsphäre
# log-file=/var/log/turn.log log-file=/dev/null
Aufruf
Optionen
Parameter
Umgebung
Rückgabewert
Sicherheit
Dokumentation
RFCs
- TURN specs
- RFC 5766 - base TURN specs
- RFC 6062 - TCP relaying TURN extension
- RFC 6156 - IPv6 extension for TURN
- RFC 7443 - ALPN support for STUN & TURN
- RFC 7635 - oAuth third-party TURN/STUN authorization
- DTLS support (http://tools.ietf.org/html/draft-petithuguenin-tram-turn-dtls-00).
- Mobile ICE (MICE) support (http://tools.ietf.org/html/draft-wing-tram-turn-mobility-02).
- TURN REST API (http://tools.ietf.org/html/draft-uberti-behave-turn-rest-00)
- Origin field in TURN (Multi-tenant TURN Server) (https://tools.ietf.org/html/draft-ietf-tram-stun-origin-06)
- TURN Bandwidth draft specs (http://tools.ietf.org/html/draft-thomson-tram-turn-bandwidth-01)
- TURN-bis (with dual allocation) draft specs (http://tools.ietf.org/html/draft-ietf-tram-turnbis-04).
- STUN specs
- RFC 3489 - "classic" STUN
- RFC 5389 - base "new" STUN specs
- RFC 5769 - test vectors for STUN protocol testing
- RFC 5780 - NAT behavior discovery support
- RFC 7443 - ALPN support for STUN & TURN
- RFC 7635 - oAuth third-party TURN/STUN authorization
- Supported ICE and related specs
- RFC 5245 - ICE
- RFC 5768 – ICE–SIP
- RFC 6336 – ICE–IANA Registry
- RFC 6544 – ICE–TCP
- RFC 5928 - TURN Resolution Mechanism
- The implementation fully supports the following client-to-TURN-server protocols
- UDP (per RFC 5766)
- TCP (per RFC 5766 and RFC 6062)
- TLS (per RFC 5766 and RFC 6062): TLS1.0/TLS1.1/TLS1.2; ECDHE is supported.
- DTLS (http://tools.ietf.org/html/draft-petithuguenin-tram-turn-dtls-00): DTLS versions 1.0 and 1.2.
- SCTP (experimental implementation).
Supported relay protocols
- UDP (per RFC 5766)
- TCP (per RFC 6062)
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
- http://tools.ietf.org/html/draft-uberti-behave-turn-rest-00
- 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.
Tools zum Lastausgleich
Einzeln oder in Kombination
- DNS SRV-basierter Lastausgleich
- eingebauter 300 ALTERNATE-SERVER-Mechanismus
- erfordert die Unterstützung von 300 Antworten durch den TURN-Client
- Netzwerk-Load-Balancer-Server
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".
Man-Page
Info-Pages
Siehe auch
Links
Projekt
- https://github.com/coturn/coturn
- https://groups.google.com/forum/#!forum/turn-server-project-rfc5766-turn-server
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/