Coturn — сервер, реализующий протоколы STUN (Session Traversal Utilities for NAT) и TURN (Traversal Using Relays around NAT), предназначенные для обеспечения работы приложений реального времени в сетях с трансляцией сетевых адресов (NAT) и межсетевыми экранами. Сервер используется в решениях, основанных на технологии WebRTC, таких как Matrix Synapse, Element, Jitsi Meet, Nextcloud Talk и других подобных системах голосовой и видеосвязи.
Во время аудио- или видеосоединения клиенты в первую очередь пытаются обмениваться медиаданными напрямую. Однако в сетях со строгими настройками NAT или брандмауэра такое соединение может оказаться невозможным. В этом случае STUN позволяет определить внешний сетевой адрес клиента. Если же установить прямое соединение не удаётся, TURN-сервер принимает на себя роль промежуточного узла и ретранслирует медиатрафик между участниками соединения. Таким образом голосовые и видеозвонки продолжают работать в подобного рода конфигурации сетевого подключения.
В статье разберём, как установить Coturn на виртуальный выделенный сервер, работающий под управлением Ubuntu или Debian.
Как установить Coturn на Ubuntu и Debian
Перед началом установки обновите списки пакетов в системе:
$ sudo apt update
После чего проинсталлируйте непосредственно Coturn при помощи менеджера пакетов APT:
$ sudo apt install coturn
В результате в систему будут установлены:
turnserver— основной сервер TURN/STUN;turnadmin— утилита управления пользователями и ключами;turnutils_*— набор диагностических и тестовых утилит.
Процесс turnserver принимает подключения клиентов, помогает им определить внешний IP-адрес (STUN) и при необходимости ретранслирует аудио- и видеотрафик через сервер (TURN). После запуска службы coturn в системе работает именно процесс turnserver.
Первоначальная настройка Coturn
На следующем шаге необходимо разрешить запуск сервиса. Для этого откройте файл /etc/default/coturn:
$ sudo nano /etc/default/coturn
В файле найдите параметр TURNSERVER_ENABLED и приведите его к следующему виду:
TURNSERVER_ENABLED=1
Затем откройте основной файл настроек:
$ sudo nano /etc/turnserver.conf
Здесь найдите и укажите следующие значения для следующих параметров:
listening-port=3478
tls-listening-port=5349
listening-ip=0.0.0.0
fingerprint
realm=your-domain-name.ru
use-auth-secret
static-auth-secret=VeryStrongSecretHere
cert=/etc/letsencrypt/live/your-domain-name.ru/fullchain.pem
pkey=/etc/letsencrypt/live/your-domain-name.ru/privkey.pem
user-quota=24
total-quota=1200
min-port=49152
max-port=65535
В данном случае:
listening-port— определяет порт, на котором сервер принимает незашифрованные соединения по протоколам STUN и TURN (по умолчанию используется порт3478, зарегистрированный для этих протоколов);tls-listening-port— определяет порт для приема защищённых соединений TURN по протоколам TLS/DTLS (стандартным является порт5349);listening-ip— указывает IP-адрес, на котором Coturn будет прослушивать входящие подключения (значение0.0.0.0означает прослушивание на всех доступных сетевых интерфейсах сервера);fingerprint— включает добавление атрибута FINGERPRINT в STUN- и TURN-пакеты, что рекомендуется к использованию, поскольку повышает совместимость с современными WebRTC-клиентами;realm— задает домен, используемый при проверке подлинности клиентов TURN;use-auth-secret— включает механизм аутентификации по общему секретному ключу;static-auth-secret— определяет общий секретный ключ, используемый для формирования и проверки временных учётных данных TURN;cert— содержит путь к сертификату TLS, который используется для защищённых соединений TURN (обычно указывается сертификат, полученный от Let’s Encrypt);pkey— содержит путь к закрытому ключу, соответствующему указанному TLS-сертификату;user-quota— ограничивает максимальное количество одновременно активных TURN-сессий, которые может открыть один пользователь, что позволяет предотвратить чрезмерное потребление ресурсов одним клиентом;total-quota— ограничивает общее количество одновременно активных TURN-сессий на сервере, при достижении которого новые подключения будут отклоняться;min-port— начальный порт диапазона UDP-портов, используемых Coturn для ретрансляции медиатрафика (RTP/RTCP);max-port— конечный порт диапазона UDP-портов, используемых для передачи медиатрафика.
Следует отметить, что при использовании механизма аутентификации по общему секретному ключу Coturn не требует создания локальных учётных записей пользователей. Временные учётные данные генерируются внешним приложением на основе общего секретного ключа и передаются клиенту. Получив запрос на подключение, Coturn проверяет их с использованием секретного ключа. После чего сервер предоставляет доступ в случае успешной аутентификации.
Значение параметра static-auth-secret должно представлять собой случайную криптографически стойкую строку, которая будет использоваться в качестве общего секретного ключа для аутентификации клиентов. Для создания такого ключа можно воспользоваться утилитой OpenSSL.
Следующая команда генерирует случайную последовательность длиной 32 байта и выводит её в шестнадцатеричном (hex) формате:
$ openssl rand -hex 32
В качестве альтернативы можно использовать кодировку Base64:
$ openssl rand -base64 32
Применение настроек Coturn
После внесения изменений в файл /etc/turnserver.conf перезапустите службу Coturn:
$ sudo systemctl restart coturn
Проверьте текущее состояние службы:
$ systemctl status coturn
В выводе команды не должно присутствовать сообщений о каких-либо ошибках.

Настройка брандмауэра UFW
Для корректной работы Coturn необходимо разрешить входящие подключения к портам, используемым сервером для обмена служебными сообщениями и ретрансляции медиатрафика. Для этого выполните следующие команды:
$ sudo ufw allow 3478/tcp
$ sudo ufw allow 3478/udp
$ sudo ufw allow 5349/tcp
$ sudo ufw allow 5349/udp
$ sudo ufw allow 49152:65535/udp
Данные команды открывают порты:
- 3478 для протоколов TCP и UDP, который используется для работы STUN и TURN без шифрования;
- 5349 для TCP и UDP, предназначенный для защищённых соединений TURN по протоколам TLS и DTLS;
- диапазон UDP-портов 49152–65535, который Coturn использует для ретрансляции аудио- и видеотрафика между клиентами.
