Uma alteração recente no Matrix Call afeta a descoberta, mas não as credenciais ou portas TURN da Coturn. Em sua atualização de 21 de agosto de 2026, o Matrix.org informou que o Element Call 0.24 descontinuou a descoberta de transportes MatrixRTC por meio do /.well-known/matrix/clientarquivo do servidor doméstico. Implantações independentes do Element Call devem suportar o endpoint de transportes MatrixRTC; o Element Web/Desktop e o Element X mantiveram o método de descoberta antigo como alternativa durante a transição dos clientes. Isso é diferente da configuração TURN clássica.
Este guia configura o Coturn para o serviço TURN do Synapse, que fornece credenciais ICE temporárias para clientes que usam chamadas WebRTC tradicionais. As chamadas de grupo Element Call e MatrixRTC atuais usam uma Unidade de Encaminhamento Seletivo (SFU) do LiveKit e um serviço de autorização do MatrixRTC. O Coturn sozinho não substitui esses componentes. Se o seu objetivo é hospedar o Element Call em seu próprio servidor, use o caminho do LiveKit descrito no guia oficial do Element Call; adicione o Coturn somente se a arquitetura de mídia escolhida exigir um serviço TURN separado.
Escolha primeiro o caminho de chamada correto
| Caminho de chamada | O que configurar | Quando se aplica este guia da Coturn |
| Chamada WebRTC tradicional ou legada | Coturn mais Synapse turn_urise um segredo compartilhado | /voip/turnServerUtilize a configuração abaixo quando o cliente solicitar credenciais TURN do endpoint do Synapse . |
| MatrixRTC / Chamada de Elemento | Um LiveKit SFU, serviço de autorização MatrixRTC e descoberta de transporte de servidor doméstico. | O Coturn não substitui o LiveKit. O LiveKit inclui um serviço TURN integrado opcional; siga as suas próprias configurações de rede e TURN. |
Para o MatrixRTC no Synapse, o guia atual de auto-hospedagem do Element Call usa matrix_rtc.transportse habilita o registro de transporte do servidor doméstico por meio do recurso experimental documentado. O aviso do Matrix.org de 2026 afirma que essa alteração na descoberta é mais relevante para implantações independentes do Element Call; outros administradores poderiam preparar o endpoint enquanto os clientes compatíveis mantinham uma alternativa. Consulte o guia para os clientes e a versão do Synapse que você utiliza.
O que a Coturn faz
O STUN permite que um cliente WebRTC descubra o endereço de rede público que pode anunciar. O TURN retransmite mídia quando dois clientes não conseguem estabelecer uma conexão direta por meio de seus roteadores ou firewalls. O Coturn implementa ambos os serviços. Sem um servidor de retransmissão acessível, uma chamada pode tocar, mas permanecer em "Conectando" quando os participantes estão em redes restritivas ou não relacionadas.
Um servidor TURN precisa de um endereço IP público ou de um gateway NAT com um IP público e regras de encaminhamento corretas. Um servidor exclusivamente privado não pode funcionar como um relay de internet para usuários remotos do Matrix. Para uma pequena implementação do Synapse, você pode instalar o Coturn no servidor doméstico ou usar um host público separado. Um host separado oferece limites de firewall mais claros e escalabilidade independente; uma instalação no mesmo host é mais simples, mas requer regras de firewall cuidadosas para que o relay não exponha serviços privados.
1. Instale o Coturn e prepare uma chave secreta compartilhada.
No Debian ou Ubuntu, instale o pacote de distribuição:
sudo apt update
sudo apt install coturn
O pacote fornece um serviço systemd e o arquivo de configuração principal geralmente é /etc/turnserver.conf. Outras distribuições usam seus próprios nomes de pacote, gerenciamento de serviços e caminho de configuração.
Crie um segredo forte e privado. Por exemplo:
openssl rand -hex 32
Use o mesmo segredo no Coturn e no Synapse. Trate-o como uma senha: não reutilize um valor de exemplo da documentação, não o inclua em um repositório público nem em um relatório de bug público. Se a sua versão do Synapse for compatível turn_shared_secret_path, você pode armazenar o segredo em um arquivo protegido em vez de diretamente no YAML. O Synapse adicionou essa configuração na versão 1.116.0; verifique a versão instalada antes de usá-la.
2. Configure o Coturn para retransmissão autenticada.
Edite /etc/turnserver.confe defina o nome do serviço e a autenticação por segredo compartilhado. Substitua os espaços reservados para domínio e segredo:
listening-port=3478
tls-listening-port=5349
fingerprint
use-auth-secret
static-auth-secret=REPLACE_WITH_THE_SAME_RANDOM_SECRET
realm=turn.example.org
min-port=49152
max-port=65535
no-tcp-relay
no-multicast-peers
user-quota=12
total-quota=1200
syslog
use-auth-secretHabilita o mecanismo de credenciais TURN com tempo limitado usado pelo Synapse. Não configure acesso anônimo nem exponha um relay aberto. Os valores de cota acima são um ponto de partida extraído das diretrizes do Coturn do Synapse; ajuste-os de acordo com a quantidade de usuários e a capacidade esperadas. no-tcp-relayImpede que os clientes solicitem ao relay a conexão com destinos TCP arbitrários; isso não significa que você deva desabilitar o TCP como transporte de cliente para TURN.
O protocolo TURN pode ser usado indevidamente como um retransmissor para endereços de rede internos ou sensíveis. Aplique os intervalos de endereços bloqueados para pares no exemplo de segurança atual do Synapse Coturn, incluindo os intervalos relevantes para suas redes IPv4 e IPv6. Revise as regras antes de copiá-las, caso os usuários realmente precisem acessar pares em redes privadas. Além disso, mantenha o Coturn atualizado e monitore seus logs e quotas.
Defina o endereço público quando o Coturn estiver atrás de um NAT.
Se o host TURN estiver atrás de um roteador, adicione o endereço público dele à configuração para que o Coturn anuncie um endereço de retransmissão acessível:
external-ip=YOUR_PUBLIC_IPV4
listening-ip=YOUR_PRIVATE_IPV4
Substitua os valores de exemplo pelos endereços reais; o endereço de escuta é opcional se o Coturn já estiver vinculado à interface correta. Encaminhe o intervalo de escuta e retransmissão TURN do roteador para este servidor. Um endereço externo incompatível é uma causa comum de chamadas que funcionam na mesma LAN, mas falham entre redes diferentes.
3. Abra as portas de escuta e de retransmissão.
Permita as portas que correspondem à sua configuração do Coturn tanto no firewall do host quanto em qualquer firewall ou roteador na nuvem:
- TCP e UDP 3478 para o ouvinte TURN usual.
- UDP 49152–65535 para o intervalo de retransmissão padrão mostrado acima. Se você escolher um intervalo menor, configure o mesmo intervalo no Coturn e no firewall.
- A porta TCP 5349 é usada para TURN sobre TLS, e a porta UDP 5349 somente se você habilitar e pretender oferecer DTLS.
Para o UFW, um conjunto básico de regras de escuta UDP/TCP e retransmissão UDP pode ter a seguinte aparência:
sudo ufw allow 3478/tcp
sudo ufw allow 3478/udp
sudo ufw allow 49152:65535/udp
Adicione as regras 5349 somente quando o ouvinte TLS ou DTLS correspondente estiver configurado e anunciado. Verifique também o grupo de segurança do seu provedor; uma regra UFW em nível de host não pode substituir uma regra de entrada na nuvem bloqueada. Não publique a interface de controle administrativo do Coturn na Internet.
4. Configure o Synapse para emitir credenciais Coturn.
Adicione as seguintes configurações TURN à configuração ativa do Synapse, geralmente homeserver.yaml. O nome do host deve ser resolvido publicamente para o host TURN:
turn_uris:
- "turn:turn.example.org:3478?transport=udp"
- "turn:turn.example.org:3478?transport=tcp"
turn_shared_secret: "REPLACE_WITH_THE_SAME_RANDOM_SECRET"
turn_user_lifetime: 1h
turn_allow_guests: true
Os dois primeiros URIs anunciam transportes TURN comuns na porta 3478. Se o TLS estiver configurado e testado, você também pode anunciar um URI como `/tls/3478` turns:turn.example.org:5349?transport=tcp. Não anuncie um turns:URI a menos que o certificado, o listener, o firewall e a compatibilidade do cliente estejam todos configurados. O certificado TLS e a chave privada do Coturn são definidos com `<certificate>` certe ` <private> pkey` em sua configuração.
Configure turn_allow_guestsde acordo com as políticas do seu quarto e de hóspedes. Habilitar essa opção pode permitir que usuários não autenticados solicitem credenciais TURN, o que pode ser necessário para chamadas de hóspedes, mas aumenta o risco de abuso. Desabilitar essa opção pode tornar as chamadas instáveis para os hóspedes. Em ambos os casos, utilize monitoramento e cotas.
Reinicie o Coturn e o Synapse após alterar os arquivos:
sudo systemctl restart coturn
sudo systemctl restart matrix-synapse
Use o nome real da sua unidade systemd do Synapse, caso seja diferente. Recarregue ou reinicie os clientes afetados; as configurações TURN do Synapse são atualizadas periodicamente, portanto, um cliente pode não ver a alteração imediatamente.
Você deve habilitar o TURN sobre TLS?
Comece com UDP/TCP TURN na porta 3478 e confirme se um candidato a retransmissão funciona. Adicione TURN sobre TLS somente se as redes dos seus usuários precisarem, como firewalls corporativos que permitem tráfego semelhante a TLS, mas bloqueiam UDP normal. O TLS amplia a conectividade, mas adiciona renovação de certificado, um ouvinte adicional e verificações de compatibilidade do cliente.
Existe uma ressalva específica para o Matrix: o guia atual do Synapse Coturn alerta que o TLS/DTLS com certificados Let's Encrypt não funciona com clientes Matrix que utilizam a biblioteca WebRTC do Chromium, incluindo o Element para Android e iOS, conforme indicado no guia. Verifique a compatibilidade com as versões do seu cliente antes de publicar um URI TLS. O mesmo guia recomenda configurar primeiro o serviço básico e adicionar o TLS/DTLS posteriormente.
5. Verifique as credenciais e teste a partir de uma rede externa.
Primeiro, verifique se o Coturn está em execução e revise seus registros:
sudo systemctl status coturn
sudo journalctl -u coturn -f
Em seguida, a partir de uma sessão de cliente Matrix autenticada, inspecione a solicitação para o endpoint da API Cliente-Servidor atual do Synapse /_matrix/client/v3/voip/turnServer. Uma resposta bem-sucedida deve incluir um nome de usuário, senha, tempo de vida (TTL) e os URIs TURN que você configurou. Não compartilhe essa resposta publicamente; as credenciais são tokens de acesso temporários para o seu servidor de retransmissão.
Use o exemplo oficial WebRTC Trickle ICE para testar com um nome de usuário e senha retornados pelo Synapse. Adicione seu URI TURN e credenciais, execute o teste de coleta de ICE e procure um candidato cujo tipo seja relay. Um servidor que apenas responde a STUN pode mostrar um candidato reflexivo ao servidor, mas ainda assim falhar na retransmissão de mídia. Teste a partir de uma conexão móvel ou de uma rede fora da sua LAN e, em seguida, faça uma chamada real entre participantes em redes diferentes.
Diagnosticar falhas comuns
- Nenhuma credencial TURN aparece: verifique se o Synapse carregou a configuração correta, reiniciou com sucesso e se o segredo compartilhado está definido. Inspecione a resposta da solicitação para
/voip/turnServer.
- As credenciais aparecem, mas nenhum formulário de candidato a retransmissão é exibido: verifique a porta TCP/UDP 3478, o nome do host anunciado, a correspondência da chave secreta, os logs do Coturn e o intervalo de retransmissão UDP em todos os firewalls.
- As chamadas funcionam em uma LAN, mas falham em redes diferentes: inspeção
external-ip, encaminhamento de portas e a rota de retorno. O Coturn deve anunciar o endereço público que os clientes podem alcançar.
- As chamadas só são estabelecidas quando o TLS está desativado: confirme a cadeia de certificados, o ouvinte TLS,
turns:o URI anunciado e a compatibilidade específica do cliente.
- As chamadas tradicionais funcionam, mas as chamadas de elemento não: verifique a configuração de transporte do MatrixRTC/LiveKit separadamente. Um teste Coturn bem-sucedido não verifica o serviço de autorização SFU do LiveKit ou do MatrixRTC.
Para clientes de navegador, o diagnóstico WebRTC do navegador pode mostrar se a mídia selecionou um candidato a retransmissão. Para MatrixRTC, verifique se o Synapse publica o endpoint de transporte e se as rotas WebSocket e de autorização do LiveKit estão acessíveis. Teste tanto o endpoint atual quanto qualquer fallback de descoberta documentado exigido pelos clientes que você oferece suporte.
Referências de configuração