Текущее изменение в работе Matrix Call затрагивает обнаружение, но не учетные данные TURN или порты Coturn. В своем обновлении от 21 августа 2026 года Matrix.org сообщила, что в Element Call 0.24 прекращено обнаружение транспортных протоколов MatrixRTC через /.well-known/matrix/clientфайл homeserver. Автономные развертывания Element Call должны поддерживать конечную точку транспортных протоколов MatrixRTC; Element Web/Desktop и Element X сохраняли старый метод обнаружения в качестве резервного варианта на время перехода клиентов. Это не связано с классической настройкой TURN.
В этом руководстве описана настройка Coturn для службы TURN от Synapse, которая предоставляет временные учетные данные ICE клиентам, использующим традиционные вызовы WebRTC. Текущие групповые вызовы Element Call и MatrixRTC используют блок выборочной пересылки LiveKit (SFU) и службу авторизации MatrixRTC. Coturn сам по себе не заменяет эти компоненты. Если ваша цель — самостоятельное размещение Element Call, используйте путь LiveKit, описанный в официальном руководстве Element Call; добавляйте Coturn только в том случае, если выбранная вами медиаархитектура требует отдельной службы TURN.
Сначала выберите правильный путь вызова.
| Путь вызова | Что нужно настроить | Когда применяется данное руководство Coturn |
| Традиционный или устаревший вызов WebRTC | Coturn плюс Synapse turn_urisи общий секрет | Используйте приведенную ниже конфигурацию, когда клиент запрашивает учетные данные TURN у /voip/turnServerконечной точки Synapse. |
| MatrixRTC / Element Call | LiveKit SFU, служба авторизации MatrixRTC и обнаружение транспортного уровня домашнего сервера. | Coturn не заменяет LiveKit. LiveKit включает в себя дополнительный встроенный сервис TURN; следуйте его собственной конфигурации сети и TURN. |
Для MatrixRTC на Synapse текущее руководство по самостоятельному размещению Element Call использует matrix_rtc.transportsи включает реестр транспорта домашнего сервера с помощью описанного экспериментального флага функции. В уведомлении Matrix.org 2026 говорится, что это изменение в обнаружении наиболее важно для автономных развертываний Element Call; другие администраторы могут подготовить конечную точку, в то время как поддерживаемые клиенты сохраняют резервный вариант. Проверьте руководство для клиентов и версии Synapse, которые вы используете.
Чем занимается Котурн
STUN позволяет клиенту WebRTC обнаружить общедоступный сетевой адрес, который он может рекламировать. TURN ретранслирует медиапоток, когда два клиента не могут установить прямое соединение через свои маршрутизаторы или межсетевые экраны. Coturn реализует обе эти службы. Без доступного ретранслятора вызов может поступать, но оставаться в статусе «Подключение», если участники находятся в сетях с ограниченными правами доступа или не связанных между собой.
Сервер TURN требует наличия публичного IP-адреса или NAT-шлюза с публичным IP-адресом и корректными правилами переадресации. Сервер, работающий только с частными ресурсами, не может выступать в качестве интернет-ретранслятора для удаленных пользователей Matrix. Для небольшого развертывания Synapse можно установить Coturn на домашнем сервере или использовать отдельный публичный хост. Отдельный хост обеспечивает более четкие границы брандмауэра и независимое масштабирование; установка на том же хосте проще, но требует тщательного соблюдения правил брандмауэра, чтобы ретранслятор не предоставлял доступ к частным сервисам.
1. Установите Coturn и подготовьте общий секретный ключ.
В Debian или Ubuntu установите следующий дистрибутивный пакет:
sudo apt update
sudo apt install coturn
Этот пакет предоставляет службу systemd, а основной конфигурационный файл обычно находится по адресу /etc/turnserver.conf. В других дистрибутивах используются собственные имена пакетов, управление службами и путь к конфигурации.
Создайте надёжный, личный секрет. Например:
openssl rand -hex 32
Используйте один и тот же секретный ключ в Coturn и Synapse. Относитесь к нему как к паролю: не используйте повторно пример значения из документации, не добавляйте его в общедоступный репозиторий и не включайте в публичный отчет об ошибке. Если ваша версия Synapse поддерживает эту функцию turn_shared_secret_path, вы можете хранить секретный ключ в защищенном файле, а не непосредственно в YAML-файле. Synapse добавил эту настройку в версии 1.116.0; проверьте версию, в которой вы развернуты, прежде чем использовать ее.
2. Настройте Coturn для аутентифицированного ретранслятора.
Отредактируйте /etc/turnserver.confи задайте имя службы и аутентификацию с использованием общего секрета. Замените заполнители домена и секрета:
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-secretВключает механизм учетных данных TURN с ограниченным сроком действия, используемый Synapse. Не настраивайте анонимный доступ и не открывайте ретранслятор. Приведенные выше значения квот являются отправной точкой, взятой из рекомендаций Synapse по Coturn; скорректируйте их в соответствии с ожидаемым количеством пользователей и пропускной способностью. no-tcp-relayПредотвращает запросы клиентов к ретранслятору на подключение к произвольным TCP-адресам; это не означает, что вы должны отключить TCP в качестве транспортного протокола от клиента к TURN.
TURN может использоваться в качестве ретранслятора для доступа к внутренним или конфиденциальным сетевым адресам. Примените полный диапазон адресов запрещенных узлов из текущего примера безопасности Synapse Coturn, включая диапазоны, относящиеся к вашим сетям IPv4 и IPv6. Перед копированием правил проверьте их, если пользователям действительно необходимо получить доступ к узлам частной сети. Также регулярно обновляйте Coturn и отслеживайте его журналы и квоты.
Установите публичный адрес, если Coturn находится за NAT.
Если хост TURN находится за маршрутизатором, добавьте его публичный адрес в конфигурацию, чтобы Coturn объявлял доступный адрес ретранслятора:
external-ip=YOUR_PUBLIC_IPV4
listening-ip=YOUR_PRIVATE_IPV4
Замените примерные значения фактическими адресами; адрес прослушивания необязателен, если Coturn уже привязан к нужному интерфейсу. Перенаправьте диапазон адресов прослушивателя и ретранслятора TURN с маршрутизатора на этот сервер. Несоответствие внешнего адреса является распространенной причиной сбоев при звонках, работающих в одной локальной сети, но прерывающихся между разными сетями.
3. Откройте порты прослушивания и ретрансляции.
Разрешите порты, соответствующие вашей конфигурации Coturn, как в брандмауэре хоста, так и в любом облачном брандмауэре или маршрутизаторе:
- TCP и UDP 3478 для обычного TURN-слушателя.
- Диапазон UDP 49152–65535 указан выше для диапазона ретрансляции по умолчанию. Если вы выберете меньший диапазон, настройте тот же диапазон в Coturn и межсетевом экране.
- TCP 5349 используется для TURN over TLS, а UDP 5349 — только если вы включили и планируете предоставлять DTLS.
Для UFW базовый набор правил прослушивания UDP/TCP и ретрансляции UDP может выглядеть следующим образом:
sudo ufw allow 3478/tcp
sudo ufw allow 3478/udp
sudo ufw allow 49152:65535/udp
Добавляйте правила 5349 только тогда, когда соответствующий TLS или DTLS-слушатель настроен и объявлен. Проверьте также группу безопасности вашего провайдера; правило UFW на уровне хоста не может переопределить правило блокировки входящего трафика из облака. Не публикуйте интерфейс административного управления Coturn в Интернете.
4. Настройте Synapse для выдачи учетных данных Coturn.
Добавьте следующие параметры TURN в активную конфигурацию Synapse, обычно это homeserver.yaml: . Имя хоста должно разрешаться публично в хост 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
Первые два URI рекламируют обычные транспортные протоколы TURN на порту 3478. Если TLS настроен и протестирован, вы также можете рекламировать URI, например turns:turn.example.org:5349?transport=tcp, . Не рекламируйте turns:URI, если не обеспечена совместимость сертификата, прослушивателя, брандмауэра и клиента. Сертификат TLS и закрытый ключ Coturn устанавливаются с помощью certи pkeyв его конфигурации.
Настройте параметры turn_allow_guestsв соответствии с правилами вашего номера и политикой в отношении гостей. Включение этой функции может позволить неавторизованным пользователям-гостям запрашивать учетные данные TURN, которые могут быть необходимы для звонков гостей, но могут увеличить риск злоупотреблений. Отключение этой функции может сделать звонки ненадежными для гостей. В любом случае используйте мониторинг и квоты.
После внесения изменений в файлы Coturn и Synapse перезапустите их:
sudo systemctl restart coturn
sudo systemctl restart matrix-synapse
Используйте фактическое имя юнита systemd в Synapse, если оно отличается. Перезагрузите или перезапустите затронутые клиенты; настройки TURN в Synapse периодически обновляются, поэтому клиент может не сразу увидеть изменения.
Следует ли включить TURN через TLS?
Начните с UDP/TCP TURN на порту 3478 и убедитесь, что кандидат на ретрансляцию работает. Добавляйте TURN через TLS только в том случае, если это необходимо в сетях ваших пользователей, например, в корпоративных межсетевых экранах, которые разрешают трафик, подобный TLS, но блокируют обычный UDP. TLS расширяет возможности подключения, но добавляет необходимость обновления сертификатов, еще одного прослушивателя и проверки совместимости клиентов.
Есть одно важное замечание, касающееся Matrix: в текущем руководстве Synapse Coturn указано, что TLS/DTLS с сертификатами Let's Encrypt не работает с клиентами Matrix, использующими библиотеку WebRTC Chromium, включая Element для Android и iOS, как указано в этом руководстве. Перед публикацией URI TLS проверьте совместимость с вашими версиями клиента. В том же руководстве рекомендуется сначала настроить базовую службу, а затем добавить TLS/DTLS.
5. Проверьте учетные данные и проведите тестирование во внешней сети.
Сначала убедитесь, что Coturn запущен, и просмотрите его журналы:
sudo systemctl status coturn
sudo journalctl -u coturn -f
Затем, в рамках авторизованной клиентской сессии Matrix, проверьте запрос к текущей конечной точке API клиент-сервер Synapse /_matrix/client/v3/voip/turnServer. Успешный ответ должен содержать имя пользователя, пароль, время жизни и настроенные вами URI TURN. Не публикуйте этот ответ; учетные данные являются временными токенами доступа для вашего ретранслятора.
Используйте официальный пример WebRTC Trickle ICE для тестирования с именем пользователя и паролем, полученными от Synapse. Добавьте свой TURN URI и учетные данные, запустите тест сбора ICE и найдите кандидата, тип которого равен relay. Сервер, который просто отвечает на STUN, может показать кандидата, рефлексивного по отношению к серверу, но при этом не сможет передавать медиаданные. Протестируйте с мобильного соединения или сети за пределами вашей локальной сети, а затем совершите реальный звонок между участниками из разных сетей.
Диагностика распространенных неисправностей
- Учетные данные TURN отсутствуют: убедитесь, что Synapse загрузил правильную конфигурацию, успешно перезапустился и имеет установленный общий секрет. Проверьте ответ на запрос для
/voip/turnServer.
- Учетные данные отображаются, но кандидаты на ретрансляцию не формируются: проверьте TCP/UDP 3478, заявленное имя хоста, совпадение секретного ключа, журналы Coturn и диапазон UDP-ретрансляции через каждый межсетевой экран.
- Звонки работают в одной локальной сети, но не работают в других сетях: проверка
external-ip, переадресация портов и обратный маршрут. Coturn должен объявить публичный адрес, к которому могут обращаться клиенты.
- Вызовы устанавливаются только при отключенном TLS: необходимо подтвердить цепочку сертификатов, прослушиватель TLS, заявленный
turns:URI и совместимость с конкретным клиентом.
- Традиционные звонки работают, но Element Call — нет: проверьте настройку транспортного протокола MatrixRTC/LiveKit отдельно. Успешный тест Coturn не подтверждает работоспособность LiveKit SFU или службы авторизации MatrixRTC.
Для браузерных клиентов диагностика WebRTC может показать, выбрал ли медиаплеер кандидата на ретрансляцию. Для MatrixRTC убедитесь, что Synapse публикует транспортную конечную точку и что маршруты LiveKit WebSocket и авторизации доступны. Проверьте как текущую конечную точку, так и любой задокументированный резервный вариант обнаружения, необходимый для поддерживаемых вами клиентов.
Ссылки на конфигурацию