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

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










