В данном разделе содержится описание функций пограничного контроллера сессий ESBC и примеры их настройки для обеспечения передачи SIP-сигнализации и медиапотоков RTP между разными направлениями.
Переход в режим конфигурирования функционала ESBC осуществляется следующими командами CLI:
vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# |
Максимальное количество объектов конфигурации ESBC каждого типа:
| Объект | Количество |
|---|---|
| sip transport | 500 |
| trunk | 500 |
| user-interface | 500 |
| trunk-group | 250 |
| sip profile | 1000 |
| route table | 500 |
| rule | 64 на таблицу route table |
| condition(route-table) | 64 на правило rule |
| media profile | 1000 |
| media resource | 1000 |
| mod-table | 500 |
| mod | 64 на таблицу mod-table |
| condition(mod-table) | 8 на модификатор mod |
| cause-list | 64 |
| crypto profile | 64 |
| flood filter | 250 |
| security-profile | 500 |
Не рекомендуется использовать максимальное количество объектов конфигурации одновременно, это может повлиять на работоспособность системы. |
Расчет максимального количества контактов зарегистрированных абонентов для vESBC:
Объем оперативной памяти (RAM) vESBC, GB | Количество контактов |
|---|---|
3 | 4500 |
≥4 | 20000*(объем RAM - 3) |
ESBC-3200 поддерживает до 420000 зарегистрированных абонентов. |
Абонентский интерфейс представляет собой направление для приёма и маршрутизации запросов SIP-абонентов. В конфигурации не задаётся адрес и порт удалённой стороны, для аутентификации используется механизм SIP-регистрации. Регистрация на вышестоящем сервере осуществляется через связанный SIP-транк.
Для создания абонентского интерфейса необходимо настроить:
Эти настройки являются обязательными. Описание конфигурирования и базовой схемы применения представлено в разделе Примеры настройки ESBC.
Помимо этого абонентский интерфейс содержит набор следующих настроек:
По умолчанию вызовы с абонентского интерфейса без предварительной регистрации запрещены. |
Подробное описание параметров всех настроек можно найти в разделе Настройки абонентского интерфейса справочника команд CLI.
SIP-транк представляет собой интерфейс для подключения к вышестоящему SIP-устройству (IP АТС/ SIP-proxy/Удаленный SSW и др.) или группе вышестоящих устройств при включении динамического режима работы транка. При включении динамического режима работы в конфигурации необходимо задать адрес и порт удалённой стороны или диапазон адресов и портов. Эти параметры используются для идентификации источника запроса.
На транке запрещена обработка входящих запросов REGISTER. |
Для создания SIP-транка необходимо настроить:
Эти настройки являются обязательными. Описание конфигурирования и базовой схемы применения представлено в разделе Примеры настройки ESBC.
Помимо этого SIP-транк содержит набор следующих настроек:
Подробное описание параметров всех настроек можно найти в разделе Настройки SIP-транка справочника команд CLI.
Cоздание транков с одинаковым SIP-транспортом и IP:Port разрешено только в случае, если отличается SIP-домен. |
Транк-группа представляет собой набор транков различного типа (в текущей версии поддерживается только SIP-транк) и алгоритм балансировки нагрузки между ними. В текущей версии балансировка вызовов осуществляется алгоритмом round-robin.
Помимо этого группа содержит набор следующих настроек:
Логика работы:
Все перечисленные в предыдущем пункте настройки являются общими для всех транков, включенных в состав транковой группы. Это значит, что при отсутствии у транка, входящего в состав транковой группы, какой-либо из перечисленных настроек, будет использоваться настройка из транковой группы. Такой подход позволяет создавать множество транков с минимальным набором настроек, и, объединяя их в транковую группу, производить донастройку через нее. При необходимости можно изменить какие-либо параметры отдельно взятых транков из группы через индивидуальную настройку транков.
Пример работы общих настроек:
Схема:
На ESBC настроена транковая группа TG_SSW, в состав которой входят 2 транка TRUNK_SSW1 и TRUNK_SSW2, также настроен еще один транк TRUNK_IN, который не входит в состав транковой группы. Требуется настроить схему таким образом, чтобы вызовы, которые пришли с TRUNK_IN, маршрутизировались на TG_SSW, и наоборот, вызовы, которые пришли с TRUNK_SSW1 и TRUNK_SSW2, маршрутизировались на TRUNK_IN.
Решение:
1. Создать SIP-транспорт в сторону TRUNK_SSW1 и TRUNK_SSW2:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# sip transport TRANSPORT_SSW vesbc(config-esbc-sip-transport)# ip address 192.168.16.113 vesbc(config-esbc-sip-transport)# port 5065 |
2. Создать SIP-транспорт в сторону TRUNK_IN:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# sip transport TRANSPORT_TRUNK_IN vesbc(config-esbc-sip-transport)# ip address 192.168.20.120 vesbc(config-esbc-sip-transport)# port 5067 |
3. Создать медиаресурсы для согласования и передачи голоса на плече TRUNK_IN --- ESBC:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# media resource MEDIA_TRUNK_IN vesbc(config-esbc-media-resource)# ip address 192.168.20.120 |
4. Создать медиаресурсы для согласования и передачи голоса на плече ESBC --- TG_SSW:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# media resource MEDIA_TG_SSW vesbc(config-esbc-media-resource)# ip address 192.168.16.113 |
5. Создать SIP-транк в сторону TRUNK_IN:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# trunk sip TRUNK_IN vesbc(config-esbc-trunk-sip)# sip transport TRANSPORT_TRUNK_IN vesbc(config-esbc-trunk-sip)# remote address 192.168.20.99 vesbc(config-esbc-trunk-sip)# remote port 5060 vesbc(config-esbc-trunk-sip)# media resource 0 MEDIA_TRUNK_IN |
6. Создать SIP-транк в сторону TRUNK_SSW1 и TRUNK_SSW2:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# trunk sip TRUNK_SSW1 vesbc(config-esbc-trunk-sip)# sip transport TRANSPORT_SSW vesbc(config-esbc-trunk-sip)# remote address 192.168.16.115 vesbc(config-esbc-trunk-sip)# remote port 5060 vesbc(config-esbc-trunk-sip)# exit vesbc(config-esbc)# trunk sip TRUNK_SSW2 vesbc(config-esbc-trunk-sip)# sip transport TRANSPORT_SSW vesbc(config-esbc-trunk-sip)# remote address 192.168.16.116 vesbc(config-esbc-trunk-sip)# remote port 5060 |
7. Создать транковую группу TG_SSW и добавить туда транки TRUNK_SSW1 и TRUNK_SSW2:
vesbc# vesbc# configure vesbc(config)# esbc #Создание и переход в настройки транковой группы TG_SSW: vesbc(config-esbc)# trunk-group TG_SSW #Добавление в состав транковой группы транков TRUNK_SSW1 и TRUNK_SSW2: vesbc(config-esbc-trunk-group)# trunk 0 TRUNK_SSW1 vesbc(config-esbc-trunk-group)# trunk 1 TRUNK_SSW2 #Добавление медиаресурсов: vesbc(config-esbc-trunk-group)# media resource 0 MEDIA_TG_SSW |
8. Создать таблицу маршрутизации и добавить туда правила, по которым вызовы, приходящие с транка TRUNK_IN, будут маршрутизироваться в транковую группу TG_SSW:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# route-table TO_TG_SSW vesbc(config-esbc-route-table)# rule 0 vesbc(config-esbc-route-table-rule)# action direct-to-trunk-group TG_SSW |
9. Создать таблицу маршрутизации и добавить туда правила, по которым вызовы, приходящие с TG_SSW, будут маршрутизироваться в транк TRUNK_IN:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# route-table TO_TRUNK_IN vesbc(config-esbc-route-table)# rule 0 vesbc(config-esbc-route-table-rule)# action direct-to-trunk TRUNK_IN |
10. Привязать созданные таблицы маршрутизации к транку TRUNK_IN и транковой группе TG_SSW:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# trunk sip TRUNK_IN vesbc(config-esbc-trunk-sip)# route-table TO_TG_SSW vesbc(config-esbc-trunk-sip)# exit vesbc(config-esbc)# trunk-group TG_SSW vesbc(config-esbc-trunk-sip)# route-table TO_TRUNK_IN |
11. Применить конфигурацию и подтвердить изменения:
vesbc# commit vesbc# confirm |
На шаге 6 при создании транков, в конфигурацию транков не были добавлены медиаресурсы и таблица маршрутизации. Но эти настройки есть в транковой группе TG_SSW, куда включены оба транка. Поэтому при поступлении вызовов с этих транков они будут маршрутизироваться по таблице маршрутизации, которая привязана к TG_SSW, медиаресурсы для согласования и передачи RTP также будут браться из транковой группы TG_SSW.
В случае если необходимо, чтобы один из транков, входящих в состав транковой группы, при поступлении на него входящих вызовов маршрутизировался по другой таблице маршрутизации или использовал другие медиаресурсы, нужно добавить соответствующие настройки в данный транк. Настройки транковой группы при этом не меняются, т. к. настройки транка в приоритете.
1. Распределение вызовов без использования алгоритма балансировки:
Все исходящие вызовы, маршрутизируемые через транковую группу, используют первый транк в группе. В случае недоступности транка или при совпадении ответа с маской из списка причин отбоя, вызов будет направлен через следующий транк в группе.
Пример:

На ESBC настроена транковая группа TRUNK_GROUP, в состав которой входят 3 транка (TRUNK_1, TRUNK_2 и TRUNK_3). Приходит вызов и по правилу маршрутизации уходит на эту транковую группу. В результате ESBC совершает попытку вызова в первый транк в составе транковой группы (TRUNK_1), если транк недоступен, то происходит попытка позвонить во второй транк (TRUNK_2). Если попытка вызова также неуспешна, то будет попытка позвонить в последний транк (TRUNK_3). Если попытка также неуспешна, то вызов на первом плече отбивается. Если на каком-то из транков пришел ответ 200ОК, то вызов устанавливается.
Все последующие вызовы также будут сначала отправлены в TRUNK_1, и только в случае неудачи будут попытки позвонить в TRUNK_2 и TRUNK_3.
2. Распределение вызовов без использования алгоритма балансировки, но с включенной опцией pick-once:
Все исходящие вызовы, маршрутизируемые через транковую группу, используют первый транк в группе. В случае недоступности транка или при совпадении ответа с маской из списка причин отбоя, вызов НЕ будет направлен через следующий транк в группе, вызов на первом плече сразу отбивается.
Опцию pick-once можно включить в настройках таблицы маршрутизации при выборе действия direct-to-trunk-group:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# route-table TO_TG_SSW vesbc(config-esbc-route-table)# rule 0 #Включение опции pick-once при создании правила маршрутизации на транковую группу TG_SSW: vesbc(config-esbc-route-table-rule)# action direct-to-trunk-group TG_SSW pick-once |
3. Распределение вызовов с использованием алгоритма балансировки round-robin (опция pick-once выключена):
Каждый последующий исходящий вызов, маршрутизируемый через транковую группу, использует следующий транк в группе независимо от результата маршрутизации предыдущего вызова в данную транковую группу. В случае недоступности транка или при совпадении ответа с маской из списка причин отбоя, вызов будет направлен через следующий транк в группе.
Пример:

На ESBC настроена транковая группа TRUNK_GROUP, в состав которой входят 3 транка (TRUNK_1, TRUNK_2 и TRUNK_3). Приходит вызов и по правилу маршрутизации уходит на эту транковую группу. В результате ESBC совершает попытку вызова в первый транк в составе транковой группы (TRUNK_1), если вызов неуспешный (транк недоступен или ответ совпал с маской из списка причин отбоя), то происходит попытка позвонить во второй транк (TRUNK_2). Если попытка вызова также неуспешна, то будет попытка позвонить в последний транк (TRUNK_3). Если попытка также неуспешна, то вызов на первом плече отбивается. Если на каком-то из транков пришел ответ 200ОК, то вызов устанавливается.
Второй вызов, который смаршрутизировался на данную транковую группу, сначала уйдет на TRUNK_2. Если вызов неуспешный, то ESBC совершит попытку позвонить в TRUNK_3 и потом в TRUNK_1. Если попытки неуспешны, то вызов на первом плече отбивается. По такому же принципу третий вызов сначала распределится в TRUNK_3, четвертый вызов — в TRUNK_1 и т. д.
Опция балансировки round-robin включается в настройках транковой группы:
vesbc# vesbc# configure vesbc(config)# esbc #Создание и переход в настройки транковой группы TRUNK_GROUP: vesbc(config-esbc)# trunk-group TRUNK_GROUP #Добавление в состав транковой группы транков TRUNK_1, TRUNK_2 и TRUNK_3: vesbc(config-esbc-trunk-group)# trunk 0 TRUNK_1 vesbc(config-esbc-trunk-group)# trunk 1 TRUNK_2 vesbc(config-esbc-trunk-group)# trunk 2 TRUNK_3 #Активация режима балансировки round-robin на траковой группе: vesbc(config-esbc-trunk-group)# balancing round-robin |
4. Распределение вызовов с использованием алгоритма балансировки round-robin (опция pick-once включена):
Каждый последующий исходящий вызов, маршрутизируемый через транковую группу, использует следующий транк в группе. В случае недоступности транка или при совпадении ответа с маской из списка причин отбоя вызов НЕ будет направлен через следующий транк в группе, вызов на первом плече сразу отбивается.
Пример:
В схеме из п. 3 первый вызов распределяется в TRUNK_1, если он отбивается, то первое плечо вызова сразу отбивается, попыток позвонить в TRUNK_2, TRUNK_3 нет. Второй вызов распределяется в TRUNK_2, третий — в TRUNK_3, четвертый — в TRUNK_1 и т. д.
SIP-транспорт представляет точку входа/выхода сигнализации, т. е. это IP-адрес и порт, с которого ESBC будет отправлять и на который будет принимать сигнальные сообщения.
Возможно использование IP-адреса, полученного по DHCP. |
Пример:
Требуется, чтобы ESBC для передачи/приема сигнальных сообщений на встречную сторону использовал IP-адрес 192.168.16.113, порт 5065.
Решение:
Перейти к настройкам модуля управления конфигурацией ESBC:
vesbc# vesbc# configure vesbc(config)# esbc |
Создать и настроить соответствующим образом SIP-транспорт:
#Создание/переход в настройки SIP-транспорта NEW_TRANSPORT: vesbc(config-esbc)# sip transport NEW_TRANSPORT #Назначить IP-адрес 192.168.16.113 для использования SIP-транспортом: vesbc(config-esbc-sip-transport)# ip address 192.168.16.113 #Назначить порт 5065 для использования SIP-транспортом: vesbc(config-esbc-sip-transport)# port 5065 #Выбрать протокол транспортного уровня, используемый для приема/передачи сообщений SIP: vesbc(config-esbc-sip-transport)# mode udp-prefer |
После привязки созданного SIP-транспорта к какому-либо направлению (транку или абонентскому интерфейсу) он будет использоваться для передачи/получения сигнальных SIP-сообщений на выбранных направлениях.
Поддержано несколько режимов работы с протоколами транспортного уровня, конфигурируется командой mode из примера выше. Режимы работы следующие:
При использовании типа транспорта tls или wss возможно использование пользовательских сертификатов. Подробнее о пользовательских сертификатах см. в разделе Настройка криптопрофилей.
Пример настройки SIP-абонентов, использующих WebRTC есть в разделе Примеры настройки ESBC. |
Медиаресурсы представляют собой диапазоны UDP-портов и IP-адресов, используемых ESBC для передачи/получения потоков RTP.
Возможно использование IP-адреса, полученного по DHCP. |
Пример:
Требуется, чтобы ESBC для передачи медиатрафика использовал IP-адрес 192.168.16.113 и порты с 20000 до 30000.
Решение:
Перейти к настройкам модуля управления конфигурацией ESBC:
vesbc# vesbc# configure vesbc(config)# esbc |
Создать и настроить соответствующим образом медиаресурс:
#Создание/переход в настройки медиаресурса MEDIA_1: vesbc(config-esbc)# media resource MEDIA_1 #Назначить IP-адрес 192.168.16.113 для использования в медиаресурсах: vesbc(config-esbc-media-resource)# ip address 192.168.16.113 #Настроить диапазон UDP-портов с 20000 до 30000 для использовании в медиаресурсах: vesbc(config-esbc-media-resource)# port-range 20000-30000 |
После привязки созданного медиаресурса к какому-либо направлению (транку, транковой группе или абонентскому интерфейсу), он будет использоваться для передачи/получения потоков RTP на выбранных направлениях.
При использовании одинакового IP-адреса для разных медиаресурсов не допускается пересечение диапазонов портов между этими ресурсами. |
Схематично таблица маршрутизации выглядит следующим образом:

Таблица маршрутизации представляет собой набор правил и действий, по которым обрабатывается входящий вызов и указывается исходящий транк (или транк-группа) для формирования исходящего вызова.
Таблицы маршрутизации применяются к входящим вызовам и могут быть настроены для транков, транк-групп и абонентских интерфейсов.
Таблица состоит из правил (RULE), правило обязательно должно содержать действие (ACTION), и, опционально, — условия (CONDITION), которые должны быть соблюдены для выполнения данного действия маршрутизации. Если условия отсутствуют, действия совершаются безусловно.
Действие — это операция, результатом которой будет являться конкретное направление.
В текущей версии в качестве направлений могут выступают транки и транк-группы.
Условия маршрутизации:
Правила маршрутизации выбираются по порядку до тех пор, пока второе плечо не будет успешно согласовано, или не будет рассмотрено последнее правило. Если рассматривать на примере вызова, то роутинг будет выполняться до тех пор, тока второе плечо не примет вызов.
В случае маршрутизации на транк-группу действует тот же алгоритм. Т. е. проход осуществляется по всем транкам выбранной группы по порядку до тех пор, пока сессия не согласуется, или не будет выбран последний транк. Если после прохождения по всем транкам выбранной группы не удалось согласовать второе плечо, продолжается выбор оставшихся правил из таблицы маршрутизации.
В общем, этот алгоритм можно описать так: проход по всем направлениям, всех правил маршрутизации, пока сессия не будет согласована, или не будет рассмотрено последнее правило.
Исключением является правило Reject — отбой входящей сессии. Это правило завершает проход по таблице маршрутизации.
Выбор следующего направления будет происходить:
при внутренних сбоях, до согласования сессии;
при отбое с встречной стороны, кроме 3хх кодов SIP.
Пример перебора правил:

В таблице маршрутизации два правила, первое направляет вызов в TRUNK_GROUP, второе направляет вызов в TRUNK_3, условия нигде не настроены. Приходит вызов и начинает маршрутизироваться по данной таблице маршрутизации. В результате вызов уходит на TRUNK_GROUP и оттуда в TRUNK_1, в случае если вызов через TRUNK_1 не установился (например, транк недоступен), то маршрутизация продолжает выполняться, вызов отправляется в TRUNK_2. Если попытка вызова в TRUNK_2 также завершилась неудачно, ESBC переходит к RULE_2 и отправляет вызов в TRUNK_3. Если и здесь попытка установить вызов также оказалась неуспешной, то первое плечо отбивается, и вызов завершается, т. к. больше правил в таблице маршрутизации нет. Если попытка установить вызов успешна, то вызов устанавливается.
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# route-table ROUTE_TABLE #Добавление первого правила с действием отправить вызов в транковую группу TRUNK_GROUP: vesbc(config-esbc-route-table)# rule 0 vesbc(config-esbc-route-table-rule)# action direct-to-trunk-group TRUNK_GROUP vesbc(config-esbc-route-table-rule)# exit #Добавление второго правила с действием отправить вызов в транк TRUNK_3: vesbc(config-esbc-route-table)# rule 1 vesbc(config-esbc-route-table-rule)# action direct-to-trunk TRUNK_3 |
Пример работы условий:

В таблице маршрутизации два правила, у обоих есть условия по CGPN, CDPN и SIP-MESSAGE. Например, приходит вызов, у которого номер А=23000, номер Б=24000, и кастомный заголовок "Trunk: For trunk_1". ESBC заходит в RULE_1 и анализирует условие CONDITION_1, условие истинно, далее происходит анализ условия из CONDITION_2, условие истинно, далее происходит анализ условия из CONDITION_3, условие также истинно. Значит правило RULE_1 подходит для маршрутизации, и вызов отправляется в TRUNK_1.
Рассмотрим вызов с номерами, которые подходят под условия из RULE_2.
Приходит вызов, у которого номер А=23000, номер Б=24000 и кастомный заголовок "Trunk: For trunk_2". ESBC заходит в RULE_1 и анализирует условие CONDITION_1, условие истинно, далее происходит анализ условия из CONDITION_2, условие истинно, далее происходит анализ условия из CONDITION_3, условие ложно. Значит правило не подходит (правило подходит, только если все условия внутри правила истинны). Далее ESBC переходит к RULE_2, анализирует условие CONDITION_4, условие истинно, далее происходит анализ условия из CONDITION_5, условие истинно, далее происходит анализ условия из CONDITION_6, условие также истинно. Значит правило RULE_2 подходит для маршрутизации, и вызов отправляется в TRUNK_2.
Если приходит вызов, который не подходит ни под одно правило, то такой вызов отбивается.
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# route-table ROUTE_TABLE #Добавление первого правила с условиями CONDITION_1, CONDITION_2, CONDITION_3 и действием отправить вызов в TRUNK_1: vesbc(config-esbc-route-table)# rule 0 vesbc(config-esbc-route-table-rule)# condition 0 cgpn ^23000$ vesbc(config-esbc-route-table-rule)# condition 1 cdpn ^24000$ vesbc(config-esbc-route-table-rule)# condition 2 sip-message '.*For trunk_1.*' vesbc(config-esbc-route-table-rule)# action direct-to-trunk TRUNK_1 vesbc(config-esbc-route-table-rule)# exit #Добавление второго правила с условиями CONDITION_4, CONDITION_5, CONDITION_6 и действием отправить вызов в TRUNK_2: vesbc(config-esbc-route-table)# rule 1 vesbc(config-esbc-route-table-rule)# condition 0 cgpn ^23000$ vesbc(config-esbc-route-table-rule)# condition 1 cdpn ^24000$ vesbc(config-esbc-route-table-rule)# condition 2 sip-message '.*For trunk_2.*' vesbc(config-esbc-route-table-rule)# action direct-to-trunk TRUNK_2 |
Синтаксис для написания условий
Для написания условий можно использовать регулярные выражения PCRE.
ESBC поддерживает два типа модификаторов — common и sip.
Модификаторы common позволяют модифицировать CdPN и CgPN без привязки к протоколу сигнализации. В текущей версии ПО поддерживается только протокол SIP. Учитывая это, при использовании модификаторов в транках и абонентских интерфейсов, модификаторами common можно изменять user part SIP URI заголовков To и From.
Модификаторы sip позволяют модифицировать любые заголовки сообщений SIP.
Таблицы модификаций применяются в транках, транковых группах и абонентских интерфейсах. Их можно подключить, как out — тогда правила будут применяться при отправке сообщения или, и как in — тогда правила применяются при получении сообщения. Таблица модификаций, используемая для транковой группы, будет использоваться только в том случае, если в транке, входящем в эту транковую группу, не настроена своя таблица.
В таблицах модификации для отбора значений (header pattern, header value, response-pattern, value-pattern, value, replacement и др.) используются регулярные выражения PCRE.
Перед использованием модификаторов рекомендуется ознакомиться с описанием синтаксиса регулярных выражений PCRE. |
Допускается использование следующей конструкции при составлении регулярных выражений PCRE для помещения значений в локальные переменные (от 0 до 9) с помощью цифр, экранированных обратной чертой ('\1-9'). '\0' — весь текст:
value-pattern '(some)-(value)' #Значения some и value заносятся в локальные переменные pcre 1 и 2 соответственно replacement '\2-\1' #Значения переменных меняются местами |
Результат замены: value-some
Данные переменные используются в рамках одной модификации. Для использования переменных в разных модификациях одной таблицы модификаций используется модификатор типа copy.
При применении на транке/абонентском интерфейсе модификаторов обоих типов одновременно, используется следующий порядок их обработки в зависимости от направления модификации:
|
Пример использования модификатора common.
На ESBC настроена следующая конфигурация:
route-table TO_UAS
rule 0
action direct-to-trunk UAS
exit
exit
mod-table common COMMON_MOD
mod 5 cgpn
value-pattern '2(.+)'
#Осуществляется выбор номеров, начинающихся с 2. Остальная часть номера сохраняется в локальную переменную 1
replacement '8\1'
#Выполняется замена 2 на 8, и добавляется значение из переменной 1
exit
mod 10 cdpn
value-pattern '23002'
#Осуществляется выбор номера 23002
replacement '22222'
#Выполняется замена номера 23002 на 22222
exit
exit
trunk sip UAC
remote addr 192.168.80.26
remote port 5070
sip transport UAC
route-table TO_UAS
mod-table common in COMMON_MOD
media resource 0 MEDIA
exit
trunk sip UAS
remote addr 192.168.80.26
remote port 5080
sip transport UAS
media resource 0 MEDIA
exit
exit |
Схема вызова:

На транк UAC приходит INVITE:
INVITE sip:24001@192.168.80.129:5080;line=76196f92c8f42f97c3b78125dd1b842c SIP/2.0 Via: SIP/2.0/UDP 192.168.80.26:5070;rport;branch=z9hG4bK-294378-1-1 From: <sip:24001@192.168.80.26:5070>;tag=1 To: <sip:23002@192.168.80.129:5070> Call-ID: 1-294378@192.168.80.26 Cseq: 1 INVITE Contact: <sip:24001@192.168.80.26:5070> Max-Forwards: 70 Allow: INVITE, ACK, BYE, CANCEL, UPDATE, SUBSCRIBE Content-Type: application/sdp Content-Length: 174 [SDP]... |
В результате применения модификатора COMMON_MOD в транке UAC, из транка UAS будет отправлен INVITE:
INVITE sip:22222@192.168.80.26:5080 SIP/2.0 Via: SIP/2.0/UDP 192.168.80.129:5080;rport;branch=z9hG4bKPjWDx0A5VQhCqmg7Sf-wS7Huya0dESxrro Max-Forwards: 70 From: <sip:84001@192.168.80.129>;tag=epoMSc5qF1.Pfc5pcypn80ONBKHCaO-x To: <sip:22222@192.168.80.26> Contact: <sip:84001@192.168.80.129:5080> Call-ID: 326c0035a257a9f76185383b49df705f CSeq: 9446 INVITE Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE Supported: 100rel, replaces Content-Type: application/sdp Content-Length: 177 [SDP]... |
В результате модификации mod 5 cgpn выполнена модификация CgPN 24001 на 84001, в результате mod 10 cdpn — модификация CdPN 23002 на 22222.
При использовании модификатора CgPN, помимо заголовка From, изменяется user part SIP URI заголовка Contact. При использовании модификатора CdPN, помимо заголовка To, изменяется user part SIP в Request-URI. |
Модификаторы common, настроенные в качестве IN, могут влиять на результат маршрутизации при использовании в route-table условий (condition), т. к. правила route-table обрабатываются после применения модификации. Модификаторы, настроенные в качестве OUT, не влияют на результат маршрутизации. |
Для сообщений REGISTER модификаторы common не применяются. |
Описание всех команд для настройки общих модификаторов приведено в разделе Настройки общих модификаторов.
Данный тип модификации позволяет изменять любые заголовки сообщений SIP.
Процесс модификации заголовков отличается в зависимости от режима использования модификатора IN или OUT. |
Существуют ограничения на модификацию основных заголовков sip, к которым относятся: Call-ID, From, To, Via, CSeq, Contact, Max-Forwards, Route, Record-Route, Content-Type, Content-Lenght, Require, Supported.
После применения к сообщению модификатора IN и использования модификаций основных заголовков, дальнейшая обработка диалога sip будет осуществляться в соответствии с модифицированным сообщением, т. к. в ядро системы попадает модифицированное сообщение. В результате в ответных сообщениях будут использоваться данные, которые могут отличаться от исходного сообщения. Модификация IN также влияет на дальнейшую маршрутизацию сообщения.
Применение к сообщению модификатора OUT и использования модификаций основных заголовков, изменяет только значения заголовков непосредственно перед отправкой, но не влияет на последующие сообщения в диалоге, т. к. исходное сообщение формируется ядром системы до применения модификаторов OUT.
Применение модификаторов к основным заголовкам SIP может привести к нарушению обработки сообщений. |
Логика обработки сообщения SIP при использовании IN-модификации:


Логика обработки сообщения SIP при использовании OUT-модификации:


Модификаторы SIP позволяют гибко осуществлять выбор требуемого метода (Request) или ответного сообщения (Response) по конкретному коду. Для этого используются команды:
Команда sip method type аналогична команде sip method pattern и может использоваться в случае, когда модификацию требуется осуществлять только в одном из шести вышеуказанных методов. При использовании этой команды нет необходимости использовать pattern для написания регулярного выражения, достаточно выбрать метод из списка. Команды sip method type и sip method pattern являются взаимоисключающими.
При использовании pattern имейте в виду, что по умолчанию синтаксис PCRE является регистрозависимым. Поэтому, например, паттерн "sip method pattern INVITE" не эквивалентен паттерну "sip method pattern invite" и отбор метода INVITE не будет осуществляться при использовании выражения "sip method pattern invite". |
При настройке модификатора обязательно следует указывать командами выше, для каких методов и кодов ответа он будет применяться. Иначе модификация не будет применена ни к одному сообщению. |
Примеры отбора сообщений SIP для модификации:
Требуется применять модификатор, который добавляет заголовок Test_header cо значением test_value только в сообщение INVITE:
mod-table sip SIP_MOD
mod 1 add
#Т.к. по условию требуется добавлять заголовок только в сообщения INVITE, можно воспользоваться командой "sip method type"
sip method type Invite
header name Test_header
header value test_value
exit
|
Требуется применять модификатор, который добавляет заголовок Test_header cо значением test_value только в сообщения INVITE, BYE и в ответы 200 OK:
mod-table sip SIP_MOD
mod 1 add
#Т.к. по условию требуется добавлять заголовок в INVITE и BYE, надо воспользоваться командой "sip method pattern"
sip method pattern INVITE|BYE
#Для добавления заголовка в ответы 200 OK следует добавить команду "sip response-pattern"
sip response-pattern 200
header name Test_header
header value test_value
exit
|
Требуется применять модификатор, который добавляет заголовок Test_header cо значением test_value во все запросы и ответы:
mod-table sip SIP_MOD
mod 1 add
#Т.к. по условию требуется добавлять заголовок во все методы, используется отбор любых значений
sip method pattern .+
#Т.к. по условию требуется добавлять заголовок во все ответы, используется отбор любых значений
sip response-pattern .+
header name Test_header
header value test_value
exit |
Требуется применять модификатор, который добавляет заголовок Test_header cо значением test_value только в предварительные ответы 100–199:
mod-table sip SIP_MOD
mod 1 add
#Т.к. по условию требуется добавлять заголовок во все ответы от 100 до 199, используется, например, регулярное выражение '1\d{2}'
sip response-pattern '1\d{2}'
header name Test_header
header value test_value
exit |
Поддерживаемые модификации
Поддерживаются следующие типы модификации:
replace — замена заголовка.
transit — передача заголовка. Данная модификация применяется только при использовании в качестве in (таблицы out всегда передают все заголовки, полученные с другого плеча).
Порядок применения модификаций в таблице
Модификации в рамках одной таблицы применяются последовательно ко всем заголовкам в порядке, добавленном в конфигурации, т. е. первая модификация применяется ко всем заголовкам, затем вторая модификация применится ко всем заголовкам и т. д.
В результате если какой-либо заголовок был добавлен модификацией add, а затем этот же заголовок был указан в правиле no-transit, то в исходящем сообщении этот заголовок не будет передан.
Пример:
Таблица модификации SIP_MOD используется в качестве OUT:
mod-table sip SIP_MOD
mod 1 add
sip method pattern '.+'
sip response-pattern '.+'
header name Test_header
header value Test_value
exit
mod 2 no-transit
sip header-pattern 'Test_header'
sip method pattern '.+'
sip response-pattern '.+'
value-pattern 'Test_value'
exit |
Заголовок Test_header не будет передан.
Описание всех команд для настройки общих модификаторов приведено в разделе Настройки SIP-модификаторов.
Схема:

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, был добавлен заголовок Test_header со значением example string.
vesbc# vesbc# configure vesbc(config)# esbc #Создание таблицы модификаторов MODTABLE_IN: vesbc(config-esbc)# mod-table sip MODTABLE_IN vesbc(esbc-mod-table)# #Добавление в таблицу модификаторов правила на добавление заголовка: vesbc(esbc-mod-table)# mod 0 add vesbc(esbc-mod-table-modification)# #Выбор запроса, в котором будет добавлен заголовок (в данном случае INVITE): vesbc(esbc-mod-table-modification)# sip method type Invite #Указать название заголовка, который необходимо вставить (в данном случае Test_header): vesbc(esbc-mod-table-modification)# header name Test_header #Указать содержимое заголовка, которое необходимо вставить (в данном случае example string): vesbc(esbc-mod-table-modification)# header value "example string" vesbc(esbc-mod-table-modification)# exit vesbc(esbc-mod-table)# exit #Привязать таблицу модификаторов к входящему транку TRUNK_IN: vesbc(config-esbc)# trunk sip TRUNK_IN vesbc(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN #Применить и подтвердить изменения: vesbc(config-esbc-trunk-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-trunk-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
После внесения изменений в конфигурацию с TRUNK_IN приходит следующий INVIITE:
INVITE sip:24000@192.168.114.130:5461 SIP/2.0 Via: SIP/2.0/UDP 192.168.114.129:5461;branch=z9hG4bK-372660-1-5 From: "Simple UAC send bye" <sip:24001@192.168.114.130;cpc=priority>;tag=1372660 To: "24000" <sip:24000@192.168.114.130> Call-ID: 1-372660@192.168.114.129 CSeq: 1 INVITE Contact: <sip:24001@192.168.114.129:5461> Max-Forwards: 70 Content-Type: application/sdp Content-Length: 149 v=0 o=tester 123456 654321 IN IP4 192.168.114.129 s=A conversation c=IN IP4 192.168.114.129 t=0 0 m=audio 8338 RTP/AVP 8 a=rtpmap:8 PCMA/8000 |
На TRUNK_OUT отправляется уже модифицированный INVITE с добавленным заголовком:
INVITE sip:24000@192.168.114.129:5460 SIP/2.0 Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPj-fvzSQlwN2zoMaGUR5JCLMkjmkBV3Vz1 Max-Forwards: 70 From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=l2jkRSMeumV03IdhjPntOt7l0XBKy-Ln To: "24000" <sip:24000@192.168.114.129> Contact: <sip:24001@192.168.114.130:5460;transport=udp> Call-ID: P-W.2oee.2vJw0JoaFbNkRDvnxY40FoP CSeq: 30738 INVITE Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE Supported: timer, 100rel, replaces Session-Expires: 1800 Min-SE: 90 #Добавленный через таблицу модификаторов заголовок: Test_header: example string Content-Type: application/sdp Content-Length: 157 v=0 o=tester 3927594021 3927594021 IN IP4 192.168.114.130 s=A conversation c=IN IP4 192.168.114.130 t=0 0 m=audio 8062 RTP/AVP 8 a=rtpmap:8 PCMA/8000 |
Схема:
В конфигурации настроено два транка и настроена маршрутизация из транка TRUNK_IN в TRUNK_OUT. Требуется передать заголовок "User-Agent" из входящего INVITE, только если в нем указано значение "TestUA".
По умолчанию все необязательные и пользовательские заголовки удаляются на входящем плече и не передаются на исходящее плечо. |
Решение:
Создаем таблицу модификации MODTABLE_IN:
vesbc# vesbc# configure vesbc(config)# esbc #Создание таблицы модификаторов MODTABLE_IN: vesbc(config-esbc)# mod-table sip MODTABLE_IN vesbc(esbc-mod-table)# #Добавление в таблицу модификаторов правила для транзита заголовков: vesbc(esbc-mod-table)# mod 0 transit vesbc(esbc-mod-table-modification)# #Выбор метода, в котором будет осуществляться поиск заголовка (по условиям задачи — INVITE): vesbc(esbc-mod-table-modification)# sip method type Invite #Указать паттерн для выбора названия заголовка, который необходимо передавать (по условиям задачи — User-Agent): vesbc(esbc-mod-table-modification)# sip header-pattern User-Agent #Указать содержимое заголовка, при совпадении с которым заголовок будет передан (по условиям задачи — TestUA): vesbc(esbc-mod-table-modification)# value-pattern TestUA vesbc(esbc-mod-table-modification)# exit vesbc(esbc-mod-table)# exit |
Используем созданную таблицу в качестве IN для транка TRUNK_IN:
vesbc(config-esbc)# trunk sip TRUNK_IN vesbc(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN vesbc(config-esbc-trunk-sip)# do commit vesbc(config-esbc-trunk-sip)# do confirm |
В результате, когда в транке TRUNK_IN будет получен INVITE, содержащий заголовок "User-Agent" со значением "TestUA", в исходящем INVITE также будет присутствовать этот заголовок:
#INVITE, полученный в TRUNK_IN: INVITE sip:23002@192.168.23.199:5070 SIP/2.0 Via: SIP/2.0/UDP 192.168.23.200:5070;rport;branch=z9hG4bK-1763439-1-1 From: sipp <sip:24001@192.168.23.200:5070>;tag=1 To: sut <sip:23002@192.168.23.199:5070> Call-ID: 1-1763439@192.168.23.200 Cseq: 1 INVITE Contact: <sip:24001@192.168.23.200:5070> Max-Forwards: 70 Subject: Performance Test Allow: INVITE, ACK, BYE, CANCEL, PRACK, REGISTER, INFO, REFER, NOTIFY, OPTIONS, SUBSCRIBE, MESSAGE, UPDATE, PUBLISH Content-Type: application/sdp User-Agent: TestUA Content-Length: 240 [SDP] #INVITE, отправленный c TRUNK_OUT: INVITE sip:23002@192.168.80.26:5080 SIP/2.0 Via: SIP/2.0/UDP 192.168.80.129:5080;rport;branch=z9hG4bKPj88572ec4-0af0-4323-abc6-fe1db1ea6e37 Max-Forwards: 70 From: "sipp" <sip:24001@192.168.80.129>;tag=7da4c833-38da-4523-89d7-adc88b581397 To: "sut" <sip:23002@192.168.80.26> Contact: <sip:24001@192.168.80.129:5080;transport=udp> Call-ID: d21bdedb499dbfe992a939a27255c536 CSeq: 6199 INVITE Allow: INVITE, ACK, BYE, CANCEL, PRACK, REGISTER, INFO, REFER, NOTIFY, OPTIONS, SUBSCRIBE, MESSAGE, UPDATE Supported: 100rel, replaces, ice User-Agent: TestUA Content-Type: application/sdp Content-Length: 241 [SDP] |
Данный модификатор сработает только в случае, когда значение заголовка User-Agent будет "TestUA". Если значение отличается, то заголовок User-Agent не будет передаваться на второе плечо. Для передачи заголовка с любым значением не следует использовать команду value-pattern в модификаторе, требуется указать в ней все возможные варианты, например, value-pattern .* |
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Test_header. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, вырезался заголовок Test_header, если в его содержимом есть "example string".
По умолчанию все необязательные и пользовательские заголовки удаляются на входящем плече и не передаются на исходящее плечо. В данном примере демонстрируется модификация только для исходящего плеча (TRUNK_OUT), поэтому подразумевается что на входящем плече (TRUNK_IN) настроен модификатор transit для заголовка Test_header. |
vesbc# vesbc# configure vesbc(config)# esbc #Создание таблицы модификаторов MODTABLE_OUT: vesbc(config-esbc)# mod-table sip MODTABLE_OUT vesbc(esbc-mod-table)# #Добавление в таблицу модификаторов правила на удаление заголовка: vesbc(esbc-mod-table)# mod 0 no-transit vesbc(esbc-mod-table-modification)# #Выбор запроса, в котором будет удален заголовок (в данном случае INVITE): vesbc(esbc-mod-table-modification)# sip method type Invite #Указать название заголовка, который необходимо удалить (в данном случае Test_header): vesbc(esbc-mod-table-modification)# sip header-pattern Test_header #Указать содержимое заголовка, при совпадении с которым заголовок будет удален (в данном случае example string): vesbc(esbc-mod-table-modification)# value-pattern "example string" vesbc(esbc-mod-table-modification)# exit vesbc(esbc-mod-table)# exit #Привязать таблицу модификаторов к исходящему транку TRUNK_OUT: vesbc(config-esbc)# trunk sip TRUNK_OUT vesbc(config-esbc-trunk-sip)# mod-table sip out MODTABLE_OUT #Применить и подтвердить изменения: vesbc(config-esbc-trunk-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-trunk-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
До внесения изменений в конфигурацию в TRUNK_OUT отправлялся следующий INVIITE:
INVITE sip:24000@192.168.114.129:5460 SIP/2.0 Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPjjju.7u4O03Aty93vQq0Q1huigSIqGVIr Max-Forwards: 70 From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=CW.53L5FPJAUBsiRspMYqtjTtOTzZxHg To: "24000" <sip:24000@192.168.114.129> Contact: <sip:24001@192.168.114.130:5460;transport=udp> Call-ID: V4OOROjNahUbinXtA648s9eI2kjE5cCI CSeq: 18905 INVITE Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE Supported: timer, 100rel, replaces Session-Expires: 1800 Min-SE: 90 #Заголовок, который должен быть удален: Test_header: example string Content-Type: application/sdp Content-Length: 157 v=0 o=tester 3927595234 3927595234 IN IP4 192.168.114.130 s=A conversation c=IN IP4 192.168.114.130 t=0 0 m=audio 8066 RTP/AVP 8 a=rtpmap:8 PCMA/8000 |
После внесения изменений в конфигурацию в TRUNK_OUT отправляется следующий INVITE (заголовок Test_header отсутствует):
INVITE sip:24000@192.168.114.129:5460 SIP/2.0 Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPjz8Y5BfoTrBQlqecLCu34TIyYn-6rX5dH Max-Forwards: 70 From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=qTwcY3ZHvA6SHvuRsoo7w40r9yXzjEEp To: "24000" <sip:24000@192.168.114.129> Contact: <sip:24001@192.168.114.130:5460;transport=udp> Call-ID: yHvNLSIvp0DQYSRFPRpfgVUv9U0uKEHT CSeq: 10147 INVITE Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE Supported: timer, 100rel, replaces Session-Expires: 1800 Min-SE: 90 Content-Type: application/sdp Content-Length: 157 v=0 o=tester 3927597375 3927597375 IN IP4 192.168.114.130 s=A conversation c=IN IP4 192.168.114.130 t=0 0 m=audio 8070 RTP/AVP 8 a=rtpmap:8 PCMA/8000 |
В случае если в заголовке Test_header будет содержимое, отличное от "example string", заголовок будет отправлен в TRUNK_OUT:
INVITE sip:24000@192.168.114.129:5460 SIP/2.0 Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPj8e1WEAvAy16Bk8Vrj-VZiFK-bNOjnjY9 Max-Forwards: 70 From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=R83mrTm4KQsFL1Bk87hTOB8e182yCSJ. To: "24000" <sip:24000@192.168.114.129> Contact: <sip:24001@192.168.114.130:5460;transport=udp> Call-ID: eQueXFpyDZESB.hXK.uCGn7XL7TBUdmQ CSeq: 8831 INVITE Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE Supported: timer, 100rel, replaces Session-Expires: 1800 Min-SE: 90 #Заголовок Test_header с содержимым, отличным от "example string", не удаляется: Test_header: new string Content-Type: application/sdp Content-Length: 157 v=0 o=tester 3927597832 3927597832 IN IP4 192.168.114.130 s=A conversation c=IN IP4 192.168.114.130 t=0 0 m=audio 8074 RTP/AVP 8 a=rtpmap:8 PCMA/8000 |
Схема:

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Из TRUNK_IN приходит INVITE с заголовком Test_header: 123. Требуется, чтобы в TRUNK_OUT отправился INVITE с заголовком Test_header: 123456.
vesbc# vesbc# configure vesbc(config)# esbc #Создание таблицы модификаторов MODTABLE_IN: vesbc(config-esbc)# mod-table sip MODTABLE_IN vesbc(esbc-mod-table)# #Добавление в таблицу модификаторов правила на замену заголовка: vesbc(esbc-mod-table)# mod 1 replace #Выбор запроса, в котором будут заменяться заголовки: vesbc(esbc-mod-table-modification)# sip method-type Invite #Указать название заголовка, содержимое которого необходимо заменить: vesbc(esbc-mod-table-modification)# sip header-pattern Test_header #Указать место в содержимом заголовка, которое необходимо заменить (конец строки исходного содержимого заголовка): vesbc(esbc-mod-table-modification)# value-pattern $ #Добавить правило для подмены содержимого заголовка (к концу строки исходного содержимого заголовка добавляется 456): vesbc(esbc-mod-table-modification)# replacement 456 vesbc(esbc-mod-table-modification)# exit vesbc(esbc-mod-table)# exit #Привязать таблицу модификаторов к входящему транку TRUNK_IN: vesbc(config-esbc)# trunk sip TRUNK_IN vesbc(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN #Применить и подтвердить изменения: vesbc(config-esbc-trunk-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-trunk-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
После внесения изменений в конфигурацию с TRUNK_IN приходит следующий INVIITE:
INVITE sip:24000@192.168.114.130:5461 SIP/2.0 Via: SIP/2.0/UDP 192.168.114.129:5461;branch=z9hG4bK-375510-1-5 From: "Simple UAC send bye" <sip:24001@192.168.114.130;cpc=priority>;tag=1375510 To: "24000" <sip:24000@192.168.114.130> Call-ID: 1-375510@192.168.114.129 CSeq: 1 INVITE Contact: <sip:24001@192.168.114.129:5461> Max-Forwards: 70 #Заголовок, который необходимо протранзитить и заменить: Test_header: 123 Content-Type: application/sdp Content-Length: 149 v=0 o=tester 123456 654321 IN IP4 192.168.114.129 s=A conversation c=IN IP4 192.168.114.129 t=0 0 m=audio 7624 RTP/AVP 8 a=rtpmap:8 PCMA/8000 |
На TRUNK_OUT отправляется уже модифицированный INVITE с измененным заголовком:
INVITE sip:24000@192.168.114.129:5460 SIP/2.0 Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPjIbcILUaVB0cQTFaGLLb7ccpnbTQIRvV3 Max-Forwards: 70 From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=toP8wIO79wo47ChSYy69MFOyd4vhGRNF To: "24000" <sip:24000@192.168.114.129> Contact: <sip:24001@192.168.114.130:5460;transport=udp> Call-ID: dLsiFI4-aD2faceSTLZu.-kuHfN.pJtG CSeq: 22556 INVITE Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE Supported: timer, 100rel, replaces Session-Expires: 1800 Min-SE: 90 #Измененный заголовок: Test_header: 123456 Content-Type: application/sdp Content-Length: 157 v=0 o=tester 3927607871 3927607871 IN IP4 192.168.114.130 s=A conversation c=IN IP4 192.168.114.130 t=0 0 m=audio 8090 RTP/AVP 8 a=rtpmap:8 PCMA/8000 |
Пример использования локальных переменных pcre в модификации replace (схема та же):
vesbc#
vesbc# configure
vesbc(config)# esbc
#Создание таблицы модификаторов MODTABLE_IN:
vesbc(config-esbc)# mod-table sip MODTABLE_IN
vesbc(esbc-mod-table)#
#Добавление в таблицу модификаторов правила на замену заголовка:
vesbc(esbc-mod-table)# mod 1 replace
#Выбор запроса, в котором будут заменяться заголовки:
vesbc(esbc-mod-table-modification)# sip method-type Invite
#Указать название заголовка, содержимое которого необходимо заменить:
vesbc(esbc-mod-table-modification)# sip header-pattern Date
#Указать место в содержимом заголовка, которое необходимо заменить (шаблон — дата в формате "год-месяц-число"):
vesbc(esbc-mod-table-modification)# value-pattern "(\\d{4})-(\\d{2})-(\\d{2})"
#Добавить правило для подмены содержимого заголовка (меняем формат даты на "месяц/число/год"):
vesbc(esbc-mod-table-modification)# replacement "\\2/\\3/\\1"
vesbc(esbc-mod-table-modification)# exit
vesbc(esbc-mod-table)# exit
#Привязать таблицу модификаторов к входящему транку TRUNK_IN:
vesbc(config-esbc)# trunk sip TRUNK_IN
vesbc(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN
#Применить и подтвердить изменения:
vesbc(config-esbc-trunk-sip)# do commit
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm
Configuration has been confirmed. Commit timer canceled. |
После внесения изменений в конфигурацию с TRUNK_IN приходит следующий INVIITE:
INVITE sip:135@10.25.72.151:5060 SIP/2.0 Via: SIP/2.0/UDP 10.25.72.35:5063;rport;branch=z9hG4bK-1104631-1-0 From: <sip:134@10.25.72.151:5060;user=phone>;tag=1 To: <sip:135@10.25.72.151:5060;user=phone> Call-ID: 1-1104631@10.25.72.35 CSeq: 1 INVITE Max-Forwards: 70 Supported: replaces, timer Contact: <sip:134@10.25.72.35:5063> #Заголовок, который необходимо протранзитить и изменить: Date: 2024-09-10 Content-Type: application/sdp Content-Length: 153 |
На TRUNK_OUT отправляется уже модифицированный INVITE с измененным заголовком:
Via: SIP/2.0/UDP 10.25.72.151:5060;rport;branch=z9hG4bKPjc5kLf-R0rh5Stla2eTvpoVAxOc0Jr.kX Max-Forwards: 70 From: <sip:134@10.25.72.151>;tag=lMWgbj2x66hzNDHhP8ef8tWvB2HT2DwH To: <sip:135@192.168.23.140> Contact: <sip:134@10.25.72.151:5060;transport=udp> Call-ID: c09c3761560702267daaee76eb769a9c CSeq: 5021 INVITE Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE Supported: 100rel, replaces #Измененный заголовок: Date: 09/10/2024 Content-Type: application/sdp Content-Length: 163 |
Пример 2.
Схема:

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. При отправке сообщения INVITE, полученного из TRUNK_IN в TRUNK_OUT, в host-part заголовков To и From будут использоваться IP-адрес, настроенный в качестве remote address в транке TRUNK_OUT, и IP-адрес sip-транспорта для TRUNK_OUT соответственно (при условии, что в транке TRUNK_OUT не настроен домен).
Требуется при отправке INVITE заменять эти адреса на testdomain.loc.
Решение:
Конфигурация ESBC до использования модификаторов:
esbc
media resource MEDIA_IN
ip address 192.168.23.199
exit
media resource MEDIA_OUT
ip address 192.168.80.129
exit
sip transport IN
ip address 192.168.23.199
port 5070
exit
sip transport OUT
ip address 192.168.80.129
port 5080
exit
route-table TO_TRUNK_OUT
rule 0
action direct-to-trunk TRUNK_OUT
exit
exit
trunk sip TRUNK_IN
sip transport IN
route-table TO_TRUNK_OUT
media resource 0 MEDIA_IN
remote address 192.168.23.200
remote port 5070
exit
trunk sip TRUNK_OUT
sip transport OUT
media resource 0 MEDIA_OUT
remote address 192.168.80.26
remote port 5080
exit
exit |
Т. к. в транке TRUNK_OUT не настроен домен, то в host-part заголовков To и From сообщения INVITE будут указаны IP-адреса в соответствии с конфигурацией:
INVITE sip:23002@192.168.80.26:5080 SIP/2.0 Via: SIP/2.0/UDP 192.168.80.129:5080;rport;branch=z9hG4bKPj11eb899a-a1c3-4659-b78d-4bba6bdc17ce Max-Forwards: 70 From: "sipp" <sip:24001@192.168.80.129>;tag=c090d50d-4b15-4db1-94ac-3ea77fe3dd7d To: "sut" <sip:23002@192.168.80.26> Contact: <sip:24001@192.168.80.129:5080;transport=udp> Call-ID: db38ba3ff093153f38b412372a1bed35 CSeq: 20022 INVITE Allow: INVITE, ACK, BYE, CANCEL, PRACK, REGISTER, INFO, REFER, NOTIFY, OPTIONS, SUBSCRIBE, MESSAGE, UPDATE Supported: 100rel, replaces, ice Content-Type: application/sdp Content-Length: 241 [SDP] |
Настраиваем модификатор MOD_TABLE для замены IP-адресов на testdomain.loc:
vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# mod-table sip MOD_TABLE #Создаем модификатор замены: vesbc(esbc-mod-table)# mod 1 replace #С помощью паттерна выбираем заголовки, в которых необходимо выполнить замену: vesbc(esbc-mod-table-modification)# sip header-pattern '(From|To)' #Указываем метод, в котором необходимо выполнить замену: vesbc(esbc-mod-table-modification)# sip method pattern 'INVITE' #Выбираем часть заголовка, которая начинается с символа @, содержит любое количество любых символов и заканчивается символом >. Под это выражение попадает host-part заголовков: vesbc(esbc-mod-table-modification)# value-pattern '@.*>' #Указываем, что требуется заменить то, что мы получили в предыдущем правиле на @testdomain.loc>: vesbc(esbc-mod-table-modification)# replacement '@testdomain.loc>' vesbc(esbc-mod-table-modification)# exit vesbc(esbc-mod-table)# exit vesbc(config-esbc)# |
Используем это правило в TRUNK_OUT в качестве OUT:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# trunk sip TRUNK_OUT vesbc(config-esbc-trunk-sip)# mod-table sip out MOD_TABLE vesbc(config-esbc-trunk-sip)# do commit vesbc(config-esbc-trunk-sip)# do confirm |
Теперь в результате модификации в host-part заголовков To и From сообщения INVITE будет указан домен testdomain.loc:
INVITE sip:23002@192.168.80.26:5080 SIP/2.0 Via: SIP/2.0/UDP 192.168.80.129:5080;rport;branch=z9hG4bKPje431c80c-619a-43cc-a631-9ad3be4e6679 Max-Forwards: 70 From: "sipp" <sip:24001@testdomain.loc>;tag=0a5f2f31-e27e-4f7c-a3f8-70ca1d5a9f22 To: "sut" <sip:23002@testdomain.loc> Contact: <sip:24001@192.168.80.129:5080;transport=udp> Call-ID: 81a874656978d43e11d57e3662996fde CSeq: 26399 INVITE Allow: INVITE, ACK, BYE, CANCEL, PRACK, REGISTER, INFO, REFER, NOTIFY, OPTIONS, SUBSCRIBE, MESSAGE, UPDATE Supported: 100rel, replaces, ice Content-Type: application/sdp Content-Length: 241 [SDP] |
Работа с переменными модификатора
Значения переменных, полученных в модификаторе copy, можно использовать в модификаторах replace (поле replacement) и add (поле header value) в рамках одной SIP-сессии.
Значения переменных синхронизируются между плечами вызова, например, если переменная используется в модификаторах copy и add (replace) на обоих плечах, то при изменении переменной на одном из плеч, новое значение переменной будет передано на другое плечо.
Подстроки ${name_perem} будут заменены на значение соответствующей переменной. Длина переменной — до 128 символов.
Пример 1.
Схема:

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Diversion (предварительно следует настроить таблицу модификации на IN транка TRUNK_IN для транзита заголовка Diversion на второе плечо). Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, вырезался заголовок Diversion, а его значение из user part было добавлено в display name заголовка From.
vesbc#
vesbc# configure
vesbc(config)# esbc
#Создание таблицы модификаторов MODTABLE_OUT:
vesbc(config-esbc)# mod-table sip MODTABLE_OUT
vesbc(esbc-mod-table)#
#Добавление в таблицу модификаторов правила copy для копирования значения user part в переменную user_part:
vesbc(esbc-mod-table)# mod 0 copy
vesbc(esbc-mod-table-modification)#
#Выбор запроса, в котором будет использоваться модификатор copy (в данном случае INVITE):
vesbc(esbc-mod-table-modification)# sip method type Invite
#Указать название заголовка, из которого необходимо копировать значение (в данном случае Diversion):
vesbc(esbc-mod-table-modification)# sip header-pattern Diversion
#Указать содержимое заголовка, при совпадении с которым будет выполнено копирование в переменную. В переменную будет скопирована та часть отбора, которая указана в скобках:
vesbc(esbc-mod-table-modification)# value-pattern '<sip:(.+)@'
#Указать переменную, в которую будет скопировано значение, указанное в скобках, в примере - (.+):
vesbc(esbc-mod-table-modification)# variable-str 'user_part'
vesbc(esbc-mod-table-modification)# exit
#Добавление в таблицу модификаторов правила replace для замены заголовка From:
vesbc(esbc-mod-table)# mod 1 replace
#Указать название заголовка, в котором будет осуществляться замена:
vesbc(esbc-mod-table-modification)# sip header-pattern 'From'
#Выбор запроса, в котором будет использоваться модификатор replace (в данном случае INVITE):
vesbc(esbc-mod-table-modification)# sip method type Invite
#Указать часть содержимого заголовка, которую необходимо заменить:
vesbc(esbc-mod-table-modification)# value-pattern '.+ <sip:'
#Указать переменную user_part, которая содержит значение, полученное в модификации copy:
vesbc(esbc-mod-table-modification)# replacement '${user_part} <sip:$'
vesbc(esbc-mod-table-modification)# exit
#Добавление в таблицу модификаторов правила no-transit для удаления заголовка Diversion:
vesbc(esbc-mod-table)# mod 2 no-transit
vesbc(esbc-mod-table-modification)# sip header-pattern 'Diversion'
vesbc(esbc-mod-table-modification)# sip method type Invite
vesbc(esbc-mod-table-modification)# exit
vesbc(esbc-mod-table)# exit
#Привязать таблицу модификаторов к исходящему транку TRUNK_OUT:
vesbc(config-esbc)# trunk sip TRUNK_OUT
vesbc(config-esbc-trunk-sip)# mod-table sip out MODTABLE_OUT
#Применить и подтвердить изменения:
vesbc(config-esbc-trunk-sip)# do commit
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm
Configuration has been confirmed. Commit timer canceled.
|
После внесения изменений в конфигурацию с TRUNK_IN приходит следующий INVIITE:
INVITE sip:24001@192.168.80.129:5080 SIP/2.0 Via: SIP/2.0/UDP 192.168.80.26:5070;rport;branch=z9hG4bK-473191-1-1 From: test <sip:24001@192.168.80.26:5070>;tag=1 To: sut <sip:23002@192.168.80.129:5070> Call-ID: 1-473191@192.168.80.26 Cseq: 1 INVITE Contact: <sip:24001@192.168.80.26:5070> Max-Forwards: 70 Diversion: <sip:11111@test.loc>;reason=time-of-day Subject: Performance Test Allow: INVITE, ACK, BYE, CANCEL, UPDATE, SUBSCRIBE Content-Type: application/sdp Content-Length: 118 [SDP]... |
На TRUNK_OUT отправляется уже модифицированный INVITE с измененным заголовком From и без заголовка Diversion:
INVITE sip:23002@192.168.80.26:5080 SIP/2.0 Via: SIP/2.0/UDP 192.168.80.129:5080;rport;branch=z9hG4bKPjbURYAQZxa2m1zsT6x.s6RQ28ONE4EifS Max-Forwards: 70 From: "11111" <sip:24001@192.168.80.129>;tag=Jfl7n8XBMrh6vjCcB036Ogz6QX4BTDCo To: "sut" <sip:23002@192.168.80.26> Contact: <sip:24001@192.168.80.129:5080> Call-ID: bbf5db1c228015eecddfe0d7079ce876 CSeq: 8798 INVITE Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE Supported: 100rel, replaces Content-Type: application/sdp Content-Length: 119 [SDP]... |
Пример 2. Хранение переменных в течение сессии
Схема:

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Из TRUNK_IN приходит INVITE с заголовком Route. Требуется, чтобы значение заголовка Route из INVITE было добавлено в заголовок INVITE_Route запроса BYE.
vesbc#
vesbc# configure
vesbc(config)# esbc
#Создание таблицы модификаторов MODTABLE_IN:
vesbc(config-esbc)# mod-table sip MODTABLE_IN
vesbc(esbc-mod-table)#
#Добавление в таблицу модификаторов правила copy для копирования значения заголовка Route в переменную route:
vesbc(esbc-mod-table)# mod 0 copy
vesbc(esbc-mod-table-modification)#
#Выбор запроса, в котором будет использоваться модификатор copy (в данном случае INVITE):
vesbc(esbc-mod-table-modification)# sip method type Invite
#Указать название заголовка, из которого необходимо копировать значение (в данном случае Route):
vesbc(esbc-mod-table-modification)# sip header-pattern Route
#Указать содержимое заголовка, при совпадении с которым будет выполнено копирование в переменную. В переменную будет скопирована та часть отбора, которая указана в скобках:
vesbc(esbc-mod-table-modification)# value-pattern '(.+)'
#Указать переменную, в которую будет скопировано значение, указанное в скобках, в примере - (.+):
vesbc(esbc-mod-table-modification)# variable-str 'route'
vesbc(esbc-mod-table-modification)# exit
#Добавление в таблицу модификаторов правила add для добавления заголовка INVITE_Route в BYE:
vesbc(esbc-mod-table)# mod 1 add
#Выбор запроса, в котором будет использоваться модификатор add (в данном случае BYE):
vesbc(esbc-mod-table-modification)# sip header-pattern 'INVITE'
#Название добавляемого заголовка:
vesbc(esbc-mod-table-modification)# header name INVITE_Route
#Указать значение заголовка (переменная route):
vesbc(esbc-mod-table-modification)# header value '${route}'
vesbc(esbc-mod-table-modification)# exit
vesbc(esbc-mod-table)# exit
#Привязать таблицу модификаторов к входящему транку TRUNK_IN:
vesbc(config-esbc)# trunk sip TRUNK_IN
vesbc(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN
#Применить и подтвердить изменения:
vesbc(config-esbc-trunk-sip)# do commit
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm
Configuration has been confirmed. Commit timer canceled.
|
После внесения изменений в конфигурацию с TRUNK_IN приходит следующий INVIITE:
INVITE sip:23002@192.168.113.195:5060 SIP/2.0 Via: SIP/2.0/UDP 192.168.113.190:5061;rport;branch=z9hG4bK-1142789-1-1 From: "24001" <sip:24001@192.168.113.195>;tag=1 To: "23002" <sip:23002@192.168.113.195:5060> Call-ID: 1-1142789@192.168.113.190 Cseq: 1 INVITE Contact: <sip:24001@192.168.113.190:5061> Max-Forwards: 70 Subject: Performance Test Allow: INVITE, ACK, BYE, CANCEL Content-Type: application/sdp Test_header: string old_value Test2_header: another string Test2_header: t"et Test2_header: t'et Test2_header: 1234 Test3_header: temporary data Route: <sip:192.168.113.195> Supported: timer Content-Length: 142 [SDP]... |
Модифицированный запрос BYE, отправленный с TRUNK_IN на TRUNK_OUT, содержит заголовок INVITE_Route со значением заголовка Route из запроса INVITE:
BYE sip:23002@192.168.113.190:5063;transport=UDP SIP/2.0 Via: SIP/2.0/UDP 192.168.113.195:5060;rport;branch=z9hG4bKPja999d007-7d87-46f7-98ca-dcc40ee3188e Max-Forwards: 70 From: "24001" <sip:24001@192.168.113.195>;tag=a25bc557-78fd-4a9c-871d-87099fbfc9ce To: "23002" <sip:23002@192.168.113.190>;tag=14 Call-ID: 38a3fddd817f6b738707b21ee5fe1c7d CSeq: 10588 BYE Allow: INVITE, ACK, BYE, CANCEL INVITE_Route: <sip:192.168.113.195> Content-Length: 0 [SDP]... |
Пример 3. Синхронизация переменных между плечами вызова
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Из TRUNK_IN приходит INVITE с заголовком Test_header. Требуется, используя только переменную var1, скопировать значение заголовка Test_header из INVITE на первом плече, вставить его в заголовок Test_header_INVITE в ответе 180 на втором плече, скопировать значение заголовка Test_header из ответа 200 на втором плече и вставить его в заголовок Test_header_200 в запрос BYE на первом плече.
vesbc#
vesbc# configure
vesbc(config)# esbc
#Создание таблицы модификаторов MODTABLE_IN_TRUNK_IN для модификаций на первом плече:
vesbc(config-esbc)# mod-table sip MODTABLE_IN_TRUNK_IN
vesbc(esbc-mod-table)#
#Добавление в таблицу модификаторов правила copy для копирования значения заголовка Test_header в переменную var1:
vesbc(esbc-mod-table)# mod 0 copy
vesbc(esbc-mod-table-modification)#
#Выбор запроса, в котором будет использоваться модификатор copy (в данном случае INVITE):
vesbc(esbc-mod-table-modification)# sip method type Invite
#Указать название заголовка, из которого необходимо копировать значение (в данном случае Test_header):
vesbc(esbc-mod-table-modification)# sip header-pattern Test_header
#Указать содержимое заголовка, при совпадении с которым будет выполнено копирование в переменную. В переменную будет скопирована та часть отбора, которая указана в скобках:
vesbc(esbc-mod-table-modification)# value-pattern '(.+)'
#Указать переменную, в которую будет скопировано значение, указанное в скобках, в примере - (.+):
vesbc(esbc-mod-table-modification)# variable-str 'var1'
vesbc(esbc-mod-table-modification)# exit
#Добавление в таблицу модификаторов правила add для добавления заголовка Test_header_180 в BYE:
vesbc(esbc-mod-table)# mod 1 add
#Выбор запроса, в котором будет использоваться модификатор add (в данном случае BYE):
vesbc(esbc-mod-table-modification)# sip method type Bye
#Название добавляемого заголовка:
vesbc(esbc-mod-table-modification)# header name Test_header_200
#Указать значение заголовка (переменная var1):
vesbc(esbc-mod-table-modification)# header value '${var1}'
vesbc(esbc-mod-table-modification)# exit
vesbc(esbc-mod-table)# exit
#Привязать таблицу модификаторов к входящему транку TRUNK_IN:
vesbc(config-esbc)# trunk sip TRUNK_IN
vesbc(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN_TRUNK_IN
vesbc(config-esbc-trunk-sip)# exit
#Создание таблицы модификаторов MODTABLE_IN_TRUNK_OUT для модификаций на втором плече:
vesbc(config-esbc)# mod-table sip MODTABLE_IN_TRUNK_OUT
vesbc(esbc-mod-table)#
#Добавление в таблицу модификаторов правила copy для копирования значения заголовка Test_header в переменную var1:
vesbc(esbc-mod-table)# mod 0 copy
vesbc(esbc-mod-table-modification)#
#Выбор ответа, в котором будет использоваться модификатор copy (в данном случае 200):
vesbc(esbc-mod-table-modification)# sip response-pattern 200
#Указать название заголовка, из которого необходимо копировать значение (в данном случае Test_header):
vesbc(esbc-mod-table-modification)# sip header-pattern Test_header
#Указать содержимое заголовка, при совпадении с которым будет выполнено копирование в переменную. В переменную будет скопирована та часть отбора, которая указана в скобках:
vesbc(esbc-mod-table-modification)# value-pattern '(.+)'
#Указать переменную, в которую будет скопировано значение, указанное в скобках, в примере - (.+):
vesbc(esbc-mod-table-modification)# variable-str 'var1'
vesbc(esbc-mod-table-modification)# exit
#Добавление в таблицу модификаторов правила add для добавления заголовка Test_header_INVITE в 180:
vesbc(esbc-mod-table)# mod 1 add
#Выбор ответа, в котором будет использоваться модификатор add (в данном случае 180):
vesbc(esbc-mod-table-modification)# sip response-pattern '180'
#Название добавляемого заголовка:
vesbc(esbc-mod-table-modification)# header name Test_header_INVITE
#Указать значение заголовка (переменная var1):
vesbc(esbc-mod-table-modification)# header value '${var1}'
vesbc(esbc-mod-table-modification)# exit
vesbc(esbc-mod-table)# exit
#Привязать таблицу модификаторов к входящему транку TRUNK_OUT:
vesbc(config-esbc)# trunk sip TRUNK_OUT
vesbc(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN_TRUNK_OUT
#Применить и подтвердить изменения:
vesbc(config-esbc-trunk-sip)# do commit
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm
Configuration has been confirmed. Commit timer canceled.
|
После внесения изменений в конфигурацию с TRUNK_IN приходит следующий INVIITE, значение заголовка Test_header копируется в переменную var1:
INVITE sip:23002@192.168.113.195:5060 SIP/2.0 Via: SIP/2.0/UDP 192.168.113.190:5061;rport;branch=z9hG4bK-1151121-1-1 From: "24001" <sip:24001@192.168.113.195>;tag=1 To: "23002" <sip:23002@192.168.113.195:5060> Call-ID: 1-1151121@192.168.113.190 Cseq: 1 INVITE Contact: <sip:24001@192.168.113.190:5061> Max-Forwards: 70 Subject: Performance Test Allow: INVITE, ACK, BYE, CANCEL Content-Type: application/sdp Test_header: INVITE Supported: timer Content-Length: 142 [SDP]... |
Модифицированный ответ 180 Ringing, отправленный с TRUNK_OUT на TRUNK_IN, содержит заголовок Test_header_INVITE со значением из переменной var1:
SIP/2.0 180 Ringing Via: SIP/2.0/UDP 192.168.113.190:5061;rport=5061;received=192.168.113.190;branch=z9hG4bK-1152099-1-1 Call-ID: 1-1152099@192.168.113.190 From: "24001" <sip:24001@192.168.113.195>;tag=1 To: "23002" <sip:23002@192.168.113.195>;tag=e782be58-9527-409a-8c9f-de4f32d8fdb2 CSeq: 1 INVITE Contact: <sip:23002@192.168.113.195:5060;transport=udp> Allow: INVITE, ACK, BYE, CANCEL, UPDATE Warning: warning Test_header_INVITE: INVITE Content-Length: 0 [SDP]... |
Далее с TRUNK_OUT на TRUNK_IN приходит ответ 200 OK, значение заголовка Test_header копируется в переменную var1:
SIP/2.0 200 OK Via: SIP/2.0/UDP 192.168.113.195:5060;rport;branch=z9hG4bKPjf8b5024e-425d-434c-83ea-e315a365644a From: "24001" <sip:24001@192.168.113.195>;tag=9ca5b465-69ee-4d19-8891-6d99cc8d7b2c To: "23002" <sip:23002@192.168.113.190>;tag=1 Call-ID: e5e140176f2119a643b0504e9afa69bb CSeq: 1446 INVITE Contact: <sip:23002@192.168.113.190:5063;transport=UDP> Allow: INVITE, ACK, BYE, CANCEL, UPDATE Test_header: 200 OK Warning: warning Min-Expires: 300 Supported: 100rel, timer, replaces, qwe Require: 100rel, answermode Content-Type: application/sdp Content-Length: 166 [SDP]... |
Модифицированный запрос, отправленный с TRUNK_IN на TRUNK_OUT, содержит заголовок Test_header_200 со значением из переменной var1:
BYE sip:23002@192.168.113.190:5063;transport=UDP SIP/2.0 Via: SIP/2.0/UDP 192.168.113.195:5060;rport;branch=z9hG4bKPj091e9a98-54a1-4631-a024-6fe968fa0ba5 Max-Forwards: 70 From: "24001" <sip:24001@192.168.113.195>;tag=9ca5b465-69ee-4d19-8891-6d99cc8d7b2c To: "23002" <sip:23002@192.168.113.190>;tag=1 Call-ID: e5e140176f2119a643b0504e9afa69bb CSeq: 1447 BYE Allow: INVITE, ACK, BYE, CANCEL Test_header_200: 200 OK Content-Length: 0 [SDP]... |
В ESBC поддержано использование системных переменных в модификаторах replace (поле replacement) и add (поле header value).
Список системных переменных, которые можно использовать при модификации:
LOCAL_DOMAIN — локальный домен;
LOCAL_ADDR — локальный IP-адрес, сейчас то же самое, что LOCAL_HOST;
LOCAL_HOST — локальный домен или IP-адрес;
LOCAL_PORT — локальный порт;
REMOTE_DOMAIN — домен удалённой стороны;
REMOTE_ADDR — IP-адрес удалённой стороны;
REMOTE_HOST — домен или IP-адрес удалённой стороны;
REMOTE_PORT — порт удалённой стороны;
IFACE_TYPE — тип интерфейса (TRUNK или USER);
IFACE_ID — числовой идентификатор интерфейса;
IFACE_NAME — имя интерфейса;
VERSION — версия ESBC (x.y.z.patch);
TIMESTAMP — текущее время в секундах (заполняется на момент применения модификации).
Синтаксис обращения к системным переменным:
${VAR_NAME} |
Схема:

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, добавлялся заголовок Call-Info с информацией об имени транка, на который отправляется запрос, и версией ESBC.
vesbc#
vesbc# configure
vesbc(config)# esbc
#Создание таблицы модификаторов MODTABLE_OUT:
vesbc(config-esbc)# mod-table sip MODTABLE_OUT
vesbc(esbc-mod-table)#
#Создание модификатора add для добавления заголовка Call-Info:
vesbc(esbc-mod-table)# mod 0 add
vesbc(esbc-mod-table-modification)#
#Выбор запроса, в котором будет использоваться модификатор add (в данном случае INVITE):
vesbc(esbc-mod-table-modification)# sip method type Invite
#Указать название заголовка, который будет добавлен:
vesbc(esbc-mod-table-modification)# header name 'Call-Info'
#Указать содержимое заголовка с использованием системных переменных:
vesbc(esbc-mod-table-modification)# header value 'call to ${IFACE_NAME}; ESBC version: ${VERSION}'
vesbc(esbc-mod-table-modification)# exit
#Привязать таблицу модификаторов к исходящему транку TRUNK_OUT:
vesbc(config-esbc)# trunk sip TRUNK_OUT
vesbc(config-esbc-trunk-sip)# mod-table sip out MODTABLE_OUT
#Применить и подтвердить изменения:
vesbc(config-esbc-trunk-sip)# do commit
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm
Configuration has been confirmed. Commit timer canceled.
|
После внесения изменений в конфигурацию с TRUNK_IN приходит следующий INVIITE:
INVITE sip:23002@192.168.80.135:5060 SIP/2.0 Via: SIP/2.0/UDP 192.168.80.27:5061;rport;branch=z9hG4bK-2122485-1-1 From: "24001" <sip:24001@192.168.80.27:5061>;tag=1 To: "23002" <sip:23002@192.168.80.135:5060> Call-ID: 1-2122485@192.168.80.27 Cseq: 1 INVITE Contact: <sip:24001@192.168.80.27:5061> Max-Forwards: 70 Subject: Performance Test Allow: INVITE, ACK, BYE, CANCEL Content-Type: application/sdp Content-Length: 138 [SDP]... |
На TRUNK_OUT отправляется уже модифицированный INVITE с заголовком Call-Info, который содержит имя вызываемой стороны и версию ESBC:
INVITE sip:23002@192.168.80.27:5063 SIP/2.0 Via: SIP/2.0/UDP 192.168.80.135:5060;rport;branch=z9hG4bKPj69d21930-f472-4e64-8555-6b68a532deae Max-Forwards: 70 From: "24001" <sip:24001@192.168.80.135>;tag=f3db1c01-0c06-45cf-8b4d-a233070ae693 To: "23002" <sip:23002@192.168.80.27> Contact: <sip:24001@192.168.80.135:5060;transport=udp> Call-ID: 977eea09afecfc44932d4d9c1b2eeb15 CSeq: 6757 INVITE Allow: INVITE, ACK, BYE, CANCEL Supported: 100rel, replaces, ice, timer Call-Info: call to TRUNK_OUT; ESBC version: 1.6.0.0085 Content-Type: application/sdp Content-Length: 141 [SDP]... |
В ESBC поддержано использование условий во всех типах SIP-модификаторов.
Условия можно задать в настройках модификатора. Условие определяется двумя параметрами – заголовком, содержимое которого будет проверяться (sip header-pattern) и значением заголовка, которое необходимо для выполнения условия (value-pattern).
Если в настройках модификатора задано условие, то перед применением модификации SIP-сообщение проверяется на соответствие условию. Если условий несколько, то для применения модификации необходимо выполнение всех условий.
Схема:

В конфигурации есть 2 транка. Вызов, поступающий с TRUNK_IN, маршрутизируется в TRUNK_OUT. Требуется скопировать последнюю цифру номера из From и вставить её в заголовок X-Test-Header при условии, что 2-ая цифра в номере из To равна 8.
vesbc#
vesbc# configure
vesbc(config)# esbc
#Создание таблицы модификаторов MODTABLE_OUT:
vesbc(config-esbc)# mod-table sip MODTABLE_OUT
vesbc(esbc-mod-table)#
#Создание модификатора copy для копирования последней цифры из заголовка From в переменную:
vesbc(esbc-mod-table)# mod 0 copy
vesbc(esbc-mod-table-modification)#
#Выбор запроса, где будет производиться поиск заголовка и копирование значения (любой запрос):
vesbc(esbc-mod-table-modification)# sip method pattern '.*'
#Указать заголовок, содержимое которого будет скопировано:
vesbc(esbc-mod-table-modification)# sip header-pattern 'From'
#Указать содержимое заголовка, которое нужно скопировать в переменную (последняя цифра номера):
vesbc(esbc-mod-table-modification)# value-pattern '(.)@'
#Указать название переменной, в которой будет храниться скопированное значение:
vesbc(esbc-mod-table-modification)# variable-str 'var'
vesbc(esbc-mod-table-modification)# exit
#Создание модификатора add для добавления заголовка X-Test-Header:
vesbc(esbc-mod-table)# mod 1 add
vesbc(esbc-mod-table-modification)#
#Выбор запроса, в котором будет использоваться модификатор add (любой запрос):
vesbc(esbc-mod-table-modification)# sip method pattern '.*'
#Указать название заголовка, который будет добавлен:
vesbc(esbc-mod-table-modification)# header name X-Test-Header
#Указать содержимое заголовка с использованием системных переменных:
vesbc(esbc-mod-table-modification)# header value '${var}'
#Создать условие модификации:
vesbc(esbc-mod-table-modification)# condition 0
#Указать заголовок, содержимое которого будет проверяться:
vesbc(esbc-mod-table-modification-condition)# sip header-pattern 'To'
#Указать заголовок, содержимое которого будет проверяться (вторая цифра в номере должна быть равна 8):
vesbc(esbc-mod-table-modification-condition)# value-pattern '.*sip:.(8).*'
vesbc(esbc-mod-table-modification-condition)# exit
#Привязать таблицу модификаторов к исходящему транку TRUNK_OUT:
vesbc(config-esbc)# trunk sip TRUNK_OUT
vesbc(config-esbc-trunk-sip)# mod-table sip out MODTABLE_OUT
#Применить и подтвердить изменения:
vesbc(config-esbc-trunk-sip)# do commit
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm
Configuration has been confirmed. Commit timer canceled.
|
После внесения изменений в конфигурацию с TRUNK_IN приходит следующий INVIITE:
INVITE sip:18345@192.168.113.195 SIP/2.0 Via: SIP/2.0/UDP 192.168.113.190:5062;rport;branch=z9hG4bKxrnczyxm Max-Forwards: 70 To: <sip:18345@192.168.113.195> From: "23001" <sip:23001@192.168.113.195>;tag=bmxas Call-ID: 977eea09afecfc44932d4d9c1b2eeb15 CSeq: 161 INVITE Contact: <sip:23001@192.168.113.190:5062;transport=udp> Content-Type: application/sdp Allow: INVITE,ACK,BYE,CANCEL,OPTIONS,REFER,NOTIFY,SUBSCRIBE,INFO,MESSAGE Supported: replaces,norefersub User-Agent: Twinkle/1.10.2 Content-Length: 179 [SDP]... |
Вторая цифра в номере из заголовка To равна 8, условие выполнено, модификация выполняется. На TRUNK_OUT отправляется уже модифицированный INVITE с заголовком X-Test-Header, который содержит последнюю цифру номера А (1):
INVITE sip:18345@192.168.113.190:5461 SIP/2.0 Via: SIP/2.0/UDP 192.168.113.195:5060;rport;branch=z9hG4bKPj5bfa1162-6ccf-41e1-9aff-4d3cf8fe9511 Max-Forwards: 70 From: "23001" <sip:23001@192.168.113.195>;tag=9b1f5ca8-001a-4165-98ba-c7603d2bc0b2 To: <sip:18345@192.168.113.190> Contact: <sip:23001@192.168.113.195:5060;transport=udp> Call-ID: 771e99b84559038bd9a784c3a7360db3 CSeq: 1753 INVITE Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, REFER, NOTIFY, SUBSCRIBE, INFO, MESSAGE Supported: 100rel, replaces, ice, norefersub X-Test-Header: 1 Content-Type: application/sdp Content-Length: 181 [SDP]... |
В SIP-профиле настраивается конфигурация общих параметров SIP. Профиль используется в транках, транк-группах и абонентских интерфейсах.
В текущей версии ПО поддержаны следующие настройки:
Игнорирование OPTIONS;
Описание всех команд для настройки SIP-профилей приведено в разделе Настройки SIP-профиля.
Используется для периодической отправки keep-alive сообщений для контроля состояния встречной стороны.
В текущей версии ПО в качестве keep-alive сообщений используется метод OPTIONS.
По умолчанию keep-alive не используется. Для включения необходимо использовать команду keepalive enable в SIP-профиле.
Контроль осуществляется путем отправки сообщений OPTIONS с заданными интервалами success-interval (по умолчанию 60 сек.) и failed-interval (по умолчанию 20 сек.).
Алгоритм работы:
Сообщение OPTIONS отправляется только в случае, когда в транке отсутствует активность SIP после окончания периода success-interval. Т. е. в случае если через транк проходят вызовы с большей частотой, чем указано в настройке success-interval, то сообщения OPTIONS не будут отправляться на встречную сторону, т. к. очевидно, что направление доступно. Если после последнего отправленного или полученного сообщения SIP прошел период равный success-interval, то отправляется OPTIONS. При получении ответа на него (с любым статус-кодом) направление считается доступным. Сообщения OPTIONS будут отправляться с периодом success-interval до того момента, пока либо не появится активность SIP, либо не будут получены ответы на отправленные OPTIONS. Если не будет ответов на OPTIONS, транк считается недоступным, и сообщения OPTIONS будут отправляться с интервалом failed-interval до тех пор, пока транк снова не станет доступным.
Пример настройки:
vesbc# vesbc# configure vesbc(config)# esbc #Создать SIP-профиль NEW_SIP_PROFILE: vesbc(config-esbc)# sip profile NEW_SIP_PROFILE vesbc(config-esbc-sip-profile)# #Включить контроль доступности: vesbc(config-esbc-sip-profile)# keepalive enable vesbc(config-esbc-sip-profile)# #Настроить интервалы контроля: vesbc(config-esbc-sip-profile)# keepalive success-interval 120 vesbc(config-esbc-sip-profile)# keepalive failed-interval 30 vesbc(config-esbc-sip-profile)# vesbc(config-esbc-sip-profile)# exit vesbc(config-esbc)# #Привязать SIP-профиль к транку TRUNK_OUT: vesbc(config-esbc)# trunk sip NEW_TRUNK vesbc(config-esbc-trunk-sip)# sip profile NEW_SIP_PROFILE vesbc(config-esbc-trunk-sip)# #Применить и подтвердить изменения: vesbc(config-esbc-trunk-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-trunk-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
При использовании SIP-профиля с включенным контролем доступности, для абонентских интерфейсов отправка OPTIONS осуществляться не будет. Данная настройка используется только для контроля транков. |
Список причин отбоя для указания статус-кодов ответов SIP, по которым будет осуществляться перемаршрутизация вызовов и регистраций на альтернативное направление (следующий транк в транковой группе/следующее правило в таблице маршрутизации).
При создании маски для списка можно использовать регулярные выражения PCRE.
Пример использования:

В таблице маршрутизации два правила, первое — направляет вызов в TRUNK_GROUP, второе — направляет вызов в TRUNK_3.
vesbc# vesbc# configure vesbc(config)# esbc #Создать список ответов: vesbc(config-esbc)# cause-list sip LIST vesbc(config-esbc-cause-list-sip)# #Создать маску, по которой будут отбираться ответы для перемаршрутизации: vesbc(config-esbc-cause-list-sip)# cause-mask 404 vesbc(config-esbc-cause-list-sip)# exit #Создать SIP-профиль, привязать список к SIP-профилю: vesbc(config-esbc)# sip profile SIP-PROFILE vesbc(config-esbc-sip-profile)# cause-list LIST vesbc(config-esbc-sip-profile)# exit #Привязать к транковой группе TRUNK-GROUP SIP-профиль: vesbc(config-esbc)# trunk-group TRUNK-GROUP vesbc(config-esbc-trunk-group)# sip profile SIP-PROFILE vesbc(config-esbc-trunk-group)# #Применить и подтвердить изменения: vesbc(config-esbc-trunk-group)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-trunk-group)# do confirm Configuration has been confirmed. Commit timer canceled. |
Входящий вызов начинает маршрутизироваться по таблице маршрутизации (ROUTE_TABLE). В результате вызов маршрутизируется по правилу RULE_1 на TRUNK_GROUP и оттуда в TRUNK_1. TRUNK_1 недоступен, вызов отбивается по истечении Timer B, и происходит перемаршрутизация на TRUNK_2 (следующий транк в транковой группе). Из TRUNK_2 приходит ответ 404 Not Found, и т. к. код ответа совпадает с маской из списка, который используется в TRUNK-GROUP, то происходит маршрутизация на следующее направление. Поскольку в транковой группе больше нет транков, маршрутизация переходит к RULE_2, и вызов маршрутизируется в TRUNK_3.
Без использования списка причин отбоя, перемаршрутизация происходит только по недоступности транка. |
Для абонентских интерфейсов, использование списка причин отбоя не влияет на маршрутизацию. Перемаршрутизация осуществляться не будет. |
Перемаршрутизация абонентов
Вызов с зарегистрированного абонента будет направлен в тот транк, через который осуществлялась его регистрация. В случае неуспешного вызова, перемаршрутизация осуществляться не будет.
При вызове с незарегистрированного абонента сначала идёт проверка, разрешены ли с этого абонентского интерфейса вызовы без регистрации (allow_unreg_call), если проверка успешна, то вызов смаршрутизируется по привязанной таблице маршрутизации и в случае недоступности транка/совпадении ответа с маской из списка произойдёт маршрутизация на следующее направление.
Настройка поведения при перенаправлении позволяет использовать разные режимы обработки сообщений 3XX.
Пример локальной обработки 3xx ответа
Схема:
Из транка А на ESBC прилетает инициирующий INVITE с номера number_a на номер number_b, этот INVITE пересылается на сторону B, откуда приходит ответ 302 с number_c@IP_c в заголовке Contact.
A(транк)---IP_a | IP_ESBC_1---ESBC---IP_ESBC_2 | IP_b---B(транк/абонентский интерфейс)
| |
INVITE number_b@IP_ESBC_1-|------------->INVITE number_b@IP_b------|---------------------->
From: number_a@IP_a | From: number_a@IP_ESBC_2 |
To: number_b@IP_ESBC_1 | To: number_b@IP_b |
| |
| <--------------------|------302 Moved Temporarily
| | Contact: number_c@IP_c |
1) IP_c == IP_ESBC_2 и существует абонент с username == number_c:
Отправляем INVITE абоненту на тот транк, где он зарегистрирован и 181 в сторону A.
A(транк)---IP_a | IP_ESBC_1---ESBC---IP_ESBC_3 | IP_d---D(trunk)
| |
| INVITE number_с@IP_d---------|---------------------->
| From: number_a@IP_ESBC_3 |
| To: number_b@IP_b |
| Diversion: number_b@IP_ESBC_3|
| |
<--------------------|-----------181 Call is Being Forwarded | |
2) IP_c == IP_ESBC_2 и абонент не найден:
Заменяем в Contact IP_ESBC_2 на IP_a и пересылаем на другое плечо.
A(транк)---IP_a | IP_ESBC_1---ESBC---IP_ESBC_2 | IP_b---B(транк/абонентский интерфейс)
| |
<---------------------|------302 Moved Temporarily<------------|--------302 Moved Temporarily
| Contact: number_c@IP_a | Contact: number_c@IP_c
| | |
3) IP_c != IP_ESBC_2 и IP_b – доверенный транк:
Отправляем INVITE на указанный адрес и 181 в сторону А.
A(транк)---IP_a | IP_ESBC_1---ESBC---IP_ESBC_2 | IP_с
| |
| INVITE number_с@IP_c |---------------------->
| From: number_a@IP_ESBC_2 |
| To: number_b@IP_b |
| Diversion: number_b@IP_ESBC_2|
| |
<--------------------|-----------181 Call is Being Forwarded | |
Для того чтобы транк считался доверенным, необходимо включить опцию trusted-network в конфигурации транка. |
В прочих случаях — вызов завершается.
Данный режим используется для обработки входящих сообщений OPTIONS.
ignore options enable — игнорирование запросов OPTIONS. На входящие запросы OPTIONS не будут отправляться ответы;
no ignore options enable — отключение игнорирования запросов OPTIONS. На входящие запросы OPTIONS будут отправляться ответы 200 OK.
Игнорирование OPTIONS по умолчанию включено. |
Если к user-interface привязан sip profile с включенным игнорированием OPTIONS, то при получении OPTIONS от зарегистрированных абонентов ESBC будет обрабатывать эти запросы и отвечать 200 OK (только если в запросе указан заголовок Contact). Если OPTIONS приходят не с зарегистрированных абонентов, то такие запросы игнорируются. |
Использование таймеров SIP-сессий (RFC 4028) предназначено для контроля состояния сеансов связи и предотвращения зависания разговорных сессий, в случае возникновения каких-либо проблем, например с сетью.
Обновление сессии поддерживается путем передачи запросов re-INVITE или UPDATE в течение сеанса связи.
Запрашиваемый период контроля сессии (Session Expires) — это период времени в секундах, по истечении которого произойдет принудительное завершение сессии в случае, если сессия не будет вовремя обновлена. Принимает значения от 90 до 64800 с, значение по умолчанию — 1800 с.
Минимальный период контроля сессии (Min SE) — это минимальный интервал проверки работоспособности соединения. Принимает значения от 90 до 32000 с, значение по умолчанию — 90 с. Данное значение не должно превышать таймаут принудительного завершения сессии Sessions expires.
Сторона обновления сессии (Refresher) — определяет сторону, которая будет осуществлять обновление сессии (uac — сторона клиента (вызывающая), uas — сторона сервера (вызываемая)). Значение по умолчанию — uac.
Поведение по умолчанию — поддержка таймеров SIP-сессий отключена. Для включения используется команда — session timer enable.
Описание всех команд для настройки таймеров SIP-сессий приведено в разделе Настройки SIP-профиля Справочника команд CLI.
Пример настройки
Задача.
Включить поддержку таймеров SIP-сессий на транке TRUNK_2 с параметрами Session Expires – 120, Min SE – 120, Refresher – UAS. На транке TRUNK_1 таймеры не используются.
Решение.
Настроить SIP-профиль и привязать его к транку TRUNK_2:
vesbc# vesbc# configure vesbc(config)# esbc #Создать SIP-профиль NEW_SIP_PROFILE: vesbc(config-esbc)# sip profile NEW_SIP_PROFILE #Включить поддержку таймеров SIP-сессий (RFC4028): vesbc(config-esbc-sip-profile)# session timer enable vesbc(config-esbc-sip-profile)# #Настроить минимальный период контроля сессии 120 секунд: vesbc(config-esbc-sip-profile)# session timer min-se 120 vesbc(config-esbc-sip-profile)# #Настроить запрашиваемый период контроля сессии 150 секунд: vesbc(config-esbc-sip-profile)# session timer session-expires 150 vesbc(config-esbc-sip-profile)# #Настроить сторону обновления сессии: vesbc(config-esbc-sip-profile)# session timer refresher uas vesbc(config-esbc-sip-profile)# vesbc(config-esbc-sip-profile)# exit vesbc(config-esbc)# #Привязать SIP-профиль к транку TRUNK_2: vesbc(config-esbc)# trunk sip TRUNK_2 vesbc(config-esbc-trunk-sip)# sip profile NEW_SIP_PROFILE vesbc(config-esbc-trunk-sip)# #Применить и подтвердить изменения: vesbc(config-esbc-trunk-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-trunk-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
При исходящем вызове в транк TRUNK_2, в сообщение INVITE будут добавлены заголовки в соответствии с настройкой. Если сторона Б также поддерживает RFC 4028, то будет включен контроль сессии:

Т. к. refresher=uas, то в данном примере, сторона Б будет отправлять сообщения UPDATE каждые 60 сек. Если по истечении 90 сек. от стороны Б не будет получено сообщение UPDATE, вызов будет разрушен (ESBC отправит BYE в обе стороны).
При использовании таймеров SIP-сессий на одном из плеч вызова, запросы re-INVITE или UPDATE, полученные от удаленной стороны, в рамках контроля сессии будут передаваться на второе плечо, независимо от настроек таймеров на этом плече. |
SIP-I и SIP-T — это два расширения протокола SIP, которые позволяют передавать сообщения телефонной сигнализации ISUP поверх сетей с коммутацией пакетов. Основная функция этих протоколов — инкапсуляция и трансляция сообщений ISUP, что обеспечивает взаимодействие между сетями SIP и традиционными телефонными сетями.
По умолчанию транзит SDP c ISUP запрещен. Для включения используется команда:
isup transit |
Для транзита SDP c ISUP требуется включение данной опции на обоих (входящем и исходящем) направлениях (транках/пользовательских интерфейсах), через которые будет осуществляться маршрутизация сигнализации SIP.
В случае когда на каком-либо из направлений не включена поддержка транзита, на сообщения SIP c вложенным ISUP будет отправлен ответ 415 Unsupported Media Type.
ESBC не обрабатывает ISUP в SDP, а только осуществляет транзит данного вложения. |
Использование медиапрофилей позволяет гибко управлять типом медиаданных путем фильтрации медиасекций в SDP, транскодированием аудио и видео, шифрованием RTP-потока, контролем сессии по наличию RTP и RTCP-пакетов.
Медиапрофили используются в абонентских интерфейсах, транках и транк-группах. Медиапрофиль, используемый для транка, входящего в транк-группу, переопределяет настройки медиапрофиля, используемого в транк-группе.
Обработка медиапотоков осуществляется в двух режимах: проксирование и транскодирование.
По умолчанию ESBC работает в режиме проксирования медиатрафика без использования транскодирования. Список паттернов кодеков, доступных для проксирования через ESBC, задается командой:
codec allow {all | <CODEC_PATTERN> [<PT>]} |
<CODEC_PATTERN> — название кодека/часть названия кодека;
<PT> — payload type (необязательный параметр). При указании будет проводиться дополнительная проверка паттерна на полное совпадение кодека с указанным payload type.
Описание всех команд приведено в разделе Настройки медиапрофиля справочника команд CLI.
При создании медиапрофиля список паттернов для наиболее известных кодеков IANA, доступных для проксирования, добавляется автоматически и выглядит следующим образом:
media profile MEDIA_PROFILE
codec allow AMR
codec allow CLEARMODE
codec allow CN
codec allow G72
codec allow G722/ 9
codec allow G728 15
codec allow G729/ 18
codec allow GSM 3
codec allow H26
codec allow H261 31
codec allow H263 34
codec allow ILBC
codec allow L16/44100 11
codec allow L16/44100/2 10
codec allow OPUS
codec allow PCMA 8
codec allow PCMU 0
codec allow SPEEX
codec allow T38 t38
codec allow VP
codec allow telephone-event
exit |
Т. к. использование паттернов позволяет указывать не полное название кодека, а его часть, то запись вида "codec allow G72" означает, что кодеки G726-16, G726-24, G726-32, G726-40 будут доступны для проксирования.
Для кодеков со статическим payload type рекомендуется указывать номер payload type, иначе, если в SDP не будет указан атрибут rtpmap, вызов будет отбиваться кодом 488. |
Для абонентских интерфейсов, транков и транковых групп, к которым не привязан ни один медиапрофиль, используется медиапрофиль по умолчанию, который не отображается в конфигурации. В данном медиапрофиле применяются паттерны кодеков, доступных для проксирования, указанные выше.
Для очистки списка используется команда no codec allow all. При использовании данной команды будут удалены паттерны кодеков, добавленные автоматически при создании профиля, и паттерны кодеков, добавленные/измененные пользователем.
Управление списком кодеков и типом медиаданных (audio, video, image) SDP осуществляется путем добавления/удаления/изменения паттернов codec allow. Максимальное количество паттернов в одном медиапрофиле — 64.
Для успешного согласования кодеков в режиме проксирования, необходимо, чтобы на входящем и исходящем направлении в медиапрофилях, привязанным к этим направлениям, содержались паттерны, позволяющие пропускать одни и те же кодеки. В случае когда согласование невозможно, на запросы INVITE ESBC будет отвечать сообщением 488. |
1. Запретить использование видео для транка TRUNK_2.

vesbc# configure vesbc(config)# esbc #Создать медиапрофиль для транка TRUNK_2: vesbc(config-esbc)# media profile FOR_TRUNK_2 #Запретить использование всех видеокодеков: vesbc(config-esbc-media-profile)# no codec allow H26 vesbc(config-esbc-media-profile)# no codec allow H261 vesbc(config-esbc-media-profile)# no codec allow H263 vesbc(config-esbc-media-profile)# no codec allow VP vesbc(config-esbc-media-profile)# exit #Привязать медиапрофиль к транку: vesbc(config-esbc)# trunk sip TRUNK_2 vesbc(config-esbc-trunk-sip)# media profile FOR_TRUNK_2 vesbc(config-esbc-trunk-sip)# do commit vesbc(config-esbc-trunk-sip)# do confirm |
В результате конфигурация медиапрофиля будет выглядеть следующим образом:
media profile FOR_TRUNK_2
codec allow AMR
codec allow CLEARMODE
codec allow CN
codec allow G72
codec allow G722/ 9
codec allow G728 15
codec allow G729/ 18
codec allow GSM 3
codec allow ILBC
codec allow L16/44100 11
codec allow L16/44100/2 10
codec allow OPUS
codec allow PCMA 8
codec allow PCMU 0
codec allow SPEEX
codec allow T38 t38
codec allow telephone-event
exit |
В данном примере для транка TRUNK_1 не требуется использование отдельного медиапрофиля, т. к. при вызовах, поступающих в TRUNK_1, и, маршрутизируемых в TRUNK_2, все видеокодеки из SDP будут удалены в соответствии с медиапрофилем, используемым для транка TRUNK_2.

Для вызовов, поступающих в TRUNK_2, все видеокодеки из SDP будут удалены вне зависимости от направления маршрутизации.

2. Запретить использование кодеков G729 и G726 для транка TRUNK_1.
vesbc# configure vesbc(config)# esbc #Создать медиапрофиль для транка TRUNK_1: vesbc(config-esbc)# media profile FOR_TRUNK_1 #Запретить использование кодеков G729 и G726: vesbc(config-esbc-media-profile)# no codec allow G729/ vesbc(config-esbc-media-profile)# no codec allow G72 vesbc(config-esbc-media-profile)# exit #Привязать медиапрофиль к транку: vesbc(config-esbc)# trunk sip TRUNK_1 vesbc(config-esbc-trunk-sip)# media profile FOR_TRUNK_1 vesbc(config-esbc-trunk-sip)# do commit vesbc(config-esbc-trunk-sip)# do confirm |
В результате конфигурация медиапрофиля будет выглядеть следующим образом:
media profile FOR_TRUNK_1
codec allow AMR
codec allow CLEARMODE
codec allow CN
codec allow G722/ 9
codec allow G728 15
codec allow GSM 3
codec allow H26
codec allow H261 31
codec allow H263 34
codec allow ILBC
codec allow L16/44100 11
codec allow L16/44100/2 10
codec allow OPUS
codec allow PCMA 8
codec allow PCMU 0
codec allow SPEEX
codec allow T38 t38
codec allow VP
codec allow telephone-event
exit |

В данном примере в транк TRUNK_1 приходит INVITE c SDP Offer1, в котором наиболее приоритетным кодеком является G729, а также указан кодек G726, но т. к. настройками медиапрофиля FOR_TRUNK_1 данные кодеки запрещены, то в транк TRUNK_2 будет отправлен SDP Offer2 без данных кодеков. UA TRUNK_2 выбирает в качестве приоритетного кодек PCMA (SDP Answer2), и в результате ESBC отправляет в SDP Answer1 наиболее приоритетный кодек из SDP Offer1 (кроме G729) — PCMA.
3. Разрешить использование кодека QCELP для обоих транков (в дополнение к паттернам по умолчанию).
vesbc# configure vesbc(config)# esbc #Создать медиапрофиль для использования в обоих транках: vesbc(config-esbc)# media profile FOR_TRUNKS #Добавить паттерн для кодека QCELP: vesbc(config-esbc-media-profile)#codec allow QCELP vesbc(config-esbc-media-profile)# exit #Привязать медиапрофиль к обоим транкам: vesbc(config-esbc)# trunk sip TRUNK_1 vesbc(config-esbc-trunk-sip)# media profile FOR_TRUNKS vesbc(config-esbc-trunk-sip)# exit vesbc(config-esbc)# trunk sip TRUNK_2 vesbc(config-esbc-trunk-sip)# media profile FOR_TRUNKS vesbc(config-esbc-trunk-sip)# exit vesbc(config-esbc)# do commit vesbc(config-esbc)# do confirm |
В результате конфигурация медиапрофиля будет выглядеть следующим образом:
media profile FOR_TRUNKS codec allow AMR codec allow CLEARMODE codec allow CN codec allow G72 codec allow G722/ 9 codec allow G728 15 codec allow G729/ 18 codec allow GSM 3 codec allow H26 codec allow H261 31 codec allow H263 34 codec allow ILBC codec allow L16/44100 11 codec allow L16/44100/2 10 codec allow OPUS codec allow PCMA 8 codec allow PCMU 0 codec allow QCELP codec allow SPEEX codec allow T38 t38 codec allow VP codec allow telephone-event exit |

В данном примере в транк TRUNK_1 приходит INVITE c SDP Offer1, в котором содержится кодек QCELP, и т. к. настройками медиапрофиля FOR_TRUNKS этот кодек разрешен, то он будет передаваться SDP Offer2, отправляемый в транк TRUNK_2. UA TRUNK_2 выбирает кодек QCELP, и в результате он будет согласован в SDP Answer1.
4. Разрешить использование только кодека PCMA для TRUNK_1.
vesbc# configure vesbc(config)# esbc #Создать медиапрофиль для транка TRUNK_1: vesbc(config-esbc)# media profile FOR_TRUNK_1 #Удалить все паттерны: vesbc(config-esbc-media-profile)# no codec allow all #Добавить паттерн только для кодека PCMA: vesbc(config-esbc-media-profile)# codec allow PCMA 8 vesbc(config-esbc-media-profile)# exit #Привязать медиапрофиль к транку: vesbc(config-esbc)# trunk sip TRUNK_1 vesbc(config-esbc-trunk-sip)# media profile FOR_TRUNK_1 vesbc(config-esbc-trunk-sip)# do commit vesbc(config-esbc-trunk-sip)# do confirm |
В результате конфигурация медиапрофиля будет выглядеть следующим образом:
media profile FOR_TRUNK_1
codec allow PCMA 8
exit |

В данном примере в транк TRUNK_1 приходит INVITE c SDP Offer1 с набором кодеков. Т. к. настройками медиапрофиля FOR_TRUNK_1 запрещены все кодеки кроме PCMA, то в транк TRUNK_2 будет отправлен SDP Offer2, содержащий только кодек PCMA.
Транскодирование — это реализация преобразования медиапотоков, основанных на разных кодеках.
Эта реализация позволяет:
ESBC предоставляет реализацию транскодирования на границе сети вместо использования ресурсов сети предприятия для тех же функций.
Список кодеков, поддерживаемых в режиме транскодирования:
Аудиокодеки | Видеокодеки |
|---|---|
AMR AMR-WB G722 G7221-24 G7221-32 G7221C-24 G7221C-32 G7221C-48 G726-16 G726-24 G726-32 G726-40 G729 GSM ILBC L16-MONO OPUS PCMA PCMU SPEEX-NB SPEEX-UWB SPEEX-WB | H263-1998 H264 VP8 VP9 |
Поддержка кодеков для транскодирования осуществляется командами:
codec {audio | video | image} {all | <CODEC>}
no codec {audio | video | image} {all | <CODEC>} |
<CODEC> — название кодека. Указывается из списка поддержанных для транскодирования кодеков.
all — включает транскодирование всех доступных кодеков заданного типа медиаданных.
Команда codec image в текущей версии ПО не поддерживается, данная команда аналогична команде codec allow T38 t38. |
Описание всех команд приведено в разделе Настройки медиапрофиля справочника команд CLI.
Порядок обработки SDP для выбора режима работы:
В результате транскодирование включается, если самые приоритетные кодеки из Offer и Answer SDP на двух плечах не совпадают. В таком случае в Answer SDP будет выбран наиболее приоритетный кодек, который был получен в Offer SDP, и для которого включена поддержка транскодирования в медиапрофиле на плече А.
Иначе при совпадении приоритетных кодеков в Offer SDP и Answer SDP, будет использоваться проксирование медиаданных.
С целью снижения нагрузки на ESBC, транскодирование включается только в случае, когда использовать проксирование медиатрафика невозможно.
Для включения транскодирования необходимо использовать медиапрофили с включенным транскодированием (codec audio/video) на обоих направлениях.
Если на одном из направлений не используется медиапрофиль (т. е. используется медиапрофиль по умолчанию), или в профиле не настроено ни одно правило codec audio/video, то транскодирование осуществляться не будет.
Пример:
В транке TRUNK_1 используется медиапрофиль FOR_TRUNK_1, в котором разрешены кодеки PCMA и PCMU для проксирования, и не указаны кодеки, разрешенные для транскодирования.
В транке TRUNK_2 используется медиапрофиль FOR_TRUNK_2, в котором также кодеки PCMA и PCMU разрешены для проксирования, и кодек G729 разрешен для транскодирования.
В SDP Offer1, полученном с транка TRUNK_1, указаны кодеки PCMA и PCMU, и т. к. в медиапрофиле FOR_TRUNK_1 отсутствуют кодеки, разрешенные для транскодирования, в SDP Offer2, который будет отправлен в TRUNK_2, кодек G729 не будет добавлен. Соответственно при вызовах из TRUNK_1 в TRUNK_2 (и в обратном направлении) возможно только проксирование медиаданных.

Если в медиапрофиле не содержится ни одного паттерна для проксирования кодеков, а указаны только кодеки, доступные для транскодирования, то при наличии одинаковых кодеков в медиапрофилях, используемых на входящем и исходящем направлениях, медиаданные будут передаваться в режиме проксирования.
Т. о. включение поддержки транскодирования для кодеков командами codec {audio | video | image} {all | <CODEC>} не означает, что передаваемые через ESBC медиаданные всегда будут транскодироваться.
Пример:
Для транков TRUNK_1 и TRUNK_2 используется один и тот же медиапрофиль FOR_TRUNKS, в котором указан только кодек PCMA, разрешенный для транскодирования, и отсутствуют паттерны кодеков для проксирования.
В SDP Offer1, полученном с транка TRUNK_1, указаны кодеки PCMA и PCMU, и т. к. в медиапрофиле FOR_TRUNKS не указан кодек PCMU (ни для проксирования, ни для транскодирования), то в SDP Offer2, который будет отправлен в TRUNK_2, кодек PCMU не будет добавлен. При получении SDP Answer2 происходит согласование кодека PCMA, и в TRUNK_1 будет отправлен SDP Answer1 с кодеком PCMA. При этом медиаданные будут передаваться в режиме проксирования, т. к. наиболее приоритетные кодеки в SDP Offer и SDP Answer совпадают.

1. Настроить только режим транскодирования кодеков PCMA <---> PCMU между направлениями.
vesbc# configure vesbc(config)# esbc #Создать медиапрофиль для транка TRUNK_1: vesbc(config-esbc)# media profile FOR_TRUNK_1 #Запретить использование всех кодеков в режиме проксирования: vesbc(config-esbc-media-profile)# no codec allow all #Включить поддержку кодека PCMA в режиме транскодирования: vesbc(config-esbc-media-profile)# codec audio PCMA vesbc(config-esbc-media-profile)# exit #Привязать медиапрофиль к транку TRUNK_1: vesbc(config-esbc)# trunk sip TRUNK_1 vesbc(config-esbc-trunk-sip)# media profile FOR_TRUNK_1 vesbc(config-esbc-trunk-sip)# exit #Создать медиапрофиль для транка TRUNK_2: vesbc(config-esbc)# media profile FOR_TRUNK_2 #Запретить использование всех кодеков в режиме проксирования: vesbc(config-esbc-media-profile)# no codec allow all #Включить поддержку кодека PCMU в режиме транскодирования: vesbc(config-esbc-media-profile)# codec audio PCMU vesbc(config-esbc-media-profile)# exit #Привязать медиапрофиль к транку TRUNK_2: vesbc(config-esbc)# trunk sip TRUNK_2 vesbc(config-esbc-trunk-sip)# media profile FOR_TRUNK_2 vesbc(config-esbc-trunk-sip)# do commit vesbc(config-esbc-trunk-sip)# do confirm |
В результате конфигурация медиапрофилей будет выглядеть следующим образом:
media profile FOR_TRUNK_1
codec audio PCMA
exit
media profile FOR_TRUNK_2
codec audio PCMU
exit |
В SDP Offer1, полученном с транка TRUNK_1, указан кодек PCMA, и т. к. в медиапрофиле FOR_TRUNK_2 указан только кодек PCMU для транскодирования, в SDP Offer2, который будет отправлен в TRUNK_2, кодек PCMA будет заменен на PCMU. Соответственно при вызовах из TRUNK_1 в TRUNK_2 (и в обратном направлении) возможно только транскодирование медиаданных.

Если в SDP Offer1, полученном с транка TRUNK_1, будут указаны любые кодеки кроме PCMA, то вызов не будут установлен, ESBC отправит на INVITE ответ 488.
2. Использование медиапрофилей для проксирования и транскодирования аудиоданных.
Для транков TRUNK_1 и TRUNK_2 используются медиапрофили, позволяющие проксировать все кодеки и транскодировать аудио G722 <---> G729 и GSM <---> G729.
Настройка медиапрофилей:
vesbc# configure vesbc(config)# esbc #Создать медиапрофиль для транка TRUNK_1: vesbc(config-esbc)# media profile FOR_TRUNK_1 #Включить поддержку кодеков G722 и GSM в режиме транскодирования: vesbc(config-esbc-media-profile)# codec audio G722 vesbc(config-esbc-media-profile)# codec audio GSM vesbc(config-esbc-media-profile)# exit #Привязать медиапрофиль к транку TRUNK_1: vesbc(config-esbc)# trunk sip TRUNK_1 vesbc(config-esbc-trunk-sip)# media profile FOR_TRUNK_1 vesbc(config-esbc-trunk-sip)# exit #Создать медиапрофиль для транка TRUNK_2: vesbc(config-esbc)# media profile FOR_TRUNK_2 #Включить поддержку кодека G729 в режиме транскодирования: vesbc(config-esbc-media-profile)# codec audio G729 vesbc(config-esbc-media-profile)# exit #Привязать медиапрофиль к транку TRUNK_2: vesbc(config-esbc)# trunk sip TRUNK_2 vesbc(config-esbc-trunk-sip)# media profile FOR_TRUNK_2 vesbc(config-esbc-trunk-sip)# do commit vesbc(config-esbc-trunk-sip)# do confirm |
В результате конфигурация медиапрофилей будет выглядеть следующим образом:
media profile FOR_TRUNK_1
codec audio GSM
codec audio G722
codec allow AMR
codec allow CLEARMODE
codec allow CN
codec allow G72
codec allow G722/ 9
codec allow G728 15
codec allow G729/ 18
codec allow GSM 3
codec allow H26
codec allow H261 31
codec allow H263 34
codec allow ILBC
codec allow L16/44100 11
codec allow L16/44100/2 10
codec allow OPUS
codec allow PCMA 8
codec allow PCMU 0
codec allow SPEEX
codec allow T38 t38
codec allow VP
codec allow telephone-event
exit
media profile FOR_TRUNK_2
codec audio G729
codec allow AMR
codec allow CLEARMODE
codec allow CN
codec allow G72
codec allow G722/ 9
codec allow G728 15
codec allow G729/ 18
codec allow GSM 3
codec allow H26
codec allow H261 31
codec allow H263 34
codec allow ILBC
codec allow L16/44100 11
codec allow L16/44100/2 10
codec allow OPUS
codec allow PCMA 8
codec allow PCMU 0
codec allow SPEEX
codec allow T38 t38
codec allow VP
codec allow telephone-event
exit |
2.1 В SDP Offer1, полученном с транка TRUNK_1, указаны кодеки PCMA, PCMU, G726 и G722. Т. к. в медиапрофиле FOR_TRUNK_1 есть кодек G722, разрешенный для транскодирования, то в SDP Offer2, который будет отправлен в TRUNK_2, будет добавлен кодек G729. Остальные кодеки будут передаваться из SDP Offer1 в SDP Offer2, т. к. на обоих медиапрофилях настроены паттерны, разрешающие проксирование этих кодеков. В SDP Answer2, полученном из TRUNK_2, указан кодек PCMU. Этот кодек будет согласован ESBC в SDP Answer1. Т. к. этот кодек был в SDP Offer1, то будет выбран режим проксирования медиаданных.

2.2 В SDP Offer1, полученном с транка TRUNK_1, указаны кодеки PCMA, PCMU, G726 и G722. Т. к. в медиапрофиле FOR_TRUNK_1 есть кодек G722, разрешенный для транскодирования, то в SDP Offer2, который будет отправлен в TRUNK_2, будет добавлен кодек G729. Остальные кодеки будут передаваться из SDP Offer1 в SDP Offer2, т. к. на обоих медиапрофилях настроены паттерны, разрешающие проксирование этих кодеков. В SDP Answer2, полученном из TRUNK_2, указан кодек G729. Т. к. этого кодека не было в SDP Offer1, то будет согласован единственный возможный кодек для TRUNK_1 — G722. Т. к. кодеки на плечах TRUNK_1 и TRUNK_2 отличаются, будет включено транскодирование медиаданных G722 <---> G729.

2.3 В SDP Offer1, полученном с транка TRUNK_1, указаны кодеки PCMA, PCMU, GSM, G726 и G722. Т. к. в медиапрофиле FOR_TRUNK_1 есть кодеки G722 и GSM, разрешенные для транскодирования, то в SDP Offer2, который будет отправлен в TRUNK_2, будет добавлен кодек G729. Остальные кодеки будут передаваться из SDP Offer1 в SDP Offer2, т. к. на обоих медиапрофилях настроены паттерны, разрешающие проксирование этих кодеков. В SDP Answer2, полученном из TRUNK_2, указан кодек G729. Т. к. этого кодека не было в SDP Offer1, то будет согласован наиболее приоритетный кодек для TRUNK_1 — GSM. Т. к. кодеки на плечах TRUNK_1 и TRUNK_2 отличаются, будет включено транскодирование медиаданных GSM <---> G729.

Функция контроля состояния разговорного тракта по наличию RTP-трафика от встречного устройства. Данный механизм, а также описанные ниже механизмы могут использоваться для предотвращения зависания разговорных сессий в случае возникновения неисправностей на сети передачи данных. Они могут использоваться в дополнение или в качестве альтернативы таймерам SIP-сессий (RFC 4028).
Контроль осуществляется следующим образом: если в течение заданного времени от встречного устройства не поступает ни одного RTP-пакета, то вызов завершается.
По умолчанию контроль выключен.
Пример настройки RTP-таймаута:
vesbc# vesbc# configure vesbc(config)# esbc #Создание медиапрофиля NEW_MEDIA_PROFILE: vesbc(config-esbc)# media profile NEW_MEDIA_PROFILE vesbc(config-esbc-media-profile)# #Включение таймера 1 мин. в медиапрофиле: vesbc(config-esbc-media-profile)# rtp timeout 1 vesbc(config-esbc-media-profile)# vesbc(config-esbc-media profile)# exit vesbc(config-esbc)# #Привязать медиапрофиль к транку NEW_TRUNK: vesbc(config-esbc)# trunk sip NEW_TRUNK vesbc(config-esbc-trunk-sip)# media profile NEW_MEDIA_PROFILE vesbc(config-esbc-trunk-sip)# #Применить и подтвердить изменения: vesbc(config-esbc-trunk-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-trunk-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
Если в вызове, который был установлен через транк NEW_TRUNK, в течение 1 минуты в ESBC не будут приходить RTP-пакеты с любой из сторон, то вызов будет принудительно завершён.
Эта функция является дополнением к функции "Таймаут ожидания RTP-пакетов" с учетом контроля состояния разговора по наличию RTP-трафика при использовании пакетов Comfort Noise в RTP-потоке.
Данный таймаут является множителем для rtp timeout. Множитель — это коэффициент, который определяет, во сколько раз значение данного таймаута больше, чем таймаут ожидания RTP-пакетов. Принимает значения из диапазона 2–30.
Контроль осуществляется следующим образом: если в течение данного времени от встречного устройства не поступает ни одного RTP-пакета и последний пакет был пакетом CN (Comfort Noise), то вызов завершается.
По умолчанию множитель не установлен.
CN-множитель будет использоваться, только если настроен таймаут ожидания RTP-пакетов. |
Пример настройки множителя:
vesbc# vesbc# configure vesbc(config)# esbc #Создание медиапрофиля NEW_MEDIA_PROFILE: vesbc(config-esbc)# media profile NEW_MEDIA_PROFILE vesbc(config-esbc-media-profile)# #Включение таймаута ожидания RTP-пакетов в 1 минуту: vesbc(config-esbc-media-profile)# rtp timeout 1 vesbc(config-esbc-media-profile)# #Установить множитель таймаута ожидания RTP-пакетов после получения Comfort Noise: vesbc(config-esbc-media-profile)# rtp timeout cn 5 vesbc(config-esbc-media-profile)# vesbc(config-esbc-media profile)# exit vesbc(config-esbc)# #Привязать медиапрофиль к транку NEW_TRUNK: vesbc(config-esbc)# trunk sip NEW_TRUNK vesbc(config-esbc-trunk-sip)# media profile NEW_MEDIA_PROFILE vesbc(config-esbc-trunk-sip)# #Применить и подтвердить изменения: vesbc(config-esbc-trunk-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-trunk-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
Если в вызове, который был установлен через транк NEW_TRUNK, в течение 1 минуты в ESBC не будут приходить RTP-пакеты с любой из сторон, а последний пакет был пакетом CN, то таймаут ожидания RTP-пакетов увеличится в 5 раз. Таким образом, если в течение 5 минут с момента получения CN-пакета не поступает ни одного RTP-пакета, то вызов будет принудительно завершён.
Функция контроля состояния разговорного тракта по наличию RTCP-трафика от встречного устройства. Таймаут принимает значения из диапазона 10–300 c. Контроль осуществляется следующим образом: если в течение заданного времени от встречного устройства не поступает ни одного RTCP-пакета, то вызов завершается.
По умолчанию контроль выключен.
Пример настройки RTCP-таймаута:
vesbc# vesbc# configure vesbc(config)# esbc #Создание медиапрофиля NEW_MEDIA_PROFILE: vesbc(config-esbc)# media profile NEW_MEDIA_PROFILE vesbc(config-esbc-media-profile)# #Включение таймаута ожидания RTCP-пакетов в 30 секунд: vesbc(config-esbc-media-profile)# rtcp timeout 30 vesbc(config-esbc-media-profile)# vesbc(config-esbc-media profile)# exit vesbc(config-esbc)# #Привязать медиапрофиль к транку NEW_TRUNK: vesbc(config-esbc)# trunk sip NEW_TRUNK vesbc(config-esbc-trunk-sip)# media profile NEW_MEDIA_PROFILE vesbc(config-esbc-trunk-sip)# #Применить и подтвердить изменения: vesbc(config-esbc-trunk-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-trunk-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
Если в вызове, который был установлен через транк NEW_TRUNK, в течение 30 секунд в ESBC не будут приходить RTСP-пакеты с любой из сторон, то вызов будет принудительно завершён.
Рекомендуется настраивать таймауты ожидания RTP и RTCP-пакетов совместно. |
Отсутствие RTP-пакетов не является явным признаком неисправности на сети передачи данных, т. к. разговорный канал может быть деактивирован временно какой-либо из сторон, например, через согласование SDP a=inactive. При этом пакеты RTCP будут передаваться сторонами в этом состоянии.
При использовании только RTCP-таймаута, ESBC не анализирует наличие RTP-пакетов, и в случае, когда стороны не используют RTCP, сессия завершится спустя время, равное таймауту ожидания RTCP-пакетов. Поэтому, если заранее неизвестно, поддерживает ли встречная сторона RTCP, необходимо настроить не только RTCP, но и RTP-таймаут.
Логика совместной работы таймеров
Если время потери RTP-пакетов больше, чем RTP-таймаут, то проверяется RTCP-таймаут. Если RTCP-таймаут не настроен или время ожидания RTCP-пакетов истекло, то сессия завершается, иначе сессия останется активной, пока не истечёт RTCP-таймаут. Если в это время придёт RTP-пакет, то таймаут ожидания RTP перезапустится. Таким же образом происходит проверка RTP-таймаута, если истекает RTCP-таймаут.
Пример совместной настройки RTP и RTCP-таймаута:
vesbc# vesbc# configure vesbc(config)# esbc #Создание медиапрофиля NEW_MEDIA_PROFILE: vesbc(config-esbc)# media profile NEW_MEDIA_PROFILE vesbc(config-esbc-media-profile)# #Включение таймаута ожидания RTP-пакетов в 1 минуту: vesbc(config-esbc-media-profile)# rtp timeout 1 vesbc(config-esbc-media-profile)# #Включение таймаута ожидания RTCP-пакетов в 120 секунд: vesbc(config-esbc-media-profile)# rtcp timeout 120 vesbc(config-esbc-media-profile)# vesbc(config-esbc-media profile)# exit vesbc(config-esbc)# #Привязать медиапрофиль к транку NEW_TRUNK: vesbc(config-esbc)# trunk sip NEW_TRUNK vesbc(config-esbc-trunk-sip)# media profile NEW_MEDIA_PROFILE vesbc(config-esbc-trunk-sip)# #Применить и подтвердить изменения: vesbc(config-esbc-trunk-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-trunk-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
Если в вызове, который был установлен через транк NEW_TRUNK, в течение 1 минуты не будут приходить RTP-пакеты, а таймаут ожидания RTCP-пакетов ещё не истёк, то сессия не завершится. Таким образом, соединение будет поддерживаться, пока встречная сторона отправляет RTCP-пакеты. Если за это время придёт RTP-пакет, таймаут ожидания RTP-пакетов перезапустится. Иначе, если RTCP-пакеты также перестанут приходить, и ни один RTP-пакет так и не поступит, сессия завершится через 120 секунд с момента последнего пришедшего RTCP-пакета.
Опция локальной обработки позволяет ESBC самостоятельно генерировать RTCP-пакеты в сессиях, где одно из плеч не поддерживает RTCP.
По умолчанию RTCP-пакеты не генерируются, а RTCP-пакеты, полученные на одном из плеч вызова, пересылаются на второе плечо. В режиме локальной обработки RTCP-пакеты генерируются и отправляются на оба плеча сессии, а полученные пакеты обрабатываются.
Локальная обработка RTCP включается, если хотя бы на одном плече привязан медиапрофиль с включенной опцией локальной обработки.
Интервал посылки RTCP-пакетов — это период времени в секундах, через который устройство отправляет контрольные пакеты по протоколу RTCP, принимает значения в диапазоне 1–255 секунд. По умолчанию — 5 сек.
Пример настройки локальной обработки RTCP:
vesbc# vesbc# configure vesbc(config)# esbc #Создание медиапрофиля NEW_MEDIA_PROFILE: vesbc(config-esbc)# media profile NEW_MEDIA_PROFILE vesbc(config-esbc-media-profile)# #Включение опции локальной обработки RTCP: vesbc(config-esbc-media-profile)# rtcp local enable vesbc(config-esbc-media-profile)# #Настройка интервала посылки RTCP-пакетов в 10 секунд: vesbc(config-esbc-media-profile)# rtcp local interval 10 vesbc(config-esbc-media-profile)# vesbc(config-esbc-media profile)# exit vesbc(config-esbc)# #Привязать медиапрофиль к транку NEW_TRUNK: vesbc(config-esbc)# trunk sip NEW_TRUNK vesbc(config-esbc-trunk-sip)# media profile NEW_MEDIA_PROFILE vesbc(config-esbc-trunk-sip)# #Применить и подтвердить изменения: vesbc(config-esbc-trunk-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-trunk-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
Во время вызова, который был установлен через NEW_TRUNK, при получении RTCP-пакета с любой из сторон, каждые 10 секунд RTCP-пакеты будут генерироваться и отправляться на оба плеча сессии.
SRTP (Secure Real-time Transport Protocol) — это расширенная версия протокола RTP с набором защитных механизмов. Протокол был опубликован организацией IETF в стандарте RFC 3711. SRTP обеспечивает конфиденциальность за счет шифрования RTP-нагрузки. Для шифрования медиапотока SRTP стандартизирует использование только единственного шифра — AES, который может использоваться в двух режимах:
SRTP использует функцию формирования ключа для создания ключей на основе мастер-ключа. Протокол управления ключами создает все ключи в сессии с помощью мастер-ключа. За счет того, что у каждой сессии свой уникальный ключ, все сессии защищены. Поэтому, если одна сессия была скомпрометирована, то остальные по-прежнему под защитой.
В конфигурации доступны 2 метода обмена ключами:
и 3 режима использования SRTP:
Если выбран режим mandatory и включены оба метода, то на втором плече будет выбран DTLS-SRTP, как более приоритетный.
По умолчанию поддержка SRTP выключена. |
По умолчанию при использовании DTLS-SRTP используются сертификаты, сгенерированные автоматически. Для использования сертификатов, загруженных пользователем, необходимо в медиапрофиле указать криптопрофиль с необходимыми сертификатами командой crypto profile. Подробное описание криптопрофилей приведено в разделе Настройка криптопрофилей.
Пример использования SRTP
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. На TRUNK_OUT включаем обязательное использование SRTP с методом обмена ключами — SDES.
vesbc# vesbc# configure vesbc(config)# esbc #Создание медиапрофиля NEW_MEDIA_PROFILE: vesbc(config-esbc)# media profile NEW_MEDIA_PROFILE vesbc(config-esbc-media profile)# #Настройка SRTP (включили обязательный режим использования, метод обмена ключами — SDES): vesbc(config-esbc-media-profile)# srtp keying dtls-srtp Enable DTLS-SRTP keying method sdes Enable SDES keying method vesbc(config-esbc-media-profile)# srtp keying sdes vesbc(config-esbc-media-profile)# srtp mode disable SRTP is disabled mandatory SRTP is mandatory optional SRTP is optional vesbc(config-esbc-media-profile)# srtp mode mandatory vesbc(config-esbc-media-profile)# vesbc(config-esbc-media-profile)# exit vesbc(config-esbc)# #Привязать медиапрофиль к транку TRUNK_OUT: vesbc(config-esbc)# trunk sip TRUNK_OUT vesbc(config-esbc-trunk-sip)# media profile NEW_MEDIA_PROFILE vesbc(config-esbc-trunk-sip)# #Применить и подтвердить изменения: vesbc(config-esbc-trunk-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-trunk-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
C TRUNK_IN приходит INVITE с SDP offer:
Session Description Protocol
Session Description Protocol Version (v): 0
Owner/Creator, Session Id (o): 100 61 74 IN IP4 10.25.72.54
Session Name (s): Talk
Connection Information (c): IN IP4 10.25.72.54
Time Description, active time (t): 0 0
Session Attribute (a): rtcp-xr:rcvr-rtt=all:10000 stat-summary=loss,dup,jitt,TTL voip-metrics
Session Attribute (a): record:off
Media Description, name and address (m): audio 7078 RTP/AVP 96 97 98 0 8 18 101 99 100
Media Attribute (a): rtpmap:96 opus/48000/2
Media Attribute (a): fmtp:96 useinbandfec=1
Media Attribute (a): rtpmap:97 speex/16000
Media Attribute (a): fmtp:97 vbr=on
Media Attribute (a): rtpmap:98 speex/8000
Media Attribute (a): fmtp:98 vbr=on
Media Attribute (a): fmtp:18 annexb=yes
Media Attribute (a): rtpmap:101 telephone-event/48000
Media Attribute (a): rtpmap:99 telephone-event/16000
Media Attribute (a): rtpmap:100 telephone-event/8000
Media Attribute (a): rtcp-fb:* trr-int 5000
Media Attribute (a): rtcp-fb:* ccm tmmbr
[Generated Call-ID: l0XaoKkqav] |
На второе плечо (TRUNK_OUT) пересылаем SDP offer c ключами:
Session Description Protocol
Session Description Protocol Version (v): 0
Owner/Creator, Session Id (o): 100 3932018917 3932018917 IN IP4 192.168.23.199
Session Name (s): Talk
Connection Information (c): IN IP4 192.168.23.199
Time Description, active time (t): 0 0
Session Attribute (a): rtcp-xr:rcvr-rtt=all:10000 stat-summary=loss,dup,jitt,TTL voip-metrics
Session Attribute (a): record:off
Media Description, name and address (m): audio 8064 RTP/SAVP 96 97 98 0 8 18 101 99 100
Media Attribute (a): rtpmap:96 opus/48000/2
Media Attribute (a): fmtp:96 useinbandfec=1
Media Attribute (a): rtpmap:97 speex/16000
Media Attribute (a): fmtp:97 vbr=on
Media Attribute (a): rtpmap:98 speex/8000
Media Attribute (a): fmtp:98 vbr=on
Media Attribute (a): fmtp:18 annexb=yes
Media Attribute (a): rtpmap:101 telephone-event/48000
Media Attribute (a): rtpmap:99 telephone-event/16000
Media Attribute (a): rtpmap:100 telephone-event/8000
Media Attribute (a): rtcp-fb:* trr-int 5000
Media Attribute (a): rtcp-fb:* ccm tmmbr
Media Attribute (a): crypto:1 AES_256_CM_HMAC_SHA1_80 inline:FGdOolKfBlrQzUIedHcIqs9uauWEnUbqxXpop9PaI1dPIHVnO/vdb7JJHRLBLw==
Media Attribute (a): crypto:2 AES_256_CM_HMAC_SHA1_32 inline:Galc9UfOqBFNmr3ICc3Fiuc3HgEXlj+p1dRw85LavzjWR1sGZUr1nsLQjfaTQA==
Media Attribute (a): crypto:3 AES_CM_128_HMAC_SHA1_80 inline:jEjWFKpqdf6d94g/ddSjj1i08dEWQA1tTI75Hqx3
Media Attribute (a): crypto:4 AES_CM_128_HMAC_SHA1_32 inline:uFYI2UDA/+woJJY4fWljfoxRROffXNtEO81bBnHJ
[Generated Call-ID: 503d40e930910767a2dd95f88b483189] |
Контроль источника RTP позволяет принимать медиатрафик только с IP-адреса и порта, указанного в SDP встречной стороны, повышая безопасность взаимодействия при использовании публичной сети передачи данных.
Включение/выключение режима осуществляется командами rtp source-verification и no rtp source-verification соответственно. При отключенной проверке IP-адрес и порт источника RTP не проверяется.
По умолчанию опция включена.
При использовании опции "Контроль источника RTP" совместно с включенной опцией "nat comedia" в транке или абонентском интерфейсе, RTP-трафик будет передаваться на IP-адрес и порт из входящего потока. |
Picture Fast Update (PFU) — это механизм быстрого восстановления видеоизображения, за счет обновления поврежденных кадров, обеспечивая минимальные задержки и стабильное качество видео даже при потере пакетов.
Включение/выключение режима осуществляется командами rfc5168 enable и no rfc5168 enable соответственно.
По умолчанию опция выключена.
При выключенной поддержке и получении INFO с XML, в котором есть PFU, ESBC отправляет ответ 200 ОК и INFO с SDP, в котором содержится "Unsupported picture fast update".
Примеры
1. Поддержка RFC5168 отключена
Схема:

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, маршрутизируется через TRUNK_OUT. На обоих транках в настройках медиапрофиля поддержка использования RFC5168 отключена.
vesbc# vesbc# configure vesbc(config)# esbc #Создать медиапрофиль MEDIA_PROFILE_TRUNK_IN (по умолчанию поддержка rfc5168 отключена): vesbc(config-esbc)# media profile MEDIA_PROFILE_TRUNK_IN vesbc(config-esbc-media-profile)# exit vesbc(config-esbc)# #Создать медиапрофиль MEDIA_PROFILE_TRUNK_OUT (по умолчанию поддержка rfc5168 отключена): vesbc(config-esbc)# media profile MEDIA_PROFILE_TRUNK_OUT vesbc(config-esbc-media-profile)# exit vesbc(config-esbc)# #Привязать медиапрофиль MEDIA_PROFILE_TRUNK_IN к транку TRUNK_IN: vesbc(config-esbc)# trunk sip TRUNK_OUT vesbc(config-esbc-trunk-sip)# media profile MEDIA_PROFILE_TRUNK_IN vesbc(config-esbc-trunk-sip)# #Привязать медиапрофиль MEDIA_PROFILE_TRUNK_OUT к транку TRUNK_OUT: vesbc(config-esbc)# trunk sip TRUNK_OUT vesbc(config-esbc-trunk-sip)# media profile MEDIA_PROFILE_TRUNK_OUT vesbc(config-esbc-trunk-sip)# #Применить и подтвердить изменения: vesbc(config-esbc-trunk-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-trunk-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
В TRUNK_IN приходит сообщение INFO с XML:
eXtensible Markup Language
<?xml
version="1.0"
encoding="utf-8"
?>
<media_control>
<vc_primitive>
<to_encoder>
<picture_fast_update/>
</to_encoder>
</vc_primitive>
</media_control> |
Т. к. поддержка RFC5168 отключена, ESBC ответит 200 ОК и отправит сообщение INFO с XML, в котором содержится "Unsupported picture fast update":
eXtensible Markup Language
<?xml
version="1.0"
encoding="utf-8"
?>
<media_control>
<general_error>
Unsupported picture fast update
</general_error>
</media_control> |
2. Поддержка RFC5168 включена. При проксировании видео и получении сообщения INFO с XML, в котором есть PFU, ESBC передает сообщение INFO на второе плечо
Схема:

В конфигурации есть два транка, настроена маршрутизация. На обоих транках используется один видеокодек (например, VP8). Вызов, который приходит из TRUNK_IN, маршрутизируется через TRUNK_OUT. На обоих транках в настройках медиапрофиля указываем, что поддержка использования RFC5168 включена.
vesbc# vesbc# configure vesbc(config)# esbc #Создание медиапрофиля MEDIA_PROFILE_TRUNK_IN с включенной поддержкой RFC5168: vesbc(config-esbc)# media profile MEDIA_PROFILE_TRUNK_IN vesbc(config-esbc-media-profile)# rfc5168 enable vesbc(config-esbc-media-profile)# exit vesbc(config-esbc)# #Создание медиапрофиля MEDIA_PROFILE_TRUNK_OUT с включенной поддержкой RFC5168: vesbc(config-esbc)# media profile MEDIA_PROFILE_TRUNK_OUT vesbc(config-esbc-media-profile)# rfc5168 enable vesbc(config-esbc-media-profile)# exit vesbc(config-esbc)# #Привязать медиапрофиль к транку TRUNK_IN: vesbc(config-esbc)# trunk sip TRUNK_IN vesbc(config-esbc-trunk-sip)# media profile MEDIA_PROFILE_TRUNK_IN vesbc(config-esbc-trunk-sip)# #Привязать медиапрофиль к транку TRUNK_OUT: vesbc(config-esbc)# trunk sip TRUNK_OUT vesbc(config-esbc-trunk-sip)# media profile MEDIA_PROFILE_TRUNK_OUT vesbc(config-esbc-trunk-sip)# #Применить и подтвердить изменения: vesbc(config-esbc-trunk-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-trunk-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
C TRUNK_IN приходит сообщение INFO с XML:
eXtensible Markup Language
<?xml
version="1.0"
encoding="utf-8"
?>
<media_control>
<vc_primitive>
<to_encoder>
<picture_fast_update/>
</to_encoder>
</vc_primitive>
</media_control> |
Т. к. поддержка RFC5168 включена, ESBC прокидывает сообщение INFO на второе плечо (в TRUNK_OUT):
eXtensible Markup Language
<?xml
version="1.0"
encoding="utf-8"
?>
<media_control>
<vc_primitive>
<to_encoder>
<picture_fast_update/>
</to_encoder>
</vc_primitive>
</media_control> |
Встречная сторона (TRUNK_OUT) отвечает, поддерживает ли она INFO с XML PFU или нет.
3. Поддержка RFC5168 включена. При транскодировании видео и получении сообщения INFO с XML, в котором есть PFU, ESBC самостоятельно обрабатывает сообщение INFO
Схема:

В конфигурации есть два транка, настроена маршрутизация. На транках используются разные видеокодеки, т. е. ESBC работает в режиме транскодирования видео (в примере TRUNK_IN использует VP8, а TRUNK_OUT H264). Вызов, который приходит из TRUNK_IN, маршрутизируется через TRUNK_OUT. На обоих транках в настройках медиапрофиля указываем, что поддержка использования RFC5168 включена.
vesbc# vesbc# configure vesbc(config)# esbc #Создание медиапрофиля MEDIA_PROFILE_TRUNK_IN с включенной поддержкой RFC5168: vesbc(config-esbc)# media profile MEDIA_PROFILE_TRUNK_IN vesbc(config-esbc-media-profile)# codec video VP8 vesbc(config-esbc-media-profile)# no codec allow H26 vesbc(config-esbc-media-profile)# no codec allow H261 31 vesbc(config-esbc-media-profile)# no codec allow H263 34 vesbc(config-esbc-media-profile)# rfc5168 enable vesbc(config-esbc-media-profile)# exit vesbc(config-esbc)# #Создание медиапрофиля MEDIA_PROFILE_TRUNK_OUT с включенной поддержкой RFC5168: vesbc(config-esbc)# media profile MEDIA_PROFILE_TRUNK_OUT vesbc(config-esbc-media-profile)# codec video H264 vesbc(config-esbc-media-profile)# no codec allow VP vesbc(config-esbc-media-profile)# rfc5168 enable vesbc(config-esbc-media-profile)# exit vesbc(config-esbc)# #Привязать медиапрофиль к транку TRUNK_IN: vesbc(config-esbc)# trunk sip TRUNK_IN vesbc(config-esbc-trunk-sip)# media profile MEDIA_PROFILE_TRUNK_IN vesbc(config-esbc-trunk-sip)# #Привязать медиапрофиль к транку TRUNK_OUT: vesbc(config-esbc)# trunk sip TRUNK_OUT vesbc(config-esbc-trunk-sip)# media profile MEDIA_PROFILE_TRUNK_OUT vesbc(config-esbc-trunk-sip)# #Применить и подтвердить изменения: vesbc(config-esbc-trunk-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-trunk-sip)# do confirm Configuration has been confirmed. Commit timer canceled.. |
C TRUNK_IN приходит сообщение INFO с XML:
eXtensible Markup Language
<?xml
version="1.0"
encoding="utf-8"
?>
<media_control>
<vc_primitive>
<to_encoder>
<picture_fast_update/>
</to_encoder>
</vc_primitive>
</media_control> |
Т. к. используется транскодирование, то ESBC самостоятельно обрабатывает INFO отправляет 200 ОК.
В данном разделе описаны методы защиты и примеры настройки ESBC для защиты от различных SIP-атак.
Для более надежной защиты рекомендуется использовать дополнительные механизмы защиты от прочих сетевых атак, описанные в разделе Рекомендации по безопасной настройке.
Профили безопасности используются для управления механизмом защиты от SIP-атак. Использование профилей безопасности позволяет гибко управлять уровнями защиты для каждого направления.
Необходимый уровень защиты обеспечивается следующими настройками профиля:
Профиль безопасности может использоваться в транках, транк-группах и абонентских интерфейсах.
Для обеспечения единой политики безопасности может быть использован один профиль для всех транков и один профиль для всех абонентских интерфейсов. Это может быть как один и тот же профиль безопасности, так и разные. Эти профили указываются в общих настройках ESBC.
Если для транка и транковой группы, в которую входит этот транк, используются разные профили безопасности, то будет применяться профиль, указанный в настройках транка. Если для транка/абонентского интерфейса и в общих настройках (для всех транков/абонентских интерфейсов) используются разные профили безопасности, то будет применяться профиль, указанный в настройках транка/абонентского интерфейса. |
Описание всех команд для настройки профилей безопасности приведено в разделе Настройки профиля безопасности.
Модуль занимается анализом возникающих ошибок для дальнейшей блокировки источников "подозрительного SIP-трафика". При возникновении ошибки в модуль отправляется информация о типе ошибки и об источнике. При накоплении достаточного количества ошибок источник блокируется.
Виды ошибок:
Лимит количества ошибок зависит от нескольких факторов:
При добавлении адреса в чёрный список указывается причина блокировки. Чёрный список можно просмотреть в CLI командой show esbc black-list или в WEB на странице Мониторинг → Списки доступа → Чёрный список.
Причины блокировки:
ACCOUNT HACKING — превышен лимит по количеству ошибок с одинаковым AOR/User-Agent;
PACKET FLOODING — превышен лимит по количеству ошибок с одного IP-адреса;
BURST ERRORS — превышен глобальный лимит по количеству ошибок в секунду;
GLOBAL RPS LIMIT — превышен глобальный лимит по количеству заблокированных запросов в секунду;
IP RPS LIMIT — превышен лимит по количеству заблокированных запросов в секунду c одного IP-адреса;
MONITORED ADDRESSES LIMIT — превышено максимальное количество IP-адресов с ошибками;
DISTRIBUTED SPAM — превышено максимальное количество IP-адресов с одинаковым заблокированным атрибутом (AOR, User-Agent);
BLOCKED ATTRIBUTES LIMIT — превышено максимальное количество заблокированных атрибутов (AOR, User-Agent);
IP BLOCKED ATTRIBUTES LIMIT — превышено максимальное количество заблокированных атрибутов (AOR, User-Agent) с одного IP-адреса.
ESBC поддерживает создание флуд-фильтров для механизма конфигурируемой защиты от SIP-flood, а также для фильтрации клиентских приложений. Фильтр применяется ко всему SIP-сообщению (включая тело — SDP, XML и т. д.).
В настройках фильтра можно указать до 64 масок/паттернов, по которым происходит поиск. В случае нахождения сообщение определяется как флуд и отбрасывается.
К профилю безопасности можно привязать до 8 флуд-фильтров.
При создании паттерна можно использовать регулярные выражения PCRE.
Пример настройки флуд-фильтров
#Создание абонентских интерфейсов: vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# user-interface sip UI_1 vesbc(config-esbc-user-interface-sip)# sip transport TRANSPORT_UI_1 vesbc(config-esbc-user-interface-sip)# media resource 0 MEDIA_UI_1 vesbc(config-esbc-user-interface-sip)# route-table TO_SSW vesbc(config-esbc-user-interface-sip)# exit vesbc(config-esbc)# user-interface sip UI_2 vesbc(config-esbc-user-interface-sip)# sip transport TRANSPORT_UI_2 vesbc(config-esbc-user-interface-sip)# media resource 0 MEDIA_UI_2 vesbc(config-esbc-user-interface-sip)# route-table TO_SSW vesbc(config-esbc-user-interface-sip)# exit vesbc(config-esbc)# user-interface sip UI_3 vesbc(config-esbc-user-interface-sip)# sip transport TRANSPORT_UI_3 vesbc(config-esbc-user-interface-sip)# media resource 0 MEDIA_UI_3 vesbc(config-esbc-user-interface-sip)# route-table TO_SSW vesbc(config-esbc-user-interface-sip)# exit #Создание флуд-фильтра: vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# flood filter FLOOD_FILTER vesbc(config-esbc-flood-filter)# pattern 0 7543546 vesbc(config-esbc-flood-filter)# pattern 1 flood vesbc(config-esbc-flood-filter)# exit #Привязка флуд-фильтра к профилю безопасности: vesbc(config-esbc)# security profile SECURITY_PROFILE vesbc(config-esbc-security-profile)# flood filter 0 FLOOD_FILTER vesbc(config-esbc-security-profile)# exit #Привязка профиля безопасности с флуд-фильтром ко всем абонентским интерфейсам: vesbc(config-esbc)# general vesbc(config-esbc-general)# security profile user-interface SECURITY_PROFILE #Применение и подтверждение изменений: vesbc(config-esbc-general)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-general)# do confirm Configuration has been confirmed. Commit timer canceled. |
После применения изменений все входящие инициирующие запросы с абонентских интерфейсов UI_1, UI_2, UI_3 будут проверяться на наличие подстрок "7543546" и "flood". Если хотя бы одна подстрока будет найдена в сообщении, то оно отбросится, а в модуль fail2ban отправится уведомление о срабатывании флуд-фильтра. При накоплении достаточного количества ошибок источник блокируется.
Для того чтобы фильтр применялся ко всем сообщениям, а не только к инициирующим запросам, необходимо включить опцию apply-to-created. |
При помощи флуд-фильтров можно реализовать фильтрацию клиентских приложений, реализуется это добавлением паттерна следующего вида:
User-Agent:.*потенциально вредоносное клиентское приложение.* |
В конфигурации флуд-фильтра есть команда, которая автоматически добавляет в конфигурацию фильтра 18 паттернов с часто используемыми вредоносными клиентскими приложениями.
Соответствие запрещенных User-Agent и создаваемым дефолтным паттерном представлено в таблице ниже.
| Запрещенный User-Agent | Создаваемый дефолтный паттерн |
|---|---|
scan | User-Agent:.*scan.* |
| crack | User-Agent:.*crack.* |
| flood | User-Agent:.*flood.* |
| kill | User-Agent:.*kill.* |
| sipcli | User-Agent:.*sipcli.* |
sipv sipvicious | User-Agent:.*sipv.* |
| sipsak | User-Agent:.*sipsak.* |
| sundayddr | User-Agent:.*sundayaddr.* |
| iWar | User-Agent:.*iWar.* |
| SIVuS | User-Agent:.*SIVuS.* |
| Gulp | User-Agent:.*Gulp.* |
| smap | User-Agent:.*smap.* |
friendly-request | User-Agent:.*friendly-request.* |
VaxIPUserAgent VaxSIPUserAgent | User-Agent:.*VaxS{0,1}IPUserAgent.* |
| siparmyknife | User-Agent:.*siparmyknife.* |
| Test Agent | User-Agent:.*Test Agent.* |
| SIPBomber | User-Agent:.*SIPBomber.* |
| Siprogue | User-Agent:.*Siprogue.* |
Если в настройках фильтра недостаточно незаполненных паттернов для создания всех default patterns, то они не создадутся. |
По умолчанию при превышении лимита по ошибкам блокируется только адрес источника вредоносного трафика, в конфигурации профиля безопасности можно включить блокировку по AOR из заголовка From и блокировку по значению заголовка User-Agent.
При использовании одного и того же атрибута (AOR, User-Agent, IP-адрес) источником вредоносного трафика раньше всего сработает блокировка по AOR, потом по IP-адресу, потом по User-Agent. Из-за этого при ошибках с одинаковым AOR и IP-адресом может оказаться заблокированным только AOR, или при ошибках с одинаковым IP и User-Agent может оказаться заблокированным только IP-адрес.
Пример включения блокировки по AOR:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# security profile SECURITY_PROFILE #Сбор ошибок по AOR: vesbc(config-esbc-security-profile)# check aor vesbc(config-esbc-security-profile)# exit #Привязка профиля безопасности к абонентскому интерфейсу: vesbc(config-esbc)# user-interface sip ABONENTS vesbc(config-esbc-user-interface-sip)# security profile SECURITY_PROFILE #Применение и подтверждение изменений: vesbc(config-esbc-user-interface-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-user-interface-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
Пример блокировки:
С адреса 192.168.80.134 через абонентский интерфейс приходят сообщения INVITE с AOR 123@anonymous.invalid, вызовы без регистрации на интерфейсе запрещены, поэтому эти запросы отбиваются 403 Forbidden.
Если в профиле безопасности, привязанному к абонентскому интерфейсу, отключена блокировка по AOR, то через определенное количество запросов заблокируется только IP-адрес, и запросы с него больше обрабатываться не будут.
IP black-list: |
Если к абонентскому интерфейсу привязан профиль безопасности с включенной блокировкой по AOR, то через какое-то время в чёрный список добавится AOR.
Все запросы с любого адреса, в котором будет заблокированный AOR во From, обрабатываться не будут.
AOR black-list: |
Блокировка по AOR срабатывает раньше, чем блокировка по адресу, поэтому адрес не успеет попасть в черный список.
Пример включения блокировки по User-Agent:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# security profile SECURITY_PROFILE #Сбор ошибок по User-Agent: vesbc(config-esbc-security-profile)# check user-agent vesbc(config-esbc-security-profile)# exit #Привязка профиля безопасности к абонентскому интерфейсу: vesbc(config-esbc)# user-interface sip ABONENTS vesbc(config-esbc-user-interface-sip)# security profile SECURITY_PROFILE #Применение и подтверждение изменений: vesbc(config-esbc-user-interface-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-user-interface-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
Пример блокировки:
С нескольких адресов 192.168.80.13x через абонентский интерфейс приходят сообщения INVITE с User-Agent: sipflood, вызовы без регистрации на интерфейсе запрещены, поэтому эти запросы отбиваются 403 Forbidden.
Если в профиле безопасности, привязанному к абонентскому интерфейсу, отключена блокировка по User-Agent, то через определенное количество запросов заблокируются только IP-адреса, и запросы с них больше обрабатываться не будут:
IP black-list: |
Если к абонентскому интерфейсу привязан профиль безопасности с включенной блокировкой по User-Agent, то через какое-то время в чёрный список помимо IP-адресов добавится ещё и User-Agent.
Все запросы с любого адреса, в котором будет заблокированный User-Agent, обрабатываться не будут:
IP black-list: |
Данная опция позволяет объединять ошибки по IP-адресу.
Поведение по умолчанию – опция выключена, ошибки для каждого AOR/User-Agent считаются отдельно, блокируются при большом количестве ошибок с отдельного AOR/User-Agent.
При включенной опции, если ошибки имеют разный AOR/User-Agent, но одинаковый IP-адрес, то при блокировке адреса заблокируются все связанные AOR/User-Agent.
Настройка обеспечивает лучшую защиту от распределенных атак, но если много разных AOR/UA используют одинаковый IP-адрес, то могут быть ложные срабатывания. |
Объединение ошибок работает, только если в профиле безопасности включена блокировка по AOR или User-Agent. |
Пример включения объединения ошибок по IP-адресу:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# security profile SECURITY_PROFILE #Сбор ошибок по AOR: vesbc(config-esbc-security-profile)# check user-agent #Объединение ошибок по адресу: vesbc(config-esbc-security-profile)# errors aggregation vesbc(config-esbc-security-profile)# exit #Привязка профиля безопасности к абонентскому интерфейсу: vesbc(config-esbc)# user-interface sip ABONENTS vesbc(config-esbc-user-interface-sip)# security profile SECURITY_PROFILE #Применение и подтверждение изменений: vesbc(config-esbc-user-interface-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-user-interface-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
Пример блокировки:
С адреса 192.168.80.133 через абонентский интерфейс приходят сообщения INVITE с разными AOR, вызовы без регистрации на интерфейсе запрещены, поэтому эти запросы отбиваются 403 Forbidden.
Если в профиле безопасности, привязанному к абонентскому интерфейсу, отключено объединение ошибок по адресу, то через определенное количество запросов заблокируется только IP-адрес, и запросы с него больше обрабатываться не будут:
IP black-list: |
Если к абонентскому интерфейсу привязан профиль безопасности, в котором включено объединение ошибок по адресу, то через какое-то время в чёрный список помимо IP-адреса добавятся все связанные с этим адресом AOR.
Все запросы с любого адреса, в котором будут заблокированные AOR во From, обрабатываться не будут.

Опция проверки IP-адреса источника SIP-сообщения позволяет защититься от SIP-spoofing атак.
IP-адрес и порт, с которого поступает SIP-сообщение от абонента, сравнивается с IP-адресом и портом, с которого ранее регистрировался этот абонент. Если абонент неизвестен или запрос пришёл с неизвестного направления, то запрос игнорируется, а в модуль fail2ban отправляется оповещение.
Если в настройках абонентского интерфейса разрешены вызовы без регистрации, то создание сессии для неизвестного абонента разрешено. Если абонент зарегистрирован, то при получении SIP-сообщения с IP-адреса или порта, отличного от адреса и порта при регистрации, такое сообщение не будет обрабатываться. |
Проверка работает на все запросы вне созданных сессий, если запрос пришёл на абонентский интерфейс и если запрос не является запросом регистрации.
В рамках созданной сессии адрес и порт, с которого пришёл запрос/ответ, сравнивается с адресом и портом источника инициирующего запроса. Если они не совпадают, то запрос/ответ игнорируется, а в модуль fail2ban отправляется оповещение. Сессия при этом не завершается.
При накоплении достаточного количества ошибок источник блокируется.
Поведение по умолчанию – опция выключена.
Пример включения проверки IP-адреса источника SIP-сообщения:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# security profile SECURITY_PROFILE #Включение проверки адреса источника SIP-сообщения: vesbc(config-esbc-security-profile)# check src-address vesbc(config-esbc-security-profile)# exit #Привязка профиля безопасности к абонентскому интерфейсу: vesbc(config-esbc)# user-interface sip ABONENTS vesbc(config-esbc-user-interface-sip)# security profile SECURITY_PROFILE #Применение и подтверждение изменений: vesbc(config-esbc-user-interface-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-user-interface-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
Примеры блокировки
1. С IP-адреса 192.168.23.242 и порта 5060 через абонентский интерфейс регистрируется абонент с AOR 123@domain.local, вызовы без регистрации на интерфейсе запрещены. Если на абонентский интерфейс придёт сообщение INVITE с AOR 123@domain.local, но с другого адреса или порта, например, с 192.168.23.242:5075, то данный запрос будет игнорирован, а в модуль fail2ban отправится оповещение.
2. С IP-адреса 192.168.23.242 и порта 5060 через абонентский интерфейс приходит сообщение INVITE с AOR 123@domain.local, вызов устанавливается. В профиле безопасности, привязанному к абонентскому интерфейсу, включена проверка адреса источника SIP-сообщения. Если в рамках сессии придёт запрос BYE с другого адреса или порта, например, с 192.168.80.35:5060, то данный запрос будет игнорирован, сессия не завершится, а IP-адрес 192.168.80.35 через определенное количество запросов будет заблокирован.
Временные периоды используются в случае блокировки объектов с целью гибкой настройки защиты от SIP-атак. Для этого в общих настройках реализованы конфигурации:
По умолчанию время блокировки составляет 1440 минут, время прощения — 60 минут, время хранения ошибок — 3600 секунд. |
Описание всех команд выше приведено в разделе Общие настройки ESBC.
Пример:
vesbc# vesbc# configure vesbc(config)# esbc #Переход в общие настройки: vesbc(config-esbc)# general vesbc(config-esbc-general)# #Изменение времени блокировки адресов на 2880 минут (2 дня): vesbc(config-esbc-general)# security block-timeout 2880 #Изменение времени блокировки атрибутов на 600 минут (10 часов): vesbc(config-esbc-general)# security forgive-time 600 #Изменение времени хранения ошибок на 7200 секунд (2 часа): vesbc(config-esbc-general)# security errors-window 7200 #Применение и подтверждение изменений: vesbc(config-esbc-general)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-general)# do confirm Configuration has been confirmed. Commit timer canceled. |
Пример блокировки адреса:
При получении невалидных сообщений с адреса 192.168.80.26 эти запросы отбиваются на втором плече 403 Forbidden.
При достижении определенного количества неудачных запросов этот адрес добавится в черный список с временем блокировки, которое было настроено в общих настройках.
vesbc#
vesbc# configure
vesbc(config)# esbc
#Переход в общие настройки:
vesbc(config-esbc)# general
vesbc(config-esbc-general)#
#Изменение времени блокировки адресов на 2880 минут (2 дня):
vesbc(config-esbc-general)# security block-timeout 2880
#Применение и подтверждение изменений:
vesbc(config-esbc-general)# do commit
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-general)# do confirm
Configuration has been confirmed. Commit timer canceled.
Происходит блокировка AOR 22222@192.168.80.26
vesbc# show esbc black-list ip
IP black-list:
----------------------------------------------------------------------------------------------
IP address Ban reason AOR AOR Blocking Time of blocking
error timeout
count in minutes
-------------- ------------ --------------------- ------ ---------- -------------------
192.168.80.26 IP RPS LIMIT 22222@192.168.80.26 40 2880 2025-08-05 13:04:19 |
Пример блокировки атрибута:
При получении невалидных сообщений с AOR 123@test.block эти запросы отбиваются на втором плече 403 Forbidden.
Если в привязанном профиле безопасности включен сбор ошибок по AOR, то при достижении определенного количества неудачных запросов AOR добавится в черный список с временем блокировки, которое было настроено в общих настройках.
vesbc#
vesbc# configure
vesbc(config)# esbc
#Переход в общие настройки:
vesbc(config-esbc)# general
vesbc(config-esbc-general)#
#Изменение времени блокировки атрибутов на 600 минут (10 часов):
vesbc(config-esbc-general)# security forgive-time 600
#Применение и подтверждение изменений:
vesbc(config-esbc-general)# do commit
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-general)# do confirm
Configuration has been confirmed. Commit timer canceled.
Происходит блокировка AOR 22222@192.168.80.26
vesbc# show esbc black-list aor
AOR black-list:
--------------------------------------------------------------------------------------------
AOR Ban reason AOR Forgive Time of blocking
error time in
count minutes
------------------------- ---------------- --------- ---------- --------------------
22222@192.168.80.26 ACCOUNT HACKING 40 600 2025-08-05 13:03:19 |
При использовании протоколов TLS или WebSocket Secure (WSS) в качестве SIP-транспорта, а также протокола DTLS-SRTP для шифрования RTP-трафика, возможно использование сертификатов, автоматически сгенерированных самим ESBC, сгенерированных по требованию пользователя на ESBC или загруженных пользователем. По умолчанию используются сертификаты, автоматически сгенерированные самим ESBC, дополнительных настроек для их использования не требуется.
Для генерации сертификатов и ключей средствами ESBC используется команда crypto generate. Подробное описание команд для генерации сертификатов и ключей на ESBC приведено в разделе Генерация и просмотр ключей и сертификатов.
Для загрузки сертификатов и ключей на устройство через CLI используется команда copy, пример:
vesbc# copy tftp://10.0.0.1:/ca.crt crypto:cert/ca.crt |
Путь для сохранения сертификатов ca и cert — crypto:cert/ Путь для сохранения private-key — crypto:private-key/ |
Для управления пользовательскими сертификатами и версией TLS используется crypto profile.
Описание всех команд для настройки криптопрофилей приведено в разделе Настройки криптопрофиля.
Пример настройки crypto profile:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# crypto profile CRYPTO-PROFILE #Установка сертификата удостоверяющего центра (CA certificate): vesbc(config-esbc-crypto-profile)# ca default_ca.pem #Установка клиентского сертификата (X.509): vesbc(config-esbc-crypto-profile)# cert default_cert.pem #Установка private-key: vesbc(config-esbc-crypto-profile)# private-key default_cert_key.pem #Установка пароля private-key (необязательно): vesbc(config-esbc-crypto-profile)# password private-key PASSWORD #Установка минимальной и максимальной версии TLS (необязательно): vesbc(config-esbc-crypto-profile)# tls min 1.1 vesbc(config-esbc-crypto-profile)# tls max 1.2 vesbc(config-esbc-crypto-profile)# exit |
Если не устанавливать значения версии TLC, то при установлении соединения будет использоваться любая версия 1.0–1.3. Настройки tls min и tls max используются только при применении crypto profile для SIP-транспорта и не используются для шифрования DTLS-SRTP при применении crypto-profile в медиапрофиле. |
Для того чтобы использовать crypto profile для SIP-транспорта, необходимо его указать в настройках нужного транспорта:
vesbc(config-esbc)# sip transport SIP-TRANSPORT vesbc(config-esbc-sip-transport)# crypto profile CRYPTO-PROFILE vesbc(config-esbc-sip-transport)# exit |
Настройки crypto profile будут использоваться, только если выбран режим работы SIP-транспорта tls или wss, для остальных режимов настройки игнорируются.
Для того чтобы использовать crypto profile для шифрования DTLS-SRTP, необходимо его указать в настройках медиа профиля:
vesbc(config-esbc)# media profile MEDIA-PROFILE vesbc(config-esbc-media-profile)# crypto profile CRYPTO-PROFILE vesbc(config-esbc-media-profile)# exit |
Настройки crypto profile будут использоваться, только если выбран режим шифрования srtp keying dtls-srtp, для остальных режимов настройки игнорируются.
Пример использования crypto profile:
Задача:
Использовать сертификат, загруженный пользователем на ESBC, для абонентских подключений по tls версии 1.3 и шифрования медиа DTLS-SRTP.

Решение:
1. Выполнить базовую настройку ESBC для обеспечения маршрутизации абонентских подключений в сторону ECSS-10:
vesbc(config)# esbc vesbc(config-esbc)# media resource USERS vesbc(config-esbc-media-resource)# ip address 20.0.0.1 vesbc(config-esbc-media-resource)# exit vesbc(config-esbc)# media resource ECSS vesbc(config-esbc-media-resource)# ip address 192.168.1.1 vesbc(config-esbc-media-resource)# exit vesbc(config-esbc)# sip transport USERS vesbc(config-esbc-sip-transport)# ip address 20.0.0.1 vesbc(config-esbc-sip-transport)# port 5061 vesbc(config-esbc-sip-transport)# mode tls vesbc(config-esbc-sip-transport)# exit vesbc(config-esbc)# sip transport ECSS vesbc(config-esbc-sip-transport)# ip address 192.168.1.1 vesbc(config-esbc-sip-transport)# port 5070 vesbc(config-esbc-sip-transport)# exit vesbc(config-esbc)# route-table TO_ECSS vesbc(config-esbc-route-table)# rule 0 vesbc(config-esbc-route-table-rule)# action direct-to-trunk ECSS vesbc(config-esbc-route-table-rule)# exit vesbc(config-esbc-route-table)# exit vesbc(config-esbc)# trunk sip ECSS vesbc(config-esbc-trunk-sip)# sip transport ECSS vesbc(config-esbc-trunk-sip)# media resource 0 ECSS vesbc(config-esbc-trunk-sip)# remote address 192.168.1.2 vesbc(config-esbc-trunk-sip)# remote port 5070 vesbc(config-esbc-trunk-sip)# exit vesbc(config-esbc)# user-interface sip USERS vesbc(config-esbc-user-interface-sip)# sip transport USERS vesbc(config-esbc-user-interface-sip)# route-table TO_ECSS vesbc(config-esbc-user-interface-sip)# media resource 0 USERS vesbc(config-esbc-user-interface-sip)# exit |
2. Загрузить файлы сертификата, CA и private-key на ESBC через CLI (в примере указан протокол tftp):
#Загрузка CA сертификата: vesbc# copy tftp://10.0.0.1:/ca.crt crypto:cert/ca.crt #Загрузка клиентского сертификата: vesbc# copy tftp://10.0.0.1:/cert.crt crypto:cert/cert.crt #Загрузка private-key: vesbc# copy tftp://10.0.0.1:/key.pem crypto:private-key/key.pem |
3. Создать crypto profile, указать в нем файлы сертификатов, private-key и версию TLS:
vesbc(config-esbc)# crypto profile CRYPTO_PROFILE vesbc(config-esbc-crypto-profile)# ca ca.crt vesbc(config-esbc-crypto-profile)# cert cert.crt vesbc(config-esbc-crypto-profile)# private-key key.pem vesbc(config-esbc-crypto-profile)# tls min 1.3 vesbc(config-esbc-crypto-profile)# tls max 1.3 vesbc(config-esbc-crypto-profile)# exit |
4. Создать медиапрофиль для использования DTLS-SRTP и привязать к нему crypto profile:
vesbc(config-esbc)# media profile MP_USERS vesbc(config-esbc-media-profile)# srtp mode mandatory vesbc(config-esbc-media-profile)# srtp keying dtls-srtp vesbc(config-esbc-media-profile)# crypto profile CRYPTO_PROFILE vesbc(config-esbc-media-profile)# exit |
5. Привязать media profile MP_USERS к user-interface sip USERS:
vesbc(config-esbc)# user-interface sip USERS vesbc(config-esbc-user-interface-sip)# media profile MP_USERS vesbc(config-esbc-user-interface-sip)# exit |
6. Привязать crypto profile CRYPTO_PROFILE к sip transport USERS:
vesbc(config-esbc)# sip transport USERS vesbc(config-esbc-sip-transport)# crypto profile CRYPTO_PROFILE vesbc(config-esbc-sip-transport)# exit |
7. Применить настройки:
vesbc(config-esbc)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc)# do confirm Configuration has been confirmed. Commit timer canceled. |
ESBC поддерживает аутентификацию регистрирующихся через него абонентов на RADIUS-сервере.
Режимы работы digest-аутентификации:
В текущей версии ПО аутентификация через RADIUS-сервер поддерживается только для метода REGISTER. |
Порядок настройки аутентификации через RADIUS-сервер:
Настройка RADIUS-сервера
В таблице ниже приведены минимальные необходимые настройки RADIUS-сервера. Описание всех доступных настроек приведено в разделе Настройка AAA справочника команд CLI.
Шаг | Описание | Команда | Ключи | |
|---|---|---|---|---|
1 | Добавить RADIUS-сервер в список используемых серверов и перейти в режим его конфигурирования. | esbc(config)# radius-server host | <IP-ADDR> – IP-адрес RADIUS-сервера, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]; <IPV6-ADDR> – IPv6-адрес RADIUS-сервера, задаётся в виде X:X:X:X::X, где каждая часть принимает значения в шестнадцатеричном формате [0..FFFF] <VRF> – имя экземпляра VRF, задается строкой до 31 символа. | |
2 | Задать пароль для аутентификации на удаленном RADIUS-сервере. | esbc(config-radius-server)# key ascii-text | <TEXT> – строка [8..16] ASCII-символов; <ENCRYPTED-TEXT> – зашифрованный пароль, размером [8..16] байт, задаётся строкой [16..32] символов. | |
3 | Задать IPv4/IPv6-адрес, который будет использоваться в качестве IPv4/IPv6-адреса источника в отправляемых RADIUS-пакетах (можно не указывать при условии настройки п. 4). | esbc(config-radius-server)# source-address { <ADDR> | object-group <NETWORK_OBJ_GROUP_NAME> } | <ADDR> – IP-адрес источника, задается в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]; <NETWORK_OBJ_GROUP_NAME> – список адресов, которые будут использоваться в качестве source address. | |
| 4 | Задать интерфейс или туннель маршрутизатора, IPv4/IPv6-адрес которого будет использоваться в качестве IPv4/IPv6-адреса источника в отправляемых RADIUS-пакетах. (можно не указывать при условии настройки п. 3). | esbc(config-radius-server)# source-interface { <IF> | <TUN> } | <IF> – имя интерфейса устройства, задаётся в виде, описанном в разделе Типы и порядок именования интерфейсов маршрутизатора; <TUN> – имя туннеля устройства, задаётся в виде, описанном в разделе Типы и порядок именования туннелей маршрутизатора. | |
| 5 | Указать тип соединений, для аутентификации которых будет использоваться RADIUS-сервер. | esbc(config-radius-server)# usage { all | aaa | auth | acct | pptp | l2tp | voip } |
|
Возможно настроить до восьми RADIUS-серверов.
Настройка RADIUS-профиля
В таблице ниже приведены минимальные необходимые настройки RADIUS-профиля. Описание всех доступных настроек приведено в разделе Настройки RADIUS-профиля справочника команд CLI.
Шаг | Описание | Команда | Ключи |
|---|---|---|---|
1 | Перейти в раздел конфигурирования ESBC. | esbc(config)# esbc | |
2 | Добавить в конфигурацию RADIUS-профиль и перейти в режим его конфигурирования. | esbc(config-esbc)# radius profile <NAME> | <NAME> – название RADIUS-профиля, строка [1..64] символов. |
3 | Выбрать RADIUS-сервер, настроенный на предыдущем этапе для аутентификации. Допускается использование до восьми RADIUS-серверов в одном RADIUS-профиле. | esbc(config-radius-profile)# radius-server host { <IP-ADDR> | <IPV6-ADDR> } [ vrf <VRF> ]
| <IP-ADDR> – IP-адрес RADIUS-сервера, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]; <IPV6-ADDR> – IPv6-адрес RADIUS-сервера, задаётся в виде X:X:X:X::X, где каждая часть принимает значения в шестнадцатеричном формате [0..FFFF] <VRF> – имя экземпляра VRF, задается строкой до 31 символа. |
Настройка AAA-профиля
Шаг | Описание | Команда | Ключи |
|---|---|---|---|
1 | Перейти в раздел конфигурирования ESBC. | esbc(config)# esbc | |
2 | Добавить в конфигурацию AAA-профиль и перейти в режим его конфигурирования. | esbc(config-esbc)# aaa profile <NAME> | <NAME> – название AAA-профиля, строка [1..64] символов. |
3 | Выбрать RADIUS-профиль, настроенный на предыдущем этапе для аутентификации. | esbc(config-aaa-profile)# auth radius profile <NAME>
| <NAME> – название RADIUS-профиля, строка [1..64] символов. |
Для использования аутентификации абонентов через RADIUS-сервер необходимо указать AAA-профиль в конфигурации абонентского интерфейса (user-Interface), см. раздел Настройка абонентских интерфейсов.
Пример настройки:
Задача:
Использовать RADIUS-серверы 192.168.113.200 (основной) и 192.168.113.201 (резервный) для аутентификации регистраций абонентов поступающих на абонентский интерфейс USERS_VIA_RADIUS в режиме RFC5090-no-challenge.
Решение:
1. Настроить основной RADIUS-сервер 192.168.113.200:
vesbc# configure vesbc(config)# radius-server host 192.168.113.200 vesbc(config-radius-server)# key ascii-text password vesbc(config-radius-server)# source-address 192.168.113.207 vesbc(config-radius-server)# usage voip vesbc(config-radius-server)# exit |
2. Настроить резервный RADIUS-сервер 192.168.113.201:
vesbc(config)# radius-server host 192.168.113.201 vesbc(config-radius-server)# key ascii-text password vesbc(config-radius-server)# source-address 192.168.113.207 vesbc(config-radius-server)# usage voip #Указываем более низкий приоритет чем у основного сервера. По умолчанию приоритет 1. Чем меньше значение, тем приоритетнее сервер. vesbc(config-radius-server)# priority 100 vesbc(config-radius-server)# exit |
3. Настроить RADIUS-профиль RP_USERS:
vesbc(config)# esbc vesbc(config-esbc)# radius profile RP_USERS #Указываем два RADIUS-сервера vesbc(config-radius-profile)# radius-server host 192.168.113.200 vesbc(config-radius-profile)# radius-server host 192.168.113.201 #Указываем режим работы digest-аутентификации vesbc(config-radius-profile)# auth digest rfc5090_no_chlng vesbc(config-radius-profile)# exit |
4. Настроить AAA-профиль AAA_USERS:
vesbc(config-esbc)# aaa profile AAA_USERS #Указываем RADIUS-профиль vesbc(config-aaa-profile)# auth radius profile RP_USERS vesbc(config-aaa-profile)# exit |
5. Использовать AAA-профиль AAA_USERS в настройках абонентского интерфейса USERS_VIA_RADIUS:
vesbc(config-esbc)# user-interface sip USERS_VIA_RADIUS vesbc(config-esbc-user-interface-sip)# aaa profile AAA_USERS vesbc(config-esbc-user-interface-sip)# exit vesbc(config-esbc)# exit vesbc(config)# exit #Применяем и сохраняем все настройки vesbc# commit vesbc# confirm |
При получении сообщений REGISTER на абонентский интерфейс USERS_VIA_RADIUS, ESBC будет отправлять абоненту параметры для digest-аутентификации в сообщении 401 Unauthorized, далее эти параметры и digest response, полученный от абонента, будет передаваться на RADIUS-сервер 192.168.113.200 в сообщении Access-Request. При получении от сервера Access-Accept, сообщение REGISTER от абонента будет направлено на вышестоящий SIP-сервер. При получении Access-Reject, будет отправлено сообщение 403 Forbidden. При недоступности RADIUS-сервера 192.168.113.200, после таймаута, сообщение Access-Request будет отправлено на резервный RADIUS-сервер 192.168.113.201.
С целью преодоления соединений через устройства NAT, в ESBC реализована поддержка nat comedia-mode для абонентов и транков.
Настройка и принцип работы nat comedia-mode для транков (trunk)
Включение режима nat comedia-mode осуществляется в настройках транка:
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# trunk sip
vesbc(config-esbc-trunk-sip)# nat comedia-mode
Select NAT comedia mode for trunk:
off
on
flexible
vesbc(config-esbc-trunk-sip)# nat comedia-mode on |
Реализована работа в двух режимах:
Настройка и принцип работы nat comedia-mode для абонентов (user-interface)
Включение режима nat comedia-mode осуществляется в настройках абонентского интерфейса:
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# user-interface sip USERS
vesbc(config-esbc-user-interface-sip)# nat comedia-mode
Select NAT comedia mode for user-interface:
off
on
flexible
vesbc(config-esbc-user-interface-sip)# nat comedia-mode on |
Реализована работа в двух режимах:
Также данная настройка позволяет передавать сообщения протокола SIP симметрично (на порт, с которого был принят запрос) в случае, если клиент в инициирующем запросе не использовал параметр RPORT.
Команда nat keep-alive-interval в настройках абонентского интерфейса используется для настройки интервала для поддержки соединения за NAT. При включении опции, абоненту, с заданным интервалом будут отправляться пакеты с содержанием "0d0a" для предотвращения разрушения сессии на NAT.
Подмена атрибутов direction в SDP
При включении опции nat comedia-mode атрибут direction sendonly в SDP при отправке offer/answer sdp заменяются на sendrecv.
Данный механизм используется для предотвращения ситуации в которой абонент за NAT не начнет первым отправку RTP-пакетов в сторону ESBC и соответственно ESBC не начнет отправку встречного потока RTP к абоненту.
Примеры:
1. Замена атрибутов direction в offer sdp:

2. Замена атрибутов direction в answer sdp:

Public IP (рус. «публичный IP-адрес») — это внешний IP-адрес, который используется при отправке запросов пользователю или удаленному адресу из внешней сети.
Настройка используется в случае, когда ESBC не имеет публичного IP-адреса и выход в публичную сеть осуществляется через NAT. В таком случае в качестве Public IP указывается адрес WAN-интерфейса NAT для подстановки в сигнальные сообщения протокола SIP.
Public IP можно можно настроить для абонентского интерфейса, транка и транковой группы.
Если Public IP настроен в транке и в транковой группе, в которую входит этот транк, то будет использоваться Public IP из настроек транка. |
В качестве публичного адреса можно использовать как IPv4, так и IPv6 адрес. |
При наличии Public IP, адреса в SDP, заголовках Via и Contact будут заменены на значение public-ip из конфигурации объекта. Media будет работать в режиме NAT-comedia.
Для корректной работы опции Public IP необходимо организовать проброс портов для сигнализации SIP и медиапортов RTP на вышестоящем устройстве NAT "один к одному". |
Пример настройки Public IP для транка:
#Настройка SIP-транспорта для транка: vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# sip transport TRUNK_TRANSPORT vesbc(config-esbc-sip-transport)# ip address 192.168.1.1 vesbc(config-esbc-sip-transport)# exit #Настройка медиаресурсов для транка: vesbc(config-esbc)# media resource TRUNK_MEDIA vesbc(config-esbc-media-resource)# ip address 192.168.1.1 vesbc(config-esbc-media-resource)# exit #Настройка параметров транка: vesbc(config-esbc)# trunk sip TRUNK_PUBLIC_IP vesbc(config-esbc-trunk-sip)# sip transport TRUNK_TRANSPORT vesbc(config-esbc-trunk-sip)# media resource 0 TRUNK_MEDIA vesbc(config-esbc-trunk-sip)# remote address 192.168.1.3 vesbc(config-esbc-trunk-sip)# remote port 5060 vesbc(config-esbc-trunk-sip)# public-ip 10.25.0.1 #Применение и подтверждение изменений: vesbc(config-esbc-trunk-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-trunk-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
Пример использования Public IP:
ESBC получает сообщение, которое должно быть смаршрутизировано в транк TRUNK_PUBLIC_IP:
INVITE sip:23002@192.168.1.1:5060 SIP/2.0 Via: SIP/2.0/UDP 192.168.1.4:5061;rport;branch=z9hG4bK-1914230-1-1 From: "24001" <sip:24001@192.168.1.4:5061>;tag=1 To: "23002" <sip:23002@192.168.1.1:5060> Call-ID: 1-1914230@192.168.1.4 Cseq: 1 INVITE Contact: <sip:24001@192.168.1.4:5061> Max-Forwards: 70 Allow: INVITE, ACK, BYE, CANCEL Content-Type: application/sdp Content-Length: 138 Session Description Protocol Version (v): 0 Owner/Creator, Session Id (o): user1 77755765 7773687637 IN IP4 192.168.1.4 Session Name (s): - Time Description, active time (t): 0 0 Connection Information (c): IN IP4 192.168.1.4 Media Description, name and address (m): audio 10000 RTP/AVP 8 Media Attribute (a): rtpmap:8 PCMA/8000 |
ESBC пересылает INVITE в транк TRUNK_PUBLIC_IP.
В SDP, Via и Contact вместо адреса привязанного SIP-транспорта (192.168.1.1) используется Public IP транка (10.25.0.1):
INVITE sip:23002@192.168.1.3:5060 SIP/2.0 Via: SIP/2.0/UDP 10.25.0.1:5060;rport;branch=z9hG4bKPj6e357f04-e13e-4ead-8386-2246d12450b4 Max-Forwards: 70 From: "24001" <sip:24001@192.168.1.1>;tag=76776c9a-022b-4ccf-9458-e83e2701f6c8 To: "23002" <sip:23002@192.168.1.3> Contact: <sip:24001@10.25.0.1:5060;transport=udp> Call-ID: 5fc229f6657d7706f2b6c81a44a5b10e CSeq: 28491 INVITE Allow: INVITE, ACK, BYE, CANCEL Supported: 100rel, replaces, ice Content-Type: application/sdp Content-Length: 135 Session Description Protocol Version (v): 0 Owner/Creator, Session Id (o): user1 77755765 7773687637 IN IP4 10.25.0.1 Session Name (s): - Time Description, active time (t): 0 0 Connection Information (c): IN IP4 10.25.0.1 Media Description, name and address (m): audio 10000 RTP/AVP 8 Media Attribute (a): rtpmap:8 PCMA/8000 |
QoS (Quality of Service, рус. «качество обслуживания») — технология предоставления различным классам данных различных приоритетов в обслуживании.
Приоритет определяется значением DSCP (0-63) в поле IP-заголовка DS.
Установить необходимое значение DS можно отдельно для:
Параметры QoS настраиваются в конфигурации абонентского интерфейса, транка и транковой группы.
Если QoS настроен для транка и для транковой группы, в которую входит этот транк, то будет использоваться QoS из настроек транка. |
Пример настройки QoS для аудиотрафика в конфигурации абонентского интерфейса:
vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# user-interface sip ABONENT_QOS_50 vesbc(config-esbc-user-interface-sip)# sip transport ABONENT_TRANSPORT vesbc(config-esbc-user-interface-sip)# media resource 0 ABONENT_MEDIA vesbc(config-esbc-user-interface-sip)# route-table TO_SSW vesbc(config-esbc-user-interface-sip)# dscp audio 50 #Применение и подтверждение изменений: vesbc(config-esbc-user-interface-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-user-interface-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
В исходящем аудиотрафике абонентам, зарегистрированным через интерфейс ABONENT_QOS_50, поле DS в IP-пакете будет выглядеть следующим образом:
Differentiated Services Field: 0xc8 (DSCP: Unknown, ECN: Not-ECT) 1100 10.. = Differentiated Services Codepoint: Unknown (50) .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0) |
Использование локальной обработки регистрации позволяет снизить нагрузку на сервер регистрации за счет локального ответа на повторный запрос регистрации.
По умолчанию локальная обработка регистрации на абонентском интерфейсе отключена. |
Конфигурация минимального допустимого значения времени регистрации для сервера регистрации составляет от 30 до 65535 секунд (по умолчанию значение равно 0 и контроль за минимальным временем регистрации не ведется)
Подробное описание команд для настройки локальной обработки регистраций на ESBC представлено в настройках user-interface в CLI.
Локальная обработка повторной регистрации разрешена, если соблюдаются все нижеперечисленные требования:
Логика работы обработки первичной регистрации:


Логика работы локальной обработки повторной регистрации для зарегистрированного абонента:
1. Если в REGISTER, полученном от абонента, expires в поле Contact + 34 секунды (Timer B и время внутренней логики ESBC) больше, чем оставшийся на ESBC expires, то отправляем REGISTER на сервер регистрации со значением expires, описанным пунктом выше.
1.1 Если не задано минимальное время регистрации на сервере:

1.2 Если задано минимальное время регистрации на сервере:

2. Если в REGISTER, полученном от абонента, expires в поле Contact + 34 секунды (Timer B и время внутренней логики ESBC) меньше, чем оставшийся на ESBC expires, то регистрация будет обработана локально путем отправки абоненту 200 ОК с expires, пришедшим от него же самого.

При разрегистрации абонента логика локальной регистрации не используется. |
Пример настройки локальной обработки регистраций в конфигурации абонентского интерфейса:
vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# user-interface sip ABONENT vesbc(config-esbc-user-interface-sip)# sip transport ABONENT_TRANSPORT vesbc(config-esbc-user-interface-sip)# media resource 0 ABONENT_MEDIA vesbc(config-esbc-user-interface-sip)# route-table TO_SSW vesbc(config-esbc-user-interface-sip)# registration simulation enable 10800 #Применение и подтверждение изменений: vesbc(config-esbc-user-interface-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-user-interface-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
На абонентский интерфейс ESBC приходит запрос REGISTER от абонента 23001 с expires 3600, который пересылается на сервер регистрации SSW со значением expires 10800. После получения 200 ОК от сервера регистрации со значением expires 10800, ESBC отправляет 200 ОК абоненту с expires 3600:

На ESBC создается запись зарегистрированного абонента с expires 10800:

Спустя время приходит запрос REGISTER с expires 3600 для перерегистрации. Так как "Registration expires in" больше, чем пришедший expires, то запрос будет обработан локально с отправкой 200 ОК абоненту c expires 3600:


На ESBC реализован контроль интенсивности входящего трафика для:
Описание всех команд для контроля входящего трафика приведено в разделах для каждого объекта в CLI:
Реализация ограничения входящего трафика поддерживается для следующих объектов:
| max in ... | Для всей системы (general) | Транков (trunk) | Транк-групп (trunk-group) | Абонентских интерфейсов (user-interface) |
|---|---|---|---|---|
| calls | ||||
| cps | ||||
| regps | ||||
| rps | ||||
| session pps | ||||
| subps | ||||
| subscriptions | ||||
| user rpp | ||||
| user contacts |
Приоритет использования ограничений:
Приоритет использования ограничений распространяется только для максимальных значений, т. е. например, при использовании max in cps 100 для всей системы (general), и использовании max in cps 10 для какого-либо транка, ограничение обработки CPS для этого транка будет 10, а не 100. |
Пример работы приоритета системных ограничений над абонентским интерфейсом:
vesbc# vesbc# config vesbc(config)# esbc #Переход в общие настройки: vesbc(config-esbc)# general vesbc(config-esbc-general)# #Установка ограничения входящего максимального количества CPS для всей системы - 5: vesbc(config-esbc-general)# max in cps 5 vesbc(config-esbc-general)# exit #Установка ограничения максимального входящего количества CPS для отдельного абонентского интерфейса (USER_IFACE) - 10: vesbc(config-esbc)# user-interface sip USER_IFACE vesbc(config-esbc-user-interface-sip)# max in cps 10 #Применение и подтверждение изменений: vesbc(config-esbc-user-interface-sip)# do commit vesbc(config-esbc-user-interface-sip)# do confirm |
В данном случае не будет обрабатываться более 5 вызовов в секунду, приходящих на абонентский интерфейс USER_IFACE, так как у общесистемных ограничений приоритет выше.
Пример работы приоритета ограничений транк-группы над ограничениями транка, входящего в эту транк-группу:
vesbc# vesbc# config vesbc(config)# esbc #Переход в настройки транка: vesbc(config-esbc)# trunk sip TRUNK vesbc(config-esbc-trunk-sip)# #Установка ограничения входящего максимального количества CPS для транка - 50: vesbc(config-esbc-trunk-sip)# max in cps 50 vesbc(config-esbc-trunk-sip)# exit #Переход в настройки транк-группы: vesbc(config-esbc)# trunk-group TRUNKGROUP # Добавление транка TRUNK в состав транк-группы: vesbc(config-esbc-trunk-group)# trunk 0 TRUNK #Установка ограничения входящего максимального количества CPS для транк-группы - 10: vesbc(config-esbc-trunk-group)# max in cps 10 #Применение и подтверждение изменений: vesbc(config-esbc-trunk-group)# do commit vesbc(config-esbc-trunk-group)# do confirm |
Т. к. транк TRUNK входит в состав транк-группы TRUNKGROUP, то будет обрабатываться не более 10 входящих вызовов в секунду, поступающих в транк, так как приоритет ограничения у транк-группы выше.
Пример работы ограничения количества одновременных вызовов на абонентском интерфейсе:
vesbc# vesbc# config vesbc(config)# esbc #Переход в настройки абонентского интерфейса: vesbc(config-esbc)# user-interface sip USER_IFACE vesbc(config-esbc-user-interface)# #Установка ограничения максимального количества одновременных вызовов для абонентского-интерфейса - 10: vesbc(config-esbc-user-interface-sip)# max in calls 10 #Применение и подтверждение изменений: vesbc(config-esbc-user-interface)# do commit vesbc(config-esbc-user-interface)# do confirm |
После применения изменений количество одновременных вызовов, проходящих через абонентский интерфейс USER_IFACE, не может быть больше 10. Все запросы INVITE, поступающие после превышения лимита, будут проигнорированы.
Пример работы ограничения количества вызовов в секунду на абонентском интерфейсе:
vesbc# vesbc# config vesbc(config)# esbc #Переход в настройки абонентского интерфейса: vesbc(config-esbc)# user-interface sip USER_IFACE vesbc(config-esbc-user-interface)# #Установка ограничения входящего максимального количества CPS для абонентского-интерфейса - 10: vesbc(config-esbc-user-interface-sip)# max in cps 10 #Применение и подтверждение изменений: vesbc(config-esbc-user-interface)# do commit vesbc(config-esbc-user-interface)# do confirm |
После применения изменений количество вызовов, проходящих через абонентский интерфейс USER_IFACE в секунду, не может быть больше 10. Все запросы INVITE, поступающие после превышения лимита, будут проигнорированы.
Пример работы ограничения количества регистраций в секунду на абонентском интерфейсе:
vesbc# vesbc# config vesbc(config)# esbc #Переход в настройки абонентского интерфейса: vesbc(config-esbc)# user-interface sip USER_IFACE vesbc(config-esbc-user-interface)# #Ограничение максимального количества регистраций в секунду: vesbc(config-esbc-user-interface-sip)# max in regps 15 #Применение и подтверждение изменений: vesbc(config-esbc-user-interface)# do commit vesbc(config-esbc-user-interface)# do confirm |
После применения изменений количество регистраций в секунду, проходящих через абонентский интерфейс USER_IFACE, не может быть больше 15. Все запросы REGISTER, поступающие после превышения лимита, будут проигнорированы.
Пример работы ограничения количества запросов в секунду на абонентском интерфейсе:
vesbc# vesbc# config vesbc(config)# esbc #Переход в настройки абонентского интерфейса: vesbc(config-esbc)# user-interface sip USER_IFACE vesbc(config-esbc-user-interface)# #Ограничение максимального количества запросов в секунду: vesbc(config-esbc-user-interface-sip)# max in rps 250 #Применение и подтверждение изменений: vesbc(config-esbc-user-interface)# do commit vesbc(config-esbc-user-interface)# do confirm |
После применения изменений количество запросов, проходящих через абонентский интерфейс USER_IFACE, не может быть больше 250. Все запросы (INVITE, REGISTER и прочие), поступающие после превышения лимита, будут проигнорированы.
Пример работы ограничения количества SIP-сообщений в секунду в рамках одной сессии на абонентском интерфейсе:
vesbc# vesbc# config vesbc(config)# esbc #Переход в настройки абонентского интерфейса: vesbc(config-esbc)# user-interface sip USER_IFACE vesbc(config-esbc-user-interface)# #Ограничение максимального количества SIP-сообщений в секунду в рамках одной сессии в секунду: vesbc(config-esbc-user-interface-sip)# max in session pps 30 #Применение и подтверждение изменений: vesbc(config-esbc-user-interface)# do commit vesbc(config-esbc-user-interface)# do confirm |
После применения изменений, количество SIP-сообщений, проходящих через абонентский интерфейс USER_IFACE в секунду, в рамках одной сессии, не может быть больше 30. При достижении лимита сессия будет завершена.
Пример работы ограничения количества подписок в секунду на абонентском интерфейсе:
vesbc# vesbc# config vesbc(config)# esbc #Переход в настройки абонентского интерфейса: vesbc(config-esbc)# user-interface sip USER_IFACE vesbc(config-esbc-user-interface)# #Ограничение максимального количества подписок в секунду: vesbc(config-esbc-user-interface-sip)# max in subps 50 #Применение и подтверждение изменений: vesbc(config-esbc-user-interface)# do commit it vesbc(config-esbc-user-interface)# do confirm |
После применения изменений количество запросов SUBSCRIBE, проходящих через абонентский интерфейс USER_IFACE не может быть больше 50. Все запросы SUBSCRIBE поступающие после превышении лимита будут проигнорированы.
Пример работы ограничения количества общего количества активных подписок на абонентском интерфейсе:
vesbc# vesbc# config vesbc(config)# esbc #Переход в настройки абонентского интерфейса: vesbc(config-esbc)# user-interface sip USER_IFACE vesbc(config-esbc-user-interface)# #Ограничение максимального количества активных подписок: vesbc(config-esbc-user-interface-sip)# max in subscriptions 1000 #Применение и подтверждение изменений: vesbc(config-esbc-user-interface)# do commit vesbc(config-esbc-user-interface)# do confirm |
После применения изменений количество активных подписок (у которых не истек Expires), подтвержденных через абонентский интерфейс USER_IFACE, не может превышать 1000. Все запросы SUBSCRIBE, поступающие после превышения лимита, будут проигнорированы, кроме запросов обновления подписки.
Пример работы ограничения количества запросов в интервал времени с зарегистрированного абонента на абонентском интерфейсе:
vesbc# vesbc# config vesbc(config)# esbc #Переход в настройки абонентского интерфейса: vesbc(config-esbc)# user-interface sip USER_IFACE vesbc(config-esbc-user-interface)# #Ограничение максимального количества запросов 50: vesbc(config-esbc-user-interface-sip)# max in user rpp 50 #В интервал времени 240 секунд: vesbc(config-esbc-user-interface-sip)# max in user rpp 50 240 #С блокировкой при достижении лимитов vesbc(config-esbc-user-interface-sip)# max in user rpp 50 240 block #Применение и подтверждение изменений: vesbc(config-esbc-user-interface)# do commit vesbc(config-esbc-user-interface)# do confirm |
После применения изменений количество запросов с зарегистрированного пользователя, проходящих через абонентский интерфейс USER_IFACE за 240 секунд, не может превышать 50, в случае превышения лимита абонент будет заблокирован. При получении новых запросов до истечении времени прощения ("Forgive time in minutes") оно будет установлено в прежнее значение.
Просмотр списка заблокированных абонентов при превышении лимитов max in user rpp:
vesbc# show esbc black-list sip-user
SIP user black-list:
--------------------------------------------------------------------------------
AOR Ban reason User Forgive Time of
error time in blocking
count minutes
-------------------- -------------- --------- ---------- ----------
1142@192.168.113.177 TOOMANY USER 139 60 2025-11-07
REQUESTS 04:38:05
vesbc#
|
Пример работы ограничения на абонентском интерфейсе контактов на одном абоненте:
vesbc# vesbc# config vesbc(config)# esbc #Переход в настройки абонентского интерфейса: vesbc(config-esbc)# user-interface sip USER_IFACE vesbc(config-esbc-user-interface)# #Ограничение максимального количества контактов для одного AOR: vesbc(config-esbc-user-interface-sip)# max in user contacts 2 #Применение и подтверждение изменений: vesbc(config-esbc-user-interface)# do commit vesbc(config-esbc-user-interface)# do confirm |
После применения изменений, абонентам, регистрируемым через абонентский интерфейс USER_IFACE, будет возможно зарегистрировать только два разных контакта. При поступлении запроса REGISTER, содержащего дополнительный контакт, ESBC отклонит запрос кодом 403 Forbidden с "P-Eltex-Diagnostic: Too many registered contacts".
На ESBC реализован контроль интенсивности исходящего трафика для:
Описание всех команд для контроля исходящего трафика приведено в разделах для каждого объекта в CLI:
Реализация ограничения исходящего трафика поддержана на следующих объектах:
| max out ... | Для всей системы (general) | Транков (trunk) | Транк-групп (trunk-group) | Абонентских интерфейсов (user-interface) |
|---|---|---|---|---|
| cps | ||||
| rps |
При применении ограничений приоритет определяется уровнем: приоритет ограничений транк-групп выше, чем приоритет ограничений отдельных транков, входящих в эту транк-группу. |
Пример приоритета ограничений транк-группы над ограничениями транков, входящих в транк-группу:
vesbc# vesbc# config vesbc(config)# esbc #Переход в настройки транка TRUNK_1: vesbc(config-esbc)# trunk sip TRUNK_1 vesbc(config-esbc-trunk-sip)# #Ограничение максимальных исходящих CPS: vesbc(config-esbc-trunk-sip)# max out cps 100 vesbc(config-esbc-trunk-sip)# exit #Переход в настройки транка TRUNK_2: vesbc(config-esbc)# trunk sip TRUNK_2 vesbc(config-esbc-trunk-sip)# #Ограничение максимальных исходящих CPS: vesbc(config-esbc-trunk-sip)# max out cps 100 vesbc(config-esbc-trunk-sip)# exit #Переход в настройки транк-группы: vesbc(config-esbc)# trunk-group TRUNKGROUP vesbc(config-esbc-trunk-group)# trunk 0 TRUNK_1 vesbc(config-esbc-trunk-group)# trunk 1 TRUNK_2 #Ограничение максимальных исходящих CPS: vesbc(config-esbc-trunk-group)# max out cps 50 #Применение и подтверждение изменений: vesbc(config-esbc-trunk-group)# do commit vesbc(config-esbc-trunk-group)# do confirm |
Т. к. транки TRUNK_1 и TRUNK_2 входят в состав транк-группы TRUNKGROUP, то суммарное количество исходящих CPS c любого из этих транков не может превышать 50, так как приоритет ограничения у транк-группы выше.
Пример ограничения на транке исходящих вызовов в секунду:
vesbc# vesbc# config vesbc(config)# esbc #Переход в настройки транка: vesbc(config-esbc)# trunk sip TRUNK vesbc(config-esbc-trunk-sip)# #Ограничение максимального исходящего количества CPS: vesbc(config-esbc-trunk-sip)# max out cps 10 #Применение и подтверждение изменений: vesbc(config-esbc-trunk-sip)# do commit vesbc(config-esbc-trunk-sip)# do confirm |
После применения изменений количество исходящих вызовов в секунду с транка TRUNK не может превышать 10. При достижении лимита ESBC будет отвечать кодом 480 на каждый новый INVITE, который будет маршрутизирован на данный транк.
Пример ограничения на транке исходящих запросов в секунду:
vesbc# vesbc# config vesbc(config)# esbc #Переход в настройки транка: vesbc(config-esbc)# trunk sip TRUNK vesbc(config-esbc-trunk-sip)# #Ограничение максимального исходящего RPS: vesbc(config-esbc-trunk-sip)# max out rps 250 #Применение и подтверждение изменений: vesbc(config-esbc-trunk-sip)# do commit vesbc(config-esbc-trunk-sip)# do confirm |
После применения изменений количество исходящих запросов в секунду с транка TRUNK не может превышать 250. На все запросы (INVITE, REGISTER и другие), поступающие после превышения лимита, ESBC будет отвечать кодом 480.
Лицензионное ограничение обработки вызовов
Максимальное количество одновременных вызовов и максимальное количество вызовов в секунду ограничиваются лицензиями ESBC-LIMIT-MAX-CALLS и ESBC-LIMIT-MAX-CPS соответственно.
При этом в конфигурации можно задать ограничение, которое превышает лицензионное значение, но ESBC не будет обрабатывать больше, чем позволяет лицензия, пример:
#Просмотр активных лицензий: vesbc# show licence Feature Source State Value Valid from Expiries ---------------------------- -------- ----------- ------------- --------- -------- ESBC-LIMIT-MAX-CALLS ELM Active 5000 -- -- ESBC-LIMIT-MAX-CPS ELM Active 100 -- -- ESBC-VIRTUAL-LIMIT-DEFAULT ELM Active true -- -- ESBC-VIRTUAL-LIMIT-NET ELM Active 10000000000 -- -- vesbc# vesbc# config vesbc(config)# esbc #Переход в общие настройки: vesbc(config-esbc)# general vesbc(config-esbc-general)# #Ограничение максимального CPS: vesbc(config-esbc-general)# max cps COUNT Possible max cps: 1-1000 #конфигурационное ограничение vesbc(config-esbc-general)# max cps 1000 2025-04-22T09:10:17+00:00 %SYS-W-EVENT: WARNING!!! Configured max cps 1000 exceed licence limit that is equal to 100 #предупреждение о том, что введённое значение превышает лицензионное #Применение и подтверждение изменений: vesbc(config-esbc-general)# do commit 2025-04-22T08:44:46+00:00 snmpd restarted Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. 2025-04-22T08:44:46+00:00 %CLI-I-CRIT: user admin from console input: do commit vesbc(config-esbc-general)# do confirm Configuration has been confirmed. Commit timer canceled. vesbc(config-esbc-general)# |
После применения изменений в конфигурации будет отображаться max cps 1000, но обрабатываться будет не более 100 вызовов в секунду.
В ESBC доступен мониторинг следующих параметров:
активные вызовы;
Активные вызовы
Поддержана возможность активных вызовов командой show esbc active calls в CLI.
В выводе информации об активных сессиях присутствует:
Реализовано удаление активных сессий командой clear esbc active calls в CLI. |
Поддерживается вывод до 50000 активных звонков. |
Расширенный мониторинг вызовов (call-flow)
Реализован просмотр подробной информации sip call-flow сессий в CLI.
Для включения данного функционала, необходимо запустить сбор статистики командой esbc call-flow sip start в CLI.
При повторном включении ведения статистики уже собранные данные статистики очищаются. |
Реализована возможность использовать фильтрацию при сборе статистики:
Доступные условия фильтрации (возможно использование более одного условия):
Пример фильтрации с условиями:
#Сбор статистики с выполнением всех условий для вызываемого номера 114..., транспорта TRANSPORT_ABONENTS и транка TRUNK_SMG: vesbc# esbc call-flow sip all cdpn 114.* transport TRANSPORT_ABONENTS trunk TRUNK_SMG vesbc# |
Если не использовать фильтрацию или условия в ней, то будет происходить сбор статистики всех sip call-flow сессий. |
Вывод краткой информации по всем sip call-flow сессиям возможен с помощью команды show esbc call-flow sip list в CLI.
В выводе присутствует:
Пример вывода статистики:

Подробную информацию об отфильтрованной сессии можно посмотреть с помощью команды show esbc call-flow sip info <SESSION_ID> [detailed] в CLI.
При вводе show esbc call-flow sip info <SESSION_ID> будет доступна диаграмма отдельной сессии.
Пример вывода статистики:
#Просмотр диаграммы отфильтрованной call-flow сессий:
vesbc# show esbc call-flow sip info 50300000000000c
ESBC call flow 50300000000000c
Time Leg A Direction Leg B
--------------- -------------------------------------- --------- ---------------------------------------
2025-10-08 (UDP SDP) INVITE --->
09:50:25.976 sip:1142@192.168.113.177:5090 SIP/2.0
(+00:00:00.000)
2025-10-08 (UDP) SIP/2.0 100 Trying <---
09:50:25.976
(+00:00:00.000)
2025-10-08 ---> (UDP SDP) INVITE
09:50:25.992 sip:1142@192.168.113.172:5070 SIP/2.0
(+00:00:00.016)
2025-10-08 <--- (UDP) SIP/2.0 100 Trying
09:50:26.003
(+00:00:00.027)
2025-10-08 <--- (UDP) SIP/2.0 180 Ringing
09:50:26.046
(+00:00:00.070)
2025-10-08 (UDP) SIP/2.0 180 Ringing <---
09:50:26.048
(+00:00:00.072)
2025-10-08 <--- (UDP SDP) SIP/2.0 200 OK
09:50:27.544
(+00:00:01.568)
2025-10-08 (UDP SDP) SIP/2.0 200 OK <---
09:50:27.557
(+00:00:01.581)
2025-10-08 (UDP) ACK --->
09:50:27.600 sip:1142@192.168.113.177:5090;transport=
(+00:00:01.624) udp SIP/2.0
2025-10-08 ---> (UDP) ACK sip:1142@192.168.113.172:5070
09:50:27.603 SIP/2.0
(+00:00:01.627)
2025-10-08 <--- (UDP) BYE
09:50:44.673 sip:1140@192.168.113.177:5071;transport=
(+00:00:18.697) udp;line=83b0f9ea4622375be3232f3c892b024
0 SIP/2.0
2025-10-08 (UDP) BYE <---
09:50:44.675 sip:1140@192.168.113.170;transport=udp
(+00:00:18.699) SIP/2.0
2025-10-08 (UDP) SIP/2.0 200 Ok --->
09:50:44.700
(+00:00:18.724)
2025-10-08 ---> (UDP) SIP/2.0 200 OK
09:50:44.703
(+00:00:18.727)
vesbc# |
При вводе show esbc call-flow sip info <SESSION_ID> detailed будет доступна более подробная информация по выбранной сессии.
В зависимости от сценария вызова, в выводе статистики может присутствовать:
Пример вывода статистики:
#Просмотр подробной информации отфильтрованной call-flow сессий: vesbc# show esbc call-flow sip info 50300000000000c detailed ESBC call flow detailed 50300000000000c Call state: Destroyed ----------------------------------- Leg: A Transport: TRANSPORT_ABONENTS User interface: ABONENTS Remote Contact: "1140" <sip:1140@192.168.113.170;transport=udp> From: "1140" <sip:1140@192.168.113.177> To: <sip:1142@192.168.113.177> Remote User-Agent: VP-17P/1.5.6-b46 sofia-sip/1.28 Call id: cb612700-9916-1200-4783-6813e209aef3 Local ip: 192.168.113.177:5090 Remote ip: 192.168.113.170:5060 Start time: 2025-10-08 09:50:25.976 End time: 2025-10-08 09:50:44.700 ----------------------------------- Leg: B Transport: TRANSPORT_SMG Trunk: TRUNK_SMG Remote Contact: <sip:1142@192.168.113.172:5070> From: "1140" <sip:1140@192.168.113.172> To: <sip:1142@192.168.113.172> Remote User-Agent: smg pa_sip 3.408.2.100 Call id: 5153401c612eebba1d5691886dbcbb92 Local ip: 192.168.113.177:5071 Remote ip: 192.168.113.172:5070 Start time: 2025-10-08 09:50:25.992 End time: 2025-10-08 09:50:44.703 vesbc# |
Для сброса текущей статистики используется команда esbc call-flow sip clear в CLI.
Для отключения сбора статистики используется команда esbc call-flow sip stop в CLI. Статистика для новых сессий собираться не будет, но для активных будет актуализироваться до их завершения.
Сбор статистики прекращается, и уже собранные данные сбрасываются, если осталось менее 20% начального объема оперативной памяти (RAM). |
Черный список
Реализован просмотр черного списка командой show esbc black-list (IP-адреса, AOR, User-Agent, SIP user) в CLI и на странице Мониторинг → Списки доступа → Чёрный список (IP-адреса) в WEB.
В выводе черного списка может присутствовать до 4 таблиц (по блокируемым объектам):
Причины блокировок описаны в разделе Общий принцип работы модуля fail2ban. |
Реализована очистка черного списка командой clear esbc black-list в CLI или кнопкой «Удалить» в WEB. |
Белый список
Поддержана возможность просматривать белый список IP-адресов, AOR и User-Agent командой show esbc white-list в CLI и, для IP-адресов, на странице Мониторинг → Списки доступа → Белый список в WEB.
Реализовано добавление в белый список динамических адресов и доменов. |
В белом списке также присутствуют два параметра:
Состояние транков
Реализован просмотр состояния транков командой show esbc trunks в CLI или на странице Мониторинг → Телефония → Транки в WEB.
В таблице выводится:
Список зарегистрированных абонентов
Реализован просмотр списка зарегистрированных абонентов командой show esbc users в CLI или на странице Мониторинг → Телефония → Абоненты в WEB.
Выводится общее количество AOR и Contact, а также базовый вывод информации о абонентах.
Количество AOR и Contact может не совпадать, если абоненты имеют несколько Contact. |
Также реализован просмотр подробной информации по конкретному абоненту, используя дополнительный параметр после основной команды (sip <AOR> detailed).
Выводится подробная информация по определенному AOR:
Реализовано удаление активных регистраций командой clear esbc registration в CLI. |
Статистика SIP
Реализован просмотр статистики для всей системы, всех транков, всех абонентских интерфейсов или по конкретному объекту командой show esbc statistics (вызовы, регистрации, подписки, RPS) в CLI или на странице Мониторинг → Телефония → Статистика вызовов в WEB.
Ведение статистики по умолчанию включено. |
При вызове команды для просмотра статистики отображаются таблицы с метриками, описание каждой метрики можно найти в разделе show esbc statistics справочника команд CLI.
В CLI отображаются счётчики за последнюю секунду. В WEB реализован просмотр историю за последнюю минуту, час, 3 дня. |
Для отключения ведения статистики необходимо в меню general отключить ее командой statistics disable. |
Пример:
Из TRUNK_IN в TRUNK_OUT через ESBC поступает 2 вызова каждую секунду длительностью 25 секунд.

#Просмотр полной статистики при активных вызовах: vesbc# show esbc statistics all ESBC global call counters: ----------------------------------------------------------------------- Counter Name Incoming Outgoing ------------------------- -------------------- -------------------- CALLS PER SECOND 2 2 CALL LEGS 50 50 REQUESTS IN CALL 6 7 RESPONSES IN CALL 8 8 ANSWERED CALLS 2 2 CALLS TO WRONG NUMBER 0 0 BUSY CALLS 0 0 NO ANSWERED CALLS 0 0 FORBIDDEN CALLS 0 0 UNAUTHORIZED CALLS 0 0 3XX CODES 0 0 4XX CODES 0 0 5XX CODES 0 0 6XX CODES 0 0 ESBC global register counters: ----------------------------------------------------------------------- Counter Name Incoming Outgoing ------------------------- -------------------- -------------------- REGISTERS PER SECOND 0 0 REGISTER TRANSACTIONS 0 0 RESPONSES 0 0 SUCCESS REGISTERS 0 0 REQUEST TIMEOUT 0 0 FORBIDDEN REGISTERS 0 0 UNAUTHORIZED REGISTERS 0 0 INTERVAL TOO BRIEF 0 0 3XX CODES 0 0 4XX CODES 0 0 5XX CODES 0 0 6XX CODES 0 0 ESBC global subscribe counters: ----------------------------------------------------------------------- Counter Name Incoming Outgoing ------------------------- -------------------- -------------------- SUBSCRIBES PER SECOND 0 0 ACTIVE SUBSCRIBES 0 0 REQUESTS IN SUBSCRIBE 0 0 RESPONSES IN SUBSCRIBE 0 0 SUCCESS SUBSCRIBES 0 0 REQUEST TIMEOUT 0 0 FORBIDDEN SUBSCRIBES 0 0 UNAUTHORIZED SUBSCRIBES 0 0 INTERVAL TOO BRIEF 0 0 3XX CODES 0 0 4XX CODES 0 0 5XX CODES 0 0 6XX CODES 0 0 ESBC global rps counters: ----------------------------------------------------------------------- Counter Name Incoming Outgoing ------------------------- -------------------- -------------------- REQUESTS PER SECOND 6 6 INVITE PER SECOND 2 2 ACK PER SECOND 2 2 BYE PER SECOND 2 3 CANCEL PER SECOND 0 0 REFER PER SECOND 0 0 PRACK PER SECOND 0 0 SUBSCRIBE PER SECOND 0 0 NOTIFY PER SECOND 0 0 UPDATE PER SECOND 0 0 OPTIONS PER SECOND 0 0 INFO PER SECOND 0 0 REGISTER PER SECOND 0 0 MESSAGE PER SECOND 0 0 #Просмотр статистики вызовов после завершения вызовов: vesbc# show esbc statistics call ESBC global call counters: ----------------------------------------------------------------------- Counter Name Incoming Outgoing ------------------------- -------------------- -------------------- CALLS PER SECOND 0 0 CALL LEGS 0 0 REQUESTS IN CALL 0 0 RESPONSES IN CALL 0 0 ANSWERED CALLS 0 0 CALLS TO WRONG NUMBER 0 0 BUSY CALLS 0 0 NO ANSWERED CALLS 0 0 FORBIDDEN CALLS 0 0 UNAUTHORIZED CALLS 0 0 3XX CODES 0 0 4XX CODES 0 0 5XX CODES 0 0 6XX CODES 0 0 |
Включение генерации аварий происходит включением SNMP-трапов командой snmp-server enable traps esbc в CLI.
Данная команда без указания параметров включает весь набор SNMP-трапов:
Более подробное описание конфигурирования SNMP-трапов можно прочитать в разделе Управление SNMP. |
Список аварийных событий выводится командой show alarms brief в CLI. Данная команда выводит историю аварий, включая уже нормализированные аварии.
Для отображения только активных аварий используется команда show alarms brief active.
Текст аварий и причины их нормализации представлены в таблице ниже.
Авария | Текст аварии | Причины нормализации |
|---|---|---|
cdr-send-error | CDR alarm: failed to send to <main | reserve> ftp server | успешная отправка CDR на FTP-сервер |
cdr-write-error | CDR alarm: failed to write | успешная запись CDR |
general-max-calls-limit | Host <host_name> max calls limit reached | через 10 секунд после последней аварии ИЛИ при снижении счетчика на 80% от лимита |
general-max-cps-limit | Host <host_name> max cps limit reached | через 10 секунд после последней аварии |
general-max-rps-limit | Host <host_name> max rps limit reached | через 10 секунд после последней аварии |
media-resources | Session<session_id>: <Trunk/User interface><trunk_name/ui_name> media resources out | через 15 секунд после последней аварии ИЛИ уничтожение превышающий сессии |
module-connection | Module <module_type> host <host_id> is down | при успешном добавлении модуля в диспетчер |
trunk-group-max-calls-limit | Trunk-Group <trunk_group_name> max calls limit reached | через 10 секунд после последней аварии ИЛИ при снижении счетчика на 80% от лимита |
trunk-group-max-cps-limit | Trunk-Group <trunk_group_name> max cps limit reached | через 10 секунд после последней аварии |
trunk-group-max-rps-limit | Trunk-Group <trunk_group_name> max rps limit reached | через 10 секунд после последней аварии |
trunk-max-calls-limit | Trunk <trunk_name> max calls limit reached | через 10 секунд после последней аварии ИЛИ при снижении счетчика на 80% от лимита |
trunk-max-cps-limit | Trunk <trunk_name> max cps limit reached | через 10 секунд после последней аварии |
trunk-max-rps-limit | Trunk <trunk_name> max rps limit reached | через 10 секунд после последней аварии |
trunk-unavailable | Trunk <trunk_name> is unavailable | при обновлении статуса транка на "Available" |
user-interface-max-calls-limit | User interface <ui_name> max calls limit reached | через 10 секунд после последней аварии ИЛИ при снижении счетчика на 80% от лимита |
user-interface-max-cps-limit | User interface <ui_name> max rps limit reached | через 10 секунд после последней аварии |
user-interface-max-rps-limit | User interface <ui_name> max cps limit reached | через 10 секунд после последней аварии |
voip-block-aor | Отсутствует | не нормализуются |
voip-block-ip | Отсутствует | не нормализуются |
| voip-block-user-agent | Отсутствует | не нормализуются |
| voip-block-sip-user | Отсутствует | не нормализуются |
Для удаления аварий используется команда clear alarms в CLI. |
Аварии по блокировкам (IP, AOR, User-Agent и SIP-User) не отображаются при использовании команды show alarms brief [active], только отсылаются SNMP-трапом. |
CDR (Call Detail Record, рус. «запись сведений о звонках») — это запись, содержащая подробную информацию о совершённых вызовах.
В файл CDR записываются следующие данные:
Заголовок файла (опционален) (<hostname> CDR. File started at 'YYYYMMDDhhmmss');
Отличительный признак (опционален);
Время поступления вызова;
Время ответа на вызов;
Входящий номер вызывающего абонента;
Входящий номер вызываемого абонента;
Исходящий номер вызываемого абонента;
Имя trunk/user-interface вызывающего абонента;
Имя trunk/user-interface вызываемого абонента;
Длительность вызова;
Причина разъединения (согласно ITU-T Q.850);
Индикатор успешного вызова (1 — успешный, 0 — неуспешный);
Сторона-инициатор разъединения (1 — вызывающая сторона, 2 — вызываемая сторона, 3 — ESBC);
Call-ID входящего вызова;
Call-ID исходящего вызова;
Номер вызываемого абонента при переадресации;
IP-адрес шлюза вызывающего абонента;
IP-адрес шлюза вызываемого абонента;
Список IP-адресов из заголовка Record-Route при установлении соединения в направлении от вызывающего абонента;
Список IP-адресов из заголовка Via при установлении соединения в направлении от вызывающего абонента;
IP-адрес из заголовка Contact вызывающего абонента;
IP-адрес из заголовка Contact вызываемого абонента.
Значения параметров в файле CDR записываются в указанном выше порядке и разделяются символом ";".
Хранение записей CDR осуществляется в локальном хранилище ESBC или на внешнем USB-накопителе.
Отправка на внешний сервер осуществляется по протоколу FTP. Поддерживается отправка на два FTP-сервера.
Дополнительно поддерживается сохранение и отправка CDR в SYSLOG. Для отправки в SYSLOG требуется дополнительная конфигурация syslog.
Описание всех команд для настройки CDR приведено в разделе Настройки CDR.
Пример настройки записи CDR с опциональными полями, локальным хранением и отправкой на сервер FTP с резервированием в случае неудачной отправки приведен ниже.
vesbc# vesbc# configure vesbc(config-esbc)# cdr vesbc(config-esbc-cdr)# enable #Добавление заголовка в CDR-запись: vesbc(config-esbc-cdr)# add-header #Запись неудачных вызовов: vesbc(config-esbc-cdr)# collect unsuccess #Запись пустых CDR: vesbc(config-esbc-cdr)# collect empty-files #Режим создания записей: vesbc(config-esbc-cdr)# create-mode periodically vesbc(config-esbc-cdr)# per days 1 vesbc(config-esbc-cdr)# period hours 12 vesbc(config-esbc-cdr)# per minutes 30 #Включение отправки логов: vesbc(config-esbc-cdr)# syslog enable #Добавление отличительного признака: vesbc(config-esbc-cdr)# signature otlichitelnyi_priznak #Настройка локального хранения: vesbc(config-esbc-cdr)# local vesbc(config-esbc-cdr-local)# create-directories by-date vesbc(config-esbc-cdr-local)# keep days 30 vesbc(config-esbc-cdr-local)# keep hours 12 vesbc(config-esbc-cdr-local)# keep minutes 30 vesbc(config-esbc-cdr-local)# path flash:cdr/cdr_record vesbc(config-esbc-cdr-local)# save vesbc(config-esbc-cdr-local)# exit #Настройка основного FTP-сервера: vesbc(config-esbc-cdr)# ftp vesbc(config-esbc-cdr-ftp)# login main_ftp_server vesbc(config-esbc-cdr-ftp)# password password_m_ftp vesbc(config-esbc-cdr-ftp)# path /main_ftp/cdr_record vesbc(config-esbc-cdr-ftp)# remote address 192.168.23.100 vesbc(config-esbc-cdr-ftp)# save vesbc(config-esbc-cdr-ftp)# exit #Настройка резервного FTP-сервера: vesbc(config-esbc-cdr)# reserved-ftp vesbc(config-esbc-cdr-res-ftp)# as-reserved vesbc(config-esbc-cdr-res-ftp)# login reserve_ftp_server vesbc(config-esbc-cdr-res-ftp)# password password_r_ftp vesbc(config-esbc-cdr-res-ftp)# path /reserve_ftp/cdr_record vesbc(config-esbc-cdr-res-ftp)# remote address 192.168.23.200 vesbc(config-esbc-cdr-res-ftp)# save #Применение и подтверждение изменений: vesbc(config-esbc-cdr-res-ftp)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-cdr-res-ftp)# do confirm Configuration has been confirmed. Commit timer canceled. |
Если отправка записи CDR на основной FTP-сервер (192.168.23.100) по какой-либо причине не произойдет, то она попытается отправиться на резервный FTP-сервер (192.168.23.200), в случае неудачи и на резервном, запись сохранится только локально.
Пример записи файла CDR
На ESBC настроена следующая конфигурация CDR:
cdr
enable
add-header
signature test_signature
period minutes 1
local
save
path flash:cdr/
create-directories by-date
keep days 1
exit
exit |
После совершения успешного вызова длительностью 3 секунды, с номера 24001 на номер 23001 будет сформирован файл CDR (через 1 минуту) вида:

Логирование ESBC осуществляется с помощью syslog. Более подробно настройки syslog описаны в разделе Управление SYSLOG справочника команд CLI.
По умолчанию логирование модулей ESBC выключено.
Включение логирования всех модулей при большой вызывной нагрузке может повлиять на производительность системы. Наибольшее влияние на производительность оказывает вывод логов в консоль (syslog console). |
Модули, входящие в состав ESBC
Название | Описание | Назначение |
esbc_core | модуль основной логики | обработка вызовов, отвечает за маршрутизацию вызовов, обеспечивает взаимодействие остальных модулей |
esbc_sip_balancer | модуль управления подсистемой SIP | получение сообщений SIP (на открытый сокет) и передача их в модуль esbc_sip_worker |
esbc_sip_worker | модуль расширения подсистемы SIP | адаптер протокола SIP, обрабатывает сообщения и передает данные модулю esbc_core |
esbc_media_balancer | модуль управления подсистемой media | управление ресурсами в подсистеме media, выделяет RTP-порты и передает их в модуль esbc_media_worker |
esbc_media_worker | модуль расширения подсистемы media | обработка медиапотоков (RTP) |
esbc_config_manager | адаптер базы данных конфигурации | хранение конфигурации системы |
esbc_access_mediator | модуль внешнего доступа | обработка внешних взаимодействий с системой CLI |
esbc_ipc | брокер сообщений | обеспечение связи всех модулей в системе |
esbc_dispatcher | модуль контроля состояния модулей | контроль модулей, индикация об изменении состояний модулей |
esbc_sm | модуль управления абонентскими записями | добавление/удаление записей о регистрации абонентов, добавление/удаление/изменение контактов регистрации, хранение и восстановление записей из базы, предоставление информации о записях и контактах абонентов другим модулям системы |
esbc_voip_guard | модуль fail2ban | отслеживает попытки обращения к сервису телефонии, при обнаружении постоянно повторяющихся неудачных попыток обращения с одного и того же IP-адреса или хоста, модуль блокирует попытки с этого IP-адреса/хоста |
esbc_sysio | модуль взаимодействия с ОС | служит прослойкой между ESBC и ОС, на которой он разворачивается, предоставляет единый интерфейс взаимодействия с системой и реализует мониторинг различных системных событий |
esbc_mon | модуль мониторинга | обеспечение функции мониторинга и сбора статистики |
esbc_aaa | модуль aaa | аутентификация, хранение информации о вызовах |
Включение логирования модулей ESBC производится в разделе debug:
vesbc# #Переход в раздел debug: vesbc# debug vesbc(debug)# #Включение логирования модуля esbc_dispatcher: vesbc(debug)# debug esbc disp #Включение логирования модуля esbc_config_manager: vesbc(debug)# debug esbc cfgmgr #Включение логирования модуля esbc_access_mediator: vesbc(debug)# debug esbc accmed #Включение логирования модуля esbc_mon: vesbc(debug)# debug esbc mon #Включение логирования модуля esbc_aaa: vesbc(debug)# debug esbc aaa #Включение логирования модуля esbc_core: vesbc(debug)# debug esbc core #Включение логирования модуля esbc_sip_balancer: vesbc(debug)# debug esbc sipbl #Включение логирования модуля esbc_sip_worker: vesbc(debug)# debug esbc sipwrk #Включение логирования модуля esbc_media_balancer: vesbc(debug)# debug esbc mediabl #Включение логирования модуля esbc_media_worker: vesbc(debug)# debug esbc mediawrk #Включение логирования модуля esbc_sysio: vesbc(debug)# debug esbc sysio #Включение логирования модуля esbc_sm: vesbc(debug)# debug esbc submngr #Включение логирования модуля esbc_voip_guard: vesbc(debug)# debug esbc voip-guard |
Для отключения логирования модулей ESBC используется команда, аналогичная включению, с приставкой no:
#Выключение логирования модуля esbc_voip_guard: vesbc(debug)# no debug esbc voip-guard |
Для установки параметров логирования по умолчанию используется команда no debug all. Данная команда отключает логирование всех модулей ESBC.
При обработке сигнального SIP-трафика и медиапотоков RTP, ресурсы CPU используются разными модулями ESBC. Соответственно для оптимизации нагрузки на CPU предусмотрена возможность управлять количеством модулей.
При высокой нагрузке сигнальным SIP-трафиком наибольшую нагрузку на ядро CPU производит модуль sip worker, а при большом количестве одновременных вызовов (особенно в режиме транскодирования медии) — media worker.
Поэтому для установления баланса производительности, для многоядерных систем следует использовать оптимальное количество каждого из модулей, т. к. каждый дополнительный экземпляр модуля будет использовать ресурс дополнительного ядра CPU системы.
По умолчанию в системе используется по одному экземпляру каждого модуля.
Список модулей, количество которых можно изменить:
Максимальное количество модулей определяется динамически в зависимости от количества ядер CPU.
После изменения количества модулей для стабильной работы необходим перезапуск ПО ESBC. |
Заданное в конфигурации количество модулей не изменяется при увеличении/уменьшении количества ядер CPU системы. |
Описание всех команд для настройки количества модулей приведено в разделе Общие настройки ESBC.
Пример:
vesbc# vesbc# config vesbc(config)# esbc #Переход в общие настройки: vesbc(config-esbc)# general vesbc(config-esbc-general)# #Увеличение количества медиа-воркеров до 2: vesbc(config-esbc-general)# count media worker 2 vesbc(config-esbc-general)# #Применение и подтверждение изменений: vesbc(config-esbc-general)# do commit 2024-09-09T05:26:55+00:00 %SYS-W-EVENT: WARNING!!! After changing ESBC modules count, the system may work unstable. Please restart software. 2024-09-09T05:26:57+00:00 snmpd restarted Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. 2024-09-09T05:26:58+00:00 %CLI-I-CRIT: user admin from console input: do commit vesbc(config-esbc-general)# do confirm Configuration has been confirmed. Commit timer canceled. 2024-09-09T05:27:01+00:00 %CLI-I-CRIT: user admin from console input: do confirm vesbc(config-esbc-general)# #Перезапуск ПО ESBC для корректного перераспределения модулей: vesbc(config-esbc-general)# do reload esbc force Do you really want to reload esbc now? (y/N): y |
Для вывода предупреждения о необходимости перезапуска нужно, чтобы уровень syslog severity был не ниже warning. |
Схема применения:

Описание:
SIP-абоненты (IP-телефон/VoIP шлюз/Мобильный SIP-клиент и т. д.) отправляют сообщение на IP-адрес 192.168.20.120 порт 5062, ESBC пересылает данный трафик с IP-адреса 192.168.16.113 порт 5061 на адрес Softswitch (IP АТС/SIP-proxy и т. д) 192.168.16.65 порт 5060.
Для реализации данной схемы общий алгоритм настройки следующий:
Порядок конфигурирования ESBC:
1. Настроить IP-адрес на интерфейсе в сторону SSW:
vesbc# configure vesbc(config)# interface gigabitethernet 1/0/1 vesbc(config-if-gi)# description "SSW" vesbc(config-if-gi)# ip address 192.168.16.113/24 vesbc(config-if-gi)# ip firewall disable |
2. Настроить IP-адрес на внешнем интерфейсе в сторону абонентов:
vesbc# configure vesbc(config)# interface gigabitethernet 1/0/2 vesbc(config-if-gi)# description "ABONENTS" vesbc(config-if-gi)# ip address 192.168.20.120/24 |
3. Создать SIP-транспорт в сторону SSW:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# sip transport TRANSPORT_SSW vesbc(config-esbc-sip-transport)# ip address 192.168.16.113 vesbc(config-esbc-sip-transport)# port 5061 |
4. Создать SIP-транспорт в сторону абонентов:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# sip transport TRANSPORT_ABONENTS vesbc(config-esbc-sip-transport)# ip address 192.168.20.120 vesbc(config-esbc-sip-transport)# port 5062 |
5. Создать медиаресурсы для согласования и передачи голоса на плече SSW --- ESBC:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# media resource MEDIA_SSW vesbc(config-esbc-media-resource)# ip address 192.168.16.113 #Указать диапазон портов, который будет выделяться на ESBC для передачи голоса. Данная команда необязательная. Если ее не указывать, будет использоваться диапазон портов 8000–65535. vesbc(config-esbc-media-resource)# port-range 1024-65535 |
6. Создать медиаресурсы для согласования и передачи голоса на плече ESBC --- Абонентский шлюз/SIP-абоненты:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# media resource MEDIA_ABONENTS vesbc(config-esbc-media-resource)# ip address 192.168.20.120 |
7. Создать SIP-транк в сторону SSW:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# trunk sip TRUNK_SSW vesbc(config-esbc-trunk-sip)# sip transport TRANSPORT_SSW vesbc(config-esbc-trunk-sip)# remote address 192.168.16.65 vesbc(config-esbc-trunk-sip)# remote port 5060 vesbc(config-esbc-trunk-sip)# media resource 0 MEDIA_SSW |
8. Создать абонентский интерфейс в сторону абонентов:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# user-interface sip ABONENTS vesbc(config-esbc-user-interface-sip)# sip transport TRANSPORT_ABONENTS vesbc(config-esbc-user-interface-sip)# media resource 0 MEDIA_ABONENTS #Если абоненты находятся за NAT выполнить команду: vesbc(config-esbc-user-interface-sip)# nat comedia-mode on |
9. Создать таблицу маршрутизации и добавить туда правила, по которым вызовы, приходящие с абонентов будут маршрутизироваться на SSW:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# route-table TO_SSW vesbc(config-esbc-route-table)# rule 0 vesbc(config-esbc-route-table-rule)# action direct-to-trunk TRUNK_SSW |
10. Привязать созданную таблицу маршрутизации к абонентскому интерфейсу:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# user-interface sip ABONENTS vesbc(config-esbc-user-interface-sip)# route-table TO_SSW |
11. Применить конфигурацию и подтвердить изменения:
vesbc# commit vesbc# confirm |
В приведённой схеме описаны базовые настройки. |
Схема применения:

Описание:
Транковый шлюз (IP АТС/ SIP-proxy/Удаленный SSW и др.) отправляет сообщения с IP-адреса 192.168.20.99 порта 5060 на IP-адрес 192.168.20.120 порт 5067, ESBC пересылает данный трафик с IP-адреса 192.168.16.113 порта 5065 на адрес Softswitch 192.168.16.65 порт 5060. И в обратную сторону SSW отправляет сообщения с IP-адреса 192.168.16.65 порта 5060 на IP-адрес 192.168.16.113 порт 5065, ESBC пересылает данный трафик с IP-адреса 192.168.20.120 порта 5067 на адрес транкового шлюза 192.168.20.99 порт 5060.
Для реализации данной схемы общий алгоритм настройки следующий:
Порядок конфигурирования ESBC:
1. Настроить IP-адрес на интерфейсе в сторону SSW:
vesbc# configure vesbc(config)# interface gigabitethernet 1/0/1 vesbc(config-if-gi)# description "SSW" vesbc(config-if-gi)# ip address 192.168.16.113/24 |
2. Настроить IP-адрес на интерфейсе в сторону транкового шлюза:
vesbc# configure vesbc(config)# interface gigabitethernet 1/0/2 vesbc(config-if-gi)# description "TRUNK_GATEWAY" vesbc(config-if-gi)# ip address 192.168.20.120/24 |
3. Создать SIP-транспорт в сторону SSW:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# sip transport TRANSPORT_SSW vesbc(config-esbc-sip-transport)# ip address 192.168.16.113 vesbc(config-esbc-sip-transport)# port 5065 |
4. Создать SIP-транспорт в сторону транкового шлюза:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# sip transport TRANSPORT_TRUNK_GATEWAY vesbc(config-esbc-sip-transport)# ip address 192.168.20.120 vesbc(config-esbc-sip-transport)# port 5067 |
5. Создать медиаресурсы для согласования и передачи голоса на плече SSW --- ESBC:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# media resource MEDIA_SSW vesbc(config-esbc-media-resource)# ip address 192.168.16.113 # Указать диапазон портов, который будет выделяться на ESBC для передачи голоса. Данная команда необязательная. Если ее не указывать, будет использоваться диапазон портов 8000–65535. vesbc(config-esbc-media-resource)# port-range 1024-65535 |
6. Создать медиаресурсы для согласования и передачи голоса на плече ESBC --- Транковый шлюз:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# mediaresource MEDIA_TRUNK_GATEWAY vesbc(config-esbc-media-resource)# ip address 192.168.20.120 |
7. Создать SIP-транк в сторону SSW:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# trunk sip TRUNK_SSW vesbc(config-esbc-trunk-sip)# sip transport TRANSPORT_SSW vesbc(config-esbc-trunk-sip)# remote address 192.168.16.65 vesbc(config-esbc-trunk-sip)# remote port 5060 vesbc(config-esbc-trunk-sip)# media resource 0 MEDIA_SSW |
8. Создать SIP-транк в сторону транкового шлюза:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# trunk sip TRUNK_GATEWAY vesbc(config-esbc-trunk-sip)# sip transport TRANSPORT_TRUNK_GATEWAY vesbc(config-esbc-trunk-sip)# remote address 192.168.20.99 vesbc(config-esbc-trunk-sip)# remote port 5060 vesbc(config-esbc-trunk-sip)# media resource 0 MEDIA_TRUNK_GATEWAY |
9. Создать таблицу маршрутизации и добавить туда правила, по которым вызовы, приходящие с транкового шлюза будут маршрутизироваться на SSW:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# route-table TO_SSW vesbc(config-esbc-route-table)# rule 0 vesbc(config-esbc-route-table-rule)# action direct-to-trunk TRUNK_SSW |
10. Создать таблицу маршрутизации и добавить туда правила, по которым вызовы, приходящие с SSW будут маршрутизироваться на транковый шлюз:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# route-table TO_TRUNK_GATEWAY vesbc(config-esbc-route-table)# rule 0 vesbc(config-esbc-route-table-rule)# action direct-to-trunk TRUNK_GATEWAY |
11. Привязать созданные таблицы маршрутизации к транкам:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# trunk sip TRUNK_SSW vesbc(config-esbc-trunk-sip)# route-table TO_TRUNK_GATEWAY vesbc(config-esbc-trunk-sip)# exit vesbc(config-esbc)# trunk sip TRUNK_GATEWAY vesbc(config-esbc-trunk-sip)# route-table TO_SSW |
12. Применить конфигурацию и подтвердить изменения:
vesbc# commit vesbc# confirm |
В приведённой схеме описаны базовые настройки. |
Схема применения:

Описание:
SIP-абоненты (WEB, Desktop-клиенты) отправляют сообщения на IP-адрес 192.168.20.120 порт 5062 с помощью WebSocket Secure, ESBC отправляет по TCP данный трафик с IP-адреса 192.168.16.113 порт 5061 на адрес Softswitch (IP АТС/SIP-proxy и т. д) 192.168.16.65 порт 5060.
Для реализации данной схемы общий алгоритм настройки следующий:
Порядок конфигурирования ESBC:
1. Настроить IP-адрес на интерфейсе в сторону SSW:
vesbc# configure vesbc(config)# interface gigabitethernet 1/0/1 vesbc(config-if-gi)# description "SSW" vesbc(config-if-gi)# ip address 192.168.16.113/24 vesbc(config-if-gi)# ip firewall disable |
2. Настроить IP-адрес на внешнем интерфейсе в сторону абонентов:
vesbc# configure vesbc(config)# interface gigabitethernet 1/0/2 vesbc(config-if-gi)# description "ABONENTS" vesbc(config-if-gi)# ip address 192.168.20.120/24 |
3. Создать SIP-транспорт в сторону SSW:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# sip transport TRANSPORT_SSW vesbc(config-esbc-sip-transport)# ip address 192.168.16.113 vesbc(config-esbc-sip-transport)# mode tcp-prefer vesbc(config-esbc-sip-transport)# port 5061 |
4. Создать SIP-транспорт в сторону абонентов:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# sip transport TRANSPORT_ABONENTS vesbc(config-esbc-sip-transport)# ip address 192.168.20.120 vesbc(config-esbc-sip-transport)# mode wss vesbc(config-esbc-sip-transport)# port 5062 |
Если абоненты используют WebSocket, а не WebSocket Secure, то необходимо выбрать mode ws в настройках SIP-транспорта для абонентов. |
5. Создать медиаресурсы для согласования и передачи голоса на плече SSW --- ESBC:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# media resource MEDIA_SSW vesbc(config-esbc-media-resource)# ip address 192.168.16.113 #Указать диапазон портов, который будет выделяться на ESBC для передачи голоса. Данная команда необязательная. Если ее не указывать, будет использоваться диапазон портов 8000–65535. vesbc(config-esbc-media-resource)# port-range 1024-65535 |
6. Создать медиаресурсы для согласования и передачи голоса на плече ESBC --- Абонентский шлюз/SIP-абоненты:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# media resource MEDIA_ABONENTS vesbc(config-esbc-media-resource)# ip address 192.168.20.120 |
7. Создать медиапрофиль с шифрованием DTLS-SRTP для SIP-абонентов:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# media profile MEDIA_PROFILE_ABONENTS vesbc(config-esbc-media-profile)# srtp mode mandatory vesbc(config-esbc-media-profile)# srtp keying dtls-srtp |
8. Создать SIP-транк в сторону SSW:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# trunk sip TRUNK_SSW vesbc(config-esbc-trunk-sip)# sip transport TRANSPORT_SSW vesbc(config-esbc-trunk-sip)# remote address 192.168.16.65 vesbc(config-esbc-trunk-sip)# remote port 5060 vesbc(config-esbc-trunk-sip)# media resource 0 MEDIA_SSW |
9. Создать абонентский интерфейс в сторону абонентов:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# user-interface sip ABONENTS vesbc(config-esbc-user-interface-sip)# sip transport TRANSPORT_ABONENTS vesbc(config-esbc-user-interface-sip)# media resource 0 MEDIA_ABONENTS vesbc(config-esbc-user-interface-sip)# media profile MEDIA_PROFILE_ABONENTS #Если абоненты находятся за NAT, выполнить команду: vesbc(config-esbc-user-interface-sip)# nat comedia-mode on |
10. Создать таблицу маршрутизации и добавить туда правила, по которым вызовы, приходящие с абонентов, будут маршрутизироваться на SSW:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# route-table TO_SSW vesbc(config-esbc-route-table)# rule 0 vesbc(config-esbc-route-table-rule)# action direct-to-trunk TRUNK_SSW |
11. Привязать созданную таблицу маршрутизации к абонентскому интерфейсу:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# user-interface sip ABONENTS vesbc(config-esbc-user-interface-sip)# route-table TO_SSW |
12. Применить конфигурацию и подтвердить изменения:
vesbc# commit vesbc# confirm |
В приведённой схеме описаны базовые настройки. |
При использовании динамического режима фактический адрес назначения при вызове в транк определяется внешним сервисом.
В текущей версии ПО поддержана работа только с DNS в качестве внешнего сервиса. |
Схема применения:

Описание:
SIP-абоненты (IP-телефон/VoIP-шлюз/Мобильный SIP-клиент и т. д.) отправляют SIP-запросы на IP-адрес 192.168.20.120 порт 5062.
ESBC должен смаршрутизировать запрос в зависимости от домена в hostname части RURI, полученного от абонента. Вызовы/регистрации могут быть смаршрутизированы на один из трёх Softswitch (IP АТС/SIP-proxy и т. д), на каждом из них настроено несколько доменов.
Для реализации данной схемы общий алгоритм настройки следующий:
Порядок конфигурирования ESBC:
1. Настроить адрес внешнего сервиса, пример с DNS:
vesbc(config)# domain lookup enable vesbc(config)# domain nameserver 192.168.20.100 vesbc(config)# |
2. Настроить IP-адрес на интерфейсе в сторону SSW:
vesbc# configure vesbc(config)# interface gigabitethernet 1/0/1 vesbc(config-if-gi)# description "SSW" vesbc(config-if-gi)# ip address 192.168.16.113/24 vesbc(config-if-gi)# ip firewall disable |
3. Настроить IP-адрес на внешнем интерфейсе в сторону абонентов:
vesbc# configure vesbc(config)# interface gigabitethernet 1/0/2 vesbc(config-if-gi)# description "ABONENTS" vesbc(config-if-gi)# ip address 192.168.20.120/24 |
4. Создать SIP-транспорт в сторону SSW:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# sip transport TRANSPORT_SSW vesbc(config-esbc-sip-transport)# ip address 192.168.16.113 vesbc(config-esbc-sip-transport)# port 5061 |
5. Создать SIP-транспорт в сторону абонентов:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# sip transport TRANSPORT_ABONENTS vesbc(config-esbc-sip-transport)# ip address 192.168.20.120 vesbc(config-esbc-sip-transport)# port 5062 |
6. Создать медиаресурсы для согласования и передачи голоса на плече SSW --- ESBC:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# media resource MEDIA_SSW vesbc(config-esbc-media-resource)# ip address 192.168.16.113 #Указать диапазон портов, который будет выделяться на ESBC для передачи голоса. Данная команда необязательная. Если ее не указывать, будет использоваться диапазон портов 8000–65535. vesbc(config-esbc-media-resource)# port-range 1024-65535 |
7. Создать медиаресурсы для согласования и передачи голоса на плече ESBC --- Абонентский шлюз/SIP-абоненты:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# media resource MEDIA_ABONENTS vesbc(config-esbc-media-resource)# ip address 192.168.20.120 |
8. Создать динамический SIP-транк, в качестве адреса указать подсеть, в которой находятся SSW:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# trunk sip SSW_DYNAMIC vesbc(config-esbc-trunk-sip)# sip transport TRANSPORT_SSW vesbc(config-esbc-trunk-sip)# remote address 192.168.16.0/24 vesbc(config-esbc-trunk-sip)# remote port 5060 vesbc(config-esbc-trunk-sip)# dynamic-mode dns vesbc(config-esbc-trunk-sip)# media resource 0 MEDIA_SSW |
9. Создать абонентский интерфейс в сторону абонентов:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# user-interface sip ABONENTS vesbc(config-esbc-trunk-sip)# sip transport TRANSPORT_ABONENTS vesbc(config-esbc-trunk-sip)# media resource 0 MEDIA_ABONENTS #Если абоненты находятся за NAT, выполнить команду: vesbc(config-esbc-user-interface-sip)# nat comedia-mode on |
10. Создать таблицу маршрутизации и добавить туда правила, по которым вызовы, приходящие с абонентов будут маршрутизироваться на SIP-транк с динамическим режимом:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# route-table TO_SSW vesbc(config-esbc-route-table)# rule 0 vesbc(config-esbc-route-table-rule)# action direct-to-trunk SSW_DYNAMIC |
11. Привязать созданную таблицу маршрутизации к абонентскому интерфейсу:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# user-interface sip ABONENTS vesbc(config-esbc-user-interface-sip)# route-table TO_SSW |
12. Применить конфигурацию и подтвердить изменения:
vesbc# commit vesbc# confirm |
Пример обработки запроса:
SIP-абонент отправляет сообщение REGISTER, в hostname RURI указывает ssw125_2.domain. ESBC отправляет запрос на DNS-сервер (192.168.20.100) для определения адреса назначения, внешний сервис в ответ присылает адрес SIP-сервера (192.168.16.125), на который нужно отправить запрос. ESBC отправляет регистрацию на указанный адрес, подставляя в заголовки To и From ssw125_2.domain, последующие запросы с этого абонента при указании того же домена будут отправляться в транк 192.168.16.125:5060 без предварительного обращения к внешнему сервису.
Для определения входящего вызова из транка с динамическим режимом используется адрес/маска подсети из remote address и порт/диапазон портов из remote port.
В приведённой схеме описаны базовые настройки. |