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

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

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

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

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

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

На сервере с ролями 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) После запуска скрипта установка, с выбором установки медиа сервера, вы можете
увидеть запись.

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

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

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

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

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