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
srflxrappresenta un indirizzo pubblico scoperto. - Un candidato
relayrappresenta 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.