Если вы размещены у нас, это уже предварительно настроено на вашем сайте. Это руководство предназначено для администраторов, самостоятельно размещающих Discourse.
Discourse Live использует WebRTC для голосовых и видеозвонков. Он поставляется с публичными серверами STUN, которые помогают участникам устанавливать прямые соединения. Администраторы могут заменить эти серверы и добавить TURN для поддержки сетей, где прямые соединения невозможны.
Для сервера, выделенного для вашего сообщества, мы рекомендуем запускать coturn в качестве и STUN-, и TURN-сервера с аутентификацией по общему секрету (shared-secret) для TURN. Это обеспечивает обнаружение публичного адреса и резервное ретранслирование без распространения постоянного пароля TURN и без зависимости от сторонних серверов STUN.
Это руководство применяется к одноранговым (peer-to-peer) звонкам в Live. Комнаты, использующие LiveKit, используют собственную конфигурацию ICE/TURN от LiveKit. Подробнее о конфигурации LiveKit в Live.
Что делают STUN и TURN?
- STUN помогает браузеру узнать его публичный IP-адрес и порт, чтобы он мог попытаться установить прямое соединение.
- TURN ретранслирует медиаданные, когда прямое соединение установить невозможно.
Браузер, узнавший свой публичный адрес, может предложить его как candidate серверного отражения (srflx), что позволяет устанавливать прямые соединения через домашние и офисные NAT. Без него большинство звонков переключаются на ретранслирование через TURN, что увеличивает задержку и нагрузку на полосу пропускания.
STUN должен оставаться открытым, даже если вы используете TURN. Ответ TURN-аллокации также содержит публичный адрес браузера, но только некоторые браузеры (например, Firefox) используют его как candidate. Браузеры на базе Chromium и Safari узнают свой публичный адрес только из отдельного STUN Binding-запроса, и браузеры никогда не отправляют учетные данные в Binding-запросах. Если сервер отключает STUN (no-stun) или требует для него аутентификации (secure-stun), эти браузеры не получают srflx candidate, и все их звонки ретранслируются.
При настроенном TURN с общим секретом Live разрешает как прямые, так и ретранслированные соединения. Настройка TURN не принуждает все звонки к ретранслированию. Конфигурация ICE в Live.
1. Подготовьте TURN-сервер
Вы можете использовать управляемый TURN-сервис с поддержкой аутентификации TURN REST API по общему секрету или запустить coturn самостоятельно.
Для самостоятельной настройки подготовьте:
- Сервер с публичным IP-адресом и достаточной пропускной способностью для ретранслируемых звонков.
- Имя хоста, например
turn.example.com, которое напрямую указывает на этот сервер. - Доступ к брандмауэру для его TURN-листенера и диапазона UDP-портов для ретрансляции.
- Действующий сертификат, если вы предлагаете TURN поверх TLS.
Браузеры участников подключаются к TURN напрямую. Обычный HTTP-реверс-прокси или CDN-прокси не может передавать TURN-трафик.
Пример конфигурации coturn
Сгенерируйте случайный секрет:
openssl rand -hex 32
Храните результат в секрете. Вы должны будете ввести то же значение в coturn и в Discourse.
На сервере с напрямую назначенным публичным IP-адресом используйте следующее как отправную точку в /etc/turnserver.conf:
listening-port=3478
fingerprint
realm=turn.example.com
use-auth-secret
static-auth-secret=REPLACE_WITH_YOUR_RANDOM_SECRET
# Не добавляйте no-stun или secure-stun: браузеры отправляют STUN Binding-запросы
# без учетных данных, и многие из них полагаются на них для обнаружения своего публичного адреса.
min-port=49152
max-port=65535
no-multicast-peers
# В этом примере TLS не используется.
no-tls
no-dtls
Замените имя хоста и секрет, защитите конфигурационный файл и перезапустите coturn. Удалите любые конфликтующие конфигурации no-auth или статические user=. Режим общего секрета в coturn включает необходимый механизм аутентификации внутренне. Справочник по конфигурации Coturn.
Анонимный STUN просто сообщает клиенту его собственный адрес обратно; он не может ретранслировать трафик, поэтому не превращает ваш сервер в открытый ретранслятор. В последних версиях coturn необязательные атрибуты ответа RFC 5780 и MAPPED-ADDRESS отключены по умолчанию, что держит размер ответов Binding близким к размеру запроса и ограничивает их полезность для атак на отражение. Оставьте rfc5780 и stun-backward-compatibility отключенными.
Разрешите входящий трафик к:
| Порт | Протокол | Назначение |
|---|---|---|
3478 |
UDP | STUN и TURN |
3478 |
TCP | TURN |
49152–65535 |
UDP | Ретранслируемые медиаданные |
Разрешите соответствующий исходящий трафик. Диапазон ретрансляции должен соответствовать min-port и max-port.
Если сервер находится за NAT, настройте отображение external-ip=PUBLIC_IP/PRIVATE_IP в coturn и перенаправьте порты листенера и ретрансляции. Порты ретрансляции должны сохранять свои номера через NAT. Варианты развертывания Coturn.
Добавьте TLS для ограничивающих сетей
TURN поверх TLS предоставляет еще один вариант соединения для участников, чьи сети блокируют UDP.
Удалите no-tls и настроите:
tls-listening-port=5349
cert=/path/to/fullchain.pem
pkey=/path/to/privkey.pem
Откройте 5349/TCP, убедитесь, что coturn может читать сертификат и ключ, и перезапустите его после обновления сертификатов.
Вы можете использовать 443/TCP вместо этого, если этот порт доступен на TURN-сервере. Это может помочь в ограничивающих сетях, хотя некоторые сети также инспектируют и блокируют не-HTTP трафик на порту 443. Диапазон UDP-ретрансляции по-прежнему необходим, когда браузеры достигают TURN по TCP или TLS. Документация сервера Coturn.
2. Настройте Discourse
В Admin → Settings найдите эти настройки Live:
| Настройка | Значение |
|---|---|
live_stun_servers |
STUN URI вашего сервера coturn — замените значения по умолчанию |
live_turn_secret |
Значение, используемое для static-auth-secret в coturn |
live_turn_secret_servers |
Ваши TURN URI, разделенные | |
live_turn_servers |
Пусто |
live_turn_username |
Пусто |
live_turn_credential |
Пусто |
Для вышеуказанной конфигурации введите это в live_stun_servers:
stun:turn.example.com:3478
А это в live_turn_secret_servers:
turn:turn.example.com:3478?transport=udp|turn:turn.example.com:3478?transport=tcp
Если вы включили TLS, добавьте его конечную точку:
turn:turn.example.com:3478?transport=udp|turn:turn.example.com:3478?transport=tcp|turns:turn.example.com:5349?transport=tcp
Используйте URI stun:, turn: и turns: без //. Указывайте только те конечные точки, которые ваш сервер действительно поддерживает.
Браузеры на базе Chromium также отправляют STUN-запросы на перечисленные вами TURN-серверы, поэтому пустой live_stun_servers может работать, если coturn отвечает на анонимные STUN-запросы. Явное перечисление STUN URI делает настройку более понятной, покрывает другие браузеры и позволяет диагностике соединений в Live тестировать его отдельно.
Список live_turn_secret_servers использует учетные данные, сгенерированные из общего секрета. Отдельный список live_turn_servers использует фиксированные имя пользователя и пароль. Определения настроек Live.
Сохраните настройки, затем попросите участников покинуть и снова присоединиться к звонкам, чтобы получить новую конфигурацию.
3. Проверьте настройку
Протестируйте с двумя участниками в разных сетях, например домашний широкополосный интернет и мобильные данные, и в нескольких браузерах — хотя бы в одном на базе Chromium и в Firefox. Убедитесь, что звук работает в обоих направлениях, затем протестируйте видео и демонстрацию экрана.
Находясь в одноранговой комнате, откройте меню комнаты (⋮) и выберите Connection diagnostics (Диагностика соединения):
- В разделе STUN/TURN servers каждый сервер должен показывать статус Reachable (Доступен). TURN-серверы должны показывать Relay address (Адрес ретрансляции), а UDP-серверы — Public address (Публичный адрес). «Public address: None» означает, что STUN-запросы не получили ответа — проверьте, не включены ли
no-stun/secure-stun, и открыт ли3478/UDP. - В разделе Peers маршрут показывает, как каждое соединение передает медиаданные: Direct (same network) (Прямое, в той же сети), Direct (through NAT via STUN) (Прямое, через NAT с помощью STUN) или Relayed through TURN (Ретранслированное через TURN). Большинство участников в обычных домашних сетях должны соединяться напрямую.
- Copy report (Копировать отчет) создает текстовый отчет, которым можно поделиться с тем, кто занимается устранением неполадок. Он включает IP-адреса участников, поэтому делитесь им только в приватном порядке.
В браузерах Chromium chrome://webrtc-internals показывает те же детали на более низком уровне:
- Candidate
srflxпредставляет обнаруженный публичный адрес. - Candidate
relayпредставляет доступный TURN-ретранслятор. - Выбранная пара candidates показывает соединение, которое фактически несет медиаданные.
Успешный прямой звонок не доказывает, что ретрансляция работает. Также протестируйте из сети, требующей TURN, или используйте WebRTC-клиент для тестирования с iceTransportPolicy: "relay" и временными учетными данными.
Проверьте логи coturn на наличие успешных аутентифицированных аллокаций. Запросы без действительных учетных данных не должны получать аллокацию ретрансляции. Начальный вызов аутентификации 401 является нормальным явлением; повторяющиеся сбои аутентификации требуют расследования.
Сохраните сервер выделенным для вашего сообщества
Общий секрет хранится в Discourse и на TURN-сервере. Участники получают временные учетные данные. В настоящее время Live генерирует учетные данные, действительные для создания аллокаций в течение 12 часов; установленная аллокация может продолжаться, пока она обновляется. Генерация учетных данных в Live.
Это предотвращает анонимный открытый ретранслятор, но учетные данные TURN не привязаны к происхождению браузера: участник может скопировать и повторно использовать свои временные учетные данные. Чтобы ограничить злоупотребления:
- Ограничьте доступ к Live для нужных групп.
- Мониторьте полосу пропускания ретрансляции и количество аллокаций.
- Установите квоты аллокаций и лимиты полосы пропускания в coturn, подходящие для вашего сообщества.
- Заблокируйте доступ ретрансляции к частным, link-local и другим внутренним пунктам назначения, достижимым с TURN-хоста.
- Обновляйте coturn и ротируйте общий секрет, если он был раскрыт.
Используйте выделенный секрет для этой развертывания Discourse. Ваш сервер также будет отвечать на анонимные STUN-запросы от кого угодно; это ожидаемо, потребляет мало полосы пропускания и не предоставляет доступ к ретрансляции. Аутентификация и контроль доступа в Coturn.
Альтернативы
Замените только публичные STUN-серверы
Установите live_stun_servers на ваши собственные STUN URI, разделенные |:
stun:stun.example.com:3478
Оставьте настройки TURN пустыми, если вам не нужна ретрансляция. STUN сам по себе не может обеспечить работу звонков во всех сетях.
Используйте TURN с фиксированным именем пользователя и паролем
Если ваш провайдер не поддерживает аутентификацию по общему секрету, настроите live_turn_servers, live_turn_username и live_turn_credential. Оставьте настройки общего секрета пустыми.
Участники получат эти фиксированные учетные данные, что упростит их повторное использование вне вашего сайта. Кроме того, Live в настоящее время принуждает ретранслированные соединения, когда настроены статические TURN-серверы и список STUN пуст. Отдавайте предпочтение аутентификации по общему секрету, если ваш провайдер ее поддерживает. Конфигурация ICE в Live.