В данном разделе приведены примеры конфигурирования функций пограничного контроллера сессий.
Переход в режим конфигурирования осуществляется следующими командами:
vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# |
| Объект | Количество |
|---|---|
| sip transport | 500 |
| trunk | 500 |
| user-interface | 500 |
| trunk-group | 250 |
| sip profile | 1000 |
| route table | 500 |
| rule | 64 на таблицу route table |
| condition | 64 на правило rule |
| media profile | 1000 |
| media resource | 1000 |
| mod-table | 500 |
| mod | 64 на таблицу mod-table |
Не рекомендуется использовать максимальное количество объектов конфигурации одновременно, это может повлиять на работоспособность системы. |
Максимальное количество зарегистрированных абонентов (AOR) исходя из конфигурации ESBC представлено в таблице ниже.
Объем оперативной памяти (RAM) ESBC | Количество абонентов |
|---|---|
3Gb | 4500 |
≥4Gb | 80000*(объем RAM)*0.25 |
ESBC-3200 поддерживает до 420000 абонентов. |
Схема применения:

Описание:
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. Пробросить сетевые интерфейсы в vESBC по инструкции (только для vESBC):
gi1/0/1 — внутренний сетевой интерфейс до SSW;
gi1/0/2 — внешний сетевой интерфейс для абонентов.
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. Создать транк в сторону 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-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. Создать таблицу маршрутизации и добавить туда правила, по которым вызовы, приходящие с абонентов будут маршрутизироваться на 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 |
В приведенной схеме описаны базовые настройки, описание всех команд приведено в разделе Настройка ESBC.
Схема применения:

Описание:
Транковый шлюз (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. Пробросить сетевые интерфейсы в vESBC по инструкции (только для vESBC):
gi1/0/1 — сетевой интерфейс до SSW;
gi1/0/2 — сетевой интерфейс до транкового шлюза.
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 |
3. Настроить 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 |
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 5065 |
5. Создать 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 |
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 --- Транковый шлюз:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# mediaresource MEDIA_TRUNK_GATEWAY vesbc(config-esbc-media-resource)# ip address 192.168.20.120 |
8. Создать SIP-trunk в сторону 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. Создать SIP-trunk в сторону транкового шлюза:
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 |
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. Создать таблицу маршрутизации и добавить туда правила, по которым вызовы, приходящие с 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 |
12. Привязать созданные таблицы маршрутизации к транкам:
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 |
13. Применить конфигурацию и подтвердить изменения:
vesbc# commit vesbc# confirm |
Cоздание транков с одинаковым SIP-транспортом и IP:Port разрешено только в случае, если отличается домен. |
В приведенной схеме описаны базовые настройки, описание всех команд приведено в разделе Настройка 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-адреса для разных медиаресурсов не допускается пересечение диапазонов портов между этими ресурсами. |
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 из примера выше. Режимы работы следующие:
Транк-группа представляет собой набор транков различного типа (в текущей версии поддерживается только 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 в сторону 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 в сторону 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 и т. д.
Схематично таблица маршрутизации выглядит следующим образом:

Таблица маршрутизации представляет собой набор правил и действий, по которым обрабатывается входящий вызов, и указывается исходящий транк (или транк-группа) для формирования исходящего вызова.
Таблицы маршрутизации применяются к входящим вызовам и могут быть настроены для транков, транк-групп и абонентских интерфейсов.
Таблица состоит из правил (RULE), правило обязательно должно содержать действие (ACTION), и, опционально, — условия (CONDITION), которые должны быть соблюдены для выполнения данного действия маршрутизации. Если условия отсутствуют, действия совершаются безусловно.
Действие — это операция, результатом которой будет являться конкретное направление (DEST).
В текущей версии в качестве направлений могут выступают транки и транк-группы, поддержаны условия маршрутизации по CGPN и CDPN, а также реализовано новое условие маршрутизации SIP-MESSAGE.
Правила маршрутизации выбираются по порядку до тех пор, пока второе плечо не будет успешно согласовано, или не будет рассмотрено последнее правило. Если рассматривать на примере вызова, то роутинг будет выполняться до тех пор, тока второе плечо не примет вызов.
В случае маршрутизации на транк-группу действует тот же алгоритм. Т. е. проходим по всем транкам выбранной группы по порядку до тех пор, пока сессия не согласуется, или не будет выбран последний транк. Если после прохождения по всем транкам выбранной группы нам не удалось согласовать второе плечо, мы продолжим выбирать оставшиеся правила из таблицы маршрутизации.
В общем, этот алгоритм можно описать так: проход по всем направлениям, всех правил маршрутизации, пока сессия не будет согласована, или не будет рассмотрено последнее правило.
Исключением является правило 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 работает в режиме проксирования.
При создании медиапрофиля список кодеков, доступных для проксирования, добавляется автоматически.
vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# media profile MEDIA_PROFILE vesbc(config-esbc-media-profile)# do commit vesbc(config-esbc-media-profile)# do confirm vesbc(config-esbc-media-profile)# do sh running-config esbc media profile 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 |
Для очистки списка используется команда no codec allow all. При использовании данной команды будут удалены кодеки, добавленные автоматически при создании профиля, и кодеки, добавленные пользователем.
Список кодеков, разрешенных для проксирования, можно изменять, а также добавлять в него любые кодеки. Для этого используется команда:
codec allow <full or partial codec name> [payload type] |
где:
<full or partial codec name> — часть или полное название кодека (в соответствии с SDP rtpmap);
[payload type] — номер payload type. Параметр опциональный.
Допускается указание части названия кодека, например: codec allow G72, в таком случае будет разрешено проксирование кодеков G726-16, G726-24, G726-32, G726-40.
Для кодеков со статическим payload type рекомендуется указывать номер payload type, иначе, если в SDP не будет указан атрибут rtpmap, вызов будет отбиваться кодом 488. |
Поддержка кодеков для транскодирования осуществляется командами:
Порядок обработки SDP для выбора режима работы:
1. Offer SDP фильтруется согласно разрешённым кодекам на плече A.
2. Offer SDP фильтруется согласно разрешённым кодекам на плече B.
3. В конец Offer SDP добавляются недостающие кодеки, транскодинг которых включен в media profile на плече B.
4. Answer SDP фильтруется согласно разрешённым кодекам на плече B.
5. В конец Answer SDP добавляются недостающие кодеки, транскодинг которых включен в media profile на плече A.
В результате транскодирование включается, если самые приоритетные кодеки из Offer и Answer SDP не совпадают.
Иначе при совпадении приоритетных кодеков будет использоваться проксирование.
Пример:
На плече A разрешён только кодек PCMA:
media profile MP_A codec audio PCMA exit |
на плече B — PCMU:
media profile MP_B codec audio PCMU exit |
В данном случае на плечах А и B будут согласованы кодеки PCMA и PCMU соответственно, и будет включено транскодирование.
Если на плече B включить поддержку PCMA:
media profile MP_B codec audio PCMU codec audio PCMA exit |
то выбор режима работы (проксирование/транскодирование) будет осуществляться в зависимости от кодека, указанного в Answer SDP плеча B.
Если в ответе первым кодеком будет указан PCMA, то будет выбран режим проксирования, если PCMU — режим транскодирования.
Это функция контроля состояния разговора по наличию RTP-трафика от встречного устройства. Контроль осуществляется следующим образом: если в течение заданного времени от встречного устройства не поступает ни одного RTP-пакета, то вызов завершается.
По умолчанию контроль выключен.
vesbc# vesbc# configure vesbc(config)# esbc #Создание медиапрофиля NEW_MEDIA_PROFILE: vesbc(config-esbc)# media profile NEW_MEDIA_PROFILE vesbc(config-esbc-media-profile)# #Включение таймера в медиапрофиле: vesbc(config-esbc-media-profile)# rtp timeout 100 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 в течение 100 секунд не будут приходить RTP-пакеты, то вызов будет принудительно завершён.
SRTP (Secure Real-time Transport Protocol) — это расширенная версия протокола RTP с набором защитных механизмов. Протокол был опубликован организацией IETF в стандарте RFC 3711. SRTP обеспечивает конфиденциальность за счет шифрования RTP-нагрузки. Для шифрования медиапотока SRTP стандартизирует использование только единственного шифра — AES, который может использоваться в двух режимах:
SRTP использует функцию формирования ключа для создания ключей на основе мастер-ключа. Протокол управления ключами создает все ключи в сессии с помощью мастер-ключа. За счет того, что у каждой сессии свой уникальный ключ, все сессии защищены. Поэтому, если одна сессия была скомпрометирована, то остальные по-прежнему под защитой.
В конфигурации доступны 2 метода обмена ключами:
и 3 режима использования SRTP:
Если выбран режим mandatory и включены оба метода, то на втором плече будет выбран DTLS-SRTP, как более приоритетный.
По умолчанию поддержка SRTP выключена. |
Пример использования 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] |
SIP-профиль служит для конфигурации общих параметров SIP. Его можно привязать к транкам, транк-группам и абонентским интерфейсам.
В текущей версии поддержаны следующие настройки:
Игнорирование OPTIONS.
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. |
Если в течение 30 секунд (failed-interval) из TRUNK_OUT не будет получено ни одного сообщения, то он станет считаться недоступным, и ESBC будет отправлять в сторону TRUNK_OUT OPTIONS (пока поддержан только этот метод контроля) с интервалом 30 секунд (failed-interval).
Если из транка было получено какое-либо сообщение (в том числе ответ на OPTIONS), то транк считается доступным, следующий запрос OPTIONS отправится через 120 секунд (success-interval).
Контроль доступности не работает для абонентских интерфейсов. |
На ESBC есть возможность создать список ответов, при получении которых происходит перемаршрутизация на следующее направление (следующий транк в транковой группе/следующее правило в таблице маршрутизации). Это работает как для вызовов, так и для регистраций.
При создании маски для списка можно использовать регулярные выражения 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. |
Приходит вызов и начинает маршрутизироваться по данной таблице маршрутизации. В результате вызов уходит на TRUNK_GROUP и оттуда в TRUNK_1, он недоступен, вызов отбивается по Timer B и происходит перемаршрутизация на TRUNK_2 (следующий транк в транковой группе), из TRUNK_2 приходит ответ 404 Not Found, код ответа совпадает с маской из списка, который привязан к TRUNK-GROUP, поэтому происходит маршрутизация на следующее направление, в транковой группе больше нет транков, поэтому ESBC переходит к RULE_2, и вызов маршрутизируется в TRUNK_3.
Если нет привязанного списка, то перемаршрутизация происходит только по недоступности транка. |
Если с абонентского интерфейса пришёл ответ, совпадающий с маской, то перемаршрутизации не будет. |
Перемаршрутизация абонентов
Вызов с зарегистрированного абонента будет направлен в тот транк, где он регистрировался. В случае неудачи перемаршрутизация запрещена.
При вызове с незарегистрированного абонента сначала идёт проверка, разрешены ли с этого абонентского интерфейса вызовы без регистрации (allow_unreg_call), если проверка успешна, то вызов смаршрутизируется по привязанной таблице маршрутизации и в случае недоступности транка/совпадении ответа с маской из списка произойдёт маршрутизация на следующее направление.
На ESBC есть возможность настроить поведение при перенаправлении(получении 3xx ответа), доступны 3 варианта:
Пример локальной обработки 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 в конфигурации транка. |
В прочих случаях — вызов завершается.
На ESBC есть возможность настроить поведение при получение OPTIONS:
ignore options enable — игнорирование запросов OPTIONS
no ignore options enable — отключение игнорирования запросов OPTIONS
Игнорирование OPTIONS по умолчанию включено |
Если к user-interface привязан sip profile с включенным игнорированием OPTIONS, то при получении OPTIONS от зарегистрированных абонентов ESBC будет обрабатывать эти запросы и отвечать 200 OK. Если OPTIONS приходят не с зарегистрированных абонентов, то такие запросы игноригуются. |
С целью преодоления соединений через устройства 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.
Подмена атрибутов direction в SDP
При включении опции nat comedia-mode все атрибуты direction в SDP при отправке offer sdp заменяются на sendrecv.
При отправке sdp answer в сторону транка/абонентского интерфейса с включенной опцией все атрибуты direction заменяются на максимально возможные, вне зависимости от того, какие атрибуты были в полученном answer на другом плече (в ответ на sendrecv — sendrecv, в ответ на sendonly — recvonly, в ответ на recvonly — sendonly).
Примеры:
1. Замена атрибутов direction в offer sdp:

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

Public-ip (рус. - «публичный IP-адрес») — это внешний IP-адрес, который используется при отправке запросов пользователю или удаленному адресу из внешней сети.
Public-ip можно использовать на user-interface, trunk и trunk-group.
Можно указать как IPv4, так и IPv6 адрес |
При использовании public-ip адрес подставляется в заголовки Via и Contact, а также в секцию SDP. Media будет работать в режиме NAT-comedia.
Пример настройки public-ip на user-interface:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# user-interface sip UI vesbc(config-esbc-user-interface-sip)# public-ip Пример настройки public-ip на trunk: vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# trunk sip TRUNK vesbc(config-esbc-trunk-sip)# public-ip Пример настройки public-ip на trunk-group: vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# trunk-group TRUNK-GROUP vesbc(config-esbc-trunk-group)# public-ip #Применение и подтверждение изменений 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. |
При назначении public-ip на trunk и trunk-group, приоритет public-ip на trunk будет выше. |
QoS (Quality of Service, рус. - «качество обслуживания») - технология предоставления различным классам данных различных приоритетов в обслуживании.
QoS можно настроить для:
QoS можно настроить на:
При назначении QoS на trunk и trunk-group, приоритет QoS на trunk будет выше. |
Можно задать командой:
dscp <type> <value>, где:
type:
value - имеет значение от 0 до 63 (чем выше, тем трафик приоритетнее).
Пример настройки QoS на trunk, trunk-group и user-interface:
vesbc# vesbc# configure vesbc(config)# esbc #Назначение QoS для аудио, видео и сигнализации на trunk vesbc(config-esbc)# trunk sip TRUNK vesbc(config-esbc-trunk-sip)# dscp audio 60 vesbc(config-esbc-trunk-sip)# dscp video 60 vesbc(config-esbc-trunk-sip)# dscp signaling 60 vesbc(config-esbc-trunk-sip)# ex #Назначение QoS для аудио, видео и сигнализации на trunk-group vesbc(config-esbc)# trunk-group TRUNK-GROUP vesbc(config-esbc-trunk-group)# dscp audio 55 vesbc(config-esbc-trunk-group)# dscp video 55 vesbc(config-esbc-trunk-group)# dscp signaling 55 vesbc(config-esbc-trunk-group)# exit #Назначение QoS для аудио, видео и сигнализации на User-Interface vesbc(config-esbc)# user-interface sip USER-INTERFFCE vesbc(config-esbc-user-interface-sip)# dscp audio 58 vesbc(config-esbc-user-interface-sip)# dscp video 58 vesbc(config-esbc-user-interface-sip)# dscp signaling 58 vesbc(config-esbc-user-interface-sip)# exit #Применение и подтверждение изменений 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 поддерживает два типа модификаторов — 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 для помещения значений в локальные переменные (от 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-модификации:


Поддерживаемые модификации
Поддерживаются следующие типы модификации:
replace — замена заголовка.
transit — передача заголовка. Данная модификация применяется только при использовании в качестве in (таблицы out всегда передают все заголовки, полученные с другого плеча).
Работа с переменными модификатора copy
Значения переменных, полученных в модификаторе copy, можно использовать в модификаторах replace (поле replacement) и add (поле header value) в рамках одной таблицы модификации и только для текущего сообщения.
Например, при использовании модификатора copy в таблице на IN, для каждого входящего сообщения будет использоваться отдельный экземпляр таблицы, соответственно, в каждом случае значение переменных будет разным.
Подстроки ${name_perem} будут заменены на значение соответствующей переменной. Если переменная не задана — подстрока будет удалена. Длина переменной — до 128 символов.
Порядок применения модификаций в таблице
Модификации в рамках одной таблицы применяются последовательно ко всем заголовкам в порядке добавленном в конфигурации, т. е. первая модификация применяется ко всем заголовкам, затем вторая модификация применится ко всем заголовкам и т. д.
В результате если какой-либо заголовок был добавлен модификацией 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 не будет передан.
Схема:

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из 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. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Test_header. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, вырезался заголовок Test_header, если в его содержимом есть "example string".
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 |
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Diversion (предварительно следует настроить таблицу модификации на IN транка TRUNK_IN для транзита заголовка Dicersion на второе плечо). Требуется, чтобы в запросе 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]... |
ESBC поддерживает создание flood filter для механизма конфигурируемой защиты от sip-flood, также для фильтрации клиентских приложений. Flood filter имеет доступ ко всему sip-сообщению (включая тело - SDP, XML и т.д.)
Flood filter привязывается к профилю безопасности (security profile), который в свою очередь может быть привязан к:
general;
trunk;
trunk-group;
user-interface.
Приоритет применения:
trunk / user-interface;
trunk-group;
general.
При создании паттерна можно использовать регулярные выражения PCRE.
Также есть команда default patterns, которая создает 18 паттернов для запрещенных User-Agent.
Соответствие запрещенных 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 , то они не создадутся. |
При получении сообщения подпадающего под flood filter, сессия завершается (если она была создана) и посылается ivent voip-guard.
Если в security profile включена блокировка по AOR (check aor), то в black-list добавится AOR, если нет, то добавится IP-адрес.
Блокировка по User-Agent в flood filter не предусмотрена. |
Пример настройки flood filter с привязкой его к security profile для фильтрации всех запросов на всех trunk и user-interface:
vesbc# vesbc# configure vesbc(config)# esbc #Создание flood filter vesbc(config-esbc)# flood filter FLOOD_FILTER vesbc(config-esbc-flood-filter)# default patterns vesbc(config-esbc-flood-filter)# pattern 18 User-Agent:.*tester.* #Фильтрацих всех запросов vesbc(config-esbc-flood-filter)# apply-to-created vesbc(config-esbc-flood-filter)# exit #Создание security profile и привязка к нему flood filter vesbc(config-esbc)# security profile SECURITY_PROFILE vesbc(config-esbc-security-profile)# flood filter 0 FLFLOOD_FILTEROOD vesbc(config-esbc-security-profile)# exit #Привязка security profile к general vesbc(config-esbc)# general vesbc(config-esbc-general)# security profile trunk SECURITY_PROFILE 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. |
ESBC поддерживает создание security profile (профиля безопасности) для механизма защиты от sip и flood атак.
К security profile можно привязать flood filter для защиты от flood атаках, а также можно включить сбор ошибок по AOR и User-Agent, включая их агрегирование (накопление ошибок с разными AOR или User-Agent, но с одним IP-адресом).
Security profile может быть привязан к:
general;
trunk;
trunk-group;
user-interface.
Приоритет применения:
trunk / user-interface;
trunk-group;
general.
Пример создания security profile для сбора ошибок по AOR и User-Agent, а также их агрегирование со всех trunk и user-interface:
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# security profile SECURITY_PROFILE #Сбор ошибок по AOR vesbc(config-esbc-security-profile)# check aor #Сбор ошибок по User-Agent vesbc(config-esbc-security-profile)# check user-agent #Агрегирование ошибок vesbc(config-esbc-security-profile)# errors aggregation vesbc(config-esbc-security-profile)# exit #Привязка security profile к general vesbc(config-esbc)# general vesbc(config-esbc-general)# security profile trunk SECURITY_PROFILE 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. |
При получении ошибок мы будем накапливать их до веса блокировки.
Заблокированные IP-адреса, AOR и User-Agent можно посмотреть командой show esbc black-list [ip | aor | user-agent]. |
ESBC поддерживает создание crypto profile для управления пользовательскими сертификатами для TLS и WSS транспортов, а также DTLS медиа.
Crypto profile можно привязать к sip transport и media 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 #Установка сертификата устройства (Device Certificate) vesbc(config-esbc-crypto-profile)# cert default_cert.pem #Установка приватного ключа vesbc(config-esbc-crypto-profile)# private-key default_ca_key.pem #Установка пароля приватного ключа 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 #Привязка crypto profile к sip transport и media profile vesbc(config-esbc)# sip transport SIP-TRANSPORT vesbc(config-esbc-sip-transport)# crypto profile CRYPTO-PROFILE vesbc(config-esbc-sip-transport)# ex vesbc(config-esbc)# media profile MEDIA-PROFILE vesbc(config-esbc-media-profile)# crypto profile CRYPTO-PROFILE vesbc(config-esbc-media-profile)# exit #Применение и подтверждение изменений 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 поддерживает добавление дополнительных модулей для распределения нагрузки.
Список модулей, количество которых можно изменить:
Максимальное количество модулей определяется динамически в зависимости от количества ядер CPU.
После изменения количества модулей для стабильной работы необходим перезапуск ПО ESBC. |
Заданное в конфигурации количество модулей не изменяется при увеличении/уменьшении количества ядер CPU системы. |
Пример:
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. |
На ESBC имеется возможность контролировать интенсивность входящего трафика. В конфигурации доступна настройка максимального количества:
Ограничения можно настроить для всей системы и отдельно для транка, транковой группы, абонентского интерфейса.
Пример глобального ограничения:
vesbc# vesbc# config vesbc(config)# esbc #Переход в общие настройки: vesbc(config-esbc)# general vesbc(config-esbc-general)# #Ограничение максимального RPS: vesbc(config-esbc-general)# max rps COUNT Possible max rps: 1-4294967295 vesbc(config-esbc-general)# max rps 40 #Применение и подтверждение изменений: 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)# |
После применения изменений ESBC не будет обрабатывать более 40 входящих SIP-запросов в секунду.
Пример ограничения на транке:
vesbc# vesbc# config vesbc(config)# esbc #Переход в настройки транка: vesbc(config-esbc)# trunk sip TRUNK vesbc(config-esbc-trunk-sip)# #Ограничение максимального CPS: vesbc(config-esbc-trunk-sip)# max cps 10 vesbc(config-esbc-trunk-sip)# #Применение и подтверждение изменений: vesbc(config-esbc-trunk-sip)# 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-trunk-sip)# do confirm Configuration has been confirmed. Commit timer canceled. vesbc(config-esbc-trunk-sip)# |
После применения изменений ESBC не будет обрабатывать более 10 входящих вызовов на SIP-транк TRUNK в секунду.
Пример ограничения на абонентском интерфейсе:
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 calls 500 vesbc(config-esbc-user-interface-sip)# #Применение и подтверждение изменений: vesbc(config-esbc-user-interface)# 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-user-interface)# do confirm Configuration has been confirmed. Commit timer canceled. vesbc(config-esbc-user-interface)# |
После применения изменений ESBC не будет обрабатывать более 500 входящих вызовов на абонентский интерфейс USER_IFACE.
Ограничение трафика на транковой группе
Ограничение на транковой группе применяется для всех транков, входящих в состав этой группы, и имеет приоритет над ограничением, установленным в настройках транка.
При этом суммарное количество входящего трафика на транках, входящих в состав группы, также не может превышать ограничение на группе.
Пример:
vesbc# vesbc# config vesbc(config)# esbc #Переход в настройки транка: vesbc(config-esbc)# trunk sip TRUNK_1 vesbc(config-esbc-trunk-sip)# #Ограничение максимального CPS на транке: vesbc(config-esbc-trunk-sip)# max cps 50 #Переход в настройки транковой группы и добавление транков: vesbc(config-esbc-trunk-sip)# exit vesbc(config-esbc)# trunk-group GROUP vesbc(config-esbc-trunk-group)# trunk 0 TRUNK_0 vesbc(config-esbc-trunk-group)# trunk 1 TRUNK_1 vesbc(config-esbc-trunk-group)# trunk 2 TRUNK_2 #Ограничение максимального CPS на группе: vesbc(config-esbc-trunk-group)# max cps 30 #Применение и подтверждение изменений: vesbc(config-esbc-trunk-group)# 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-trunk-group)# do confirm Configuration has been confirmed. Commit timer canceled. vesbc(config-esbc-trunk-group)# |
После применения изменений на транках TRUNK_0, TRUNK_1, TRUNK_2 не может быть суммарно более 30 входящих вызовов в секунду.
Лицензионное ограничение обработки вызовов
Максимальное количество одновременных вызовов и максимальное количество вызовов в секунду ограничиваются лицензиями 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 доступен мониторинг. В текущей версии ПО в CLI есть команды (show esbc) для просмотра:
активных вызовов;
Активные сессии
Поддержана возможность просматривать активные вызовы командой:
show esbc active calls
В выводе информации о активных сессиях присутствует:
| Присутствует возможность удаление активных сессий (смотреть в пункте "Управление активными сессиями и записями"). |
Пример вывода:
vesbc# show esbc active calls
Total call sessions: 937
ESBC active sessions:
-----------------------------------
Session id Duration CGPN CDPN Source Destination CGPN CDPN
(sec) unmodified unmodified modified modified
-------------------- -------- ---------- ---------- -------------------- -------------------- ---------- ----------
508000001b0b1d4 72454 24077 23148 TRUNK_IN (trunk) TRUNK_OUT (trunk) 24077 23148
508000001b0b1cf 72454 24072 23143 TRUNK_IN (trunk) TRUNK_OUT (trunk) 24072 23143
508000001b0b1d3 72454 24076 23147 TRUNK_IN (trunk) TRUNK_OUT (trunk) 24076 23147
508000001b0b1d7 72454 24080 23151 TRUNK_IN (trunk) TRUNK_OUT (trunk) 24080 23151
508000001b0b1ce 72454 24071 23142 TRUNK_IN (trunk) TRUNK_OUT (trunk) 24071 23142
... |
Поддерживается вывод до 50000 активных звонков. |
Поддержана возможность просматривать черный список командой:
show esbc black-list
| Присутствует возможность очистки черного списка (смотреть в пункте "Управление активными сессиями и записями"). |
Также есть возможность показа black-list с различными блокируемыми параметрами (AOR, IP-адрес или User-Agent) с помощью опциональных параметров:
В выводе черного списка может присутствовать до 3 таблиц (по блокируемым объектам):
Причины блокировки и их описание:
ACCOUNT HACKING - превышен лимит по количеству ошибок с одного AOR;
PACKET FLOODING - превышен лимит по количеству ошибок с одного IP адреса;
BURST ERRORS - превышен глобальный лимит по количеству ошибок в секунду;
GLOBAL RPS LIMIT - превышен глобальный лимит по количеству заблокированных запросов в секунду;
IP RPS LIMIT - превышен лимит по количеству заблокированных запросов в секунду c одного IP адреса;
MONITORED ADDRESSES LIMIT - превышено максимальное количество IP адресов с ошибками;
DISTRIBUTED SPAM - превышено максимальное количество IP адресов с одинаковым заблокированным атрибутом;
BLOCKED ATTRIBUTES LIMIT - превышено максимальное количество заблокированных атрибутов;
IP BLOCKED ATTRIBUTES LIMIT - превышено максимальное количество заблокированных атрибутов с одного IP адреса.
Примеры вывода black-list по всем блокируемым объектам:
vesbc# show esbc black-list aor
--------------------------------------------------------------------------------------------
AOR Ban reason AOR Forgive Time of blocking
error time in
count minutes
------------------------- ---------------- --------- ---------- --------------------
101@192.168.23.76 ACCOUNT HACKING 2 60 2025-07-24 09:10:01
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.23.246 PACKET FLOODING 0 1440 2025-07-24 09:08:41
vesbc# show esbc black-list user-agent
User-agent black-list:
--------------------------------------------------------------------------------------------
UA Ban reason UA error Forgive Time of blocking
count time in
minutes
------------------------- ---------------- --------- ---------- --------------------
testers ACCOUNT HACKING 55 60 2025-07-24 09:15:24 |
Поддержана возможность просматривать белый список командой:
show esbc white-list
Реализовано добавление в белый список динамических адресов и доменов. |
Также есть возможность поиска в white-list по полному имени объекта, находящегося в нем, указав его, после основной команды.
В белом списке также присутствуют два параметра:
Объект может быть одновременно как "Is dynamic", так и "Is configured". |
Пример вывода команды:
vesbc# show esbc white-list
Host Is dynamic Is
configured
--------------- ---------- ----------
192.168.23.248 No Yes
192.168.23.74 Yes No
192.168.21.0/22 No Yes
domain.ru No Yes
fe80::c6e9: No Yes
84ff:fe04:1b7e |
Поддержана возможность просматривать состояние транков командой:
show esbc trunks
В таблице выводится:
Пример вывода команды:
#К TRUNK_SSW не привязан sip profile с контролем направлений (keepalive)
vesbc# show esbc trunks
Trunk Trunk type Status Last change time
-------------------- ---------- ------------- ------------------
TRUNK_SSW SIP Uncontrolled 2025-07-24
09:14:12
#К TRUNK_SSW привязан sip profile без контроля направлений (keepalive)
vesbc# show esbc trunks
Trunk Trunk type Status Last change time
-------------------- ---------- ------------- ------------------
TRUNK_SSW SIP Uncontrolled 2025-07-24
09:15:13
#К TRUNK_SSW привязан sip profile с контролем направлений (keepalive) и транк доступен
vesbc# show esbc trunks
Trunk Trunk type Status Last change time
-------------------- ---------- ------------- ------------------
TRUNK_SSW SIP Available 2025-07-24
09:16:14
#К TRUNK_SSW привязан sip profile с контролем направлений (keepalive) и транк не доступен
vesbc# show esbc trunks
Trunk Trunk type Status Last change time
-------------------- ---------- ------------- ------------------
TRUNK_SSW SIP Not available 2025-07-24
09:17:15 |
Также есть возможность просмотра подробной информации по конкретному транку, используя дополнительный параметр после основной команды (sip <trunk_name>). |
Поддержана возможность просматривать просмотра зарегистрированных абонентов командой:
show esbc users
Выводится общее количество AOR и Contact, а также базовый вывод информации о абонентах.
Количество AOR и Contact может не совпадать, если под AOR зарегистрировано несколько Contact. |
Пример вывода команды:
vesbc# show esbc users
Total AORs: 1
Total Contacts: 1
User AOR User Contact
type count
------------------------------ -------- --------
101@192.168.23.76 SIP 1 |
| Присутствует возможность удаление активных регистраций (смотреть в пункте "Управление активными сессиями и записями"). |
Также есть возможность просмотра подробной информации по конкретному абоненту, используя дополнительный параметр после основной команды (sip <AOR> detailed).
Выводится подробная информация по определенному AOR:
Пример вывода команды:
vesbc# show esbc users sip 101@192.168.23.76 detailed
User AOR: 101@192.168.23.76
User type: SIP
Contact count: 1
IN User contact IP address of User Expires Registration Trunk name IP address of OUT Trunk contact
user interface expires in registrar
name
------------------------------ --------------- ---------- -------- ------------ --------------- --------------- ------------------------------
<sip:101@192.168.23.74:5060> 192.168.23.74 AB 1800 1202 TRUNK_SSW 192.168.23.248 <sip:101@192.168.23.76:5071;t
ransport=udp;line=d7742ffcc06c
3bb12a8524410d267492> |
Есть возможность просматривать статистику для всей системы, всех транков, всех абонентских интерфейсов или по конкретному транспорту, транку, абонентскому интерфейсу.
Ведение статистики по умолчанию включено. |
Также появилась возможность просматривать статистику звонков, регистраций, подписок запросов (rps).
Просматривать статистику вызовов можно с помощью:
show esbc statistics <object> [type], где
<object> - область просмотра статистики, которая может принимать следующие значения:
all — статистика всей системы;
call — статистика звонков;
register — статистика регистраций;
rps — статистика запросов;
subscribe — статистика подписок.
[type] — более узкая область показа статистики, необходим для просмотра статистики по всем транспортам, транкам, и абонентским интерфейсам, а так же по конкретным объектам (параметр опционален).
Может принимать следующие значения:
transport [sip object] - просмотр статистики звонков по транспортам;
trunk [sip object] - просмотр статистики звонков по транкам;
user-interface [sip object] - просмотр статистики звонков по user-interface.
При вызове статистики отображается до 4 таблиц, исходя из запроса в cli:
<object> [type] register counters:
REGISTERS PER SECOND - текущее количество регистраций в секунду;
REGISTER TRANSACTIONS — количество транзакций;
RESPONSES — количество ответов;
SUCCESS REGISTERS — количество успешных регистраций;
REQUEST TIMEOUT — количество неуспешных запросов;
FORBIDDEN REGISTERS — запрещенные регистрации;
UNAUTHORIZED REGISTERS — неавторизованные регистрации;
INTERVAL TOO BRIEF — количество ответов 423 Interval Too Brief;
3XX CODES - 3xx ответы;
4XX CODES - 4xx ответы;
5XX CODES - 5xx ответы;
6XX CODES - 6xx ответы.
SUBSCRIBES PER SECOND - текущее количество подписок в секунду;
ACTIVE SUBSCRIBES — количество активных подписок;
REQUESTS IN SUBSCRIBE - количество запросов;
RESPONSES IN SUBSCRIBE - количество ответов;
SUCCESS SUBSCRIBES — количество успешных подписок;
REQUEST TIMEOUT - количество неуспешных запросов;
FORBIDDEN SUBSCRIBES — запрещенные подписок;
UNAUTHORIZED SUBSCRIBES - неавторизованные подписки;
INTERVAL TOO BRIEF - количество ответов 423 Interval Too Brief;
3XX CODES - 3xx ответы;
4XX CODES - 4xx ответы;
5XX CODES - 5xx ответы;
6XX CODES - 6xx ответы.
<object> [type] rps counters:
REQUESTS PER SECOND - текущее количество запросов в секунду;
INVITE PER SECOND - количество INVITE в секунду;
ACK PER SECOND - количество ACK в секунду;
BYE PER SECOND - количество BYE в секунду;
CANCEL PER SECOND - количество CANCEL в секунду;
REFER PER SECOND - количество REFER в секунду;
PRACK PER SECOND - количество PRACK в секунду;
SUBSCRIBE PER SECOND - количество SUBSCRIBE в секунду;
NOTIFY PER SECOND - количество NOTIFY в секунду;
UPDATE PER SECOND - количество UPDATE в секунду;
OPTIONS PER SECOND - количество OPTIONS в секунду;
INFO PER SECOND - количество INFO в секунду;
REGISTER PER SECOND - количество REGISTER в секунду;
MESSAGE PER SECOND - количество MESSAGE в секунду.
Описание каждой метрики можно найти в разделе Команды мониторинга Справочника команд CLI.
В выводе отображаются счётчики запросов/ответов за последние 3 секунды. Если ответ был сгенерирован ESBC, а не получен от встречной стороны, то соответствующий счётчик не увеличится. |
Для отключения ведения статистики необходимо в меню general отключить ее командой statistics disable. |
Пример:
Из TRUNK_IN в TRUNK_OUT через ESBC поступает 2 вызова каждую секунду длительностью 2 секунды.

vesbc# vesbc# config vesbc(config)# esbc #Просмотр полной статистики при активных вызовах: 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 #CPS - 0, так как отображается текущее количество входящих вызовов в секунду CALL LEGS 50 50 #вызовы завершились, но некоторые счётчики ещё не сбросились REQUESTS IN CALL 6 6 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 #Просмотри статистики вызовов через 3 секунды после завершения вызовов 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 |
ESBC поддерживает управление активными сессиями и записями в базах данных. В текущей версии ПО в CLI есть команда (clear esbc) для управления:
Поддержана возможность завершения активных сессий командой:
clear esbc active calls
Если не выбраны опциональные параметры, то будут завершены все активные сессии |
Также есть возможность более узконаправленного завершения активных сессий с помощью опциональных параметров:
Поддержана возможность очистки черного списка командой:
clear esbc black-list
Если не выбраны опциональные параметры, то черный список будет очищен полностью |
Также есть возможность более узконаправленного очистки черного списка с помощью опциональных параметров:
Поддержана возможность очистки списка активных регистраций командой:
clear esbc registration
Если не выбраны опциональные параметры, то список активных регистраций будет очищен полностью |
Также есть возможность более узконаправленного очистки списка активных регистраций с помощью опциональных параметров:
Включение аварий происходит включением snmp трапов командой:
snmp-server enable traps esbc
Данная команда включает весь набор snmp трапов:
Также есть возможность включить конкретные трапы командой:
snmp-server enable traps esbc [object]
| Более подробное описание конфигурирование snmp трапов можно прочитать в разделе "Управление SNMP". |
ESBC поддерживает мониторинг аварий.
Аварии можно просмотреть с помощью команды:
show alarms brief
Данная команда выводит историю аварий, включая уже нормализированные аварии. Если нужно вывести только активные аварии, то используется команда:
show alarms brief active
Текст аварий при их выводе представлен в таблице ниже.
Авария | Текст аварии |
|---|---|
cdr-send-error | CDR alarm: failed to send to <main | reserve> ftp server |
cdr-write-error | CDR alarm: failed to write |
general-max-calls-limit | Host <host_name> max calls limit reached |
general-max-cps-limit | Host <host_name> max cps limit reached |
general-max-rps-limit | Host <host_name> max rps limit reached |
media-resources | Session<session_id>: <Trunk/User interface><trunk_name/ui_name> media resources out |
module-connection | Module <module_type> host <host_id> is down |
trunk-group-max-calls-limit | Trunk-Group <trunk_group_name> max calls limit reached |
trunk-group-max-cps-limit | Trunk-Group <trunk_group_name> max cps limit reached |
trunk-group-max-rps-limit | Trunk-Group <trunk_group_name> max rps limit reached |
trunk-max-calls-limit | Trunk <trunk_name> max calls limit reached |
trunk-max-cps-limit | Trunk <trunk_name> max cps limit reached |
trunk-max-rps-limit | Trunk <trunk_name> max rps limit reached |
trunk-unavailable | Trunk <trunk_name> is unavailable |
user-interface-max-calls-limit | User interface <ui_name> max calls limit reached |
user-interface-max-cps-limit | User interface <ui_name> max rps limit reached |
user-interface-max-rps-limit | User interface <ui_name> max cps limit reached |
voip-block-aor | Отсутствует |
voip-block-ip | Отсутствует |
| voip-block-user-agent | Отсутствует |
Нормализация аварий происходит при условиях представленных в таблице ниже.
Авария | Причины нормализации |
|---|---|
cdr-send-error | успешная отправка CDR на FTP-сервер |
cdr-write-error | успешная запись CDR |
general-max-calls-limit | через 10 секунд после последней аварии ИЛИ при снижении счетчика на 80% от лимита |
general-max-cps-limit | через 10 секунд после последней аварии |
general-max-rps-limit | через 10 секунд после последней аварии |
media-resources | через 15 секунд после последней аварии ИЛИ уничтожение превышающий сессии |
module-connection | при успешном добавлении модуля в диспетчер |
trunk-group-max-calls-limit | через 10 секунд после последней аварии ИЛИ при снижении счетчика на 80% от лимита |
trunk-group-max-cps-limit | через 10 секунд после последней аварии |
trunk-group-max-rps-limit | через 10 секунд после последней аварии |
trunk-max-calls-limit | через 10 секунд после последней аварии ИЛИ при снижении счетчика на 80% от лимита |
trunk-max-cps-limit | через 10 секунд после последней аварии |
trunk-max-rps-limit | через 10 секунд после последней аварии |
trunk-unavailable | при обновлении статуса транка на "Available" |
user-interface-max-calls-limit | через 10 секунд после последней аварии ИЛИ при снижении счетчика на 80% от лимита |
user-interface-max-cps-limit | через 10 секунд после последней аварии |
user-interface-max-rps-limit | через 10 секунд после последней аварии |
voip-block-aor | Не нормализуются |
voip-block-ip | Не нормализуются |
voip-block-user-agent | Не нормализуются |
ESBC поддерживает управление авариями. В текущей версии ПО в CLI есть команда (clear esbc) для управления:
clear alarms <all | inactive>, где
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 можно как сохранять локально (на ESBC или накопителе подключенного по USB), так и отправлять по FTP (до 2 серверов).
Пример настройки записи 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), в случае неудачи и на резервном, запись сохранится только локально.
Логирование ESBC осуществляется с помощью syslog. Более подробно настройки syslog описаны в разделе Управление SYSLOG справочника команд CLI.
Модули, входящие в состав 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 производится в разделе 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_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 #Применение и подтверждение настроек: vesbc(debug)# do commit vesbc(debug)# do confirm |