External SIP Gate (esg)

Описание

Точка доступа в кластер по SIP для внешних устройств – провайдеров телефонии, шлюзов и вышестоящими и одноранговыми АТС, находящихся во внешнем номерном плане, не управляемом системой. Вся работа происходит на основе учетных записей SIP-провайдеров. Для стыковки внутреннего номерного плана с одноранговыми и вышестоящими АТС и провайдерами применяются правила преобразования CallerId и CalledId (provider_callerid).

Обрабатывает запросы в режиме user-agent. Одним плечом всегда выступает внешний абонент, другим плечом всегда выступает внутренний сервер с функциональной ролью b2bua.
Медиа-шлюз применяется в случае, если звонок связан с учетной записью provider, имеющей включенную опцию "media".

Является пограничной функциональной ролью для интерфейса SIP.
Защищает кластер от нежелательных запросов извне, используя пограничные фильтры на основе статических правил и динамических списков временно забаненных адресов.
Может использовать функциональную роль bgmg для решения вопроса стыковки разных сетей. Медиа-шлюз посредством функциональной роли bgmg применяется автоматически при обнаружении нескольких сетевых интерфейсов и при проксировании запроса из одной подсети в другую.
Для корректного функционирования режима на сервере с функциональной ролью esg должен находиться один или несколько экземпляров функциональной роли bgmg с непересекающимися настройками для портов.

Резервируется и масштабируется в режиме Active-Active.
Каждая учетная запись провайдера закрепляется за конкретным экземпляром функциональной роли esg, работающей на одном из сайтов, где обслуживается домен.

Table 1. Системные характеристики

Код

esg

Режим работы

Сервис

Режим резервирования

Active-Active

Типы сайтов

Любые

Слой

Бизнес-логика

Размещение

Пограничный

Сохранение и восстановление состояния при перезагрузке

Нет

Приложение

rostell_sip

Ограничения

  • Запросы REFER и INVITE+Replaces всегда обрабатываются зеркально, то есть в рамках того направления, откуда получен запрос.

  • Является пограничной функциональной ролью, использует сертификат TLS для HTTPS и WSS подключений.

Параметры

Table 2. Параметры
Имя Тип Умолчание Описание

name

str

required

Имя. Может состоять из латинских букв и цифр, должно начинаться с буквы.

roletype

str

required

Тип функциональной роли. Возможные значения: "esg".

iface

str

required

Алиас сетевого интерфейса сервера, на котором будет происходить внутреннее взаимодействие функциональных ролей между собой.

roleid

int

required

Идентификатор функциональной роли.
Уникален для всей системы, независимо от сайта или сервера. Не подлежит изменению.
Целое число от 1 до 9999.

separate

bool

required

Признак выделения функциональной роли в отдельную ноду.

udp

int

required

Локальный порт UDP для SIP. Этот же порт одновременно обрабатывает и TCP.
Например: 5080

tcp

int

required

Локальный порт TCP для SIP. Если указано значение, отличное от UDP, то будет поднят дополнительно.
Например: 5080

tls

int

empty

Локальный порт для соединений по tls. По умолчанию не открывается.
Например: 5081

wss

int

empty

Локальный порт для соединений по wss. По умолчанию не открывается.
Например: 5083

trn

bool

true

Выключатель логирования SIP-протокола в лог trn.

use_srtp

bool

false

По умолчанию при инициации звонков на адреса, подключенные по TLS, отправляется SDP-offer для нешифрованного медиа потока (rtp). С помощью параметра можно для TLS адресов включить режим инициации отправки SDP-offerа с шифрованным медиа-потоком.
Применяется только для звонков, использующих пограничный медиагейт (media=1).

certdir

str

empty

Алиас каталога на сервере для хранения сертификатов (файлы server.crt и server.key).
Если путь не указан, то поиск сертификатов осуществляется в каталоге "/usr/lib/rostell/rostell_sip/priv/ssl"

keypass

str

empty

Пароль для расшифровки файла секретного ключа сертификата.

tls_ciphers

array<str>

default

Список алгоритмов шифрования, используются при установке tls соединения. Необходимо указывать RFC или openssl имена алгоритмов. При указании * будут выбраны все доступные алгоритмы.
По умолчанию используется default - список актуальных алгоритмов шифрования для протоколов tlsv1.1, tlsv1.2, tlsv1.3.

Например:

  • ["*"]

  • [<<"TLS_RSA_WITH_AES_256_GCM_SHA384">>, <<"AES256-GCM-SHA384">>]

payloads_audio_offer

array<str>

["PCMA/8000", "PCMU/8000", "G729/8000", "telephone-event/8000"]

Список применяемых аудио кодеков.
В качестве значения список, содержащий имена кодеков в формате "Name/Freq".
Поддерживаются: PCMU/8000, GSM/8000, PCMA/8000, G722/8000, CN/8000, G729/8000, speex/8000, speex/16000, speex/32000, telephone-event/8000, G726-16/8000, G726-24/8000, G726-32/8000, G726-40/8000, iLBC/8000, opus/48000/2.

payloads_video_offer

array<str>

empty

Список используемых для инициации звонка имен видеокодеков case-sensitive.
Поддерживаются: H263/90000, H263-1998/90000, H264/90000, VP8/90000, VP9/90000.

use_video_transcoding

bool

false

Выключатель транскодинга видео.
Применяется при использовании bgmg.

  • false – все видео-кодеки из SDP INVITE-запроса, полученного от инициатора, транслируются без изменений в SDP INVITE-запросов на вызываемые устройства. В этом случае система не применяет ни свои знания о кодеках, ни транскодинг, икодек неизвестен системе, то прямая трансляция тем не менее остается возможной.

  • true – все видео-кодеки приводятся в соответствии с известными системе видео-кодеками, система предлагает вызываемой стороне все известные ей кодеки (с фильтром из payloads_video_offer), и при несовпадении выбранных устройствами кодеков осуществляется транскодинг на видео-стриме.

aliases

array<object>

empty

Алиасы сетевых интерфейсов для применения bgmg.
Распределение алиасов по сетевым интерфейсам обязано совпадать с аналогичным распределением у функциональной роли bgmg.

Формат:
{"key":"Alias", "value":"Interface"}

Достижимость конечных адресов через сетевые интерфейсы, чьи адреса принадлежат разным алиасам, означает необходимость применения медиа-шлюза, управляемого функциональной ролью bgmg.
Здесь должны быть указаны адреса всех сетевых интерфейсов IPv4 (исключая loopback), которые могут быть определены системой как наилучшие для достижения удаленных адресов.

sipalg

array<object>

empty

Маппинги SIP ALG для применения в SDP и заголовках на исходящих запросах INVITE и ответах OK, а также обратно на входящих
сообщениях ACK и BYE.

Формат:
{"key":"IpAddr1", "value":"IpAddr2"}

Ключом выступает IP-адрес подлежащий подмене, а значением - IP-адрес, на который будет подменяться адрес в исходящем SDP.
IP-адрес подлежащий подмене должен совпадать с адресом на сервере с функциональной ролью MG/BGMG.
IP-адрес на который будет подменяться может быть любым и обычно не принадлежит серверу.

max_udp_size

int

1500

Максимальный размер udp пакета, отправляемый системой, в байтах.
Минимальное значение: 1500.
(Реализовано в задаче #182).
При превышении отправляемым пакетом установленного размера происходит автоматическая отправка через TCP.
При превышении отправляемым пакетом размера 1500 но до установленного в поле значения, происходит автоматическое разбиение пакета на фреймы и сборка их при получении на нижнем сетевом уровне.
Не все устройства поддерживают такой режим. В то же время не все устройства держат TCP открытым.

b2bmedia

bool

true

Выключатель применения медиа-шлюза функциональной ролью b2b для звонков, инициированных текущим экземпляром функциональной роли esg.

extaddrs

array<str>

empty

Список IP-адресов текущего сервера.
Применяется в одном из алгоритмов поиска учетной записи провайдера при получении INVITE-запросов извне, допуская указание в качестве домена в заголовке "To" одного из перечисленных в списке адресов.
Обычно необходимости в использовании этого поля не возникает, поскольку имеется возможность указать необходимое значение в настройках учетной записи провайдера.
Тем не менее в целях оптимизации и снятия потребности указывать в большом количестве учетных записей провайдеров одних и тех же значений, они могут быть указаны в опции функциональной роли esg.

stunserver

array<str>

empty

Список внешних STUN-серверов для определения внешнего IP-адреса сервера при работе за NAT.
Применяется в одном из алгоритмов поиска учетной записи провайдера при получении INVITE-запросов извне, допуская указание в качестве домена в заголовке "To" внешнего адреса NAT.

max_udp_size

int

1500

Максимальный размер udp пакета отправляемый системой, целое число. Минимальное значение: 1500.

Пример конфигурации

Управление конфигурацией производится в приложении, доступном для администраторов мастер-домена. Приложение скрывает полное содержание конфигурации, однако тем не менее оно доступно через API.

Конфигурация содержит раздел для описания всех экземпляров всех функциональных ролей. Параметры определяются для каждого конкретного экземпляра функциональной роли.

Пример узла
{
  "name": "esg33",
  "roletype": "esg",
  "iface": "eth0",

  "roleid": 33,
  "separate": true,
  "tcp": 5080,
  "udp": 5080,
  "tls": 5081,

  "certdir": "/var/lib/rostell/certificates",
  "keypass": "eb9c4458016d3f1e378d02004c4f4f50",
  "max_udp_size": 10000,
  "stunserver": "stun.sipnet.ru, demo.rostell.ru"
}

См. также