coturn поднимался, был healthy и слушал 3478 — но клиенты о нём никогда не узнавали: встроенный TURN выключен (`turn.enabled: false`), внешний в конфигурации не объявлен, фронтенд `iceServers` не задаёт. За всё время работы сервера в логах coturn нет ни одной аллокации. Следствие: у участников из сетей, где прямое UDP-соединение не проходит, не было relay-фолбэка вообще — только прямой UDP и TCP 7881. На нагрузочном тесте 28.07 все разрывы `PEER_CONNECTION_DISCONNECTED` пришлись на внешних участников и ни одного — на офисных. Добавлена секция `rtc.turn_servers` (UDP и TCP на 3478). Эти серверы только анонсируются клиенту в списке ICE — сам SFU через них не ходит (см. iceServersForParticipant в LiveKit). Credentials генерируются по механизму TURN REST API из общего `TURN_STATIC_AUTH_SECRET`, поэтому `render-templates.sh` теперь подставляет его и `TURN_EXTERNAL_IP` также в конфигурацию LiveKit. TLS (5349/443) намеренно не анонсируется: сертификаты в coturn не смонтированы, а неработающий `turns:` заставил бы клиента ждать таймаута перед переходом к рабочему кандидату. Что нужно для его включения — описано в разделе 8 руководства. Там же исправлено умолчание в правилах ufw: помимо 3478 нужен диапазон relay-аллокаций `49160:49200/udp`. Без него TURN отвечает на запросы, но релей не работает, причём в логах coturn при этом тишина.
6.8 KiB
6.8 KiB