Internal SIP Gate (sg)

Описание

Точка входа в кластер по SIP для внутренних устройств, определяемых учетными записями SIP-пользователей.

Проксирует запросы в режиме stateless на внутренние серверы с ролями b2b. Имеет адрес, через который подключены телефоны внутренних абонентов соответствующего сайта. Любой запрос от системы к пользователю идет через соответствующий экземпляр роли sg.
Не делает различий между разными типами запросов – пропускает все насквозь, добавляя себя в заголовки "Via" всех запросов и "Record-Route" INVITE-запросов.

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

Резервируется и масштабируется в режиме Active-Active.

При запуске роли проверяется сертификат указанный в параметре *certdir*. Если валидация не пройдена, роль запускается с неизменяемым сертификатом. Сертификат может быть переопределен через настройки домена.

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

Код

sg

Режим работы

Сервис

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

Active-Active

Типы сайтов

Любые

Слой

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

Размещение

Пограничный

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

Нет

Приложение

era_sip

Ограничения

  • Не более 3000 SIP-пакетов на один экземпляр роли в секунду.

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

Параметры

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

name

str

required

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

roletype

str

required

Тип роли. Возможные значения: "sg".

iface

str

required

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

ext

json

empty

Дополнительные опции роли. Содержит json объект или список.

enabled

bool

empty

Флаг активности роли. При установке в false роль не участвует в валидации и не запускается.

roleid

int

required

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

separate

bool

required

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

udp

int

required

Локальный порт UDP для SIP (1 - 65535). Этот же порт одновременно обрабатывает и TCP.
Например: 5060.
Поднимает слушателя UDP на групповом интерфейсе '0.0.0.0', либо интерфейсах, указанных параметром 'sip_ifaces'.

tcp

int

required

Локальный порт TCP для SIP (1 - 65535). Если указано значение, отличное от UDP, то будет поднят дополнительно.
Например: 5060.
Поднимает слушателя TCP на групповом интерфейсе '0.0.0.0', либо интерфейсах, указанных параметром 'sip_ifaces'.

tls

int

empty

Локальный порт TLS для SIP (1 - 65535). По умолчанию не открывается.
Например: 5061.
Поднимает слушателя TLS на групповом интерфейсе '0.0.0.0', либо интерфейсах, указанных параметром 'sip_ifaces'.

wss

int

empty

Локальный порт WebSocketSecure для SIP (1 - 65535). По умолчанию не открывается.
Например: 5063.
Поднимает слушателя WSS на групповом интерфейсе '0.0.0.0', либо интерфейсах, указанных параметром 'sip_ifaces'.

sip_internal_port

int

empty

Локальный порт для SIP-взаимодействия с другими микросервисами системы (UDP/TCP).
Например: 6160.
Используется для внутреннего взаимодействия с другими микросервисами системы по протоколу SIP.
Применяется в том случае, если для микросервиса задан список конкретных интерфейсов слушателя портов ('sip_ifaces').
Поднимается только на локальном интерфейсе ноды.
Не должен использоваться другими микросервисами, исполняемыми на том же самом сервере.

sip_ifaces

array<str>

[]

Список интерфейсов сервера, на которых поднимаются слушатели портов.
Указываются алиасы интерфейсов сервера.
Если не указано ни одного интерфейса, то заданные порты слушаются на всех интерфейсах (0.0.0.0).

Для ролей sg, esg, redirect, исполняемых на одном и том же сервере, в качестве внешних портов (udp,tcp,tls,wss) могут быть указаны одинаковые значения, если их списки прослушиваемых интерфейсов не пересекаются.

К списку прослушиваемых интерфейсов всегда добавляется оригинальный интерфейс текущей ноды с портом 'sip_internal_port', который не должен использоваться другими микросервисами на этом же сервере.

Если в момент запуска сервера какой-либо указанный из сетевых интерфейсов не поднят, то слушатель не запускается. После его появления для запуска слушателя необходимо перезагрузить ноду микросервиса.

log_media

bool

true

Выключатель логирования медиа-функций media.

log_mgct

bool

true

Выключатель логирования протокола взаимодействия с MGC-контроллером в лог mgct.

log_sip

bool

true

Выключатель логирования трейса машины состояний диалога в лог sip.

log_trn

bool

true

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

certdir

str

empty

Алиас каталога на сервере для хранения сертификатов (файлы 'server.crt' и 'server.key').
В случае необходимости указания цепочки сертификатов до центра сертификации (CA - Certification Authority) его необходимо разместить в конце файла сертификата.
Если путь не указан, то поиск сертификатов осуществляется в каталоге "/usr/lib/era/era_sip/priv/ssl"

Этот параметр и сертификат применяется только в случае, когда не применен сертификат, указанный в настройках домена (settings.certificate_pem):

  • обращение к серверу произведено на доменное имя, не соответствующее доменному дереву платформы, и одновременно сертификат не указан в настройках мастер-домена;

  • в домене обращения и в его родительских доменах вплоть до мастер-домена в настройках не указан сертификат;

  • не используется автоматическая выписка сертификатов.

keypass

str

empty

Пароль для расшифровки файла секретного ключа сертификата, указанного в поле 'certdir'.

b2bmedia

bool

true

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

bgmedia

bool

false

Выключатель применения пограничного медиа-шлюза текущим outbound-proxy сервером.
В качестве пограничного медиа-шлюза используется произвольный экземпляр bgmg, исполняемый на этом же сервере.

Пограничный медиа-шлюз может понадобиться, если сервер с outbound-proxy размещен в нескольких подсетях, и существует такая подсеть, откуда подключаются абоненты, и доступ к которой отсутствует на других серверах системы, где исполняются микросервисы mg.
Режим принудительно не применяется на outbound-proxy при любом из следующих условий:

  • система развернута на одном сервере;

  • на сервере с микросервисом sg лишь один сетевой интерфейс;

  • проксирование производится в пределах одной подсети (абонентское устройство находится в той же подсети, что и SIP-сервер b2b).

По умолчанию обработкой медиа-трафика занимается медиа-шлюз mg под управлением микросервиса b2b.

payloads_audio_offer

array<str>

"G729/8000"

Список имен аудиокодеков, используемых для инициации звонка (вызове плеча).
Применяется только при использовании режима обслуживания медиа-вызова через bgmg.

payloads_video_offer

array<str>

empty

Список имен видеокодеков, используемых для инициации звонка (вызове плеча).
Применяется только при использовании режима обслуживания медиа-вызова через bgmg.

use_video_transcoding

bool

false

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

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

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

use_srtp

bool

false

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

max_udp_size

int

1500

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

reregister

bool

false

Выключатель режима отправки запросов NOTIFY для перерегистрации UA при падении экземпляра роли sg, обслуживающего устройство.
true – при обнаружении внезапной недоступности экземпляра роли sg, другие экземпляры роли осуществляют отправку запроса NOTIFY со специальным содержимым, призванного инициировать перезапуск операции регистрации на устройстве.

Примененеие имеет смысл в случае, когда:

  • в конфигурации имеется несколько экземпляров sg,- используемые устройства поддерживают указание нескольких адресов Outbound-proxy,- используемые устройства поддерживают NOTIFY c event=reload-account,- используемые устройства обрабатывают запрос NOTIFY, поступающий с альтернативного сервера.

Один из активных экземпляров SG со включенной опцией reregister мониторит все остальные экземпляры текущего сайта.
При обнаружении потери в течение 15 секунд производится ожидание его перезапуска.
Если перезапуска не происходит, то во всех доменах осуществляется поиск регистраций, связанных с потерянным экземпляром sg.
Всем обнаруженным зарегстрированным устройствам отправляется запрос NOTIFY c event=reload-account.

Если на момент поиска регистраций не все домены доступны (например, в ходе отключения сервера происходит одновременное перетекание БД, mdc, reg), то операция откладывается до 2 минут в ожидании подъема сервисов.

deservice_response

bool

true

Выключатель режима отправки неудачных финальных SIP-ответов на запросы REGISTER, SUBSCRIBE, INVITE (новые) во время действия режима вывода сервера из обслуживания.
Применяется только если активны и не выводятся из обслуживания другие экземпляры, указанные в списке 'deservice_followers'".

deservice_followers, array<int>, true, "Список roleid других экземпляров SG, замещающих текущий экземпляр во время вывода из эксплуатации.
Применяется только в случае использования режима 'deservice_response'.
Если список пуст, то применяется множество всех SG текущего сайта.
В практическом смысле в качестве фолловера необходимо указывать экземпляр, настроенный в качестве альтернативного outbound proxy в параметрах телефонов и в шаблонах автопровизии.

deservice_sipcode

int

503

Код ответа, отправляемый абонентам в ответ на входящий запрос в то время, когда нода находится в режиме вывода из сервиса.
Возможные варианты 400 - 699.

translit

bool

false

Выключатель режима автоматического транслита DisplayName в запросах, перенаправляемых в сторону от системы к подключенным устройствам.

sip_alg

array<object>

empty

Подстановка белых адресов.
В случае, если система установлена за NAT относительно абонентских устройств, то должен использоваться режим sip-alg на NAT.
Sip-alg производит подмену адресов в пакетах, отправляемых наружу, и принимаемых снаружи.
Функцию SIP-ALG можно активировать на пограничных ролях. С помощью данного параметра устанавливается набор локальных адресов кластера, которые требуется подменять на белые внешние адреса.

Формат:
[{"gray":"IpAddr", "white":"IpAddr"}, ...]

В списке должны присутствовать адреса всех серверов, где расположены медиагейты, а также локальные интерфейсы текущей машины, с которых производится маршрутизация на все внешние адреса.
Подмене серого на белый адрес подлежат все пакеты, отправляемые на адреса, не принадлежащие кластеру.
Подмене белого на серый адрес подлежат все пакеты, получаемые с адресов, не принадлежащих кластеру.
При необходимости подключения к системе других устройств и систем, находящихся в локальном сетевом контуре, но не принадлежащих кластеру, необходимо использовать второй экземпляр роли с отключенным sip-alg (данный параметр отсутствует, либо его значение пусто).

substitute_domains

array<object>

empty

"Подстановка доменов вместо ip-адресов в заголовки To и From SIP-пакетов.
Применяется при работе с телефонами, которые не могут подставлять символьные доменные имена.
При активации режима микросервис SG подменяет пакеты при пересылке в обе стороны следующим образом:
* Принимаемые от устройств пакеты, содержащие IP-адрес сервера в качестве имени домена в заголовках To и From, подменяют IP-адрес в этих заголовках на сопоставленный ему домен.
* Отправляемые устройствам пакеты, содержащие в заголовках To и From один из доменов, указанных в опции, подменяют домен в этих заголовках на сопоставленный ему IP-адрес.

Формат:
[{"addr":"IpAddr", "domain":"DOMAIN"}, ...]

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

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

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

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

  "roleid": 11280,
  "separate": true,
  "tcp": 5060,
  "udp": 5060,
  "tls": 5061,
  "wss": 5063,

  "log_trn": true,
  "log_sip": true,
  "log_media": true,
  "log_mgct": true,

  "certdir": "alias://paths/default_certdir",
  "keypass": "eb9c4458016d3f1e378d02004c4f4f50",

  "max_udp_size": 10000,

  "b2bmedia": true,
  "reregister": false,
  "translit": true,

  "sip_alg": [
    {"gray":"172.16.0.14","white":"62.84.126.3"},
    {"gray":"172.16.0.15","white":"62.84.126.6"}
  ],

  "substitute_domains": [
    {
      "addr": "172.16.0.15",
      "domain": "pbx.era-platform.ru"
    }
  ]
}

См. также