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

Внесение записей в глобальный DNS:
1) Перед инсталляцией рекомендуется внести необходимые записи в глобальный dns, для возможности работы приложения, после всех указанных ниже действий. Необходимо задать три А записи: Для названия сервера управления, для медиа сервера и Coturn сервера. Пример записей ниже:
На сервере с ролями reverse proxy и stun/turn:
Установка производилась на ОС Debian 11. Предполагается что на данном сервере имеется сетевой адаптер с прямым белым ip адресом, а также второй сетевой интерфейс с доступом в корпоративную сеть. Либо имеется один сетевой интерфейс без белого ip адреса и используетсяPort forwarding
для такого сервера. 2) Установите Nginx и Coturn TURN если они еще не установлены:apt install nginx coturn -y3) Запустите службу nginx и добавьте её в автозагрузку:
systemctl enable --now nginx4) Создайте файл для сервера управления
/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
/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
systemctl restart nginx7) Отредактируйте файл для 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
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).

/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-адрес напрямую.
/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.
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} — необходимо указать внутренний адрес медиа сервера.

mkdir /root/.team/config.d18) После завершения установки, создайте конфигурационный файл
/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.
rebootВ данной конфигурации задержка в начале звонка, составляющая от 6 до 12 секунд до попадания в комнату, является стандартным показателем
Была ли полезна статья?