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

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

Обновлено: 11.12.25

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

Внесение записей в глобальный 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), за исключением части пунктов,
где требуется коррекция:
https://support.r7-office.ru/team/team_install/team_install/ ↗

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), за исключением части пунктов,
где требуется коррекция:
https://support.r7-office.ru/team/team_install/team_install/ ↗

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 секунд до
попадания в комнату, является стандартным показателем