Установка и настройка сервера coturn (STUN/TURN) на Linux CentOS
Используемые термины: STUN, CentOS, NAT.
Данный сервер нам может понадобиться для корректной передачи медиаконтента, например, VOIP или посредством WebRTC. Рассмотрим его базовую установку и настройку. Приведенные ниже команды будут работать как для CentOS или Rocky Linux.
Готовим сервер к работе
Устанавливаем сервер
Проверяем работу
Настройки
Пароль для подключения
Настройка сервера за NAT
Настройка SSL
Только STUN или TURN
Использование бесплатных TURN/STUN
Подготовка системы
Для корректной работы сервера мы должны открыть порты в брандмауэре и отключить SELinux.
1. Настройка firewalld
Добавим порт 3478 для нешифрованных соединений:
firewall-cmd --add-port=3478/{udp,tcp} --permanent
Добавим порт 5349 для TLS:
firewall-cmd --add-port=5349/{udp,tcp} --permanent
Перезапускаем конфигурацию для применения правил:
firewall-cmd --reload
2. Отключение SELinux
Для отключения SELinux вводим 2 команды:
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
Проверяем, что настройки применились:
getenforce
Если видим:
Permissive
... перезагружаем сервер.
Установка и запуск
Установка пакета coturn выполняется из репозитория EPEL. Сначала ставим его командой:
yum install epel-release
После можно устанавливать сервер STUN/TURN:
yum install coturn
Разрешаем автозапуск сервиса и стартуем его:
systemctl enable coturn --now
Сервер готов принимать запросы.
Проверка работы
Для проверки сервера нам нужно установить клиента stun. Это можно сделать либо на тот же сервер, либо на другой компьютер.
а) Под Ubuntu достаточно выполнить одну команду:
apt-get install stun-client
б) В CentOS нужно установить старый репозиторий, после саму программу:
yum install https://download-ib01.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install stun
После установки программы можно попробовать отправить запрос на сервер. В зависимости от варианта Linux команды будут разные.
а) в CentOS:
stun-client <IP-адрес сервера STUN/TURN>
б) в Ubuntu:
stun <IP-адрес сервера STUN/TURN>
* в примерах ниже мы будем использовать вариант для CentOS.
И так, пример для выполнения тестового запроса:
stun-client 192.168.0.15
* где 192.168.0.15 — IP-адрес во внутренней сети нашего сервера STUN/TURN.
Мы должны получить ответ на подобие:
STUN client version 0.96
Primary: Open
Return value is 0x000001
... или:
STUN client version 0.97
Primary: Independent Mapping, Independent Filter, preserves ports, no hairpin
Return value is 0x000013
Для более подробного вывода добавим опцию v:
stun -v 192.168.0.15
Если сервер не работает, мы получим что-то на подобие:
STUN client version 0.96
Primary: Blocked or could not reach STUN server
Return value is 0x00001c
Если наш сервер доступен из сети Интернет, мы можем выполнить онлайн тест на портале Trickle ICE.
Настройка сервера
После установки сервер можно не настраивать — не будет работать с настройками по умолчанию. В данном разделе рассмотрим примеры некоторых настроек, которые могут показаться интересными.
1. Пароль для подключения
Чтобы ограничить подключения к нашему серверу, мы можем задать парольную фразу. Для этого открываем файл с настройками сервера:
vi /etc/coturn/turnserver.conf
И снимаем комментарии со строк:
use-auth-secret
...
static-auth-secret=north
... а также меняем north на любой пароль:
static-auth-secret=Str0ngPa$$word
Перезапускаем сервис:
systemctl restart coturn
2. Сервер за NAT (external-ip)
Если наш сервер сам находится за NAT, необходимо настроить значение для опции external-ip, которое укажет, какой адрес нужно использовать в качестве ретранслятора.
Открываем конфигурационный файл:
vi /etc/coturn/turnserver.conf
а) если используется единственный внешний адрес, указываем его:
external-ip=60.70.80.91
б) если у нас множество адресов, запись может быть такой:
external-ip=60.70.80.91/172.17.19.101
external-ip=60.70.80.92/172.17.19.102
* где 60.70.80.91 и 60.70.80.92 — публичные адреса; 172.17.19.101 и 172.17.19.102 — приватные.
Перезапускаем сервис:
systemctl restart coturn
3. Настройка SSL
Передача данных возможна с применением шифрования. Для этого, во-первых, нам нужно получить сертификат; во-вторых — настроить сервер STUN.
Сертификат можно купить или получить бесплатно в Let's Encrypt. В данной инструкции будет использоваться купленный сертификат. Предположим, что его мы сохранили в файлах /etc/pki/coturn/public/cert.pem и /etc/pki/coturn/private/cert.key.
Теперь открываем конфигурационный файл сервера:
vi /etc/coturn/turnserver.conf
Снимаем комментарии и правим значения для опций:
cert=/etc/pki/coturn/public/cert.pem
...
pkey=/etc/pki/coturn/private/cert.key
Перезапускаем сервис:
systemctl restart coturn
4. Только STUN или TURN
По умолчанию, coturn запускается и работает в режиме STUN/TURN. Если нужно, чтобы работал только один из них, открываем настройки:
vi /etc/coturn/turnserver.conf
а) если нужен только STUN:
stun-only
б) если нужен только TURN:
no-stun
Перезапускаем сервис:
systemctl restart coturn
Использование бесплатных серверов STUN/TURN
Мы рассмотрели процесс установки и настройки своего сервера. Однако, как временное решение, мы можем использовать публичные бесплатные. Списки данных серверов можно легко найти в сети. Приведем несколько примеров.
Серверы в России
stun.chathelp.ru:3478
stun.comtube.ru:3478
stun.comtube.ru:3478
Серверы Google
stun.l.google.com:19302
stun1.l.google.com:19302
stun2.l.google.com:19302
stun3.l.google.com:19302
stun4.l.google.com:19302