Se você é hospedado por nós, isso já está pré-configurado no seu site. Este guia é para administradores que hospedam o Discourse por conta própria.
O Discourse Voice usa WebRTC para chamadas de voz e vídeo. Ele vem com servidores STUN públicos para ajudar os participantes a se conectarem diretamente. Os administradores podem substituir esses servidores e adicionar TURN para suportar redes em que as conexões diretas falham.
Para um servidor dedicado à sua comunidade, recomendamos o uso de TURN com autenticação por segredo compartilhado e uma configuração STUN vazia. Isso fornece descoberta de endereço público e um fallback de retransmissão sem distribuir uma senha TURN permanente.
Este guia se aplica às chamadas ponto a ponto do Voice. Salas que usam o LiveKit utilizam a própria configuração ICE/TURN do LiveKit. Saiba mais sobre a configuração do LiveKit no Voice.
O que STUN e TURN fazem?
- STUN ajuda um navegador a descobrir seu endereço IP e porta públicos para que ele possa tentar uma conexão direta.
- TURN retransmite a mídia quando uma conexão direta não pode ser estabelecida.
Uma alocação TURN autenticada também retorna o endereço público do navegador. O WebRTC pode usar isso como um candidato reflexivo do servidor, fornecendo o benefício de descoberta de endereço do STUN sem um servidor STUN separado. Especificação do TURN.
Com o TURN por segredo compartilhado configurado, o Voice permite tanto conexões diretas quanto retransmitidas, mesmo quando sua configuração STUN está vazia. Configurar apenas servidores TURN não força todas as chamadas a passarem pela retransmissão. Configuração ICE do Voice.
1. Prepare um servidor TURN
Você pode usar um serviço de TURN gerenciado que suporte autenticação de segredo compartilhado da API REST do TURN ou executar o coturn por conta própria.
Para uma configuração auto-hospedada, prepare:
- Um servidor com um endereço IP público e largura de banda suficiente para chamadas retransmitidas.
- Um nome de host, como
turn.example.com, apontando diretamente para esse servidor. - Acesso de firewall para o listener TURN e a faixa de portas UDP de retransmissão.
- Um certificado válido, se você oferecer TURN via TLS.
Os navegadores dos participantes se conectam diretamente ao TURN. Um proxy reverso HTTP comum ou um proxy de CDN não pode transportar tráfego TURN.
Exemplo de configuração do coturn
Gere um segredo aleatório:
openssl rand -hex 32
Mantenha o resultado em sigilo. Você inserirá o mesmo valor no coturn e no Discourse.
Em um servidor com um IP público diretamente atribuído, use o seguinte como ponto de partida em /etc/turnserver.conf:
listening-port=3478
fingerprint
realm=turn.example.com
use-auth-secret
static-auth-secret=SUBSTITUA_PELO_SEU_SEGREDO_ALEATORIO
# Desativa solicitações STUN independentes.
# Alocações TURN autenticadas ainda retornam o endereço público do cliente.
no-stun
min-port=49152
max-port=65535
no-multicast-peers
# Este exemplo inicia sem TLS.
no-tls
no-dtls
Substitua o nome de host e o segredo, proteja o arquivo de configuração e reinicie o coturn. Remova qualquer configuração conflitante de no-auth ou user= estática. O modo de segredo compartilhado do Coturn ativa o mecanismo de autenticação de que ele precisa internamente. Referência de configuração do Coturn.
Permita o tráfego de entrada para:
| Porta | Protocolo | Finalidade |
|---|---|---|
3478 |
UDP e TCP | Conexões do navegador ao TURN |
49152–65535 |
UDP | Mídia retransmitida |
Permita também o tráfego de saída correspondente. A faixa de retransmissão deve corresponder a min-port e max-port.
Se o servidor estiver atrás de NAT, configure o mapeamento external-ip=IP_PUBLICO/IP_PRIVADO do coturn e encaminhe as portas do listener e de retransmissão. As portas de retransmissão devem manter seus números através do NAT. Opções de implantação do Coturn.
Adicione TLS para redes restritivas
TURN via TLS fornece outra opção de conexão para participantes cujas redes bloqueiam UDP.
Remova no-tls e configure:
tls-listening-port=5349
cert=/caminho/para/fullchain.pem
pkey=/caminho/para/privkey.pem
Abra a porta 5349/TCP, garanta que o coturn possa ler o certificado e a chave, e reinicie-o após as renovações de certificado.
Você pode usar 443/TCP em vez disso, se essa porta estiver disponível no servidor TURN. Isso pode ajudar em redes restritivas, embora algumas redes também inspecionem e bloqueiem tráfego não-HTTP na porta 443. A faixa de retransmissão UDP ainda é necessária quando os navegadores acessam o TURN via TCP ou TLS. Documentação do servidor Coturn.
2. Configure o Discourse
Em Administração → Configurações, pesquise por estas configurações de Voice:
| Configuração | Valor |
|---|---|
voice_stun_servers |
Vazio — remova as entradas padrão |
voice_turn_secret |
O valor usado para static-auth-secret do coturn |
voice_turn_secret_servers |
Seus URIs TURN, separados por | |
voice_turn_servers |
Vazio |
voice_turn_username |
Vazio |
voice_turn_credential |
Vazio |
Para a configuração acima, insira o seguinte em voice_turn_secret_servers:
turn:turn.example.com:3478?transport=udp|turn:turn.example.com:3478?transport=tcp
Se você ativou o TLS, adicione seu endpoint:
turn:turn.example.com:3478?transport=udp|turn:turn.example.com:3478?transport=tcp|turns:turn.example.com:5349?transport=tcp
Use URIs turn: e turns:, sem //. Liste apenas endpoints que seu servidor realmente suporta.
A lista voice_turn_secret_servers usa credenciais geradas a partir do segredo compartilhado. A lista separada voice_turn_servers usa um nome de usuário e senha fixos. Definições de configuração do Voice.
Salve as configurações e, em seguida, peça aos participantes para saírem e entrarem novamente nas chamadas para obter a nova configuração.
3. Verifique a configuração
Teste com dois participantes em redes diferentes, como banda larga residencial e dados móveis. Confirme que o áudio funciona em ambas as direções e, em seguida, teste vídeo e compartilhamento de tela.
Em navegadores Chromium, abra chrome://webrtc-internals antes de entrar:
- Um candidato
srflxrepresenta um endereço público descoberto. - Um candidato
relayrepresenta um retransmissor TURN disponível. - O par de candidatos selecionado mostra a conexão que está efetivamente transportando a mídia.
Uma chamada direta bem-sucedida não prova que a retransmissão funciona. Teste também de uma rede que exija TURN ou use um cliente de teste WebRTC com iceTransportPolicy: "relay" e credenciais temporárias.
Verifique os logs do coturn para alocações autenticadas bem-sucedidas. Solicitações sem credenciais válidas não devem obter uma alocação de retransmissão. Um desafio de autenticação 401 inicial é normal; falhas repetidas de autenticação precisam de investigação.
Mantenha o servidor dedicado à sua comunidade
O segredo compartilhado permanece no Discourse e no servidor TURN. Os participantes recebem credenciais temporárias em vez disso. O Voice atualmente gera credenciais válidas para criar alocações por 12 horas; uma alocação estabelecida pode continuar enquanto for renovada. Geração de credenciais do Voice.
Isso impede um retransmissor aberto anônimo, mas as credenciais TURN não estão vinculadas a uma origem de navegador: um participante pode copiar e reutilizar suas credenciais temporárias. Para limitar o abuso:
- Restrinja o acesso ao Voice aos grupos pretendidos.
- Monitore a largura de banda de retransmissão e as contagens de alocação.
- Defina cotas de alocação e limites de largura de banda do coturn apropriados para a sua comunidade.
- Bloqueie o acesso de retransmissão a destinos privados, link-local e outros destinos internos acessíveis a partir do host TURN.
- Mantenha o coturn atualizado e rotacione o segredo compartilhado se ele for exposto.
Use um segredo dedicado para esta implantação do Discourse. Com no-stun ativado, o servidor também para de oferecer o serviço STUN independente anônimo. Autenticação e controles de acesso do Coturn.
Alternativas
Substituir apenas os servidores STUN públicos
Defina voice_stun_servers para seus próprios URIs STUN, separados por |:
stun:stun.example.com:3478
Deixe as configurações TURN vazias se você não precisar de retransmissão. O STUN sozinho não pode fazer com que as chamadas funcionem em todas as redes. Um servidor coturn configurado com no-stun não pode atender a este endpoint.
Usar TURN com nome de usuário e senha fixos
Se seu provedor não suportar autenticação por segredo compartilhado, configure voice_turn_servers, voice_turn_username e voice_turn_credential. Deixe as configurações de segredo compartilhado vazias.
Os participantes recebem essas credenciais fixas, o que as torna mais fáceis de reutilizar fora do seu site. Além disso, o Voice atualmente força conexões de retransmissão quando servidores TURN estáticos são configurados e a lista STUN está vazia. Prefira a autenticação por segredo compartilhado quando seu provedor a suportar. Configuração ICE do Voice.