Kategorie:Coturn

Aus Foxwiki

Konfigurieren Sie TURN

In diesem Dokument wird beschrieben, wie Sie einen TURN-Server für BigBlueButton einrichten, damit Benutzer hinter restriktiven Firewalls eine Verbindung herstellen können.

Sie können auch bbb-install.sh verwenden, um die Schritte in diesem Dokument zu automatisieren.

Richten Sie einen TURN-Server ein

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 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 coturn- Dies Software benötigt Port 443 für die ausschließliche Verwendung in unserer empfohlenen Konfiguration. 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).

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 certbotvon Let's Encrypt, um auf einfache Weise kostenlose TLS-Zertifikate zu generieren. Zum Einrichten certbot 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 certbot Befehl wie folgt, um das Zertifikat zu generieren und zu ersetzen <turn.example.com> 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 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.
$ sudo mkdir -p /etc/letsencrypt/renewal-hooks/deploy

Erstellen Sie als Nächstes die Datei /etc/letsencrypt/renewal-hooks/deploy/coturnmit 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

  • coturn Konfiguration wird in der Datei gespeichert /etc/turnserver.conf.
  • 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 /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

Wir müssen schaffen dph.pem 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 /etc/systemd/system/coturn.service.d/override.conf 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 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

$ 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    # Initial copy of certificates 
$ sudo systemctl daemon-reload                         # Ensure the override file is loaded
$ sudo 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).

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 /usr/share/bbb-web/WEB-INF/classes/spring/turn-stun-servers.xml Verwenden Sie den folgenden Inhalt und nehmen Sie Änderungen vor:
  • Ersetzen Sie beide Instanzen von <turn.example.com> mit dem Hostnamen des TURN-Servers und ersetzen <secret_value> mit dem Geheimnis, in dem Sie konfiguriert haben turnserver.conf.
<?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>
               <ref bean="stun0"/>
           </set>
       </property>
       <property name="turnServers">
           <set>
               <ref bean="turn0"/>
               <ref bean="turn1"/>
           </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 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 detailsund 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 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/ , 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.
  • Führen Sie die folgenden Befehle aus und ersetzen Sie sie <youor-turn-server-host> 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 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.

Seiten in der Kategorie „Coturn“

Diese Kategorie enthält nur die folgende Seite.