TURN-сервер

Freedom Messenger включает встроенный TURN-сервер для голосовых звонков. TURN ретранслирует аудиотрафик, когда прямое peer-to-peer WebRTC-соединение невозможно.

Когда нужен TURN?

WebRTC пытается установить прямое соединение между собеседниками. TURN нужен, когда:

  • Один или оба пользователя за строгим NAT (часто в корпоративных сетях)
  • Один или оба пользователя за симметричным фаерволом
  • Прямой UDP-трафик заблокирован между пользователями

На практике примерно 10-20% WebRTC-соединений требуют TURN-ретрансляции.

Конфигурация

TURN-сервер настраивается в config.toml:

public_ip = "203.0.113.10"
turn_port = 3478

public_ip

Публичный IP-адрес сервера. TURN-сервер передаёт этот IP WebRTC-клиентам. Если не задан, сервер пытается определить автоматически.

turn_port

UDP-порт для TURN. По умолчанию 3478. Убедитесь, что порт открыт в фаерволе для UDP.

Правила фаервола

# Разрешить TURN UDP
sudo ufw allow 3478/udp

# Или через iptables
sudo iptables -A INPUT -p udp --dport 3478 -j ACCEPT

Аутентификация

Учётные данные TURN генерируются из мастер-секрета через HKDF с контекстом «turn». Данные временные и ротируются автоматически. Пользователям ничего настраивать не нужно — мессенджер получает TURN-учётные данные от сервера при начале звонка.

Решение проблем

  • Звонки не соединяются: Проверьте, что UDP-порт 3478 открыт. Некоторые облачные провайдеры блокируют UDP по умолчанию.
  • Звук в одну сторону: Проверьте правильность public_ip. Если сервер за NAT, используйте публичный IP, а не внутренний.
  • Все звонки не работают: Проверьте логи сервера на наличие TURN-ошибок.