Eigene STUN- und TURN-Server für Discourse Voice konfigurieren

:warning: Wenn Ihr Forum bei uns gehostet wird, ist dies bereits auf Ihrer Site vorkonfiguriert. Dieser Leitfaden richtet sich an Administratoren, die Discourse selbst hosten.

Discourse Voice verwendet WebRTC für Sprach- und Videotelefonate. Es wird mit öffentlichen STUN-Servern ausgeliefert, um Teilnehmern eine direkte Verbindung zu ermöglichen. Administratoren können diese Server ersetzen und TURN hinzufügen, um Netzwerke zu unterstützen, in denen direkte Verbindungen fehlschlagen.

Für einen Server, der Ihrer Community gewidmet ist, empfehlen wir TURN mit Shared-Secret-Authentifizierung und einer leeren STUN-Einstellung. Dies ermöglicht die Ermittlung der öffentlichen Adresse und einen Relay-Fallback, ohne ein dauerhaftes TURN-Passwort verteilen zu müssen.

Dieser Leitfaden gilt für die Peer-to-Peer-Anrufe von Voice. Räume, die LiveKit verwenden, nutzen stattdessen die eigene ICE/TURN-Konfiguration von LiveKit. Mehr über die LiveKit-Konfiguration von Voice erfahren.

Was tun STUN und TURN?

  • STUN hilft einem Browser, seine öffentliche IP-Adresse und seinen Port zu ermitteln, damit er eine direkte Verbindung versuchen kann.
  • TURN leitet Medien weiter, wenn keine direkte Verbindung hergestellt werden kann.

Eine authentizierte TURN-Zuweisung liefert auch die öffentliche Adresse des Browsers zurück. WebRTC kann diese als server-reflexiven Kandidaten verwenden, was den Vorteil der Adressermittlung von STUN bietet, ohne einen separaten STUN-Server zu benötigen. TURN-Spezifikation.

Wenn TURN mit Shared-Secret konfiguriert ist, erlaubt Voice sowohl direkte als auch geroutete Verbindungen, selbst wenn die STUN-Einstellung leer ist. Die Konfiguration nur von TURN-Servern zwingt nicht jeden Anruf durch den Relay. ICE-Konfiguration von Voice.

1. Einen TURN-Server vorbereiten

Sie können einen verwalteten TURN-Dienst verwenden, der TURN REST API Shared-Secret-Authentifizierung unterstützt, oder coturn selbst betreiben.

Für ein Self-Hosted-Setup bereiten Sie Folgendes vor:

  • Einen Server mit einer öffentlichen IP-Adresse und ausreichender Bandbreite für geroutete Anrufe.
  • Einen Hostnamen wie turn.example.com, der direkt auf diesen Server zeigt.
  • Firewall-Zugriff für den TURN-Listener und den UDP-Relay-Portbereich.
  • Ein gültiges Zertifikat, wenn Sie TURN über TLS anbieten.

Die Browser der Teilnehmer verbinden sich direkt mit TURN. Ein gewöhnlicher HTTP-Reverse-Proxy oder CDN-Proxy kann keinen TURN-Verkehr übertragen.

Beispiel für eine coturn-Konfiguration

Generieren Sie ein zufälliges Geheimnis:

openssl rand -hex 32

Bewahren Sie das Ergebnis geheim. Sie werden denselben Wert in coturn und Discourse eingeben.

Verwenden Sie auf einem Server mit einer direkt zugewiesenen öffentlichen IP-Adresse den folgenden Code als Ausgangspunkt in /etc/turnserver.conf:

listening-port=3478

fingerprint
realm=turn.example.com

use-auth-secret
static-auth-secret=REPLACE_WITH_YOUR_RANDOM_SECRET

# Deaktiviert eigenständige STUN-Anfragen.
# Authentizierte TURN-Zuweisungen liefern weiterhin die öffentliche Adresse des Clients zurück.
no-stun

min-port=49152
max-port=65535

no-multicast-peers

# Dieses Beispiel startet ohne TLS.
no-tls
no-dtls

Ersetzen Sie den Hostnamen und das Geheimnis, schützen Sie die Konfigurationsdatei und starten Sie coturn neu. Entfernen Sie alle widersprüchlichen no-auth- oder statischen user=-Konfigurationen. Der Shared-Secret-Modus von Coturn aktiviert den Authentifizierungsmechanismus, den es intern benötigt. Coturn-Konferenzreferenz.

Erlauben Sie eingehenden Verkehr zu:

Port Protokoll Zweck
3478 UDP und TCP Browser-Verbindungen zu TURN
49152–65535 UDP Geroutete Medien

Erlauben Sie auch den entsprechenden ausgehenden Verkehr. Der Relay-Bereich muss mit min-port und max-port übereinstimmen.

Wenn der Server hinter NAT liegt, konfigurieren Sie die external-ip=PUBLIC_IP/PRIVATE_IP-Zuordnung von coturn und leiten Sie die Listener- und Relay-Ports weiter. Die Relay-Ports müssen ihre Portnummern durch NAT beibehalten. Coturn-Bereitstellungsoptionen.

TLS für restriktive Netzwerke hinzufügen

TURN über TLS bietet eine weitere Verbindungsoption für Teilnehmer, deren Netzwerke UDP blockieren.

Entfernen Sie no-tls und konfigurieren Sie:

tls-listening-port=5349
cert=/path/to/fullchain.pem
pkey=/path/to/privkey.pem

Öffnen Sie 5349/TCP, stellen Sie sicher, dass coturn das Zertifikat und den Schlüssel lesen kann, und starten Sie es nach Zertifikatsverlängerungen neu.

Sie können stattdessen 443/TCP verwenden, wenn dieser Port auf dem TURN-Server verfügbar ist. Dies kann in restriktiven Netzwerken hilfreich sein, obwohl einige Netzwerke auch nicht-HTTP-Verkehr auf Port 443 inspizieren und blockieren. Der UDP-Relay-Bereich wird weiterhin benötigt, wenn Browser TURN über TCP oder TLS erreichen. Coturn-Serverdokumentation.

2. Discourse konfigurieren

Suchen Sie in Admin → Einstellungen nach diesen Voice-Einstellungen:

Einstellung Wert
voice_stun_servers Leer — Standard-Einträge entfernen
voice_turn_secret Der Wert, der für static-auth-secret von coturn verwendet wird
voice_turn_secret_servers Ihre TURN-URIs, getrennt durch |
voice_turn_servers Leer
voice_turn_username Leer
voice_turn_credential Leer

Geben Sie für die oben genannte Konfiguration Folgendes in voice_turn_secret_servers ein:

turn:turn.example.com:3478?transport=udp|turn:turn.example.com:3478?transport=tcp

Wenn Sie TLS aktiviert haben, fügen Sie dessen Endpunkt hinzu:

turn:turn.example.com:3478?transport=udp|turn:turn.example.com:3478?transport=tcp|turns:turn.example.com:5349?transport=tcp

Verwenden Sie turn:- und turns:-URIs, ohne //. Listen Sie nur Endpunkte auf, die Ihr Server tatsächlich unterstützt.

Die Liste voice_turn_secret_servers verwendet Credentials, die aus dem Shared Secret generiert werden. Die separate Liste voice_turn_servers verwendet einen festen Benutzernamen und ein Passwort. Definitionen der Voice-Einstellungen.

Speichern Sie die Einstellungen und bitten Sie die Teilnehmer, Anrufe zu verlassen und erneut beizutreten, um die neue Konfiguration zu erhalten.

3. Das Setup überprüfen

Testen Sie mit zwei Teilnehmern in verschiedenen Netzwerken, z. B. Home-Breitband und Mobilfunkdaten. Stellen Sie sicher, dass der Audio in beide Richtungen funktioniert, und testen Sie dann Video und Bildschirmfreigabe.

Öffnen Sie in Chromium-Browsern chrome://webrtc-internals, bevor Sie beitreten:

  • Ein srflx-Kandidat stellt eine ermittelte öffentliche Adresse dar.
  • Ein relay-Kandidat stellt einen verfügbaren TURN-Relay dar.
  • Das ausgewählte Kandidatenpaar zeigt die Verbindung an, die tatsächlich Medien überträgt.

Ein erfolgreicher direkter Anruf beweist nicht, dass das Relaying funktioniert. Testen Sie auch aus einem Netzwerk, das TURN erfordert, oder verwenden Sie einen WebRTC-Testclient mit iceTransportPolicy: "relay" und temporären Credentials.

Prüfen Sie die Logs von coturn auf erfolgreiche authentizierte Zuweisungen. Anfragen ohne gültige Credentials dürfen keine Relay-Zuweisung erhalten. Eine anfängliche 401-Authentifizierungsanfrage ist normal; wiederholte Authentifizierungsfehler müssen untersucht werden.

Halten Sie den Server Ihrer Community gewidmet

Das Shared Secret bleibt auf Discourse und dem TURN-Server. Teilnehmer erhalten stattdessen temporäre Credentials. Voice generiert derzeit Credentials, die 12 Stunden lang für die Erstellung von Zuweisungen gültig sind; eine etablierte Zuweisung kann fortgesetzt werden, solange sie erneuert wird. Credential-Generierung von Voice.

Dies verhindert einen anonymen offenen Relay, aber TURN-Credentials sind nicht an einen Browser-Herkunftsort gebunden: Ein Teilnehmer kann seine temporären Credentials kopieren und wiederverwenden. Um Missbrauch zu begrenzen:

  • Beschränken Sie den Voice-Zugriff auf die vorgesehenen Gruppen.
  • Überwachen Sie die Relay-Bandbreite und die Anzahl der Zuweisungen.
  • Setzen Sie coturn-Zuweisungsquoten und Bandbreitenlimits, die Ihrer Community entsprechen.
  • Blockieren Sie den Relay-Zugriff auf private, link-lokale und andere interne Ziele, die vom TURN-Host erreichbar sind.
  • Halten Sie coturn auf dem neuesten Stand und rotieren Sie das Shared Secret, wenn es offengelegt wurde.

Verwenden Sie ein dediziertes Secret für diese Discourse-Bereitstellung. Wenn no-stun aktiviert ist, bietet der Server auch keinen anonymen eigenständigen STUN-Dienst mehr an. Coturn-Authentifizierung und Zugriffskontrollen.

Alternativen

Nur die öffentlichen STUN-Server ersetzen

Setzen Sie voice_stun_servers auf Ihre eigenen STUN-URIs, getrennt durch |:

stun:stun.example.com:3478

Lassen Sie die TURN-Einstellungen leer, wenn Sie keinen Relay benötigen. STUN allein kann Anrufe nicht in jedem Netzwerk zum Laufen bringen. Ein mit no-stun konfigurierter coturn-Server kann diesen Endpunkt nicht bereitstellen.

TURN mit festem Benutzernamen und Passwort verwenden

Wenn Ihr Anbieter keine Shared-Secret-Authentifizierung unterstützt, konfigurieren Sie voice_turn_servers, voice_turn_username und voice_turn_credential. Lassen Sie die Shared-Secret-Einstellungen leer.

Teilnehmer erhalten diese festen Credentials, was deren Wiederverwendung außerhalb Ihrer Site erleichtert. Außerdem erzwingt Voice derzeit Relay-Verbindungen, wenn statische TURN-Server konfiguriert sind und die STUN-Liste leer ist. Bevorzugen Sie die Shared-Secret-Authentifizierung, wenn Ihr Anbieter sie unterstützt. ICE-Konfiguration von Voice.

2 „Gefällt mir“