Продукты Р7
Корпоративный сервер 2024
Корпоративный сервер 2024
Сервер документов
Сервер документов
Редакторы документов
Редакторы документов
Корпоративный сервер 2019
Корпоративный сервер 2019
Графика
Графика
ВКС и мессенджер
ВКС и мессенджер
Мобильные редакторы
Мобильные редакторы
Почтовый сервер
Почтовый сервер
Органайзер
Органайзер
Сервер лицензирования
Сервер лицензирования
Файл-Экспресс
Файл-Экспресс
Аналитика
Аналитика
Дополнительно
Часто задаваемые вопросы
Разработчикам
Интеграции
Новые возможности

Настройка работы Р7-Команда за NAT (reverse proxy + stun/turn)

Обновлено: 06.03.26

Схема сетевого взаимодействия

Внесение записей в глобальный DNS

1. Перед инсталляцией рекомендуется внести необходимые записи в глобальный dns, для возможности работы приложения, после всех указанных ниже действий необходимо задать три А записи:

Для названия сервера управления, для медиа сервера и Coturn сервера. Пример записей ниже:

На сервере с ролями reverse proxy и stun/turn

Установка производилась на ОС Debian 11.

Предполагается что на данном сервере имеется сетевой адаптер с прямым белым ip. Адресом, а также второй сетевой интерфейс с доступом в корпоративную сеть. Либо имеется один сетевой интерфейс без белого ip адреса и используется Port forwarding для такого сервера.

2. Установите Nginx и Coturn TURN если они еще не установлены:

apt install nginx coturn -y

3. Запустите службу nginx и добавьте её в автозагрузку:

systemctl enable --now nginx

4. Создайте файл для сервера управления /etc/nginx/conf.d/team_proxy.conf со следующим содержимым:

map $http_host $this_host {
"" $host;
default $http_host;
}
map $http_x_forwarded_proto $the_scheme {
default $http_x_forwarded_proto;
"" $scheme;
}
map $http_x_forwarded_host $the_host {
default $http_x_forwarded_host;
"" $this_host;
}
map $http_upgrade $proxy_connection {
default upgrade;
"" close;
}
server {
listen 80;
server_name {DNS_NAME_TEAM} ;
server_tokens off;
## Redirects all traffic to the HTTPS host
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name {DNS_NAME_TEAM};
ssl_certificate {PATH_TO_CERTIFICATE};
ssl_certificate_key {PATH_TO_KEY};
ssl_session_timeout 24h;
ssl_session_cache shared:SSL:16m;
ssl_session_tickets on;
ssl_prefer_server_ciphers on;
ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;
add_header Strict-Transport-Security "max-age=31536000;";
location / {
proxy_pass https://{IP_SERVER_TEAM};
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header X-Forwarded-Host $the_host;
proxy_set_header X-Forwarded-Proto $the_scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

Где:

  • {PATH_TO_CERTIFICATE} — полный путь до ssl сертификата (для домена
    team.domain.ru) ля защищённого соединения HTTPS, например
    /etc/ssl/fullchain.pem;
  • {PATH_TO_KEY} — полный путь до ключа от сертификата, например /etc/ssl/privkey.pem;
  • {IP_SERVER_TEAM} — приватный ip адрес сервера, где установлен сервер управления команд, например, 192.168.1.12;
  • {DNS_NAME_TEAM} — dns имя для сервера управления, которое вы прописали, например, team.domain.ru

5. Создайте файл для медиа сервера /etc/nginx/conf.d/media_proxy.conf со следующим содержимым:

server {
listen 80;
listen 443 ssl http2;
server_name {IP_SERVER_MEDIA};
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 32 16k;
gzip_min_length 256;
gzip_types application/atom+xml
application/geo+json
application/javascript
application/x-javascript
application/json
application/ld+json
application/manifest+json
application/rdf+xml
application/rss+xml
application/xhtml+xml
application/xml
font/eot
font/otf
font/ttf
image/svg+xml
text/css
text/javascript
text/plain
text/xml;
proxy_next_upstream error timeout http_502 http_503 http_504 http_429 ;
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
ssl_session_timeout 24h;
ssl_session_cache shared:SSL:16m;
ssl_session_tickets on;
ssl_prefer_server_ciphers on;
ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;
add_header Strict-Transport-Security "max-age=31536000;";
ssl_certificate {PATH_TO_CERTIFICATE};
ssl_certificate_key {PATH_TO_KEY};
location / {
proxy_pass_request_headers on;
proxy_pass_request_body on;
proxy_set_header Host $host;
proxy_pass https://{IP_SERVER_MEDIA};
proxy_http_version 1.1;
proxy_pass_header Set-Cookie;
proxy_pass_header P3P;
real_ip_header X-Forwarded-For;
}
}

Где:

  • {PATH_TO_CERTIFICATE} — полный путь до ssl сертификата (для домена media.domain.ru) для защищённого соединения HTTPS, например /etc/ssl/fullchain.pem;
  • {PATH_TO_KEY} — полный путь до ключа от сертификата, например /etc/ssl/privkey.pem;
  • {IP_SERVER_MEDIA} — приватный IP адрес сервера, где установлен медиа сервер команд, например, 192.168.1.11;
  • {DNS_NAME_MEDIA} — dns имя для медиа сервера, которое вы прописали, например, media.domain.ru

6. Перезапустите службу nginx:

systemctl restart nginx

7. Отредактируйте файл для coturn роли /etc/turnserver.conf приведя его содержимое к виду:

Уточнение

Дальнейшая конфигурация предполагает использования STUN и TURN ролей на данном сервере.

Это пример конфигурации:

listening-ip=0.0.0.0 # Прослушивать все IP-адреса
external-ip={EXTERNAL_IP}
relay-ip={RELAY_IP}
relay-ip={RELAY_IP}
fingerprint
lt-cred-mech
user={CREDENTIAL}
realm={DNS_NAME_COTURN}
syslog
min-port=10000
max-port=30000
log-file=/tmp/turnserver.log
verbose
Verbose

Где:

  • {EXTERNAL_IP} — внешний белый IP-адрес (как пример задан на этапе 1).
  • {RELAY_IP} — необходимо указать как внутренний адрес, заданный на одном из сетевых адаптеров, так и внешний адрес сервера, укажите их на разных строках;
  • {CREDENTIAL} — учетная запись для авторизации на turn сервере (пример: mediauser:12345678);
  • {DNS_NAME_COTURN} — dns имя для coturn сервера, которое Вы прописали в глобальном DNS, например, stunturn.domain.ru

8. Перезапустите службу coturn:

systemctl restart coturn

Установите медиа сервер по инструкции

Установку можно производить по инструкции ↗ (раздел 6), за исключением части пунктов, где требуется коррекция:

9. Пропишите записи DNS в /etc/hosts:

127.0.0.1 localhost
{INTERNAL_IP} media.domain.ru
{DNS_NAME_COTURN_LOCAL} stunturn.domain.ru stunturn

Где:

  • {INTERNAL_IP} — необходимо указать внутренний адрес медиа сервера.
  • {DNS_NAME_COTURN_LOCAL} — необходимо указать внутренний адрес, до сервера с ролями reverse proxy и stun/turn (обязательно оставьте имя сервиса без домена, как пример: stunturn).

10. После запуска скрипта установка, с выбором установки медиа сервера, вы можете увидеть запись:

Так как наша конфигурация подразумевает установку в закрытом контуре, выберите пункт <Все равно продолжить>.

11. Продолжите установку медиа сервера по инструкции.

12. После завершения установки, создайте конфигурационный файл /etc/media/media.properties.d/media.properties со следующим содержимым:

com.mind.media.profile.webrtc.relayCandidates=true
com.mind.media.profile.webrtc.reflexiveCandidates=true
  • com.mind.media.profile.webrtc.relayCandidates=true: Эта строка включает использование ретрансляционных кандидатов (relay candidates) для соединения WebRTC. Ретрансляционные кандидаты используются, когда два клиента WebRTC не могут установить прямое соединение друг с другом (например, если они находятся за NAT). В этом случае, сервер TURN (или STUN) выступает в качестве ретранслятора, позволяя клиентам обмениваться данными через него;
  • com.mind.media.profile.webrtc.reflexiveCandidates=true: Эта строка включает использование рефлексивных кандидатов (reflexive candidates) для соединения WebRTC. Рефлексивные кандидаты позволяют клиентам узнать свой внешний IP-адрес, даже если они находятся за NAT. Это важно, так как некоторые устройства не могут получить свой внешний IP-адрес напрямую.

13. В конфигурационном файле /etc/xcoder/xcoder.conf дополните секцию webrtc_rtpgw авторизационными данными:

webrtc_rtpgw
{
pool_min_free 100
workers_per_process 64
port_range_begin 20000
port_range_end 30000
turn_hosts
{
stunturn:3478
{
protocol "tcp"
username "mediauser"
password "12345678"
}
}
stun_hosts
{
"stunturn:3478"
}
}
}

Где:

  • stunturn:3478 — это имя хоста и порт coTURN сервера (он же указан в /etc/hosts) ;
  • username — имя пользователя для аутентификации на сервере coTURN;
  • password — пароль для аутентификации на сервере coTURN.

14. Перезапустите зависимые службы для применения изменений:

systemctl restart nginx.service opensips.service xcoder-media.service

Установите сервер управления по инструкции

Установку можно производить по инструкции ↗ (раздел 7), за исключением части пунктов, где требуется коррекция:

15. Пропишите записи DNS в /etc/hosts:

127.0.0.1 localhost
{INTERNAL_IP} media.domain.ru

Где:

  • {INTERNAL_IP} — необходимо указать внутренний адрес медиа сервера.

16. После запуска скрипта установка, с выбором установки сервера управления, вы дойдете до пункта:

Где необходимо указать url медиа сервера.

17. Создайте директорию для считывания конфигурационного файла:

mkdir /root/.team/config.d

18. После завершения установки, создайте конфигурационный файл /root/.team/config.d/ss-production.properties с настройками для stun/turn сервера со следующим содержимым:

mind.stun.url=stun:stunturn.domain.ru:3478
mind.turn.url=turn:stunturn.domain.ru:3478
mind.turn.username=mediauser
mind.turn.password=12345678

Где:

  • mind.stun.url=stun:stunturn.domain.ru:3478: определяет адрес и порт сервера STUN (Session Traversal Utilities for NAT). Сервер STUN используется для определения внешнего IP-адреса и порта устройства, находящегося за NAT. В примере адрес сервера STUN — stunturn.domain.ru, а порт — 3478;
  • mind.turn.url=turn:stunturn.domain.ru:3478: определяет адрес и порт сервера TURN (Traversal Using Relays around NAT). Сервер TURN используется для ретрансляции трафика WebRTC, когда два устройства не могут установить прямое соединение друг с другом (например, если они находятся за NAT). В этом случае, сервер TURN выступает в качестве посредника, позволяя устройствам обмениваться данными через него. В примере адрес сервера TURN — stunturn.domain.ru, а порт — 3478;
  • mind.turn.username=mediauser: определяет имя пользователя для аутентификации на сервере TURN;
  • mind.turn.password=12345678: определяет пароль для аутентификации на сервере TURN.

19. Перезапустите сервер управления для применения изменений:

reboot

В данной конфигурации задержка в начале звонка, составляющая от 6 до 12 секунд до попадания в комнату, является стандартным показателем.

Была ли эта статья полезной?

Поделитесь пожалуйста своим мнением

      В статье есть ошибкиРекомендации не помоглиТекст трудно понятьСодержание статьи не соответствует заголовкуДругое