fix(livekit): анонсировать клиентам внешний TURN — relay не работал совсем
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 при этом тишина.
This commit is contained in:
@@ -49,7 +49,10 @@ envsubst '${TURN_STATIC_AUTH_SECRET} ${TURN_REALM} ${TURN_EXTERNAL_IP}' \
|
||||
< "$SCRIPT_DIR/coturn/turnserver.conf.template" > "$SCRIPT_DIR/coturn/turnserver.conf"
|
||||
echo "[render] deploy/coturn/turnserver.conf готов"
|
||||
|
||||
envsubst '${LIVEKIT_USE_EXTERNAL_IP} ${LIVEKIT_NODE_IP} ${LIVEKIT_API_KEY} ${REDIS_PASSWORD}' \
|
||||
# TURN_EXTERNAL_IP и TURN_STATIC_AUTH_SECRET нужны и здесь: с 0.0.14 LiveKit
|
||||
# анонсирует клиентам внешний coturn (секция `rtc.turn_servers`), и секрет
|
||||
# обязан совпадать с `static-auth-secret` в turnserver.conf выше.
|
||||
envsubst '${LIVEKIT_USE_EXTERNAL_IP} ${LIVEKIT_NODE_IP} ${LIVEKIT_API_KEY} ${REDIS_PASSWORD} ${TURN_EXTERNAL_IP} ${TURN_STATIC_AUTH_SECRET}' \
|
||||
< "$SCRIPT_DIR/livekit/livekit.yaml.template" > "$SCRIPT_DIR/livekit/livekit.yaml"
|
||||
echo "[render] deploy/livekit/livekit.yaml готов"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user