Документация Webitel

coTURN на Debian 12 — Настройка STUN/TURN сервера

Сервер настраивается таким образом, чтобы одновременно выполнять роль STUN-сервера (определение внешнего IP-адреса клиента) и TURN-сервера (ретрансляция трафика в случаях, когда прямое P2P-соединение невозможно).

1. Подготовка и установка

  1. Обновите списки пакетов и установите coTURN:

sudo apt update 
sudo apt install coturn -y
  1. После установки остановите службу для дальнейшей конфигурации:

sudo systemctl stop coturn 

2. Конфигурация сервера

Оригинальный конфигурационный файл довольно объёмный и содержит множество закомментированных параметров.

  1. Для создания чистой конфигурации рекомендуется переместить стандартный файл в резервную копию и создать новый файл:

sudo mv /etc/turnserver.conf /etc/turnserver.conf.backup 
sudo vi /etc/turnserver.conf
  1. Добавьте параметры:

listening-port=3478
listening-ip=0.0.0.0

# ВАЖНО: Ваш ВНЕШНИЙ (публичный) IP.
# Если сервер находится за NAT (AWS/Azure):
# external-ip=ВНЕШНИЙ_IP/ВНУТРЕННИЙ_IP
# Пример: external-ip=203.0.113.5/192.168.1.5
external-ip=YOUR_PUBLIC_IP

fingerprint

min-port=49152
max-port=65535

log-file=/var/tmp/turnserver.log
verbose
no-cli

lt-cred-mech
user=testuser:strongpassword
realm=your-domain.com
  1. Сохраните файл.

3. Настройка запуска

В Debian может потребоваться явным образом разрешить запуск демона.

  1. Откройте файл:

sudo vi /etc/default/coturn 
  1. Найдите параметр TURNSERVER_ENABLED и удалите комментарий, чтобы он выглядел так:

TURNSERVER_ENABLED=1 
  1. Перезапустите службу и добавьте её в автозагрузку:

sudo systemctl daemon-reload
sudo systemctl start coturn
sudo systemctl enable coturn
  1. Проверьте статус:

sudo systemctl status coturn

4. Настройка Firewall (UFW)

TURN-сервер требует открытых портов для сигнализации (3478) и широкого диапазона для передачи медиатрафика (UDP).

Если вы используете ufw

  1. Порты для подключения клиентов (TCP/UDP)

sudo ufw allow 3478/tcp 
sudo ufw allow 3478/udp 
  1. Диапазон портов для медиа-потоков (только UDP):

sudo ufw allow 49152:65535/udp
  1. Перезагрузка правил:

sudo ufw reload

Обратите внимание! Если сервер находится за NAT провайдера (например, AWS Security Groups), откройте те же порты в панели управления облачного провайдера.

5. Проверка работы STUN/TURN

Самый простой способ проверить работу — использовать инструмент Trickle ICE (от команды WebRTC).

  1. Откройте сайт Trickle ICE.

  2. Удалите стандартный Google-сервер из списка.

  3. Добавьте свой:

    • STUN or TURN URI: turn:YOUR_PUBLIC_IP:3478

    • Username: testuser (как мы указали в конфигурации)

    • Password: strongpassword

  4. Нажмите на кнопку “Add Server”, затем на кнопку снизу “Gather candidates”.

В результате вы должны увидеть список кандидатов:

  • Тип srflx означает, что сработал STUN (сервер увидел ваш IP). 

  • Тип relay означает, что сработал TURN (трафик успешно прошёл через ваш сервер). 

Наличие relay-кандидатов с вашим IP-адресом означает, что сервер настроен корректно.

6. Включение TLS и защищенного порта

В рабочей среде (продакшене) передача паролей в открытом виде является небезопасной. Поэтому следующим шагом необходимо настроить TLS (SSL-сертификаты, например Let's Encrypt), чтобы использовать защищённый протокол turns на порту 5349.

  1. Откройте файл конфигурации:

/etc/turnserver.conf
  1. Добавьте настройки SSL:

# Порт для защищенного соединения (стандарт)
tls-listening-port=5349

# Пути к файлам, что мы подготовили
cert=/etc/coturn/certs/turn_server_cert.pem
pkey=/etc/coturn/certs/turn_server_pkey.pem

# Укажите ваш реальный домен как realm
realm=turn.your-domain.com
  1. Обновите правила firewall:

sudo ufw allow 5349/tcp
sudo ufw allow 5349/udp

7. Настройка ENGINE для использования TURN

Чтобы подключить TURN при записи экранов оператора, добавьте в конфигурацию engine следующий параметр:

RTC_CONFIGURATION={"iceServers":
[{"urls":"stun:51.15.16.187:3478","username":"1","credential":"1"},
{"urls":"turn:51.15.16.187:3478","username":"1","credential":"1"}]}