Product SiteDocumentation Site

11.8. Сервисы связи реального времени

Службы связи в реальном времени (RTC) включают голосовую связь, видео/веб-камеру, обмен мгновенными сообщениями (IM) и общий доступ к рабочему столу. В этой главе дается краткое описание трёх служб, необходимых для работы RTC, включая сервер TURN, сервер SIP и сервер XMPP. Подробные сведения о планировании, установке и управлении этими службами доступны в Кратком руководстве по обмену данными в реальном времени, которое включает примеры, специфичные для Debian.
И SIP, и XMPP могут обеспечивать одинаковую функциональность. SIP более известен в передаче голоса и видео, тогда как XMPP традиционно считается протоколом обмена мгновенными сообщениями. Фактически, они оба могут быть использованы для любой из этих целей. Чтобы максимизировать возможности подключения, рекомендуется запускать оба варианта параллельно.
Эти службы используют сертификаты X.509 как для целей аутентификации, так и для обеспечения конфиденциальности. См. Раздел 10.2, «X.509 certificates» для получения дополнительной информации.

11.8.1. Настройки DNS для служб RTC

Службам RTC требуются записи DNS SRV и NAPTR. Пример конфигурации, которую можно поместить в файл зоны для falcot.com (см. также Пример 10.13, «Выдержка из /etc/bind/db.falcot.com»:
; сервер, на котором все будет работать
server1            IN     A      198.51.100.19
server1            IN     AAAA   2001:DB8:1000:2000::19

; IPv4 сейчас только для TURN, некоторые клиенты глючат с IPv6
turn-server        IN     A      198.51.100.19

; IPv4 and IPv6 addresses for SIP
sip-proxy          IN     A      198.51.100.19
sip-proxy          IN     AAAA   2001:DB8:1000:2000::19

; IPv4 и IPv6 адреса для XMPP
xmpp-gw            IN     A      198.51.100.19
xmpp-gw            IN     AAAA   2001:DB8:1000:2000::19

; DNS SRV и NAPTR для STUN / TURN
_stun._udp  IN SRV    0 1 3467 turn-server.falcot.com.
_turn._udp  IN SRV    0 1 3467 turn-server.falcot.com.
@           IN NAPTR  10 0 "s" "RELAY:turn.udp" "" _turn._udp.falcot.com.

; DNS SRV и NAPTR записи для SIP
_sips._tcp  IN SRV    0 1 5061 sip-proxy.falcot.com.
@           IN NAPTR  10 0 "s" "SIPS+D2T" "" _sips._tcp.falcot.com.

; DNS SRV записи для XMPP Server и Client режимов:
_xmpp-client._tcp  IN     SRV    5 0 5222 xmpp-gw.falcot.com.
_xmpp-server._tcp  IN     SRV    5 0 5269 xmpp-gw.falcot.com.

11.8.2. TURN Сервер

TURN — это служба, которая помогает клиентам, находящимся за маршрутизаторами NAT и межсетевыми экранами, находить наиболее эффективный способ взаимодействия с другими клиентами и ретрансляции медиапотоков, если прямой путь к мультимедиа не найден. Настоятельно рекомендуется установить сервер TURN до того, как конечным пользователям будут предложены какие-либо другие службы RTC.
TURN и связанный с ним протокол ICE являются открытыми стандартами. Чтобы извлечь выгоду из этих протоколов, максимизировать возможности подключения и свести к минимуму разочарование пользователей, важно убедиться, что всё клиентское программное обеспечение поддерживает ICE и TURN.
Для эффективной работы алгоритма ICE сервер должен иметь два общедоступных IPv4-адреса.
Установите пакет coturn и отредактируйте /etc/turnserver.conf файл конфигурации. По умолчанию база данных SQLite сконфигурирована в /var/db/turndb для настроек учётной записи пользователя, но при желании вместо неё можно настроить PostgreSQL, MySQL или Redis. Самое важное — это вставить IP-адреса сервера.
Сервер можно запустить turnserver из пакета coturn. Мы хотим, чтобы сервер был автоматически запускаемой системной службой. Это поведение по умолчанию при использовании systemd. Только при использовании более старой версии SysVinit вам придется редактировать файл вроде этого /etc/default/coturn:
#
# Раскомментируйте, если хотите, чтобы turnserver работал как
# демон автоматического сервиса
#
TURNSERVER_ENABLED=1
По умолчанию сервер TURN использует анонимный доступ. Нам нужно добавить пользователей, которых мы хотим использовать:
# turnadmin -a -u roland -p secret_password -r falcot.com
# turnadmin -A -u admin -p secret_password
Мы используем аргумент -a чтобы добавить обычного пользователя и -A чтобы добавить администратора.

11.8.3. SIP Proxy Сервер

Прокси-сервер SIP управляет входящими и исходящими SIP-соединениями между другими организациями, провайдерами SIP-транкинга, SIP-УАТС, такими как Asterisk, SIP-телефонами, программными телефонами на основе SIP и приложениями WebRTC.
Настоятельно рекомендуется установить и настроить SIP-прокси перед попыткой настройки SIP-АТС. Прокси-сервер SIP нормализует большую часть трафика, поступающего на УАТС, и обеспечивает более высокое качество подключения и устойчивость.

11.8.3.1. Установите SIP-прокси

Установите пакет kamailio и пакет для серверной части базы данных. Администраторы Falcot выбрали MySQL, поэтому устанавливают kamailio-mysql-modules и mariadb-server. /etc/kamailio/kamctlrc - это файл конфигурации для инструментов управления kamctl и kamdbctl. Вам необходимо отредактировать и установить SIP_DOMAIN для вашего домена службы SIP и установить DBENGINE для MySQL, можно использовать другой бэкенд базы данных.
[...]
## ваш SIP домен
SIP_DOMAIN=sip.falcot.com

## chrooted каталог
# CHROOT_DIR="/path/to/chrooted/directory"

## тип базы данных: MYSQL, PGSQL, ORACLE, DB_BERKELEY, DBTEXT, или SQLITE
# по умолчанию none загружено
#
# Если вы хотите настроить базу данных с kamdbctl, вы должны как минимум указать
# этот параметр.
DBENGINE=MYSQL
[...]
Теперь сосредоточимся на файле конфигурации /etc/kamailio/kamailio.cfg. Falcot необходима аутентификация пользователя и постоянное местоположение пользователя, поэтому они добавляют #!define директивы в верхней части этого файла:
#!KAMAILIO
#
# Kamailio (OpenSER) SIP Server v5.2 - умолчальный конфигурационный скрипт
#     - web: https://www.kamailio.org
#     - git: https://github.com/kamailio/kamailio
#!define WITH_MYSQL
#!define WITH_AUTH
#!define WITH_USRLOCDB
[...]
Kamailio нужна структура базы данных, которую мы можем создать, работая kamdbctl create как root. Наконец, мы можем добавить некоторых пользователей с помощью kamctl.
# kamdbctl create
[...]
# kamctl add roland secret_password
Как только всё будет правильно настроено, вы можете запустить или перезапустить службу с помощью systemctl restart kamailio, вы можете подключиться к SIP-клиенту, указав IP-адрес и порт (5090 — порт по умолчанию). Пользователи имеют следующий идентификатор: roland@sip.falcot.com, и они могут войти в систему с помощью клиента (см.Раздел 13.9, «Программное обеспечение коммуникации в реальном времени»).

11.8.4. XMPP Сервер

Сервер XMPP управляет подключением между локальными пользователями XMPP и пользователями XMPP в других доменах общедоступного Интернета.
prosody — популярный сервер XMPP, который надёжно работает на серверах Debian.

11.8.4.1. Установить XMPP-сервер

Установите пакет prosody.
Просмотрите файл конфигурации /etc/prosody/prosody.cfg.lua. Самое важное — это указать JID-ы пользователей, которым разрешено управлять сервером.
admins = { "joe@falcot.com" }
Для каждого домена также необходим отдельный файл конфигурации. Скопируйте образец из /etc/prosody/conf.avail/example.com.cfg.lua и используйте его как отправную точку. Вот здесь falcot.com.cfg.lua:
VirtualHost "falcot.com"
        enabled = true
        ssl = {
                key = "/etc/ssl/private/falcot.com.key";
                certificate = "/etc/ssl/certs/falcot.com.pem";
                }

-- Set up a MUC (multi-user chat) room server on conference.example.com:
Component "conference.falcot.com" "muc"
Чтобы включить домен, должна быть символическая ссылка с /etc/prosody/conf.d/. Создайте это так:
# ln -s /etc/prosody/conf.avail/falcot.com.cfg.lua /etc/prosody/conf.d/
Перезапустите службу, чтобы использовать новую конфигурацию.

11.8.4.2. Управление XMPP-сервером

Некоторые операции управления можно выполнить с помощью prosodyctl утилиты командной строки. Например, чтобы добавить учётную запись администратора, указанную в /etc/prosody/prosody.cfg.lua:
# prosodyctl adduser joe@falcot.com
См. Онлайн-документация Prosody для получения более подробной информации о том, как настроить конфигурацию.

11.8.5. Запуск служб на порту 443

Некоторые администраторы предпочитают запускать все свои службы RTC на порту 443. Это помогает пользователям подключаться из удалённых мест, таких как отели и аэропорты, где другие порты могут быть заблокированы или интернет-трафик направляется через прокси-серверы HTTP.
Чтобы использовать эту стратегию, каждой службе (SIP, XMPP и TURN) нужен отдельный IP-адрес. Все службы по-прежнему могут находиться на одном хосте, поскольку Linux поддерживает несколько IP-адресов на одном хосте. Номер порта 443 должен быть указан в файлах конфигурации для каждого процесса, а также в записях DNS SRV.

11.8.6. Добавление WebRTC

Falcot хочет позволить клиентам совершать телефонные звонки прямо с веб-сайта. Администраторы Falcot также хотят использовать WebRTC как часть своего плана аварийного восстановления, чтобы сотрудники могли использовать веб-браузеры дома для входа в телефонную систему компании и нормально работать в чрезвычайной ситуации.
WebRTC — это быстро развивающаяся технология, поэтому важно использовать пакеты из Testing дистрибутива. Другой вариант — скомпилировать программное обеспечение.
WebRTC использует простой API для предоставления RTC браузерам и мобильным приложениям. Это бесплатное программное обеспечение, разрабатываемое Google.
Очень гибкий подход — использование реализации WebRTC GStreamer. Он позволяет создавать мультимедийные приложения на основе конвейеров, что позволяет разрабатывать интересные и высокоэффективные приложения. Хорошей отправной точкой является следующая демонстрация от Centricular, основной компании, которая её разрабатывает:
Более продвинутые веб-сайты с возможностью звонка по щелчку обычно используют серверные сценарии для создания файла config.js динамически. Исходный код DruCall демонстрирует, как это сделать с помощью PHP.
В этой главе представлена лишь часть доступного серверного программного обеспечения; однако было описано большинство распространённых сетевых служб. Теперь настало время для ещё более технической главы: мы углубимся в детали некоторых концепций, опишем массовое развертывание и виртуализацию.