Если ваш сайт размещается у нас, это уже настроено на вашем сайте. Это руководство предназначено для администраторов, которые самостоятельно размещают Discourse.
Discourse Voice использует WebRTC для голосовых и видеозвонков. По умолчанию предоставляются публичные STUN-серверы, чтобы помочь участникам устанавливать прямое соединение. Администраторы могут заменить эти серверы и добавить TURN для поддержки сетей, в которых прямое соединение невозможно.
Для сервера, предназначенного для вашего сообщества, мы рекомендуем использовать TURN с аутентификацией по общему секрету и пустым значением STUN. Это обеспечивает обнаружение публичного адреса и резервное ретрансляционное соединение без необходимости распространения постоянного пароля TURN.
Это руководство относится к одноранговым вызовам в Voice. Комнаты, использующие LiveKit, используют собственную конфигурацию ICE/TURN LiveKit. Узнайте о конфигурации LiveKit для Voice.
Что делают STUN и TURN?
- STUN помогает браузеру обнаружить его публичный IP-адрес и порт, чтобы он мог попытаться установить прямое соединение.
- TURN ретранслирует медиаданные, когда прямое соединение не может быть установлено.
Аутентифицированное выделение TURN также возвращает публичный адрес браузера. WebRTC может использовать его в качестве кандидата, отраженного сервером (server-reflexive candidate), что обеспечивает преимущество обнаружения адреса, аналогичное STUN, без отдельного STUN-сервера. Спецификация TURN.
При настроенном TURN с общим секретом Voice позволяет как прямые, так и ретрансляционные соединения, даже если настройка STUN пуста. Настройка только серверов TURN не заставляет все вызовы проходить через ретранслятор. Конфигурация ICE для Voice.
1. Подготовка сервера TURN
Вы можете использовать управляемый сервис TURN, поддерживающий аутентификацию по общему секрету через REST API TURN, или запустить 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
# Отключить независимые запросы STUN.
# Аутентифицированные выделения TURN все равно возвращают публичный адрес клиента.
no-stun
min-port=49152
max-port=65535
no-multicast-peers
# В этом примере TLS не используется.
no-tls
no-dtls
Замените имя хоста и секрет, защитите файл конфигурации и перезапустите coturn. Удалите любые конфликтующие настройки no-auth или статические настройки user=. Режим общего секрета в coturn включает механизм аутентификации, необходимый ему внутренне. Справочник по конфигурации Coturn.
Разрешите входящий трафик на:
| Порт | Протокол | Назначение |
|---|---|---|
3478 |
UDP и 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
В разделе Администратор → Настройки найдите следующие настройки Voice:
| Настройка | Значение |
|---|---|
voice_stun_servers |
Пусто — удалите значения по умолчанию |
voice_turn_secret |
Значение, используемое для static-auth-secret в coturn |
voice_turn_secret_servers |
Ваши URI TURN, разделенные символом | |
voice_turn_servers |
Пусто |
voice_turn_username |
Пусто |
voice_turn_credential |
Пусто |
Для конфигурации, описанной выше, введите это в voice_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 turn: и turns: без //. Перечисляйте только конечные точки, которые действительно поддерживает ваш сервер.
Список voice_turn_secret_servers использует учетные данные, сгенерированные из общего секрета. Отдельный список voice_turn_servers использует фиксированное имя пользователя и пароль. Определения настроек Voice.
Сохраните настройки, затем попросите участников выйти из вызовов и присоединиться к ним снова, чтобы получить новую конфигурацию.
3. Проверка настройки
Протестируйте с двумя участниками из разных сетей, например, домашнего широкополосного доступа и мобильной сети. Убедитесь, что аудио работает в обоих направлениях, затем протестируйте видео и трансляцию экрана.
В браузерах на базе Chromium откройте chrome://webrtc-internals перед присоединением:
- Кандидат
srflxпредставляет обнаруженный публичный адрес. - Кандидат
relayпредставляет доступный ретранслятор TURN. - Выбранная пара кандидатов показывает соединение, которое фактически передает медиаданные.
Успешный прямой вызов не доказывает, что ретрансляция работает. Также протестируйте из сети, требующей TURN, или используйте тестовый клиент WebRTC с iceTransportPolicy: "relay" и временными учетными данными.
Проверьте журналы coturn на наличие успешных аутентифицированных выделений. Запросы без действительных учетных данных не должны получать выделение ретранслятора. Начальный вызов аутентификации 401 является нормальным; повторяющиеся сбои аутентификации требуют расследования.
Держите сервер выделенным для вашего сообщества
Общий секрет остается в Discourse и на сервере TURN. Участники получают временные учетные данные вместо этого. В настоящее время Voice генерирует учетные данные, действительные для создания выделений в течение 12 часов; установленное выделение может продолжаться, пока оно обновляется. Генерация учетных данных в Voice.
Это предотвращает создание анонимного открытого ретранслятора, но учетные данные TURN не привязаны к источнику браузера: участник может скопировать и повторно использовать свои временные учетные данные. Чтобы ограничить злоупотребления:
- Ограничьте доступ к Voice для предназначенных групп.
- Мониторьте пропускную способность ретранслятора и количество выделений.
- Установите квоты на выделение и ограничения пропускной способности в coturn, подходящие для вашего сообщества.
- Блокируйте доступ ретранслятора к частным, локальным и другим внутренним конечным точкам, доступным с хоста TURN.
- Держите coturn в актуальном состоянии и меняйте общий секрет, если он был скомпрометирован.
Используйте выделенный секрет для этого развертывания Discourse. При включенном no-stun сервер также прекращает предоставление анонимной независимой службы STUN. Аутентификация и контроль доступа в Coturn.
Альтернативы
Заменить только публичные STUN-серверы
Установите voice_stun_servers в ваши собственные URI STUN, разделенные символом |:
stun:stun.example.com:3478
Оставьте настройки TURN пустыми, если вам не нужен ретранслятор. Одного STUN недостаточно для работы вызовов во всех сетях. Сервер coturn, настроенный с no-stun, не может обслуживать эту конечную точку.
Использовать TURN с фиксированным именем пользователя и паролем
Если ваш провайдер не поддерживает аутентификацию по общему секрету, настройте voice_turn_servers, voice_turn_username и voice_turn_credential. Оставьте настройки общего секрета пустыми.
Участники получают эти фиксированные учетные данные, что делает их более простыми для повторного использования вне вашего сайта. Кроме того, в настоящее время Voice принудительно использует ретрансляционные соединения, когда настроены статические серверы TURN, а список STUN пуст. Предпочитайте аутентификацию по общему секрету, если ваш провайдер ее поддерживает. Конфигурация ICE для Voice.