...
Настройка ESBC для SIP-абонентов
Схема применения:
Описание:
Абонентский шлюз/SIP-абоненты отправляют сообщение на IP-адрес 192.168.20.120 порт 5062, ESBC пересылает данный трафик с IP-адреса 192.168.16.113 порт 5061 на адрес Softswitch 192.168.16.65 порт 5060.
...
В приведенной схеме описаны базовые настройки, описание всех команд приведено в разделе Настройка ESBC.
Настройка ESBC для SIP-транков
Схема применения:
Описание:
Транковый шлюз отправляет сообщения с 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.
...
| Блок кода |
|---|
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 |
| Scroll Pagebreak |
|---|
...
| Блок кода |
|---|
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 |
| Scroll Pagebreak |
|---|
| Блок кода |
|---|
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 |
| Scroll Pagebreak |
|---|
...
| Блок кода |
|---|
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 |
| Scroll Pagebreak |
|---|
| Блок кода |
|---|
vesr# commit vesr# confirm |
...
В приведенной схеме описаны базовые настройки, описание всех команд приведено в разделе Настройка ESBC.
Scroll Pagebreak
Создание/конфигурирование медиаресурсов (media resources)
...
| Предупреждение |
|---|
При использовании одинакового IP-адреса для разных медиаресурсов не допускается пересечение диапазонов портов между этими ресурсами. |
Scroll Pagebreak
Создание/конфигурирование SIP-транспорта (sip-transport)
SIP-транспорт представляет точку входа/выхода сигнализации, т. е. это IP-адрес и порт, с которого ESBC будет отправлять и на который будет принимать сигнальные сообщения.
...
| Блок кода |
|---|
vesr# vesr# configure vesr(config)# esbc |
| Scroll Pagebreak |
|---|
...
- tcp-only — использовать только TCP-протокол;
- tcp-prefer — прием по UDP и TCP. Отправка по TCP. В случае, если не удалось установить соединение по TCP, отправка производится по UDP;
- tls — использовать tls;
- udp-only — использовать только UDP-протокол;
- udp-prefer — прием по UDP и TCP. Отправка пакетов более 1300 байт по TCP, менее 1300 байт — по UDP.
Scroll Pagebreak
Создание/конфигурирование транковых групп (trunk-group)
Транк-группа представляет собой набор транков различного типа (в текущей версии поддерживается только SIP-транк) и алгоритм балансировки нагрузки между ними.
...
Все перечисленные в предыдущем пункте настройки являются общими для всех транков, включенных в состав транковой группы. Это значит, что при отсутствии у транка, входящего в состав транковой группы, какой-либо из перечисленных настроек, будет использоваться настройка из транковой группы. Такой подход позволяет создавать множество транков с минимальным набором настроек, и, объединяя их в транковую группу, производить донастройку через нее. При необходимости изменить какие-либо параметры отдельно взятых транков из группы можно провести индивидуальную настройку, используя настройки на транках.scroll-pagebreak
Пример работы общих настроек:
...
| Блок кода |
|---|
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 |
| Scroll Pagebreak |
|---|
| Блок кода |
|---|
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 |
...
| Блок кода |
|---|
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 |
| Scroll Pagebreak |
|---|
...
| Блок кода |
|---|
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 |
| Scroll Pagebreak |
|---|
...
| Блок кода |
|---|
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# commit vesr# confirm |
| Scroll Pagebreak |
|---|
В случае если необходимо, чтобы один из транков, входящих в состав транковой группы, при поступлении на него входящих вызовов маршрутизировался по другой таблице маршрутизации или использовал другие медиаресурсы, нужно добавить соответствующие настройки в данный транк. Настройки транковой группы при этом не меняются, т. к. настройки транка в приоритете.
Логика работы транковой группы для распределения вызовов на транки, входящие в ее состав
...
Каждый последующий исходящий вызов, маршрутизируемый через транковую группу, используют следующий транк в группе независимо от результата маршрутизации предыдущего вызова в данную транковую группу. В случае недоступности транка или при совпадении ответа с маской из списка причин отбоя, вызов будет направлен через следующий транк в группе.
Пример:
На ESBC настроена транковая группа TRUNK_GROUP, в состав которой входят 3 транка (TRUNK_1, TRUNK_2 и TRUNK_3). Приходит вызов и по правилу маршрутизации уходит на эту транковую группу. В результате ESBC совершает попытку вызова в первый транк в составе транковой группы (TRUNK_1), если вызов неуспешный (транк недоступен или ответ совпал с маской из списка причин отбоя), то происходит попытка позвонить во второй транк (TRUNK_2). Если попытка вызова также неуспешна, то будет попытка позвонить в последний транк (TRUNK_3). Если попытка также неуспешна, то вызов на первом плече отбивается. Если на каком-то из транков пришел ответ 200ОК, то вызов устанавливается.
...
Управление кодеками (codec)
Обработка медиа потоков медиапотоков осуществляется в двух режимах: проксирование и транскодирование. По умолчанию E-SBC ESBC работает в режиме проксирования.
При создании медиа-профиля, медиапрофиля список кодеков, доступных для проксирования, добавляется автоматически.
...
Для очистки списка используется команда - 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. |
ТранскодированиеScroll Pagebreak
Поддержка кодеков для транскодирования осуществляется командами: -
- codec audio
...
- codec video
...
- codec image (в текущей версии ПО не
...
- поддерживается, данная команда аналогична команде codec allow T38 t38)
Порядок обработки 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 соответственно, и будет включено транскодирование.
...
то выбор режима работы (проксирование/транскодирование) будет осуществляться в зависимости от кодека указаного , указанного в Answer SDP плеча B.
Если в ответе первым кодеком будет представлен указан PCMA, то будет выбран режим проксирования, если PCMU - — режим транскодирования.
| Scroll Pagebreak |
|---|
...
SRTP (Secure Real-time Transport Protocol) — это расширенная версия протокола RTP с набором защитных механизмов. Протокол был опубликован организацией IETF в стандарте RFC 3711. SRTP обеспечивает конфиденциальность за счет шифрования RTP-нагрузки. Для шифрования медиа потока, медиапотока SRTP стандартизирует использование только единственного шифра , — AES, который может использоваться в двух режимах:
...
И и 3 режима использования SRTP:
- disable – — SRTP запрещён;
- optional – — SRTP не обязателен, но ключи будут подставлены в offer SDP второго плеча , без изменения профиля транспорта в медиа секции медиасекции SDP;
- mandatory – — SRTP обязателен, профиль транспорта в медиа секции медиасекции SDP будет изменён на соответствующий профиль SRTP.
...
| Блок кода | ||
|---|---|---|
| ||
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. |
...
В таблице маршрутизации два правила, первое — направляет вызов в TRUNK_GROUP, второе — направляет вызов в TRUNK_3.
...
Включение режима 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 |
Возможна работа в двух режимах:
- flexible
...
- — проверяет источник во входящем RTP-потоке и транслирует исходящий поток на IP-адрес и UDP-порт, с которого принимается медиапоток, в случае прерывания входящего RTP-потока более чем на 1 секунду, исходящий поток продолжает транслироваться;
- on
...
- — проверяет источник во входящем RTP-потоке и транслирует исходящий поток на IP-адрес и UDP-порт, с которого принимается медиапоток, в случае прерывания входящего RTP-потока более чем на 1 секунду, исходящий поток перестает транслироваться
...
- .
Настройка и принцип работы nat comedia-mode для абонентов (user-interface)
Включение режима nat comedia-mode осуществляется в настройках user-interface:
| Блок кода | ||
|---|---|---|
| ||
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 |
Возможна работа в двух режимах:
- flexible
...
- — проверяет источник во входящем RTP-потоке и транслирует исходящий поток на IP-адрес и UDP-порт, с которого принимается медиапоток, в случае прерывания входящего RTP-потока более чем на 1 секунду, исходящий поток продолжает транслироваться;
- on
...
- — проверяет источник во входящем RTP-потоке и транслирует исходящий поток на IP-адрес и UDP-порт, с которого принимается медиапоток, в случае прерывания входящего RTP-потока более чем на 1 секунду, исходящий поток перестает транслироваться
...
- .
Также данная настройка позволяет передавать сообщения протокола SIP симметрично (на порт, с которого был принят запрос) в случае, если клиент в инициирующем запросе не использовал параметр RPORT;.
Команда nat keep-alive-interval ипользуется используется для поддержки соединения за NAT для сигнального трафика . (Не поддержана в текущей версии ПО не поддерживается).
Подмена атрибутов direction в SDP
При включении опции nat comedia-mode, mode все атрибуты direction в SDP , при отпавке отправке offer sdp заменяются на sendrecv.
При отправке sdp answer в сторону транка/user-interface с включенной опцией , все атрибуты direction заменяются на максимально возможные, вне зависимости от того, какие атрибуты были в полученном answer на другом плече (в ответ на sendrecv - — sendrecv, в ответ на sendonly - — recvonly, в ответ на recvonly - — sendonly).
Примеры:
1. Замена атрибутов direction в offer sdp
ЭТУ ТАБЛИЦУ НАДО СДЕЛАТЬ КРАСИВОЙ СХЕМОЙ
| Блок кода |
|---|
UAC ---------------trunk-------------------E-SBC-------trunk/user interface with nat comedia-mode---------UAS
--> INVITE (sendonly) --> INVITE (sendrecv)
<-- 200OK (recvonly) <-- 200OK(sendrecv)
--> INVITE (sendonly) --> INVITE (sendrecv)
<-- 200OK (recvonly) <-- 200OK(recvonly)
--> INVITE (recvonly) --> INVITE (sendrecv)
<-- 200OK (sendonly) <-- 200OK(sendrecv) |
2. Замена атрибутов direction в answer sdp
ЭТУ ТАБЛИЦУ НАДО СДЕЛАТЬ КРАСИВОЙ СХЕМОЙ
| Блок кода |
|---|
UAC ------------trunk/user interface with nat comedia-mode-------------E-SBC---------------------trunk--------------------UAS
--> INVITE (sendrecv) --> INVITE (sendrecv)
<-- 200OK (sendrecv) <-- 200OK(sendonly)
--> INVITE (sendrecv) --> INVITE (sendrecv)
<-- 200OK (sendrecv) <-- 200OK(recvonly)
--> INVITE (sendrecv) --> INVITE (sendrecv)
<-- 200OK (sendrecv) <-- 200OK(sendrecv) |
Создание/конфигурирование модификаторов (mod-table)
:
2. Замена атрибутов direction в answer sdp:
Создание/конфигурирование модификаторов (mod-table)
ESBC поддерживает два типа модификаторов — ESBC поддерживает два типа модификаторов - common и sip.
Модификаторы common позволяют модифицировать CdPN и CgPN без привязки к протоколу сигнализации. В текущей версии ПО поддерживается только протокол SIP. Учитывая это, при использовании модификаторов в транках и user-interface sip, модификаторами common можно изменять user part SIP URI заголовков To и From.
Модификаторы sip позволяют позволяют модифицировать любые заголовки сообщений SIP.
Таблицы модификаций применяются в транках, транковых группах и user-interface. Их можно подключить, как out — тогда правила будут применяться при отправке сообщения . Илиили, и как in — тогда правила применяются при получении сообщения. Таблица модификаций, используемая для транковой - группы, будет использоваться только в том случае, если в транке, входящем в эту транковую -группу группу, не настроена своя таблица.
...
Допускается использование следующей конструкции при составлении регулярных выражений PCRE для помещения значений в локальные переменные (от 0 до 9) с помощью цифр, экранированных обратной чертой ('\1-9'). '\0' - — весь текст:
| Блок кода | ||
|---|---|---|
| ||
value-pattern '(some)-(value)' # значения some и value заносятся в локальные переменные pcre 1 и 2 соответственно replacement '\2-\1' # значения переменных меняются местами |
...
Данные переменные используются в рамках одной модификации. Для использования переменных в разных модификациях одной таблицы модификаций используется модификатор типа copy.
| Примечание |
|---|
При применении на транке/user-interface модификаторов обоих типов одновременно, используется следующий порядок их обработки , в зависимости от направления модификации:
|
Scroll Pagebreak
mod-table common
Пример использования модификатора 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-------->E-SBC--------->UASScroll Pagebreak
На транк UAC приходит INVITE:
...
В результате применения модификатора COMMON_MOD в транке UAC, из транка UAS будет отправлен INVITE:
...
В результате модификации mod 5 cgpn , выполнена модификация CgPN 24001 на 84001, в результате mod 10 cdpn - — модификация CdPN 23002 на 22222.
| Примечание |
|---|
При использовании модификатора CgPN помимо заголовка From изменяется user part SIP URI заголовка Contact. При использовании модификатора CdPN помимо заголовка To To изменяется user part SIP в Request-URI. |
| Примечание |
|---|
Модификаторы common, настроенные в качестве IN, могут влиять на результат маршрутизации , при использовании в route-table условий (condition), т. к. правила правила route-table обрабатываются после применения модификации. Модификаторы. настроенные в качестве OUT, не влияют на результат маршрутизации. |
| Предупреждение |
|---|
Для сообщений REGISTER модификаторы common модификаторы не применяются. |
Scroll Pagebreak
mod-table sip
Данный тип модификации позволяет изменять любые заголовки сообщений 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-модификации.:Scroll Pagebreak
Scroll Pagebreak
Логика обработки сообщения SIP при использовании OUT-модификации.:
Поддерживаемые модификации
...
- add — добавление заголовка.
- no-transit — удаление заголовка. Данная модификация применяется только при использовании в качестве out (таблицы in всегда вырезают все заголовки, полученные в сообщении из сети).
replace — замена заголовка.
transit — передача заголовка. Данная модификацияприменяется модификация применяется только при использовании в качестве in (таблицы out всегда передают все заголовки, полученные с другого плеча).
- copy - — позволяет скопировать значение или часть значения заголовка в переменную для использования этого значения в модификаторах add или transit в рамках одной таблицы модификаций (на одном плече вызова).
Работа с переменными модификатора copy
Значения переменных, полученных в модификаторе copy, можно использовать в модификаторах replace (поле replacement) и add (поле header value) в рамках одной таблицы модификации и только для текущего сообщения.
Например, при использовании модификатора copy в таблице на IN, для каждого входящего сообщения будет использоваться отдельный экземпляр таблицы, оответственносоответственно, в каждом случае значение переменных будет разным.
Подстроки \u01 - – \u99 будут заменены на значение соответствующей переменной. Если переменная не задана - — подстрока будет удалена. Длина переменной - — до 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 |
...
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из 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.
|
...
| Блок кода |
|---|
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 |
| Scroll Pagebreak |
|---|
| Блок кода | ||
|---|---|---|
| ||
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".
...
| Блок кода | ||
|---|---|---|
| ||
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 |
| Scroll Pagebreak |
|---|
| Блок кода |
|---|
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 |
...
| Scroll Pagebreak |
|---|
Пример использования локальных переменных pcre в в модификации replace (схема та же):
| Блок кода | ||
|---|---|---|
| ||
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 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. |
...
| Блок кода |
|---|
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_IN, уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Diversion (предварительно следует настроить таблицу модификации на IN транка TRUNK_IN для транзита заголовка Dicersion на второе плечо). Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, вырезался заголовок Diversion, а его значение из user part было добавлено в display name заголовка From.
| Блок кода | ||
|---|---|---|
| ||
vesr# vesr# configure vesr(config)# esbc #Создание таблицы модификаторов MODTABLE_OUT: vesr(config-esbc)# mod-table sip MODTABLE_OUT vesr(esbc-mod-table)# #Добавление в таблицу модификаторов правила copy для копирования значения user part в переменную u01: vesr(esbc-mod-table)# mod 0 copy vesr(esbc-mod-table-modification)# #Выбор запроса, в котором будет использоваться модификатор cpoycopy (в данном случае INVITE): vesr(esbc-mod-table-modification)# sip method type Invite #Указать название заголовка, из которого необходимо копировать значение (в данном случае Diversion): vesr(esbc-mod-table-modification)# sip header-pattern Diversion #Указать содержимое заголовка, при совпадении с которым будет выполнено копирование в пременнуюпеременную. В переменную будет скопирована та часть отбора, которая указана в скобках: vesr(esbc-mod-table-modification)# value-pattern '<sip:(.+)@' #Указать переменную, в которую будет скопировано значение, указанное в скобках, в примере - (.+): vesr(esbc-mod-table-modification)# variable-str 'u01' vesr(esbc-mod-table-modification)# exit #Добавление в таблицу модификаторов правила replace для замены заголовка From: vesr(esbc-mod-table)# mod 1 replace #Указать название заголовка, в котором будет осуществляться замена: vesr(esbc-mod-table-modification)# sip header-pattern 'From' #Выбор запроса, в котором будет использоваться модификатор replace (в данном случае INVITE): vesr(esbc-mod-table-modification)# sip method type Invite #Указать часть содержимого заголовка, которую необходимо заменить: vesr(esbc-mod-table-modification)# value-pattern '.+ <sip:' # Указать переменную u01, которая содержит значение, полученное в модификации copy: vesr(esbc-mod-table-modification)# replacement '\u01 <sip:$' vesr(esbc-mod-table-modification)# exit #Добавление в таблицу модификаторов правила no-transit для удаления заголовка Diversion: vesr(esbc-mod-table)# mod 2 no-transit vesr(esbc-mod-table-modification)# sip header-pattern 'Diversion' vesr(esbc-mod-table-modification)# sip method type Invite 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. |
...
- Активируйте web-интерфейс по протоколу HTTP или HTTPS.:
| Блок кода |
|---|
vesr# config vesr(config)# ip http server vesr(config)# ip https server vesr(config)# exit vesr# commit vesr# confirm |
...
4. Введите в адресной строке браузера IP-адрес устройства. Для перехода в web-интерфейс можно использовать URL: http://<ip-address_esbc> или https://<ip-address_esbc>. При успешном обнаружении контроллера в окне браузера отобразится страница авторизации.:
5. Введите имя пользователя и пароль в соответствующие поля.
...
6. Нажмите кнопку «Войти». В окне браузера откроется страница "Информация об устройстве".:














