Coturn – свободный сервер STUN/TURN, предназначенный для обеспечения стабильной работы приложений, использующих технологию WebRTC для передачи голоса, видео и других медиаданных в режиме реального времени. Coturn помогает устанавливать соединения между клиентами, находящимися за маршрутизаторами с трансляцией сетевых адресов (NAT) или в сетях, защищёнными межсетевыми экранами. Благодаря этому Coturn применяется в различных системах коммуникации, таких как Matrix Synapse, Element, Jitsi Meet, Nextcloud Talk и другие решения, поддерживающие аудио- и видеосвязь.
При установлении соединения клиенты WebRTC в первую очередь стремятся организовать прямой обмен медиатрафиком. Это обеспечивает минимальную задержку и наиболее эффективное использование сетевых ресурсов. Однако в ряде случаев особенности сетевой инфраструктуры, например, использование NAT или корпоративных брандмауэров, не позволяют установить такое соединение.
Для решения данной проблемы используется сервер Coturn. С помощью протокола STUN клиент определяет свой внешний сетевой адрес и пытается установить прямое соединение с другим участником. Если это невозможно, в работу вступает протокол TURN. С его помощью сервер Coturn становится промежуточным узлом, через который передаются аудио- и видеоданные между клиентами.
В статье разберём, как установить Coturn на VPS, работающий под управлением CentOS Stream или Rocky Linux.
Как установить Coturn на CentOS Stream и Rocky Linux
В CentOS Stream и Rocky Linux пакет Coturn отсутствует в стандартных репозиториях BaseOS и AppStream. Исходя из этого, сначала необходимо подключить дополнительный репозиторий EPEL (Extra Packages for Enterprise Linux).
EPEL – официальный репозиторий сообщества Fedora, содержащий дополнительные пакеты для RHEL и совместимых с ним дистрибутивов. Он предназначен для распространения программного обеспечения, отсутствующего в стандартных репозиториях Enterprise Linux, при сохранении совместимости с этими операционными системами.
Для подключения репозитория выполните команду:
$ sudo dnf install epel-release
После чего запустите установку Coturn:
$ sudo dnf install coturn
После установки Coturn в системе появляется исполняемый файл turnserver – основной компонент сервера STUN/TURN. Именно процесс turnserver запускается службой coturn и обеспечивает обработку всех запросов от клиентов. Данный процесс прослушивает сконфигурированные сетевые порты, принимает входящие подключения и выполняет основные функции сервера:
- обработка STUN- и TURN-запросов;
- определение внешнего IP-адреса и порта клиента с помощью протокола STUN;
- аутентификация клиентов;
- выделение временных ресурсов для передачи медиатрафика;
- ретрансляция медиаданных через сервер с использованием протокола TURN;
- освобождение выделенных ресурсов после завершения соединения.
Настройка параметров Coturn
Во время работы процесс turnserver использует параметры, указанные в файле конфигурации /etc/turnserver.conf. Поэтому на следующем шаге откройте конфигурационный файл:
$ sudo vi /etc/turnserver.conf
В файле укажите значения для следующих основных параметров:
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-портов, используемых для передачи медиатрафика.
В нашем примере файл конфигурации выглядит следующим образом:
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
При использовании режима аутентификации по общему секретному ключу (use-auth-secret) сервер Coturn не хранит собственную базу пользователей и не выполняет проверку постоянных логинов и паролей. Вместо этого обслуживающее приложение или сервер формирует для клиента временные учётные данные, используя общий секретный ключ. После чего приложение передаёт эти данные клиентскому приложению. При поступлении запроса на подключение Coturn вычисляет ожидаемые параметры аутентификации на основе того же секретного ключа. Вычисленные значения сервер сравнивает с полученными данными. Если проверка завершается успешно, клиенту разрешается использование TURN-сервера.
В качестве общего секретного ключа используется значение параметра static-auth-secret. Оно должно представлять собой уникальную криптографически стойкую случайную строку. Данная строка будет известна только приложению, формирующему временные учётные данные, и серверу Coturn. Стойкость этого ключа напрямую влияет на безопасность механизма аутентификации. Исходя из чего, рекомендуется генерировать его с использованием криптографических средств.
При этом на любой Linux-системе можно сгенерировать случайную строку стандартными утилитами без установки дополнительного софта. Например, следующая команда считывает 32 случайных байта из специального устройства /dev/urandom и преобразует их в строку в кодировке Base64:
$ head -c 32 /dev/urandom | base64
Полученную строку можно использовать в конфигурационном файле вместо значения VeryStrongSecretHere.
Применение и проверка конфигурации Coturn
Для применения изменённых настроек перезапустите службу Coturn:
$ sudo systemctl restart coturn
Установите службу в автозагрузку, чтобы она стартовала вместе с запуском системы:
$ sudo systemctl enable coturn
Чтобы убедиться в отсутствии ошибок в работе службы, выведите на экран её текущее состояние:
$ systemctl status coturn
Вывод команды не должен содержать сообщений о каких-либо ошибках.

Настройка правил межсетевого экрана
После завершения настройки Coturn необходимо разрешить сетевые подключения к сетевым портам. Через них сервер будет принимать запросы клиентов и передавать медиатрафик. Если в системе используется межсетевой экран firewalld, создайте соответствующие правила, выполнив следующие команды:
$ sudo firewall-cmd --permanent --add-port=3478/tcp
$ sudo firewall-cmd --permanent --add-port=3478/udp
$ sudo firewall-cmd --permanent --add-port=5349/tcp
$ sudo firewall-cmd --permanent --add-port=5349/udp
$ sudo firewall-cmd --permanent --add-port=49152-65535/udp
В результате будут открыты следующие порты:
- 3478/TCP и 3478/UDP – используются сервером Coturn для приёма STUN- и TURN-запросов по незащищённым соединениям;
- 5349/TCP и 5349/UDP – предназначены для обслуживания клиентов, использующих TURN через TLS или DTLS;
- 49152–65535/UDP – диапазон динамических портов, выделяемых Coturn для передачи аудио- и видеоданных между участниками соединения при работе в режиме TURN (его границы должны соответствовать значениям параметров
min-portиmax-portв файле/etc/turnserver.conf).
Без открытия перечисленных портов клиенты смогут успешно пройти аутентификацию на сервере. При этом установка голосовых и видеосоединений, а также передача медиатрафика через Coturn, окажутся невозможными.
Для применения новых правил для текущей конфигурации выполните команду:
$ sudo firewall-cmd --reload
Убедиться в том, что изменения применились, можно через вывод правил текущей конфигурации:
$ sudo firewall-cmd --list-all
Порты, через которые разрешён доступ к системе, должны присутствовать в строке ports.

