|
|
(168 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]] |
| | |
| = TURN-Protokoll =
| |
| * Für BigBlueButton muss 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.
| |
| | |
| = 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 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.
| |
| | |
| = Software =
| |
| * 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 installiert werden:
| |
| # apt update
| |
| # apt install coturn
| |
| * Sie können auch [https://github.com/bigbluebutton/bbb-install#install-a-turn-server bbb-install.sh] verwenden, um die Schritte in diesem Dokument zu automatisieren.
| |
| | |
| '''Hinweis'''
| |
| | |
| coturn startet nicht automatisch, bis die Konfiguration angewendet wird (siehe unten).
| |
| | |
| = DNS =
| |
| == DNS-Eintrag ==
| |
| * 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
| |
| | |
| == 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"
| |
| |-
| |
| ! | Ports
| |
| ! | Protokoll
| |
| ! | Beschreibung
| |
| |-
| |
| || 3478
| |
| || TCP / UDP
| |
| || Coturn Listening Port
| |
| |-
| |
| || 443
| |
| || TCP / UDP
| |
| || TLS-Abhörport
| |
| |-
| |
| || 32768-65535
| |
| || UDP
| |
| || Relaisanschlussbereich
| |
| |-
| |
| |}
| |
| | |
| = Zertifikate =
| |
| * [[certbot]] verwenden, um von [https://letsencrypt.org/ Let's Encrypt] TLS-Zertifikate zu generieren
| |
| # certbot certonly --standalone --preferred-challenges http -d <turn.example.com>
| |
| | |
| * Aktuelle Versionen des Befehls certbot richten standardmäßig die 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
| |
| | |
| 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.
| |
| # chmod 0755 /etc/letsencrypt/renewal-hooks/deploy/coturn
| |
| | |
| = Coturn konfigurieren =
| |
| * <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
| |
| | |
| == Erstellen der Datei <tt>dph.pem</tt> ==
| |
| # mkdir -p /etc/turnserver
| |
| # 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.
| |
| # 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
| |
| | |
| = 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.
| |
| | |
| * 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 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 =
| |
| == Intern ==
| |
| TODO
| |
| == 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:Server]]
| |
| [[Kategorie:BigBlueButton]] | | [[Kategorie:BigBlueButton]] |
| [[Kategorie:Nextcloud:Talk]] | | [[Kategorie:Nextcloud/Talk]] |