Kategorie:Coturn: Unterschied zwischen den Versionen

Aus Foxwiki
Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Kategorie:Netzwerk/Dienst Kategorie:BigBlueButton Kategorie:Nextcloud/Talk
Markierung: Ersetzt
 
(203 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
TURN-Server für BigBlueButton einrichten, damit Benutzer hinter restriktiven Firewalls eine Verbindung herstellen können
[[Kategorie:Netzwerk/Dienst]]
 
[[Kategorie:BigBlueButton]]
= Richten Sie einen TURN-Server ein  =
[[Kategorie:Nextcloud/Talk]]
* Für BigBlueButton muss normalerweise eine Vielzahl von UDP-Ports für die WebRTC-Kommunikation verfügbar sein.
* In einigen netzwerkbeschränkten Sites oder Entwicklungsumgebungen, z. B. hinter NAT oder einer Firewall, die ausgehende UDP-Verbindungen einschränkt, können Benutzer möglicherweise keine ausgehenden UDP-Verbindungen zu Ihrem BigBlueButton-Server herstellen.
* Das [https://en.wikipedia.org/wiki/Traversal_Using_Relays_around_NAT TURN-Protokoll ]ermöglicht es UDP-basierten Kommunikationsflüssen wie WebRTC, NAT oder Firewalls zu umgehen, indem der Client eine Verbindung zum TURN-Server herstellt und der TURN-Server dann in seinem Namen eine Verbindung zum Ziel herstellt.
* Darüber hinaus implementiert der TURN-Server auch das STUN-Protokoll, mit dem direkte UDP-Verbindungen über bestimmte Arten von Firewalls ermöglicht werden, die andernfalls möglicherweise nicht funktionieren.
 
Die Verwendung eines von Ihnen kontrollierten TURN-Servers verbessert den Erfolg von Verbindungen zu BigBlueButton und verbessert auch die Privatsphäre der Benutzer, da diese keine IP-Adressinformationen mehr an einen öffentlichen STUN-Server senden.
 
== Erforderliche Hardware  ==
* Das TURN-Protokoll ist nicht CPU- oder speicherintensiv.
* Da es nur während des Verbindungsaufbaus (für STUN) und als Ersatz für Benutzer verwendet wird, die sonst keine Verbindung herstellen könnten, sind die Bandbreitenanforderungen nicht besonders hoch.
* Für eine moderate Anzahl von BigBlueButton-Servern ist normalerweise ein einziger kleiner VPS ausreichend.
* Das Vorhandensein mehrerer IP-Adressen kann die Ergebnisse verbessern, wenn STUN mit bestimmten Arten von Firewalls verwendet wird, ist jedoch normalerweise nicht erforderlich.
* Der Server hinter NAT (z. B. unter Amazon EC2) ist in Ordnung, aber alle eingehenden UDP- und TCP-Verbindungen an einem beliebigen Port müssen weitergeleitet und nicht durch eine Firewall geschützt werden.
 
== Erforderliche Software  ==
* Wir empfehlen die Verwendung einer minimalen Serverinstallation von Ubuntu 20.04.
* Die [https://github.com/coturn/coturn coturn]-Software benötigt Port 443 für die ausschließliche Verwendung in unserer empfohlenen Konfiguration.
* Dies bedeutet, dass auf dem Server keine Dashboard-Software oder andere Webanwendungen ausgeführt werden können.
* Stabile Versionen von coturn sind bereits in den Ubuntu-Paketrepositorys für Version 20.04 und höher verfügbar und können mit apt-get installiert werden:
$ sudo apt-get update
$ sudo apt-get install coturn
 
'''Hinweis'''
 
coturn startet nicht automatisch, bis die Konfiguration angewendet wird (siehe unten).
 
== Erforderlicher DNS-Eintrag  ==
* Sie müssen einen vollständig qualifizierten Domänennamen einrichten, der in die externe IP-Adresse Ihres Turn-Servers aufgelöst wird.
* Mit diesem Domänennamen generieren Sie ein TLS-Zertifikat mit Let's Encrypt (nächster Abschnitt).
 
== Erforderliche Ports  ==
Auf dem Coturn-Server müssen die folgenden Ports (zusätzlich zu Port 22) verfügbar sein, damit BigBlueButton-Clients eine Verbindung herstellen können (Port 3478 und 443) und Coturn eine Verbindung zu Ihrem BigBlueButton-Server herstellen kann (32768 - 65535).
 
{| class="wikitable"
|-
! | Häfen
! | Protokoll
! | Beschreibung
|-
|| 3478
|| TCP / UDP
|| Coturn Listening Port
|-
|| 443
|| TCP / UDP
|| TLS-Abhörport
|-
|| 32768-65535
|| UDP
|| Relaisanschlussbereich
|-
|}
 
== Generieren von TLS-Zertifikaten  ==
* Sie können verwenden <tt>certbot</tt>von [https://letsencrypt.org/ Let's Encrypt, um ]auf einfache Weise kostenlose TLS-Zertifikate zu generieren.
* Zum Einrichten <tt>certbot</tt> Geben Sie die folgenden Befehle auf Ihrem TURN-Server ein (nicht auf Ihrem BigBlueButton-Server).
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot
Sie können dann eine ausführen <tt>certbot</tt> Befehl wie folgt, um das Zertifikat zu generieren und zu ersetzen <tt><turn.example.com></tt> mit dem Domainnamen Ihres TURN-Servers:
$ sudo certbot certonly --standalone --preferred-challenges http \
    -d <turn.example.com>
 
* Aktuelle Versionen des Befehls certbot richten standardmäßig die automatische Verlängerung ein.
* 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>.
$ sudo mkdir -p /etc/letsencrypt/renewal-hooks/deploy
 
Erstellen Sie als Nächstes die Datei <tt>/etc/letsencrypt/renewal-hooks/deploy/coturn</tt>mit folgenden Inhalten. Ersetzen
#!/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
 
Machen Sie diese Datei ausführbar.
$ sudo chmod 0755 /etc/letsencrypt/renewal-hooks/deploy/coturn
 
== Konfigurieren Sie coturn  ==
* <tt>coturn</tt> Konfiguration wird in der Datei gespeichert <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
 
Wir müssen schaffen <tt>dph.pem</tt> Datei,
$ sudo mkdir -p /etc/turnserver
$ sudo openssl dhparam -dsaparam  -out /etc/turnserver/dhp.pem 2048
 
Fügen Sie die folgende systemd-Override-Datei hinzu, um das Dateihandle-Limit für den TURN-Server zu erhöhen und ihm die Möglichkeit zu geben, an Port 443 zu binden. Erstellen Sie zunächst das Verzeichnis.
$ sudo mkdir -p /etc/systemd/system/coturn.service.d
 
und dann dann erstellen <tt>/etc/systemd/system/coturn.service.d/override.conf</tt> mit folgenden Inhalten
 
[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
 
== Konfigurieren Sie die 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
$ sudo mkdir -p /var/log/turnserver
$ sudo chown turnserver:turnserver /var/log/turnserver
 
== Coturn neu starten  ==
Starten Sie den TURN-Server nach Abschluss der obigen Schritte neu
$ sudo /etc/letsencrypt/renewal-hooks/deploy/coturn    <nowiki># Initial copy of certificates </nowiki>
$ sudo systemctl daemon-reload                        <nowiki># Ensure the override file is loaded</nowiki>
$ sudo 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).
 
= Konfigurieren Sie BigBlueButton für die Verwendung Ihres TURN-Servers  =
* Sie müssen bbb-web so konfigurieren, dass es die Liste der Turn-Server für den Webbrowser bereitstellt.
* Bearbeiten Sie die Datei <tt>/usr/share/bbb-web/WEB-INF/classes/spring/turn-stun-servers.xml</tt>
* Verwenden Sie den folgenden Inhalt und nehmen Sie Änderungen vor:
* Ersetzen Sie beide Instanzen von <tt><turn.example.com></tt> mit dem Hostnamen des TURN-Servers und ersetzen <tt><secret_value></tt> mit dem Geheimnis, in dem Sie konfiguriert haben <tt>turnserver.conf</tt>.
 
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    <bean id="stun0" class="org.bigbluebutton.web.services.turn.StunServer">
        <constructor-arg index="0" value="stun:<turn.example.com>"/>
    </bean>
    <bean id="turn0" class="org.bigbluebutton.web.services.turn.TurnServer">
        <constructor-arg index="0" value="<secret_value>"/>
        <constructor-arg index="1" value="turns:<turn.example.com>:443?transport=tcp"/>
        <constructor-arg index="2" value="86400"/>
    </bean>
    <bean id="turn1" class="org.bigbluebutton.web.services.turn.TurnServer">
        <constructor-arg index="0" value="<secret_value>"/>
        <constructor-arg index="1" value="turn:<turn.example.com>:443?transport=tcp"/>
        <constructor-arg index="2" value="86400"/>
    </bean>
    <bean id="stunTurnService"
            class="org.bigbluebutton.web.services.turn.StunTurnService">
        <property name="stunServers">
            <set>
                <nowiki><ref bean="stun0"/></nowiki>
            </set>
        </property>
        <property name="turnServers">
            <set>
                <nowiki><ref bean="turn0"/></nowiki>
                <nowiki><ref bean="turn1"/></nowiki>
            </set>
        </property>
    </bean>
</beans>
 
Starten Sie Ihren BigBlueButton-Server neu, um die Änderungen zu übernehmen.
 
Wenn Benutzer hinter einer restriktiven Firewall eine Verbindung herstellen, die ausgehende UDP-Verbindungen verhindert, ermöglicht der TURN-Server BigBlueButton künftig, über den TURN-Server über Port 443 ihrer Firewall eine Verbindung zu FreeSWITCH und Kurento herzustellen.
 
= Testen Sie Ihren TURN-Server  =
* 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.
 
* Verwenden Sie FireFox, um Ihren TURN-Server zu 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 Sie die Browserkonsole in FireFox.
 
Wenn du siehst
WebRTC: ICE failed, your TURN server appears to be broken, see about:webrtc for more details
 
* Dann konnte FireFox nicht mit Ihrem TURN-Server kommunizieren oder Ihr TURN-Server wurde nicht ordnungsgemäß ausgeführt oder konfiguriert.
 
* Um sicherzustellen, dass Ihre Firewall keine UDP-Verbindungen über Port 443 blockiert, öffnen Sie einen neuen Tad-Besuch unter [https://test.bigbluebutton.org/ 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 <tt>stunclient</tt>.
* Führen Sie die folgenden Befehle aus und ersetzen Sie sie <tt><youor-turn-server-host></tt> mit dem Hostnamen Ihres TURN-Servers.
# apt-get install -y stuntman-client
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.
 
== Links und Informationen ==
# 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/
 
[[Category:Nextcloud]]
[[Category:Netzwerke]]
[[Category:BigBlueButton]]

Aktuelle Version vom 29. Dezember 2023, 13:55 Uhr

Seiten in der Kategorie „Coturn“

Diese Kategorie enthält nur die folgende Seite.