Настройка E-SBC для SIP-абонентов
Схема применения:
Описание:
Абонентский шлюз/SIP-абоненты отправляют сообщение на IP-адрес 192.168.20.120 порт 5062, E-SBC пересылает данный трафик с IP-адреса 192.168.16.113 порт 5061 на адрес Softswitch 192.168.16.65 порт 5060.
Для реализации данной схемы общий алгоритм настройки следующий:
- Настроить сетевые интерфейсы на E-SBC в сторону SSW и в сторону SIP-абонентов.
- Создать SIP-транспорт в сторону SSW и SIP-абонентов.
- Создать медиаресурсы для обоих направлений, назначить им диапазон портов для передачи голоса.
- Создать SIP-Users и SIP-trunk.
- Создать правила, по которым будут маршрутизироваться вызовы от абонентов до SSW.
Порядок конфигурирования E-SBC:
1. Пробросить сетевые интерфейсы в vESR по инструкции:
gi1/0/1 — внутренний сетевой интерфейс до SSW;
gi1/0/2 — внешний сетевой интерфейс для абонентов.
2. Настроить IP-адрес на интерфейсе в сторону SSW:
vesr# configure vesr(config)# interface gigabitethernet 1/0/1 vesr(config-if-gi)# description "SSW" vesr(config-if-gi)# ip address 192.168.16.113/24 vesr(config-if-gi)# ip firewall disable
3. Настроить IP-адрес на внешнем интерфейсе в сторону абонентов:
vesr# configure vesr(config)# interface gigabitethernet 1/0/2 vesr(config-if-gi)# description "ABONENTS" vesr(config-if-gi)# ip address 192.168.20.120/24
4. Создать SIP-транспорт в сторону SSW:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# sip-transport TRANSPORT_SSW vesr(config-esbc-sip-transport)# ip-address 192.168.16.113 vesr(config-esbc-sip-transport)# port 5061
5. Создать SIP-транспорт в сторону абонентов:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# sip-transport TRANSPORT_ABONENTS vesr(config-esbc-sip-transport)# ip-address 192.168.20.120 vesr(config-esbc-sip-transport)# port 5062
6. Создать медиаресурсы для согласования и передачи голоса на плече SSW --- E-SBC:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# media-resource MEDIA_SSW vesr(config-esbc-media-resource)# ip-address 192.168.16.113 # указать диапазон портов, который будет выделяться на E-SBC для передачи голоса. Данная команда необязательная, если ее не указывать будет использоваться диапазон портов 8000–65535 vesr(config-esbc-media-resource)# port-range 1024-65535
7. Создать медиаресурсы для согласования и передачи голоса на плече E-SBC --- Абонентский шлюз/SIP-абоненты:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# media-resource MEDIA_ABONENTS vesr(config-esbc-media-resource)# ip-address 192.168.20.120
8. Создать SIP-trunk в сторону SSW:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# trunk sip TRUNK_SSW vesr(config-esbc-trunk-sip)# sip-transport TRANSPORT_SSW vesr(config-esbc-trunk-sip)# remote addr 192.168.16.65 vesr(config-esbc-trunk-sip)# remote port 5060 vesr(config-esbc-trunk-sip)# media resource 0 MEDIA_SSW
9. Создать user-interface в сторону абонентов:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# user-interface sip ABONENTS vesr(config-esbc-trunk-sip)# sip-transport TRANSPORT_ABONENTS vesr(config-esbc-trunk-sip)# media resource 0 MEDIA_ABONENTS # Если абоненты находятся за NAT выполнить команду: vesr(config-esbc-user-interface-sip)# nat-comedia-mode on
10. Создать таблицу маршрутизации и добавить туда правила, по которым вызовы, приходящие с абонентов будут маршрутизироваться на SSW:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# route-table TO_SSW vesr(config-esbc-route-table)# rule 0 vesr(config-esbc-route-table-rule)# action direct-to-trunk TRUNK_SSW
11. Привязать созданную таблицу маршрутизации к user-interface:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# user-interface sip ABONENTS vesr(config-esbc-user-interface-sip)# route-table TO_SSW
12. Применить конфигурацию и подтвердить изменения:
vesr# commit vesr# confirm
Настройка E-SBC для SIP-транков
Схема применения:
Описание:
Транковый шлюз отправляет сообщения с IP-адреса 192.168.20.99 порта 5060 на IP-адрес 192.168.20.120 порт 5067, E-SBC пересылает данный трафик с 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, E-SBC пересылает данный трафик с IP-адреса 192.168.20.120 порта 5067 на адрес транкового шлюза 192.168.20.99 порт 5060.
Для реализации данной схемы общий алгоритм настройки следующий:
- Настроить сетевые интерфейсы на E-SBC в сторону SSW и в сторону транкового шлюза.
- Создать SIP-транспорт в сторону SSW и транкового шлюза.
- Создать медиаресурсы для обоих направлений, назначить им диапазон портов для передачи голоса.
- Создать 2 SIP-trunk в сторону SSW и в сторону транкового шлюза.
- Создать правила, по которым будут маршрутизироваться вызовы от транкового шлюза до SSW и наоборот от SSW до транкового шлюза.
Порядок конфигурирования E-SBC:
1. Пробросить сетевые интерфейсы в vESR по инструкции:
gi1/0/1 — сетевой интерфейс до SSW;
gi1/0/2 — сетевой интерфейс до транкового шлюза.
2. Настроить IP-адрес на интерфейсе в сторону SSW:
vesr# configure vesr(config)# interface gigabitethernet 1/0/1 vesr(config-if-gi)# description "SSW" vesr(config-if-gi)# ip address 192.168.16.113/24
3. Настроить IP-адрес на интерфейсе в сторону транкового шлюза:
vesr# configure vesr(config)# interface gigabitethernet 1/0/2 vesr(config-if-gi)# description "TRUNK_GATEWAY" vesr(config-if-gi)# ip address 192.168.20.120/24
4. Создать SIP-транспорт в сторону SSW:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# sip-transport TRANSPORT_SSW vesr(config-esbc-sip-transport)# ip-address 192.168.16.113 vesr(config-esbc-sip-transport)# port 5065
5. Создать SIP-транспорт в сторону транкового шлюза:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# sip-transport TRANSPORT_TRUNK_GATEWAY vesr(config-esbc-sip-transport)# ip-address 192.168.20.120 vesr(config-esbc-sip-transport)# port 5067
6. Создать медиаресурсы для согласования и передачи голоса на плече SSW --- E-SBC:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# media-resource MEDIA_SSW vesr(config-esbc-media-resource)# ip-address 192.168.16.113 # Указать диапазон портов, который будет выделяться на E-SBC для передачи голоса. Данная команда необязательная, если ее не указывать будет использоваться диапазон портов 8000–65535 vesr(config-esbc-media-resource)# port-range 1024-65535
7. Создать медиаресурсы для согласования и передачи голоса на плече E-SBC --- Транковый шлюз:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# media-resource MEDIA_TRUNK_GATEWAY vesr(config-esbc-media-resource)# ip-address 192.168.20.120
8. Создать SIP-trunk в сторону SSW:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# trunk sip TRUNK_SSW vesr(config-esbc-trunk-sip)# sip-transport TRANSPORT_SSW vesr(config-esbc-trunk-sip)# remote addr 192.168.16.65 vesr(config-esbc-trunk-sip)# remote port 5060 vesr(config-esbc-trunk-sip)# media resource 0 MEDIA_SSW
9. Создать SIP-trunk в сторону транкового шлюза:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# trunk sip TRUNK_GATEWAY vesr(config-esbc-trunk-sip)# sip-transport TRANSPORT_TRUNK_GATEWAY vesr(config-esbc-trunk-sip)# remote addr 192.168.20.99 vesr(config-esbc-trunk-sip)# remote port 5060 vesr(config-esbc-trunk-sip)# media resource 0 MEDIA_TRUNK_GATEWAY
10. Создать таблицу маршрутизации и добавить туда правила, по которым вызовы, приходящие с транкового шлюза будут маршрутизироваться на SSW:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# route-table TO_SSW vesr(config-esbc-route-table)# rule 0 vesr(config-esbc-route-table-rule)# action direct-to-trunk TRUNK_SSW
11. Создать таблицу маршрутизации и добавить туда правила, по которым вызовы, приходящие с SSW будут маршрутизироваться на транковый шлюз:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# route-table TO_TRUNK_GATEWAY vesr(config-esbc-route-table)# rule 0 vesr(config-esbc-route-table-rule)# action direct-to-trunk TRUNK_GATEWAY
12. Привязать созданные таблицы маршрутизации к транкам:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# trunk sip TRUNK_SSW vesr(config-esbc-trunk-sip)# route-table TO_TRUNK_GATEWAY vesr(config-esbc-trunk-sip)# exit vesr(config-esbc)# trunk sip TRUNK_GATEWAY vesr(config-esbc-trunk-sip)# route-table TO_SSW
13. Применить конфигурацию и подтвердить изменения:
vesr# commit vesr# confirm
Cоздание транков с одинаковым SIP-транспортом и IP:Port разрешено только в случае, если отличается домен.
Создание/конфигурирование медиаресурсов (media resources)
Медиаресурсы представляют собой диапазоны UDP-портов и IP-адресов, используемых E-SBC для передачи/получения потоков RTP.
Пример:
Требуется, чтобы E-SBC для передачи медиатрафика использовал IP-адрес 192.168.16.113 и порты с 20000 до 30000.
Решение:
Перейти к настройкам модуля управления конфигурацией E-SBC:
vesr# vesr# configure vesr(config)# esbc
Создать и настроить соответствующим образом медиаресурс:
#Создание/переход в настройки медиаресурса MEDIA_1: vesr(config-esbc)# media-resource MEDIA_1 #Назначить IP-адрес 192.168.16.113 для использования в медиаресурсах: vesr(config-esbc-media-resource)# ip-address 192.168.16.113 #Настроить диапазон UDP-портов с 20000 до 30000 для использовании в медиаресурсах: vesr(config-esbc-media-resource)# port-range 20000-30000
После привязки созданного медиаресурса к какому-либо направлению (транку, транковой группе или user-interface), он будет использоваться для передачи/получения потоков RTP на выбранных направлениях.
При использовании одинакового IP-адреса для разных медиаресурсов не допускается пересечение диапазонов портов между этими ресурсами.
Создание/конфигурирование SIP-транспорта (sip-transport)
SIP-транспорт представляет точку входа/выхода сигнализации, т. е. это IP-адрес и порт, с которого E-SBC будет отправлять и на который будет принимать сигнальные сообщения.
Пример:
Требуется, чтобы E-SBC для передачи/приема сигнальных сообщений на встречную сторону использовал IP-адрес 192.168.16.113 порт 5065.
Решение:
Перейти к настройкам модуля управления конфигурацией E-SBC:
vesr# vesr# configure vesr(config)# esbc
Создать и настроить соответствующим образом SIP-транспорт:
#Создание/переход в настройки sip-транспорта NEW_TRANSPORT: vesr(config-esbc)# sip-transport NEW_TRANSPORT #Назначить IP-адрес 192.168.16.113 для использования SIP-транспортом: vesr(config-esbc-sip-transport)# ip-address 192.168.16.113 #Назначить порт 5065 для использования SIP-транспортом: vesr(config-esbc-sip-transport)# port 5065 #Выбрать протокол транспортного уровня, используемый для приема/передачи сообщений SIP: vesr(config-esbc-sip-transport)# mode udp-prefer
После привязки созданного SIP-транспорта к какому-либо направлению (транку или user-interface) он будет использоваться для передачи/получения сигнальных SIP-сообщений на выбранных направлениях.
Поддержано несколько режимов работы с протоколами транспортного уровня, конфигурируется командой mode из примера выше. Режимы работы следующие:
- tcp-only — использовать только TCP-протокол;
- tcp-prefer — прием по UDP и TCP. Отправка по TCP. В случае, если не удалось установить соединение по TCP, отправка производится по UDP;
- tls — использовать tls;
- udp-only — использовать только UDP-протокол;
- udp-prefer — прием по UDP и TCP. Отправка пакетов более 1300 байт по TCP, менее 1300 байт — по UDP.
Создание/конфигурирование транковых групп (trunk-group)
Транк-группа представляет собой набор транков различного типа (в текущей версии поддерживается только SIP-транк) и алгоритм балансировки нагрузки между ними.
Помимо этого группа содержит набор следующих настроек:
- Таблица маршрутизации;
- Медиапрофиль;
- Медиаресурсы;
- SIP-профиль;
- Таблицы модификации всех типов как для пре-роутинга так и для пост-роутинга.
В текущей версии балансировка вызовов осуществляется алгоритмом round-robin.
Логика работы:
Все перечисленные в предыдущем пункте настройки являются общими для всех транков, включенных в состав транковой группы. Это значит, что при отсутствии у транка, входящего в состав транковой группы, какой-либо из перечисленных настроек, будет использоваться настройка из транковой группы. Такой подход позволяет создавать множество транков с минимальным набором настроек, и, объединяя их в транковую группу, производить донастройку через нее. При необходимости изменить какие-либо параметры отдельно взятых транков из группы можно провести индивидуальную настройку, используя настройки на транках.
Пример работы общих настроек:
Схема:
На E-SBC настроена транковая группа 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:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# sip-transport TRANSPORT_SSW vesr(config-esbc-sip-transport)# ip-address 192.168.16.113 vesr(config-esbc-sip-transport)# port 5065
2. Создать SIP-транспорт в сторону TRUNK_IN:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# sip-transport TRANSPORT_TRUNK_IN vesr(config-esbc-sip-transport)# ip-address 192.168.20.120 vesr(config-esbc-sip-transport)# port 5067
3. Создать медиаресурсы для согласования и передачи голоса на плече TRUNK_IN --- E-SBC:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# media-resource MEDIA_TRUNK_IN vesr(config-esbc-media-resource)# ip-address 192.168.20.120
4. Создать медиаресурсы для согласования и передачи голоса на плече E-SBC --- TG_SSW:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# media-resource MEDIA_TG_SSW vesr(config-esbc-media-resource)# ip-address 192.168.16.113
5. Создать SIP-trunk в сторону TRUNK_IN:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# trunk sip TRUNK_IN vesr(config-esbc-trunk-sip)# sip-transport TRANSPORT_TRUNK_IN vesr(config-esbc-trunk-sip)# remote addr 192.168.20.99 vesr(config-esbc-trunk-sip)# remote port 5060 vesr(config-esbc-trunk-sip)# media resource 0 MEDIA_TRUNK_IN
6. Создать SIP-trunk в сторону TRUNK_SSW1 и TRUNK_SSW2:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# trunk sip TRUNK_SSW1 vesr(config-esbc-trunk-sip)# sip-transport TRANSPORT_SSW vesr(config-esbc-trunk-sip)# remote addr 192.168.16.115 vesr(config-esbc-trunk-sip)# remote port 5060 vesr(config-esbc-trunk-sip)# exit vesr(config-esbc)# trunk sip TRUNK_SSW2 vesr(config-esbc-trunk-sip)# sip-transport TRANSPORT_SSW vesr(config-esbc-trunk-sip)# remote addr 192.168.16.116 vesr(config-esbc-trunk-sip)# remote port 5060
7. Создать транковую группу TG_SSW и добавить туда транки TRUNK_SSW1 и TRUNK_SSW2:
vesr# vesr# configure vesr(config)# esbc #Создание и переход в настройки транковой группы TG_SSW: vesr(config-esbc)# trunk-group TG_SSW #Добавление в состав транковой группы транков TRUNK_SSW1 и TRUNK_SSW2: vesr(config-esbc-trunk-group)# trunk 0 TRUNK_SSW1 vesr(config-esbc-trunk-group)# trunk 1 TRUNK_SSW2 #Добавление медиаресурсов: vesr(config-esbc-trunk-group)# media-resource 0 MEDIA_TG_SSW
8. Создать таблицу маршрутизации и добавить туда правила, по которым вызовы, приходящие с транка TRUNK_IN, будут маршрутизироваться в транковую группу TG_SSW:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# route-table TO_TG_SSW vesr(config-esbc-route-table)# rule 0 vesr(config-esbc-route-table-rule)# action direct-to-trunk-group TG_SSW
9. Создать таблицу маршрутизации и добавить туда правила, по которым вызовы, приходящие с TG_SSW, будут маршрутизироваться в транк TRUNK_IN:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# route-table TO_TRUNK_IN vesr(config-esbc-route-table)# rule 0 vesr(config-esbc-route-table-rule)# action direct-to-trunk TRUNK_IN
10. Привязать созданные таблицы маршрутизации к транку TRUNK_IN и транковой группе TG_SSW:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# trunk sip TRUNK_IN vesr(config-esbc-trunk-sip)# route-table TO_TG_SSW vesr(config-esbc-trunk-sip)# exit vesr(config-esbc)# trunk-group TG_SSW vesr(config-esbc-trunk-sip)# route-table TO_TRUNK_IN
11. Применить конфигурацию и подтвердить изменения:
vesr# commit vesr# confirm
На шаге 7 при создании транков, в конфигурацию транков не были добавлены медиаресурсы и таблица маршрутизации. Но эти настройки есть в транковой группе TG_SSW, куда включены оба транка. Поэтому при поступлении вызовов с этих транков они будут маршрутизироваться по таблице маршрутизации, которая привязана к TG_SSW, медиаресурсы для согласования и передачи RTP также будут браться из транковой группы TG_SSW.
В случае если необходимо, чтобы один из транков, входящих в состав транковой группы, при поступлении на него входящих вызовов маршрутизировался по другой таблице маршрутизации или использовал другие медиаресурсы, нужно добавить соответствующие настройки в данный транк. Настройки транковой группы при этом не меняются, т. к. настройки транка в приоритете.
Логика работы транковой группы для распределения вызовов на транки, входящие в ее состав
1. Распределение вызовов без использования алгоритма балансировки:
Все исходящие вызовы, маршрутизируемые через транковую группу, используют первый транк в группе. В случае недоступности транка или при совпадении ответа с маской из списка причин отбоя, вызов будет направлен через следующий транк в группе.
Пример:
На E-SBC натроена транковая группа TRUNK_GROUP, в состав которой входят 3 транка (TRUNK_1, TRUNK_2 и TRUNK_3). Приходит вызов и по правилу маршрутизации уходит на эту транковую группу. В результате E-SBC совершает попытку вызова в первый транк в составе транковой группы (TRUNK_1), если транк недоступен, то происходит попытка позвонить во второй транк (TRUNK_2). Если попытка вызова также неуспешна, то будет попытка позвонить в последний транк (TRUNK_3). Если попытка также неуспешна, то вызов на первом плече отбивается. Если на каком-то из транков пришел ответ 200ОК, то вызов устанавливается.
Все последующие вызовы также будут сначала отправлены в TRUNK_1, и только в случае неудачи будут попытки позвонить в TRUNK_2 и TRUNK_3.
2. Распределение вызовов без использования алгоритма балансировки, но с включенной опцией pick-once:
Все исходящие вызовы, маршрутизируемые через транковую группу, используют первый транк в группе. В случае недоступности транка или при совпадении ответа с маской из списка причин отбоя, вызов НЕ будет направлен через следующий транк в группе, вызов на первом плече сразу отбивается.
Опцию pick-once можно включить в настройках таблицы маршрутизации при выборе действия direct-to-trunk-group:
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# route-table TO_TG_SSW vesr(config-esbc-route-table)# rule 0 #Включение опции pick-once при создании правила маршрутизации на транковую группу TG_SSW: vesr(config-esbc-route-table-rule)# action direct-to-trunk-group TG_SSW pick-once
3. Распределение вызовов с использованием алгоритма балансировки round-robin (опция pick-once выключена):
Каждый последующий исходящий вызов, маршрутизируемый через транковую группу, используют следующий транк в группе независимо от результата маршрутизации предыдущего вызова в данную транковую группу. В случае недоступности транка или при совпадении ответа с маской из списка причин отбоя, вызов будет направлен через следующий транк в группе.
Пример:
На E-SBC настроена транковая группа TRUNK_GROUP, в состав которой входят 3 транка (TRUNK_1, TRUNK_2 и TRUNK_3). Приходит вызов и по правилу маршрутизации уходит на эту транковую группу. В результате E-SBC совершает попытку вызова в первый транк в составе транковой группы (TRUNK_1), если вызов неуспешный(транк недоступен или ответ совпал с маской из списка причин отбоя), то происходит попытка позвонить во второй транк (TRUNK_2). Если попытка вызова также неуспешна, то будет попытка позвонить в последний транк (TRUNK_3). Если попытка также неуспешна, то вызов на первом плече отбивается. Если на каком-то из транков пришел ответ 200ОК, то вызов устанавливается.
Второй вызов, который смаршрутизировался на данную транковую группу, сначала уйдет на TRUNK_2. Если вызов неуспешный, то E-SBC совершит попытку позвонить в TRUNK_3 и потом в TRUNK_1. Если попытки неуспешны, то вызов на первом плече отбивается. По такому же принципу третий вызов сначала распределится в TRUNK_3, четвертый вызов — в TRUNK_1 и т. д.
Опция балансировки round-robin включается в настройках транковой группы:
vesr# vesr# configure vesr(config)# esbc #Создание и переход в настройки транковой группы TRUNK_GROUP: vesr(config-esbc)# trunk-group TRUNK_GROUP #Добавление в состав транковой группы транков TRUNK_1, TRUNK_2 и TRUNK_3: vesr(config-esbc-trunk-group)# trunk 0 TRUNK_1 vesr(config-esbc-trunk-group)# trunk 1 TRUNK_2 vesr(config-esbc-trunk-group)# trunk 2 TRUNK_3 #Активация режима балансировки round-robin на траковой группе: vesr(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 и т. д.
Создание/конфигурирование таблиц маршрутизации (route-table)
Схематично таблица маршрутизации выглядит следующим образом:
Таблица маршрутизации представляет собой набор правил и действий, по которым обрабатывается входящий вызов, и указывается исходящий транк (или транк-группа) для формирования исходящего вызова.
Таблицы маршрутизации применяются к входящим вызовам и могут быть настроены для транков, транк-групп и user-interface.
Таблица состоит из правил (RULE), правило обязательно должно содержать действие (ACTION), и, опционально, — условия (CONDITION), которые должны быть соблюдены для выполнения данного действия маршрутизации. Если условия отсутствуют, действия совершаются безусловно.
Действие — это операция, результатом которой будет являться конкретное направление (DEST).
В текущей версии в качестве направлений могут выступают транки и транк-группы, поддержаны условия маршрутизации по CGPN и CDPN.
Правила маршрутизации выбираются по порядку до тех пор, пока второе плечо не будет успешно согласовано, или не будет рассмотрено последнее правило. Если рассматривать на примере вызова, то роутинг будет выполняться до тех пор, тока второе плечо не примет вызов.
В случае маршрутизации на транк-группу действует тот же алгоритм. Т. е. проходим по всем транкам выбранной группы по порядку до тех пор, пока сессия не согласуется, или не будет выбран последний транк. Если после прохождения по всем транкам выбранной группы нам не удалось согласовать второе плечо, мы продолжим выбирать оставшиеся правила из таблицы маршрутизации.
В общем, этот алгоритм можно описать так: проход по всем направлениям, всех правил маршрутизации, пока сессия не будет согласована, или не будет рассмотрено последнее правило.
Исключением является правило Reject — отбой входящей сессии. Это правило завершает проход по таблице маршрутизации.
Выбор следующего направления будет происходить:
при внутренних сбоях, до согласования сессии;
при отбое с встречной стороны, кроме 3хх кодов SIP.
Пример перебора правил:
В таблице маршрутизации два правила, первое направляет вызов в TRUNK_GROUP, второе направляет вызов в TRUNK_3, условия нигде не настроены. Приходит вызов и начинает маршрутизироваться по данной таблице маршрутизации. В результате вызов уходит на TRUNK_GROUP и оттуда в TRUNK_1, в случае если вызов через TRUNK_1 не установился (например, транк недоступен), то маршрутизация продолжает выполняться, вызов отправляется в TRUNK_2. Если попытка вызова в TRUNK_2 также завершилась неудачно, E-SBC переходит к RULE_2 и отправляет вызов в TRUNK_3. Если и здесь попытка установить вызов также оказалась неуспешной, то первое плечо отбивается, и вызов завершается, т. к. больше правил в таблице маршрутизации нет. Если попытка установить вызов успешна, то вызов устанавливается.
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# route-table ROUTE_TABLE #Добавление первого правила с действием отправить вызов в транковую группу TRUNK_GROUP: vesr(config-esbc-route-table)# rule 0 vesr(config-esbc-route-table-rule)# action direct-to-trunk-group TRUNK_GROUP vesr(config-esbc-route-table-rule)# exit #Добавление второго правила с действием отправить вызов в транк TRUNK_3: vesr(config-esbc-route-table)# rule 1 vesr(config-esbc-route-table-rule)# action direct-to-trunk TRUNK_3
Пример работы условий:
В таблице маршрутизации два правила, у обоих есть условия по CGPN и CDPN. Например, приходит вызов, у которого номер А=23000, номер Б=24000. E-SBC заходит в RULE_1 и анализирует условие CONDITION_1, условие истинно, далее происходит анализ условия из CONDITION_2, условие также истинно. Значит правило RULE_1 подходит для маршрутизации, и вызов отправляется в TRUNK_1.
Рассмотрим вызов с номерами, которые подходят под условия из RULE_2. Приходит вызов, у которого номер А=23000, номер Б=24001. E-SBC заходит в RULE_1 и анализирует условие CONDITION_1, условие истинно, далее происходит анализ условия из CONDITION_2, условие ложно. Значит правило не подходит (правило подходит, только если все условия внутри правила истинны). Далее E-SBC переходит к RULE_2, анализирует условие CONDITION_3, условие истинно, далее происходит анализ условия из CONDITION_4, условие также истинно. Значит правило RULE_2 подходит для маршрутизации, и вызов отправляется в TRUNK_2.
Если приходит вызов, который не подходит ни под одно правило, то такой вызов отбивается.
vesr# vesr# configure vesr(config)# esbc vesr(config-esbc)# route-table ROUTE_TABLE #Добавление первого правила с условиями CONDITION_1, CONDITION_2 и действием отправить вызов в транк TRUNK_1: vesr(config-esbc-route-table)# rule 0 vesr(config-esbc-route-table-rule)# condition 0 cgpn ^23000$ vesr(config-esbc-route-table-rule)# condition 1 cdpn ^24000$ vesr(config-esbc-route-table-rule)# action direct-to-trunk TRUNK_1 vesr(config-esbc-route-table-rule)# exit #Добавление второго правила с условиями CONDITION_3, CONDITION_4 и действием отправить вызов в транк TRUNK_2: vesr(config-esbc-route-table)# rule 1 vesr(config-esbc-route-table-rule)# condition 0 cgpn ^23000$ vesr(config-esbc-route-table-rule)# condition 1 cdpn ^24001$ vesr(config-esbc-route-table-rule)# action direct-to-trunk TRUNK_2
Синтаксис для написания условий
Для написания условий можно использовать регулярные выражения PCRE.
Создание/конфигурирование медиапрофилей (media profile)
Медиапрофили служат для настройки общих параметров передачи и приёма медиаданных. Медиапрофили используются в user-interface, транках и транк-группах.
Разрешённые типы медиаданных
В медиапрофиле можно настроить разрешённые типы медиаданных для направления, для выбора доступно 3 типа:
- audio
- image
- video
Если какой-то тип из представленных в SDP выключен в медиапрофиле, то он будет деактивирован.
По умолчанию все типы медиаданных включены.
vesr# vesr# configure vesr(config)# esbc #Создание медиапрофиля NEW_MEDIA_PROFILE: vesr(config-esbc)# media-profile NEW_MEDIA_PROFILE vesr(config-esbc-media-profile)# #Отключение передачи image и video: vesr(config-esbc-media-profile)# no media-type image vesr(config-esbc-media-profile)# no media-type video vesr(config-esbc-media-profile)# vesr(config-esbc-media-profile)# exit vesr(config-esbc)# #Привязать медиапрофиль к user-interface NEW_USER_IFACE: vesr(config-esbc)# user-interface sip NEW_USER_IFACE vesr(config-esbc-user-interface-sip)# media profile NEW_MEDIA_PROFILE vesr(config-esbc-user-interface-sip)# #Применить и подтвердить изменения: vesr(config-esbc-user-interface-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesr(config-esbc-user-interface-sip)# do confirm Configuration has been confirmed. Commit timer canceled.
После внесения изменений любой тип медиаданных, пришедших на user-interface, кроме audio будет отключен.
Таймаут ожидания RTP-пакетов
Это функция контроля состояния разговора по наличию RTP-трафика от встречного устройства. Контроль осуществляется следующим образом: если в течение заданного времени от встречного устройства не поступает ни одного RTP-пакета, то вызов завершается.
По умолчанию контроль выключен.
vesr# vesr# configure vesr(config)# esbc #Создание медиапрофиля NEW_MEDIA_PROFILE: vesr(config-esbc)# media-profile NEW_MEDIA_PROFILE vesr(config-esbc-media-profile)# #Включение таймера в медиапрофиле: vesr(config-esbc-media-profile)# rtp-timeout 100 vesr(config-esbc-media-profile)# vesr(config-esbc-media-profile)# exit vesr(config-esbc)# #Привязать медиапрофиль к транку NEW_TRUNK: vesr(config-esbc)# trunk sip NEW_TRUNK vesr(config-esbc-trunk-sip)# media profile NEW_MEDIA_PROFILE vesr(config-esbc-trunk-sip)# #Применить и подтвердить изменения: vesr(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. vesr(config-esbc-trunk-sip)# do confirm Configuration has been confirmed. Commit timer canceled.
Если после внесения изменений во время вызова с транка NEW_TRUNK в течение 100 секунд не будут приходить RTP-пакеты, то вызов будет принудительно завершён.
SRTP
SRTP (Secure Real-time Transport Protocol) это расширенная версия протокола RTP с набором защитных механизмов. Протокол был опубликован организацией IETF в стандарте RFC 3711. SRTP обеспечивает конфиденциальность за счет шифрования RTP-нагрузки. Для шифрования медиа потока, SRTP стандартизирует использование только единственного шифра, AES, который может использоваться в двух режимах:
- Сегментированный целочисленный счётчик — типичный режим, который осуществляет произвольный доступ к любым блокам, что является существенным для трафика RTP, передающегося в публичных сетях с непредсказуемым уровнем надежности и возможной потерей пакетов. Но стандарт для шифрования данных RTP — только обычное целочисленное значение счётчика. AES, работающий в этом режиме, является алгоритмом шифрования по умолчанию, с длиной шифровального ключа в 128 бит и ключом сессии длиной в 112 бит.
- f8-режим — вариант режима способа обратной связи, расширенного, чтобы быть доступным с изменённой функцией инициализации. Значения по умолчанию для шифровального ключа и ключа сессии — то же, что и в AES в режиме, описанном выше.
SRTP использует функцию формирования ключа для создания ключей на основе мастер-ключа. Протокол управления ключами создает все ключи в сессии с помощью мастер-ключа. За счет того, что у каждой сессии свой уникальный ключ, все сессии защищены. Поэтому, если одна сессия была скомпрометирована, то остальные по-прежнему под защитой.
В конфигурации доступны 2 метода обмена ключами:
И 3 режима использования SRTP:
- disable – SRTP запрещён;
- optional – SRTP не обязателен, но ключи будут подставлены в offer SDP второго плеча, без изменения профиля транспорта в медиа секции SDP;
- mandatory – SRTP обязателен, профиль транспорта в медиа секции SDP будет изменён на соответствующий профиль SRTP.
Если выбран режим mandatory и включены оба метода, то на втором плече будет выбран DTLS-SRTP, как более приоритетный.
По умолчанию поддержка SRTP выключена.
Пример использования SRTP
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. На TRUNK_OUT включаем обязательное использование SRTP с методом обмена ключами – SDES.
vesr# vesr# configure vesr(config)# esbc #Создание медиапрофиля NEW_MEDIA_PROFILE: vesr(config-esbc)# media-profile NEW_MEDIA_PROFILE vesr(config-esbc-media-profile)# #Настройка SRTP (включили обязательный режим использования, метод обмена ключами – SDES): vesr(config-esbc-media-profile)# srtp keying dtls-srtp Enable DTLS-SRTP keying method sdes Enable SDES keying method vesr(config-esbc-media-profile)# srtp keying sdes vesr(config-esbc-media-profile)# srtp mode disable SRTP is disabled mandatory SRTP is mandatory optional SRTP is optional vesr(config-esbc-media-profile)# srtp mode mandatory vesr(config-esbc-media-profile)# vesr(config-esbc-media-profile)# exit vesr(config-esbc)# #Привязать медиапрофиль к транку TRUNK_OUT: vesr(config-esbc)# trunk sip TRUNK_OUT vesr(config-esbc-trunk-sip)# media profile NEW_MEDIA_PROFILE vesr(config-esbc-trunk-sip)# #Применить и подтвердить изменения: vesr(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. vesr(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-profile)
SIP-профиль служит для конфигурации общих параметров SIP. Его можно привязать к транкам, транк-группам и user-interface.
В текущей версии поддержаны следующие настройки:
- Контроль доступности направления
- Список причин отбоя для перехода на следующее направление
Пример настройки контроля доступности направления
vesr# vesr# configure vesr(config)# esbc #Создание sip-профиля NEW_SIP_PROFILE: vesr(config-esbc)# sip-profile NEW_SIP_PROFILE vesr(config-esbc-sip-profile)# #Включить контроль доступности: vesr(config-esbc-sip-profile)# keepalive enable vesr(config-esbc-sip-profile)# #Настроим интервалы контроля: vesr(config-esbc-sip-profile)# keepalive success-interval 120 vesr(config-esbc-sip-profile)# keepalive failed-interval 30 vesr(config-esbc-sip-profile)# vesr(config-esbc-sip-profile)# exit vesr(config-esbc)# #Привязать SIP-профиль к транку TRUNK_OUT: vesr(config-esbc)# trunk sip NEW_TRUNK vesr(config-esbc-trunk-sip)# sip-profile NEW_SIP_PROFILE vesr(config-esbc-trunk-sip)# #Применить и подтвердить изменения: vesr(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. vesr(config-esbc-trunk-sip)# do confirm Configuration has been confirmed. Commit timer canceled.
После применения изменений E-SBC будет слать в сторону TRUNK_OUT OPTIONS (пока поддержан только этот метод контроля).
Если транк отвечает на OPTIONS, то он считается доступным, повторный запрос OPTIONS будет отправлен через 120 секунд (success-interval).
Если не отвечает, то он считается недоступным, повторный запрос OPTIONS будет отправлен через 30 секунд (failed-interval).
Контроль доступности не работает для user-interface.
Использование списка причин отбоя для перехода на следующее направление
На E-SBC есть возможность создать список ответов, при получении которых происходит перемаршрутизация на следующее направление(следующий транк в транковой группе/следующее правило в таблице маршрутизации). Это работает как для вызовов, так и для регистраций.
При создании маски для списка можно использовать регулярные выражения PCRE.
Схема:
В таблице маршрутизации два правила, первое направляет вызов в TRUNK_GROUP, второе направляет вызов в TRUNK_3.
vesr# vesr# configure vesr(config)# esbc #Создать список ответов: vesr(config-esbc)# cause-list sip LIST vesr(config-esbc-cause-list-sip)# #Создать маску по которой будут отбираться ответы для перемаршрутизации vesr(config-esbc-cause-list-sip)# cause-mask 404 vesr(config-esbc-cause-list-sip)# exit #Создать SIP-профиль, привязать список к SIP-профилю vesr(config-esbc)# sip-profile SIP-PROFILE vesr(config-esbc-sip-profile)# cause-list LIST vesr(config-esbc-sip-profile)# exit #Привязать к транковой группе TRUNK-GROUP SIP-профиль vesr(config-esbc)# trunk-group TRUNK-GROUP vesr(config-esbc-trunk-group)# sip-profile SIP-PROFILE vesr(config-esbc-trunk-group)# #Применить и подтвердить изменения: vesr(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. vesr(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, поэтому происходит маршрутизация на следующее направление, в транковой группе больше нет транков, поэтому E-SBC переходит к RULE_2 и вызов маршрутизируется в TRUNK_3.
Если нет привязанного списка, то перемаршрутизация происходит только по недоступности транка.
Если из user-interface пришёл ответ, совпадающий с маской, то перемаршрутизации не будет.
Перемаршрутизация абонентов
Вызов с зарегистрированного абонента будет направлен в тот транк, где он регистрировался. В случае неудачи перемаршрутизация запрещена.
При вызове с незарегистрированного абонента сначала идёт проверка, разрешены ли с этого user-interface вызовы без регистрации(allow_unreg_call), если проверка успешна, то вызов смаршрутизируется по привязанной таблице маршрутизации и в случае недоступности транка/совпадении ответа с маской из списка произойдёт маршрутизация на следующее направление.
Создание/конфигурирование модификаторов (modification table)
Таблица модификаций содержит список модификаций, которые применяются к входящим или исходящим SIP-сообщениям. Таблицы модификаций используются в транках и транк-группах. Их можно подключить, как out — тогда правила будут применяться при отправке сообщения. Или, как in — тогда правила применяются при получении сообщения.
Таблица из транк-групп применяется только в том случае, если в транке нет своей таблицы. В модификациях можно использовать регулярные выражения PCRE.
При сравнении имён заголовков требуется точное совпадение строк, в то время как при поиске в теле заголовка — достаточно совпадения подстроки. По умолчанию из входящего сообщения вырезаются все заголовки. Модификации не применяются к тем сообщениям, которые создаются самим SBC (100 trying, ack в ответ на 200 OK, 200 OK в ответ на BYE).
Неподдерживаемые заголовки
Нельзя модифицировать следующие заголовки:
Call-ID
Contact
Content-Length
Content-Type
Cseq
From
To
Via
Accept
Allow
Expires
Min-Expires
Proxy-Authenticate
Proxy-Authorization
Require
Supported
WWW-Authenticate
Max-forwards
Min-SE
Session-Expires
Поддерживаемые модификации
В текущей версии поддерживаются следующие модификации:
- add — добавление заголовка.
- no-transit — удаление заголовка. Данная команда используется только в out заголовках (таблицы in всегда вырезают все заголовки, полученные в сообщении из сети).
replace — замена заголовка.
Данное правило не подразумевает передачу заголовка — если правило используется в in таблице, необходимо добавить передачу соответствующего заголовка с помощью правила transit.
transit — передача заголовка. Данная команда используется только в in таблицах (таблицы out всегда передают все заголовки, полученные с другого плеча).
Порядок применения модификаций
В первую очередь применяются модификации транзита — incoming и outcoming. Затем применяются модификации замены в том порядке, в котором они заданы в таблице. В конце добавляются новые заголовки.
Пример использования модификатора добавления заголовка (add)
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN уходит в TRUNK_OUT. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, был добавлен заголовок Test_header со значением example string.
vesr# vesr# configure vesr(config)# esbc #Создание таблицы модификаторов MODTABLE_IN: vesr(config-esbc)# mod-table sip MODTABLE_IN vesr(esbc-mod-table)# #Добавление в таблицу модификаторов правила на добавление заголовка: vesr(esbc-mod-table)# mod 0 add vesr(esbc-mod-table-modification)# #Выбор запроса, в котором будет добавлен заголовок(в данном случае INVITE): vesr(esbc-mod-table-modification)# sip-method type Invite #Указать название заголовка, который необходимо вставить (в данном случае Test_header): vesr(esbc-mod-table-modification)# header name Test_header #Указать содержимое заголовка, которое необходимо вставить (в данном случае example string): vesr(esbc-mod-table-modification)# header value "example string" vesr(esbc-mod-table-modification)# exit vesr(esbc-mod-table)# exit #Привязать таблицу модификаторов к входящему транку TRUNK_IN: vesr(config-esbc)# trunk sip TRUNK_IN vesr(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN #Применить и подтвердить изменения: vesr(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. vesr(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
Пример использования модификатора удаления заголовка (no-transit)
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Test_header. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, вырезался заголовок Test_header, если в его содержимом есть "example string".
vesr# vesr# configure vesr(config)# esbc #Создание таблицы модификаторов MODTABLE_OUT: vesr(config-esbc)# mod-table sip MODTABLE_OUT vesr(esbc-mod-table)# #Добавление в таблицу модификаторов правила на удаление заголовка: vesr(esbc-mod-table)# mod 0 no-transit vesr(esbc-mod-table-modification)# #Выбор запроса, в котором будет удален заголовок (в данном случае INVITE): vesr(esbc-mod-table-modification)# sip-method type Invite #Указать название заголовка, который необходимо удалить (в данном случае Test_header): vesr(esbc-mod-table-modification)# sip-header pattern Test_header #Указать содержимое заголовка, при совпадении с которым заголовок будет удален (в данном случае example string): vesr(esbc-mod-table-modification)# value-pattern "example string" vesr(esbc-mod-table-modification)# exit vesr(esbc-mod-table)# exit #Привязать таблицу модификаторов к исходящему транку TRUNK_OUT: vesr(config-esbc)# trunk sip TRUNK_OUT vesr(config-esbc-trunk-sip)# mod-table sip out MODTABLE_OUT #Применить и подтвердить изменения: vesr(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. vesr(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
Пример использования модификатора транзита и замены заголовка (replace)
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Из TRUNK_IN приходит INVITE с заголовком Test_header: 123. Требуется, чтобы в TRUNK_OUT отправился INVITE с заголовком Test_header: 123456.
vesr# vesr# configure vesr(config)# esbc #Создание таблицы модификаторов MODTABLE_IN: vesr(config-esbc)# mod-table sip MODTABLE_IN vesr(esbc-mod-table)# #Добавление в таблицу модификаторов правила на транзит заголовка: vesr(esbc-mod-table)# mod 0 transit vesr(esbc-mod-table-modification)# #Выбор запроса, в котором будет транзититься заголовок (в данном случае INVITE): vesr(esbc-mod-table-modification)# sip-method type Invite #Указать название заголовка, который необходимо транзитить (в данном случае Test_header): vesr(esbc-mod-table-modification)# sip-header pattern Test_header vesr(esbc-mod-table-modification)# exit #Добавление в таблицу модификаторов правила на замену заголовка: vesr(esbc-mod-table)# mod 1 replace #Выбор запроса, в котором будут заменяться заголовки: vesr(esbc-mod-table-modification)# sip-method type Invite #Указать название заголовка, содержимое которого необходимо заменить: vesr(esbc-mod-table-modification)# sip-header pattern Test_header #Указать место в содержимом заголовка, которое необходимо заменить (конец строки исходного содержимого заголовка): vesr(esbc-mod-table-modification)# value-pattern $ #Добавить правило для подмены содержимого заголовка (к концу строки исходного содержимого заголовка добавляется 456): vesr(esbc-mod-table-modification)# replacement 456 vesr(esbc-mod-table-modification)# exit vesr(esbc-mod-table)# exit #Привязать таблицу модификаторов к входящему транку TRUNK_IN: vesr(config-esbc)# trunk sip TRUNK_IN vesr(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN #Применить и подтвердить изменения: vesr(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. vesr(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
Есть возможность разбивать скобками шаблон value-pattern на группы(максимум 9 групп). И оперировать ими в replacement с помощью цифр, экранированных обратной чертой('\1-9'). '\0' - весь текст.
Пример(схема та же):
vesr#
vesr# configure
vesr(config)# esbc
#Создание таблицы модификаторов MODTABLE_IN:
vesr(config-esbc)# mod-table sip MODTABLE_IN
vesr(esbc-mod-table)#
#Добавление в таблицу модификаторов правила на транзит заголовка:
vesr(esbc-mod-table)# mod 0 transit
vesr(esbc-mod-table-modification)#
#Выбор запроса, в котором будет транзититься заголовок (в данном случае INVITE):
vesr(esbc-mod-table-modification)# sip-method type Invite
#Указать название заголовка, который необходимо транзитить:
vesr(esbc-mod-table-modification)# sip-header pattern Date
vesr(esbc-mod-table-modification)# exit
#Добавление в таблицу модификаторов правила на замену заголовка:
vesr(esbc-mod-table)# mod 1 replace
#Выбор запроса, в котором будут заменяться заголовки:
vesr(esbc-mod-table-modification)# sip-method type Invite
#Указать название заголовка, содержимое которого необходимо заменить:
vesr(esbc-mod-table-modification)# sip-header pattern Date
#Указать место в содержимом заголовка, которое необходимо заменить (шаблон - дата в формате "год-месяц-число"):
vesr(esbc-mod-table-modification)# value-pattern "(\\d{4})-(\\d{2})-(\\d{2})"
#Добавить правило для подмены содержимого заголовка (меняем формат даты на "месяц/число/год"):
vesr(esbc-mod-table-modification)# replacement "\\2/\\3/\\1"
vesr(esbc-mod-table-modification)# exit
vesr(esbc-mod-table)# exit
#Привязать таблицу модификаторов к входящему транку TRUNK_IN:
vesr(config-esbc)# trunk sip TRUNK_IN
vesr(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN
#Применить и подтвердить изменения:
vesr(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.
vesr(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
Работа с логами
Логирование работы E-SBC осуществляется с помощью syslog. Более подробно настройки syslog описаны в разделе Управление SYSLOG справочника команд CLI.
Модули, входящие в состав E-SBC
Название | Описание | Назначение |
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 | модуль взаимодействия с ОС | служит прослойкой между E-SBC и ОС, на которой он разворачивается, предоставляет единый интерфейс взаимодействия с системой и реализует мониторинг различных системных событий |
Включение логирования работы модулей E-SBC производится в разделе debug:
vesr# vesr# configure vesr(config)# esbc #Создание таблицы модификаторов MODTABLE_IN: vesr(config-esbc)# mod-table sip MODTABLE_IN vesr(esbc-mod-table)# #Добавление в таблицу модификаторов правила на транзит заголовка: vesr(esbc-mod-table)# mod 0 transit vesr(esbc-mod-table-modification)# #Выбор запроса, в котором будет транзититься заголовок (в данном случае INVITE): vesr(esbc-mod-table-modification)# sip-method type Invite #Указать название заголовка, который необходимо транзитить (в данном случае Test_header): vesr(esbc-mod-table-modification)# sip-header pattern Test_header vesr(esbc-mod-table-modification)# exit #Добавление в таблицу модификаторов правила на замену заголовка: vesr(esbc-mod-table)# mod 1 replace #Выбор запроса, в котором будут заменяться заголовки: vesr(esbc-mod-table-modification)# sip-method type Invite #Указать название заголовка, содержимое которого необходимо заменить: vesr(esbc-mod-table-modification)# sip-header pattern Test_header #Указать место в содержимом заголовка, которое необходимо заменить (конец строки исходного содержимого заголовка): vesr(esbc-mod-table-modification)# value-pattern $ #Добавить правило для подмены содержимого заголовка (к концу строки исходного содержимого заголовка добавляется 456): vesr(esbc-mod-table-modification)# replacement 456 vesr(esbc-mod-table-modification)# exit vesr(esbc-mod-table)# exit #Привязать таблицу модификаторов к входящему транку TRUNK_IN: vesr(config-esbc)# trunk sip TRUNK_IN vesr(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN #Применить и подтвердить изменения: vesr(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. vesr(config-esbc-trunk-sip)# do confirm Configuration has been confirmed. Commit timer canceled.
Изменение количества модулей
E-SBC поддерживает добавление дополнительных модулей для распределения нагрузки.
Список модулей, количество которых можно изменить:
- core
- sip-worker
- sip-balancer
- media-worker
- media-balancer
Максимальное количество модулей определяется динамически в зависимости от количества ядер CPU.
После изменения количества модулей для стабильной работы необходим перезапуск ПО E-SBC.
Заданное в конфигурации количество модулей не изменяется при увеличении/уменьшении количества ядер CPU системы.
Пример:
vesr# vesr# config vesr(config)# esbc #Переход в общие настройки: vesr(config-esbc)# general vesr(config-esbc-general)# #Увеличение количества медиа-воркеров до 2: vesr(config-esbc-general)# media-worker-count 2 vesr(config-esbc-general)# #Применение и подтверждение изменений: vesr(config-esbc-general)# do commit 2024-09-09T05:26:55+00:00 %SYS-W-EVENT: WARNING!!! After changing E-SBC 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 vesr(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 vesr(config-esbc-general)# #Перезапуск ПО E-SBC для корректного перераспределения модулей: vesr(config-esbc-general)# do reload esbc force Do you really want to reload esbc now? (y/N): y
Для вывода предупреждения о необходимости перезапуска нужно, чтобы уровень syslog severity был не ниже warning.
Настройка WEB-сервера
WEB-интерфейс по умолчанию отключен. Для активации выполните действия, описанные ниже.
Активируйте web-интерфейс по протоколу HTTP или HTTPS.
vesr# config vesr(config)# ip http server vesr(config)# ip https server vesr(config)# exit vesr# commit vesr# confirm
Откройте TCP-порт 80 для HTTP-сервера или 443 для HTTPS в Firewall. Пример ниже представлен для открытия 443 порта.
Создайте группы web с портом 443.object-group service web port-range 443 exit
Добавьте правило в зону trusted self.
security zone-pair trusted self rule 120 action permit match protocol tcp match destination-port object-group web enable exit exitПримените и подтвердите конфигурацию.
commit confirm
Откройте web-браузер, например Firefox, Opera, Chrome.
- Введите в адресной строке браузера IP-адрес устройства. Для перехода в web-интерфейс можно использовать URL: http://<ip-address_esbc> или https://<ip-address_esbc>. При успешном обнаружении контроллера в окне браузера отобразится страница авторизации.
4. Введите имя пользователя и пароль в соответствующие поля.
Заводские установки: пользователь — admin, пароль — password
5. Нажмите кнопку «Войти». В окне браузера откроется страница "Информация об устройстве".











