Пошаговая настройка TURN (coTURN) для Nextcloud Talk
Чтобы видеозвонки и экраншеринг стабильно работали за NAT/файрволами, Nextcloud Talk нуждается в TURN-сервере. Ниже — чистая, воспроизводимая установка coTURN, интеграция в Nextcloud, TLS, тестирование и харденинг nextcloud-talk.readthedocs.io Nextcloud community.
Предпосылки и общая схема
- Что делает TURN: проксирует трафик WebRTC, когда P2P соединение через STUN невозможно (жёсткие NAT/CGNAT, корпоративные сети). Nextcloud Talk имеет встроенный STUN, но для реального интернета почти всегда нужен TURN Nextcloud community.
- Рекомендуемая версия: используйте coTURN не ниже 4.5.0.8 из-за бага с IPv6 сокетами в старых версиях nextcloud-talk.readthedocs.io.
Если у вас крупная нагрузка или нужен MCU/многопользовательские конференции, изучите High‑Performance Backend (HPB/сигнализационный сервер) отдельно от TURN — это разные компоненты hackerspace.ru.
Установка coTURN
- Пакеты:
sudo apt update sudo apt install coturnНа Debian/Ubuntu есть официальные пакеты coturn. Для других систем смотрите pkgs.org или исходники проекта nextcloud-talk.readthedocs.io. - Включение сервиса:
- Откройте файл defaults и включите службу:
sudo sed -i 's/^#\?TURNSERVER_ENABLED=.*/TURNSERVER_ENABLED=1/' /etc/default/coturn - Запускаем и добавляем в автозагрузку:
sudo systemctl enable --now coturn
- Откройте файл defaults и включите службу:
Базовая конфигурация turnserver.conf
Создайте/отредактируйте /etc/turnserver.conf. Ниже минимальный, безопасный старт:
# Сетевые параметры
listening-port=3478
tls-listening-port=5349
# Укажите публичные IP/FQDN
listening-ip=YOUR_PUBLIC_IPV4
# listening-ip=YOUR_PUBLIC_IPV6 # при наличии
relay-ip=YOUR_PUBLIC_IPV4
# Домен для аутентификации и TLS SNI
realm=turn.example.com
# Аутентификация (статический ключ)
# Вариант 1: long-term credentials per user:
user=nextcloud:STRONG_SECRET_PASSWORD
# Вариант 2: shared secret для REST-авторизации (предпочтительно):
# Имя секрета совпадает с Nextcloud Talk "Shared secret"
# static-auth-secret=VERY_LONG_RANDOM_BASE64_OR_HEX
# Безопасность
fingerprint
no-sslv2
no-sslv3
no-tlsv1
no-tlsv1_1
log-file=/var/log/turn.log
simple-log
# Ограничения
total-quota=100
bps-capacity=0 # без искусственного лимита, задайте при необходимости
stale-nonce=600
# Прочее
# external-ip=PUBLIC_IP/LOCAL_IP # если у сервера NAT; формат coTURN для NAT
- Выберите один подход к аутентификации:
- user=login:password — простой, подходит для старта.
- static-auth-secret — REST‑авторизация временных учетных данных (TURN REST API), рекомендуется для продакшна; Nextcloud генерирует временные токены из shared secret nextcloud-talk.readthedocs.io.
- Укажите realm как ваш FQDN и используйте одинаковые значения в Nextcloud Talk настройках YouTube nextcloud-talk.readthedocs.io.
Перезапустите сервис:
sudo systemctl restart coturn
В руководствах сообщества для Nextcloud Talk используются те же ключевые опции: listening-port, tls-listening-port, listening-ip/relay-ip, realm, quota и включение сервиса через /etc/default/coturn YouTube Nextcloud community.
TLS для TURN (рекомендуется)
- Сертификаты: Разместите валидный сертификат и ключ (например, от Let’s Encrypt):
cert=/etc/letsencrypt/live/turn.example.com/fullchain.pem pkey=/etc/letsencrypt/live/turn.example.com/privkey.pem - Порт: используйте 5349/TCP для TURN over TLS (обязательно открыть в фаерволе) YouTube.
- Перезапуск:
sudo systemctl restart coturn
TLS повышает успешность соединений за корпоративными фаерволами, где UDP 3478 могут блокировать YouTube.
Настройка Nextcloud Talk
В админке Nextcloud → Talk (Настройки приложения):
- STUN: можно оставить дефолтный (например, stun.nextcloud.com).
- TURN server: ваш FQDN, например: turn.example.com.
- TURN ports:
- 3478 (UDP/TCP) — без TLS.
- 5349 (TCP) — с TLS.
- Realm: тот же, что в turnserver.conf.
- Аутентификация:
- Если вы используете user=nextcloud:…, укажите логин/пароль.
- Если используете static-auth-secret, впишите тот же shared secret в поле Nextcloud; он будет использовать REST‑креды, генерируя временные пароли для клиентов nextcloud-talk.readthedocs.io.
Сохраните и выполните самотест звонка (например, из Talk, создав комнату) Nextcloud community nextcloud-talk.readthedocs.io.
Сеть, тесты и харденинг
- Фаервол:
- Откройте порты: 3478/UDP, 3478/TCP, 5349/TCP.
- Если включён релей RTP через TURN, coTURN динамически открывает порты. При необходимости ограничьте диапазон:
# Пример: ограничение медиарелея min-port=49152 max-port=49999И откройте этот диапазон в фаерволе.
- Проверка доступности:
- TCP:
openssl s_client -connect turn.example.com:5349 -servername turn.example.com - Логи:
tail -f /var/log/turn.log
- TCP:
- Systemd‑надёжность:
sudo systemctl edit coturnДобавьте:[Service] Restart=always RestartSec=5s LimitNOFILE=65535Затем:sudo systemctl daemon-reload sudo systemctl restart coturn - IPv6 баг в старых версиях: Если по каким‑то причинам используете coTURN < 4.5.0.8, настройте периодический рестарт как временный обходной путь из‑за утечки IPv6 UDP сокетов nextcloud-talk.readthedocs.io.
- Журналирование и защита:
- Включите fingerprint, строгие версии TLS.
- Следите за размером логов (logrotate).
- Ограничьте доступ по IP, если это уместно (например, в корпоративной среде):
allowed-peer-ip=/denied-peer-ip=.
Частые проблемы и быстрые проверки
- Неверный realm или секрет: клиенты не получают валидные временные креды — исправьте совпадение realm и shared secret между coTURN и Nextcloud nextcloud-talk.readthedocs.io.
- Блокировки фаервола/NAT: откройте 3478 UDP/TCP и 5349 TCP; при ограниченном диапазоне медиапортов — его тоже YouTube.
- DNS/SNI: FQDN должен резолвиться в публичный IP, сертификат должен соответствовать hostname для TLS на 5349 YouTube.
- Трафик уходит мимо TURN: проверьте, что Nextcloud Talk действительно использует ваш TURN (лог coTURN во время звонка, ICE candidates в консоли браузера).
Какие аппарвтные характеристики требуются для сервера coturn
Краткий ответ: Для работы coturn не нужны мощные ресурсы — достаточно современного VPS или физического сервера с 1–2 ядрами CPU, 1–2 ГБ RAM и стабильным сетевым каналом. Основное требование — пропускная способность сети и открытые порты, а не вычислительная мощность Remontka.com Частный компьютерный мастер.
🔧 Аппаратные требования для coturn
Минимальные характеристики
- CPU: 1–2 ядра (x86_64 или ARM). Coturn не выполняет сложных вычислений, он лишь проксирует UDP/TCP‑трафик.
- RAM: 1 ГБ достаточно для небольших нагрузок; 2 ГБ и выше — для стабильности при десятках одновременных звонков.
- Диск: 10–20 ГБ (coturn хранит только логи и конфигурацию, медиаконтент не сохраняется).
- Сеть: ключевой параметр. Нужен стабильный канал с низкой задержкой и достаточной пропускной способностью:
- Для одного видеозвонка WebRTC требуется ~1–2 Мбит/с в каждую сторону.
- Если сервер обслуживает десятки звонков, считайте суммарный трафик (например, 50 звонков ≈ 100 Мбит/с).
Рекомендуемые характеристики для продакшн‑сервера
| Компонент | Минимум | Рекомендация |
|---|---|---|
| CPU | 1 ядро | 2–4 ядра для многопользовательских звонков |
| RAM | 1 ГБ | 4 ГБ для стабильности и буферизации |
| Диск | 10 ГБ | 20–40 ГБ (логи, резервные конфиги) |
| Сеть | 10 Мбит/с | 100 Мбит/с или гигабитный канал для десятков звонков |
⚠️ Важные моменты
- Сеть важнее железа. Coturn не кодирует видео/аудио, он только пересылает пакеты. Поэтому узким местом становится пропускная способность и задержка сети.
- Порты: обязательно открыть 3478/UDP+TCP и 5349/TCP (TLS). Для медиарелея — диапазон портов (например, 49152–49999).
- Масштабирование: если планируется сотни пользователей, лучше использовать несколько TURN‑серверов за балансировщиком.
- Виртуализация: coturn отлично работает на VPS (KVM, OpenVZ, VMware), но избегайте сильно ограниченных контейнеров с нестабильной сетью.
🚀 Практический совет
Если Nextcloud Talk будет использоваться для небольших команд (до 20–30 пользователей), хватит VPS с 2 ядрами, 2 ГБ RAM и 100 Мбит/с каналом. Для корпоративного масштаба (>100 пользователей) лучше взять выделенный сервер с гигабитным каналом и 4–8 ГБ RAM.