Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

 TURN-сервер позволяет установить прямое соединение для IP-телефонии преодолев NAT. От также может использоваться в качестве TURN-сервера и шлюза для сетевого трафика общего назначения.

Основная концепция TURN

0Sequence diagram

Шаг 1 — Настройка записей в DNS

Общие DNS-записи:

turn.example.com. 14400 IN A    10.0.0.1
turn.example.com. 14400 IN AAAA 2001:db8:1234::1
stun.example.com. 14400 IN A    10.0.0.1
stun.example.com. 14400 IN AAAA 2001:db8:1234::1

@ IN NAPTR 10 0 "s" "RELAY:turn.udp" "" _turn._udp.example.com.

Следующие DNS-записи должны использоваться, если вы устанавливаете только один TURN/STUN-сервер:

_stun._udp.example.com.  14400 IN SRV  5 0 3478 turn.example.com.
_stun._tcp.example.com.  14400 IN SRV  5 0 3478 turn.example.com.
_stuns._tcp.example.com. 14400 IN SRV  5 0 5349 turn.example.com.

_turn._udp.example.com.   14400 IN SRV  5 0 3478 turn.example.com.
_turn._tcp.example.com.   14400 IN SRV  5 0 3478 turn.example.com.
_turns._tcp.example.com.  14400 IN SRV  5 0 5349 turn.example.com.

Для лучшей производительности и отказоустойчивости вы должны иметь по крайней мере два TURN/STUN-сервера. Для двух нужно немного изменить DNS-записи:

_stun._udp.example.com.   14400 IN SRV  5  50 3478 turn1.example.com.
_stun._udp.example.com.   14400 IN SRV  10 50 3478 turn2.example.com.
_stun._tcp.example.com.   14400 IN SRV  5  50 3478 turn1.example.com.
_stun._tcp.example.com.   14400 IN SRV  10 50 3478 turn2.example.com.
_stuns._tcp.example.com.  14400 IN SRV  5  50 5349 turn1.example.com.
_stuns._tcp.example.com.  14400 IN SRV  10 50 5349 turn2.example.com.
_turn._udp.example.com.   14400 IN SRV  5  50 3478 turn1.example.com.
_turn._udp.example.com.   14400 IN SRV  10 50 3478 turn2.example.com.
_turn._tcp.example.com.   14400 IN SRV  5  50 3478 turn1.example.com.
_turn._tcp.example.com.   14400 IN SRV  10 50 3478 turn2.example.com.
_turns._tcp.example.com.  14400 IN SRV  5  50 5349 turn1.example.com.
_turns._tcp.example.com.  14400 IN SRV  10 50 5349 turn2.example.com.

Не забудьте настроить DNS-записи (A и AAAA) для turn1.example.com и turn2.example.com как упоминалось выше.

Теоретически, можно добавить вторую запись A и AAAA для turn.example.com и stun.example.com, но это не рекомендуемый способ.

Шаг 2 — Установка

Сначала нужно установить coturn на сервере.

apt-get install coturn

Временно остановим coturn

systemctl stop coturn

Шаг 3 — Настройка

Для того чтобы включить TURN-сервер, откройте файл /etc/default/coturn и уберите # перед TURNSERVER_ENABLED=1.

Настройки хранятся в файле /etc/turnserver.conf. В начале переместим исходную версию этого файла с помощью команды:

Временно остановим coturn

systemctl stop coturn



mv /etc/turnserver.conf /etc/turnserver.conf.orig

Затем мы откроем(создадим) файл /etc/turnserver.conf со следующим содержимым:

listening-port=3478
tls-listening-port=5349

fingerprint
lt-cred-mech

use-auth-secret
static-auth-secret=replace-this-secret

realm=turn.example.com

total-quota=100
stale-nonce=600

cert=/etc/letsencrypt/live/turn.example.com/cert.pem
pkey=/etc/letsencrypt/live/turn.example.com/privkey.pem
cipher-list="ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384"

no-sslv3
no-tlsv1
no-tlsv1_1
#no-tlsv1_2

dh2066

no-stdout-log
log-file=/var/tmp/turn.log
#log-file=/dev/null

no-loopback-peers
no-multicast-peers

proc-user=turnserver
proc-group=turnserver

Создайте секрет с помощью команды

sed -i "s/replace-this-secret/$(openssl rand -hex 32)/" /etc/turnserver.conf

Шаг 4 — Регистрация Let's Encrypt сертификатов

Для Let's Encrypt сертификатов будем использовать certbot от EFF.

apt-get install snapd
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot
certbot certonly --standalone --rsa-key-size 4096 -m mail@example.com -d turn.example.com

За 30 (и 7) дней до истечения срока действия сертификатов вы получите электронное письмо на holu@example.com.

Шаг 5 — Запуск и испытание TURN/STUN-сервера

Запустите coturn, выполнив

systemctl start coturn

Проверить, работает ли cotrun можно при помощи команды 

systemctl status coturn.
  • Нет меток