Configura i tuoi server STUN e TURN per Discourse Voice

:warning: Se il tuo sito è ospitato da noi, questa configurazione è già preimpostata. Questa guida è destinata agli amministratori che ospitano autonomamente Discourse.

Discourse Voice utilizza WebRTC per le chiamate vocali e video. Viene fornito con server STUN pubblici per aiutare i partecipanti a connettersi direttamente. Gli amministratori possono sostituire tali server e aggiungere TURN per supportare le reti in cui le connessioni dirette non riescono.

Per un server dedicato alla tua community, consigliamo l’uso di TURN con autenticazione tramite segreto condiviso e una configurazione STUN vuota. Questo fornisce la scoperta dell’indirizzo pubblico e un fallback tramite relay senza distribuire una password TURN permanente.

Questa guida si applica alle chiamate peer-to-peer di Voice. Le stanze che utilizzano LiveKit utilizzano la propria configurazione ICE/TURN di LiveKit. Scopri la configurazione LiveKit di Voice.

Cosa fanno STUN e TURN?

  • STUN aiuta il browser a scoprire il proprio indirizzo IP e la porta pubblici, consentendo di tentare una connessione diretta.
  • TURN inoltra i media quando non è possibile stabilire una connessione diretta.

Un’allocazione TURN autenticata restituisce anche l’indirizzo pubblico del browser. WebRTC può utilizzare questo come candidato riflessivo del server, fornendo il vantaggio della scoperta dell’indirizzo di STUN senza un server STUN separato. Specifiche di TURN.

Con TURN a segreto condiviso configurato, Voice consente sia connessioni dirette che relay, anche quando la sua configurazione STUN è vuota. Configurare solo i server TURN non forza ogni chiamata a passare attraverso il relay. Configurazione ICE di Voice.

1. Preparare un server TURN

Puoi utilizzare un servizio TURN gestito che supporta l’autenticazione a segreto condiviso tramite API REST di TURN, oppure eseguire coturn da solo.

Per un’installazione self-hosted, prepara:

  • Un server con un indirizzo IP pubblico e una larghezza di banda sufficiente per le chiamate relay.
  • Un nome host come turn.example.com, che punti direttamente a quel server.
  • Accesso al firewall per l’ascoltatore TURN e l’intervallo di porte UDP di relay.
  • Un certificato valido se offri TURN tramite TLS.

I browser dei partecipanti si connettono direttamente a TURN. Un normale proxy inverso HTTP o un proxy CDN non possono gestire il traffico TURN.

Esempio di configurazione coturn

Genera un segreto casuale:

openssl rand -hex 32

Mantieni il risultato privato. Inserirai lo stesso valore in coturn e in Discourse.

Su un server con un indirizzo IP pubblico assegnato direttamente, usa il seguente come punto di partenza in /etc/turnserver.conf:

listening-port=3478

fingerprint
realm=turn.example.com

use-auth-secret
static-auth-secret=SOSTITUISCI_CON_IL_TUO_SEGRETO_CASUALE

# Disabilita le richieste STUN standalone.
# Le allocazioni TURN autenticate restituiscono comunque l'indirizzo pubblico del client.
no-stun

min-port=49152
max-port=65535

no-multicast-peers

# Questo esempio inizia senza TLS.
no-tls
no-dtls

Sostituisci il nome host e il segreto, proteggi il file di configurazione e riavvia coturn. Rimuovi qualsiasi configurazione no-auth o user= statica in conflitto. La modalità a segreto condiviso di Coturn abilita il meccanismo di autenticazione di cui ha bisogno internamente. Riferimento alla configurazione di Coturn.

Consenti il traffico in ingresso a:

Porta Protocollo Scopo
3478 UDP e TCP Connessioni del browser a TURN
49152–65535 UDP Media relay

Consenti anche il traffico in uscita corrispondente. L’intervallo di relay deve corrispondere a min-port e max-port.

Se il server si trova dietro un NAT, configura la mappatura external-ip=IP_PUBBLICO/IP_PRIVATO di coturn e inoltra le porte dell’ascoltatore e di relay. Le porte di relay devono mantenere i propri numeri di porta attraverso il NAT. Opzioni di deployment di Coturn.

Aggiungere TLS per reti restrittive

TURN tramite TLS fornisce un’altra opzione di connessione per i partecipanti le cui reti bloccano UDP.

Rimuovi no-tls e configura:

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

Apri 5349/TCP, assicurati che coturn possa leggere il certificato e la chiave, e riavvialo dopo il rinnovo dei certificati.

Puoi usare 443/TCP al posto di questo, se quella porta è disponibile sul server TURN. Questo potrebbe essere utile su reti restrittive, anche se alcune reti ispezionano e bloccano anche il traffico non-HTTP sulla porta 443. L’intervallo di relay UDP è comunque richiesto quando i browser raggiungono TURN tramite TCP o TLS. Documentazione del server Coturn.

2. Configurare Discourse

In Admin → Settings, cerca queste impostazioni di Voice:

Impostazione Valore
voice_stun_servers Vuoto — rimuovere le voci predefinite
voice_turn_secret Il valore usato per static-auth-secret di coturn
voice_turn_secret_servers I tuoi URI TURN, separati da |
voice_turn_servers Vuoto
voice_turn_username Vuoto
voice_turn_credential Vuoto

Per la configurazione sopra, inserisci questo in voice_turn_secret_servers:

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

Se hai abilitato TLS, aggiungi il suo endpoint:

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

Usa URI turn: e turns:, senza //. Elenca solo gli endpoint supportati effettivamente dal tuo server.

L’elenco voice_turn_secret_servers utilizza credenziali generate dal segreto condiviso. L’elenco separato voice_turn_servers utilizza un nome utente e una password fissi. Definizioni delle impostazioni di Voice.

Salva le impostazioni, quindi fai uscire e rientrare i partecipanti dalle chiamate per ottenere la nuova configurazione.

3. Verificare l’impostazione

Testa con due partecipanti su reti diverse, come la banda larga domestica e i dati mobili. Conferma che l’audio funzioni in entrambe le direzioni, quindi testa video e condivisione dello schermo.

Nei browser Chromium, apri chrome://webrtc-internals prima di unirti:

  • Un candidato srflx rappresenta un indirizzo pubblico scoperto.
  • Un candidato relay rappresenta un relay TURN disponibile.
  • La coppia di candidati selezionata mostra la connessione che trasporta effettivamente i media.

Una chiamata diretta riuscita non dimostra che il relay funzioni. Testa anche da una rete che richiede TURN, oppure usa un client di test WebRTC con iceTransportPolicy: "relay" e credenziali temporanee.

Controlla i log di coturn per le allocazioni autenticate riuscite. Le richieste senza credenziali valide non devono ottenere un’allocazione di relay. Una sfida di autenticazione iniziale 401 è normale; i fallimenti ripetuti dell’autenticazione richiedono un’indagine.

Mantieni il server dedicato alla tua community

Il segreto condiviso rimane su Discourse e sul server TURN. I partecipanti ricevono invece credenziali temporanee. Voice attualmente genera credenziali valide per la creazione di allocazioni per 12 ore; un’allocazione stabilita può continuare finché viene aggiornata. Generazione delle credenziali di Voice.

Questo impedisce un relay aperto anonimo, ma le credenziali TURN non sono legate a un’origine del browser: un partecipante può copiare e riutilizzare le proprie credenziali temporanee. Per limitare gli abusi:

  • Restringi l’accesso a Voice ai gruppi previsti.
  • Monitora la larghezza di banda di relay e il numero di allocazioni.
  • Imposta quote di allocazione e limiti di larghezza di banda di coturn appropriati alla tua community.
  • Blocca l’accesso al relay a destinazioni private, link-local e altre destinazioni interne raggiungibili dall’host TURN.
  • Tieni coturn aggiornato e ruota il segreto condiviso se viene esposto.

Usa un segreto dedicato per questa installazione di Discourse. Con no-stun abilitato, il server smette anche di offrire il servizio STUN standalone anonimo. Autenticazione e controlli di accesso di Coturn.

Alternative

Sostituire solo i server STUN pubblici

Imposta voice_stun_servers sui tuoi URI STUN, separati da |:

stun:stun.example.com:3478

Lascia vuote le impostazioni TURN se non hai bisogno di un relay. STUN da solo non può far funzionare le chiamate su ogni rete. Un server coturn configurato con no-stun non può servire questo endpoint.

Usare TURN con un nome utente e una password fissi

Se il tuo provider non supporta l’autenticazione a segreto condiviso, configura voice_turn_servers, voice_turn_username e voice_turn_credential. Lascia vuote le impostazioni a segreto condiviso.

I partecipanti ricevono quelle credenziali fisse, il che le rende più facili da riutilizzare al di fuori del tuo sito. Inoltre, Voice attualmente forza le connessioni relay quando sono configurati server TURN statici e l’elenco STUN è vuoto. Preferisci l’autenticazione a segreto condiviso quando il tuo provider la supporta. Configurazione ICE di Voice.

2 Mi Piace