Si tu sitio está alojado por nosotros, esto ya está preconfigurado en tu sitio. Esta guía es para administradores que autoalojan Discourse.
Discourse Voice utiliza WebRTC para llamadas de voz y video. Incluye servidores STUN públicos para ayudar a los participantes a conectarse directamente. Los administradores pueden reemplazar esos servidores y agregar TURN para soportar redes donde las conexiones directas fallan.
Para un servidor dedicado a tu comunidad, recomendamos TURN con autenticación de secreto compartido y una configuración STUN vacía. Esto proporciona el descubrimiento de direcciones públicas y un respaldo de reenvío sin distribuir una contraseña TURN permanente.
Esta guía se aplica a las llamadas entre pares de Voice. Las salas que utilizan LiveKit usan la propia configuración ICE/TURN de LiveKit en su lugar. Aprende sobre la configuración de LiveKit para Voice.
¿Qué hacen STUN y TURN?
- STUN ayuda a un navegador a descubrir su dirección IP y puerto públicos para que pueda intentar una conexión directa.
- TURN reenvía los medios cuando no se puede establecer una conexión directa.
Una asignación TURN autenticada también devuelve la dirección pública del navegador. WebRTC puede usar esto como un candidato reflexivo de servidor, proporcionando el beneficio de descubrimiento de direcciones de STUN sin un servidor STUN separado. Especificación de TURN.
Con TURN de secreto compartido configurado, Voice permite tanto conexiones directas como reenviadas, incluso cuando su configuración STUN está vacía. Configurar solo servidores TURN no fuerza todas las llamadas a pasar por el reenvío. Configuración ICE de Voice.
1. Preparar un servidor TURN
Puedes usar un servicio TURN administrado que soporte autenticación de secreto compartido mediante la API REST de TURN, o ejecutar coturn tú mismo.
Para una configuración autoalojada, prepara:
- Un servidor con una dirección IP pública y ancho de banda suficiente para llamadas reenviadas.
- Un nombre de host como
turn.example.com, que apunte directamente a ese servidor. - Acceso de firewall para su listener TURN y el rango de puertos UDP de reenvío.
- Un certificado válido si ofreces TURN sobre TLS.
Los navegadores de los participantes se conectan directamente a TURN. Un proxy inverso HTTP ordinario o un proxy CDN no pueden transportar tráfico TURN.
Ejemplo de configuración de coturn
Genera un secreto aleatorio:
openssl rand -hex 32
Mantén el resultado privado. Ingresarás el mismo valor en coturn y en Discourse.
En un servidor con una dirección IP pública asignada directamente, usa lo siguiente como punto de partida en /etc/turnserver.conf:
listening-port=3478
fingerprint
realm=turn.example.com
use-auth-secret
static-auth-secret=REPLACE_WITH_YOUR_RANDOM_SECRET
# Deshabilita las solicitudes STUN independientes.
# Las asignaciones TURN autenticadas aún devuelven la dirección pública del cliente.
no-stun
min-port=49152
max-port=65535
no-multicast-peers
# Este ejemplo comienza sin TLS.
no-tls
no-dtls
Reemplaza el nombre de host y el secreto, protege el archivo de configuración y reinicia coturn. Elimina cualquier configuración no-auth o user= estática que entre en conflicto. El modo de secreto compartido de Coturn habilita el mecanismo de autenticación que necesita internamente. Referencia de configuración de Coturn.
Permite el tráfico entrante a:
| Puerto | Protocolo | Propósito |
|---|---|---|
3478 |
UDP y TCP | Conexiones de navegador a TURN |
49152–65535 |
UDP | Medios reenviados |
Permite también el tráfico saliente correspondiente. El rango de reenvío debe coincidir con min-port y max-port.
Si el servidor está detrás de NAT, configura el mapeo external-ip=PUBLIC_IP/PRIVATE_IP de coturn y reenvía los puertos del listener y de reenvío. Los puertos de reenvío deben mantener sus números a través de NAT. Opciones de despliegue de Coturn.
Agregar TLS para redes restrictivas
TURN sobre TLS proporciona otra opción de conexión para participantes cuyas redes bloquean UDP.
Elimina no-tls y configura:
tls-listening-port=5349
cert=/path/to/fullchain.pem
pkey=/path/to/privkey.pem
Abre 5349/TCP, asegúrate de que coturn pueda leer el certificado y la clave, y reinícialo después de las renovaciones del certificado.
Puedes usar 443/TCP en su lugar si ese puerto está disponible en el servidor TURN. Esto puede ayudar en redes restrictivas, aunque algunas redes también inspeccionan y bloquean el tráfico no HTTP en el puerto 443. El rango UDP de reenvío sigue siendo necesario cuando los navegadores llegan a TURN a través de TCP o TLS. Documentación del servidor Coturn.
2. Configurar Discourse
En Administración → Configuración, busca estas configuraciones de Voice:
| Configuración | Valor |
|---|---|
voice_stun_servers |
Vacío — elimina las entradas predeterminadas |
voice_turn_secret |
El valor utilizado para static-auth-secret de coturn |
voice_turn_secret_servers |
Tus URI de TURN, separados por | |
voice_turn_servers |
Vacío |
voice_turn_username |
Vacío |
voice_turn_credential |
Vacío |
Para la configuración anterior, ingresa esto en voice_turn_secret_servers:
turn:turn.example.com:3478?transport=udp|turn:turn.example.com:3478?transport=tcp
Si habilitaste TLS, agrega su punto final:
turn:turn.example.com:3478?transport=udp|turn:turn.example.com:3478?transport=tcp|turns:turn.example.com:5349?transport=tcp
Usa URI turn: y turns:, sin //. Enumera solo los puntos finales que tu servidor realmente admite.
La lista voice_turn_secret_servers usa credenciales generadas a partir del secreto compartido. La lista separada voice_turn_servers usa un nombre de usuario y contraseña fijos. Definiciones de configuración de Voice.
Guarda las configuraciones y luego pide a los participantes que abandonen y vuelvan a unirse a las llamadas para obtener la nueva configuración.
3. Verificar la configuración
Prueba con dos participantes en redes diferentes, como banda ancha doméstica y datos móviles. Confirma que el audio funcione en ambas direcciones, luego prueba el video y el compartir pantalla.
En navegadores Chromium, abre chrome://webrtc-internals antes de unirse:
- Un candidato
srflxrepresenta una dirección pública descubierta. - Un candidato
relayrepresenta un reenvío TURN disponible. - El par de candidatos seleccionado muestra la conexión que realmente transporta los medios.
Una llamada directa exitosa no demuestra que el reenvío funcione. Prueba también desde una red que requiera TURN, o usa un cliente de prueba WebRTC con iceTransportPolicy: "relay" y credenciales temporales.
Revisa los registros de coturn para asignaciones autenticadas exitosas. Las solicitudes sin credenciales válidas no deben obtener una asignación de reenvío. Un desafío de autenticación 401 inicial es normal; los fallos repetidos de autenticación requieren investigación.
Mantén el servidor dedicado a tu comunidad
El secreto compartido permanece en Discourse y en el servidor TURN. Los participantes reciben credenciales temporales en su lugar. Voice actualmente genera credenciales válidas para crear asignaciones durante 12 horas; una asignación establecida puede continuar mientras se renueva. Generación de credenciales de Voice.
Esto previene un reenvío abierto anónimo, pero las credenciales TURN no están vinculadas a un origen de navegador: un participante puede copiar y reutilizar sus credenciales temporales. Para limitar el abuso:
- Restringe el acceso a Voice a los grupos previstos.
- Monitorea el ancho de banda de reenvío y las cantidades de asignaciones.
- Establece cuotas de asignación y límites de ancho de banda en coturn apropiados para tu comunidad.
- Bloquea el acceso de reenvío a destinos privados, enlazados localmente y otros destinos internos alcanzables desde el host TURN.
- Mantén coturn actualizado y rota el secreto compartido si se expone.
Usa un secreto dedicado para este despliegue de Discourse. Con no-stun habilitado, el servidor también deja de ofrecer el servicio STUN independiente anónimo. Autenticación y controles de acceso de Coturn.
Alternativas
Reemplazar solo los servidores STUN públicos
Establece voice_stun_servers en tus propias URI STUN, separadas por |:
stun:stun.example.com:3478
Deja las configuraciones TURN vacías si no necesitas un reenvío. STUN por sí solo no puede hacer que las llamadas funcionen en todas las redes. Un servidor coturn configurado con no-stun no puede servir este punto final.
Usar TURN con un nombre de usuario y contraseña fijos
Si tu proveedor no admite la autenticación de secreto compartido, configura voice_turn_servers, voice_turn_username y voice_turn_credential. Deja las configuraciones de secreto compartido vacías.
Los participantes reciben esas credenciales fijas, lo que las hace más fáciles de reutilizar fuera de tu sitio. Además, Voice actualmente fuerza conexiones de reenvío cuando se configuran servidores TURN estáticos y la lista STUN está vacía. Prefiere la autenticación de secreto compartido cuando tu proveedor la admita. Configuración ICE de Voice.