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