...
Настройка 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 |
| Scroll Pagebreak |
|---|
...
| Блок кода |
|---|
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) |
Создание/конфигурирование модификаторов (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
Поддерживаемые модификации
В текущей версии поддерживаются следующие модификации:
...
replace — замена заголовка.
| Предупреждение |
|---|
Данное правило не подразумевает передачу заголовка — если правило используется в in таблице, необходимо добавить передачу соответствующего заголовка с помощью правила transit. |
...
transit — передача заголовка. Данная команда используется только в in таблицах (таблицы out всегда передают все заголовки, полученные с другого плеча).
:
2. Замена атрибутов direction в answer sdp:
Создание/конфигурирование модификаторов (mod-table)
ESBC поддерживает два типа модификаторов — common и sip.
Модификаторы common позволяют модифицировать CdPN и CgPN без привязки к протоколу сигнализации. В текущей версии ПО поддерживается только протокол SIP. Учитывая это, при использовании модификаторов в транках и user-interface sip, модификаторами common можно изменять user part SIP URI заголовков To и From.
Модификаторы sip позволяют модифицировать любые заголовки сообщений SIP.
Таблицы модификаций применяются в транках, транковых группах и user-interface. Их можно подключить, как out — тогда правила будут применяться при отправке сообщения или, и как in — тогда правила применяются при получении сообщения. Таблица модификаций, используемая для транковой группы, будет использоваться только в том случае, если в транке, входящем в эту транковую группу, не настроена своя таблица.
В таблицах модификации для отбора значений (header pattern, header value, response-pattern, value-pattern, value, replacement и др.) используются регулярные выражения PCRE.
Допускается использование следующей конструкции при составлении регулярных выражений PCRE для помещения значений в локальные переменные (от 0 до 9) с помощью цифр, экранированных обратной чертой ('\1-9'). '\0' — весь текст:
| Блок кода | ||
|---|---|---|
| ||
value-pattern '(some)-(value)'
# значения some и value заносятся в локальные переменные pcre 1 и 2 соответственно
replacement '\2-\1'
# значения переменных меняются местами |
Результат замены: value-some
Данные переменные используются в рамках одной модификации. Для использования переменных в разных модификациях одной таблицы модификаций используется модификатор типа copy.
| Примечание |
|---|
При применении на транке/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 |
Схема вызова:
Scroll Pagebreak
На транк UAC приходит INVITE:
| Блок кода | ||
|---|---|---|
| ||
INVITE sip:24001@192.168.80.129:5080;line=76196f92c8f42f97c3b78125dd1b842c SIP/2.0
Via: SIP/2.0/UDP 192.168.80.26:5070;rport;branch=z9hG4bK-294378-1-1
From: <sip:24001@192.168.80.26:5070>;tag=1
To: <sip:23002@192.168.80.129:5070>
Call-ID: 1-294378@192.168.80.26
Cseq: 1 INVITE
Contact: <sip:24001@192.168.80.26:5070>
Max-Forwards: 70
Allow: INVITE, ACK, BYE, CANCEL, UPDATE, SUBSCRIBE
Content-Type: application/sdp
Content-Length: 174
[SDP]... |
В результате применения модификатора COMMON_MOD в транке UAC, из транка UAS будет отправлен INVITE:
| Блок кода | ||
|---|---|---|
| ||
INVITE sip:22222@192.168.80.26:5080 SIP/2.0
Via: SIP/2.0/UDP 192.168.80.129:5080;rport;branch=z9hG4bKPjWDx0A5VQhCqmg7Sf-wS7Huya0dESxrro
Max-Forwards: 70
From: <sip:84001@192.168.80.129>;tag=epoMSc5qF1.Pfc5pcypn80ONBKHCaO-x
To: <sip:22222@192.168.80.26>
Contact: <sip:84001@192.168.80.129:5080>
Call-ID: 326c0035a257a9f76185383b49df705f
CSeq: 9446 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: 100rel, replaces
Content-Type: application/sdp
Content-Length: 177
[SDP]... |
В результате модификации mod 5 cgpn выполнена модификация CgPN 24001 на 84001, в результате mod 10 cdpn — модификация CdPN 23002 на 22222.
| Примечание |
|---|
При использовании модификатора CgPN помимо заголовка From изменяется user part SIP URI заголовка Contact. При использовании модификатора CdPN помимо заголовка To изменяется user part SIP в Request-URI. |
| Примечание |
|---|
Модификаторы common, настроенные в качестве IN, могут влиять на результат маршрутизации при использовании в route-table условий (condition), т. к. правила route-table обрабатываются после применения модификации. Модификаторы. настроенные в качестве OUT, не влияют на результат маршрутизации. |
| Предупреждение |
|---|
Для сообщений REGISTER модификаторы common не применяются. |
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 |
Заголовок Test_header не будет передан.
Пример использования модификатора добавления заголовка (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 |
| 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 |
Scroll Pagebreak
Пример использования модификатора удаления заголовка (no-transit)
Схема:
Порядок применения модификаций
В первую очередь применяются модификации транзита — incoming и outcoming. Затем применяются модификации замены в том порядке, в котором они заданы в таблице. В конце добавляются новые заголовки.
Пример использования модификатора добавления заголовка (add)
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN уходит в , уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Test_header. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, был добавлен вырезался заголовок Test_header со значением , если в его содержимом есть "example string".
| Блок кода | ||
|---|---|---|
| ||
vesr# vesr# configure vesr(config)# esbc #Создание таблицы модификаторов MODTABLE_INOUT: vesr(config-esbc)# mod-table sip MODTABLE_INOUT vesr(esbc-mod-table)# #Добавление в таблицу модификаторов правила на добавлениеудаление заголовка: vesr(esbc-mod-table)# mod 0 addno-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 name Test_header #Указать содержимое заголовка, которое необходимо вставитьпри совпадении с которым заголовок будет удален (в данном случае example string): vesr(esbc-mod-table-modification)# header value-pattern "example string" vesr(esbc-mod-table-modification)# exit vesr(esbc-mod-table)# exit #Привязать таблицу модификаторов к входящемуисходящему транку TRUNK_INOUT: vesr(config-esbc)# trunk sip TRUNK_INOUT vesr(config-esbc-trunk-sip)# mod-table sip inout MODTABLE_INOUT #Применить и подтвердить изменения: 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. |
| Scroll Pagebreak |
|---|
| Блок кода | ||
|---|---|---|
| ||
INVITE sip:24000@192.168.114.130129:54615460 SIP/2.0 Via: SIP/2.0/UDP 192.168.114.129130:54615460;rport;branch=z9hG4bK-372660-1-5z9hG4bKPjjju.7u4O03Aty93vQq0Q1huigSIqGVIr Max-Forwards: 70 From: "Simple UAC send bye" <sip:24001@192.168.114.130130>;cpc=priority>;tag=1372660 To: "24000" <sip:24000@192tag=CW.53L5FPJAUBsiRspMYqtjTtOTzZxHg To: "24000" <sip:24000@192.168.114.129> Contact: <sip:24001@192.168.114.130>130:5460;transport=udp> Call-ID: 1-372660@192.168.114.129V4OOROjNahUbinXtA648s9eI2kjE5cCI CSeq: 118905 INVITE Contact: <sip:24001@192.168.114.129:5461> Max-Forwards: 70Allow: 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: 149 157 v=0 o=tester 1234563927595234 6543213927595234 IN IP4 192.168.114.129130 s=A conversation c=IN IP4 192.168.114.129130 t=0 0 m=audio 83388066 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=z9hG4bKPjz9hG4bKPjz8Y5BfoTrBQlqecLCu34TIyYn-fvzSQlwN2zoMaGUR5JCLMkjmkBV3Vz16rX5dH Max-Forwards: 70 From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=l2jkRSMeumV03IdhjPntOt7l0XBKy-LnqTwcY3ZHvA6SHvuRsoo7w40r9yXzjEEp To: "24000" <sip:24000@192.168.114.129> Contact: <sip:24001@192.168.114.130:5460;transport=udp> Call-ID: P-W.2oee.2vJw0JoaFbNkRDvnxY40FoPyHvNLSIvp0DQYSRFPRpfgVUv9U0uKEHT CSeq: 3073810147 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 |
Scroll Pagebreak
Пример использования модификатора удаления заголовка (no-transit)
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Test_header. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, вырезался заголовок Test_header, если в его содержимом есть "example string".
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 |
Пример использования модификатора транзита и замены заголовка (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# 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(configesbc-mod-esbctable)# trunk sip TRUNK_OUT mod 1 replace #Выбор запроса, в котором будут заменяться заголовки: vesr(configesbc-esbcmod-trunktable-sipmodification)# modsip method-table sip out MODTABLE_OUT #Применить и подтвердить измененияtype Invite #Указать название заголовка, содержимое которого необходимо заменить: vesr(configesbc-esbcmod-trunktable-sipmodification)# dosip 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. |
| 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=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 отсутствует):
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. |
| Scroll Pagebreak |
|---|
| Блок кода | ||
|---|---|---|
| Блок кода | ||
| ||
INVITE sip:24000@192.168.114.129130:54605461 SIP/2.0 Via: SIP/2.0/UDP 192.168.114.130129:54605461;rport;branch=z9hG4bKPjz8Y5BfoTrBQlqecLCu34TIyYn-6rX5dH Max-Forwards: 70z9hG4bK-375510-1-5 From: "Simple UAC send bye" <sip:24001@192.168.114.130>130;cpc=priority>;tag=qTwcY3ZHvA6SHvuRsoo7w40r9yXzjEEp1375510 To: "24000" <sip:24000@192:24000@192.168.114.130> Call-ID: 1-375510@192.168.114.129>129 CSeq: 1 INVITE 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: 90129:5461> Max-Forwards: 70 #Заголовок, который необходимо протранзитить и заменить: Test_header: 123 Content-Type: application/sdp Content-Length: 157149 v=0 o=tester 3927597375123456 3927597375654321 IN IP4 192.168.114.130129 s=A conversation c=IN IP4 192.168.114.130129 t=0 0 m=audio 80707624 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=z9hG4bKPj8e1WEAvAy16Bk8Vrj-VZiFK-bNOjnjY9z9hG4bKPjIbcILUaVB0cQTFaGLLb7ccpnbTQIRvV3 Max-Forwards: 70 From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=R83mrTm4KQsFL1Bk87hTOB8e182yCSJ.toP8wIO79wo47ChSYy69MFOyd4vhGRNF To: "24000" <sip:24000@192.168.114.129> Contact: <sip:24001@192.168.114.130:5460;transport=udp> Call-ID: eQueXFpyDZESB.hXK.uCGn7XL7TBUdmQdLsiFI4-aD2faceSTLZu.-kuHfN.pJtG CSeq: 883122556 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 string123456 Content-Type: application/sdp Content-Length: 157 v=0 o=tester 39275978323927607871 39275978323927607871 IN IP4 192.168.114.130 s=A conversation c=IN IP4 192.168.114.130 t=0 0 m=audio 80748090 RTP/AVP 8 a=rtpmap:8 PCMA/8000 |
| Scroll Pagebreak |
|---|
Пример использования
...
локальных переменных pcre в модификации 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 sip MODTABLE_IN)# #Добавление в таблицу модификаторов правила на замену заголовка: vesr(esbc-mod-table)# mod 1 replace #Добавление#Выбор запроса, в таблицукотором модификаторовбудут правила на транзит заголовказаменяться заголовки: vesr(esbc-mod-table-modification)# mod 0 transit sip method-type Invite #Указать название заголовка, содержимое которого необходимо заменить: vesr(esbc-mod-table-modification)# sip header-pattern Date #Выбор#Указать запроса,место в котором будет транзититься заголовок (в данном случае INVITEсодержимом заголовка, которое необходимо заменить (шаблон — дата в формате "год-месяц-число"): vesr(esbc-mod-table-modification)# sipvalue-method type Invite #Указать название заголовка, который необходимо транзитить (в данном случае Test_headerpattern "(\\d{4})-(\\d{2})-(\\d{2})" #Добавить правило для подмены содержимого заголовка (меняем формат даты на "месяц/число/год"): vesr(esbc-mod-table-modification)# sip-header pattern Test_headerreplacement "\\2/\\3/\\1" vesr(esbc-mod-table-modification)# exit #Добавление в таблицу модификаторов правила на замену заголовка: vesr(esbc-mod-table)# mod 1 replaceexit #Выбор#Привязать запроса,таблицу вмодификаторов которомк будутвходящему заменятьсятранку заголовкиTRUNK_IN: vesr(config-esbc-mod-table-modification)# trunk sip TRUNK_IN vesr(config-esbc-trunk-sip)# sip-method type Invite #Указать название заголовка, содержимое которого необходимо заменитьmod-table sip in MODTABLE_IN #Применить и подтвердить изменения: vesr(config-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. |
| Scroll Pagebreak |
|---|
| Блок кода |
|---|
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 |
| Scroll Pagebreak |
|---|
Пример (схема та же):
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. |
| Scroll Pagebreak |
|---|
| Блок кода |
|---|
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 |
Пример использования модификатора копирования (copy)
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из 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)#
#Выбор запроса, в котором будет использоваться модификатор copy (в данном случае 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 | ||
| Блок кода | ||
| ||
vesr# vesr# configure vesr(config)# esbc #Создание таблицы модификаторов MODTABLE_IN: vesr(config-esbc)# mod-table sip MODTABLE_IN vesr(esbc-mod-table)# #Добавление в таблицу модификаторов правила replace надля транзитзамены заголовка From: vesr(esbc-mod-table)# mod 0 transit1 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)# sipvalue-headerpattern pattern Date vesr(esbc-mod-table-modification)# exit #Добавление в таблицу модификаторов правила на замену заголовка: vesr(esbc-mod-table)# mod 1 replace #Выбор запроса, в котором будут заменяться заголовки'.+ <sip:' # Указать переменную u01, которая содержит значение, полученное в модификации copy: vesr(esbc-mod-table-modification)# sip-method type Invite #Указать название заголовка, содержимое которого необходимо заменить:# replacement '\u01 <sip:$' vesr(esbc-mod-table-modification)# sip-header pattern Dateexit #Указать#Добавление место в содержимомтаблицу заголовка,модификаторов которое необходимо заменить (шаблон - дата в формате "год-месяц-число")правила no-transit для удаления заголовка Diversion: vesr(esbc-mod-table-modification)# value-pattern "(\\d{4})-(\\d{2})-(\\d{2})" #Добавить правило для подмены содержимого заголовка (меняем формат даты на "месяц/число/год"):mod 2 no-transit vesr(esbc-mod-table-modification)# sip header-pattern 'Diversion' vesr(esbc-mod-table-modification)# replacement "\\2/\\3/\\1" sip method type Invite vesr(esbc-mod-table-modification)# exit vesr(esbc-mod-table)# exit #Привязать таблицу модификаторов к входящемуисходящему транку TRUNK_INOUT: vesr(config-esbc)# trunk sip TRUNK_INOUT vesr(config-esbc-trunk-sip)# mod-table sip inout MODTABLE_INOUT #Применить и подтвердить изменения: 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. |
| Scroll Pagebreak |
|---|
После внесения изменений в конфигурацию с TRUNK_IN приходит следующий INVIITE:
| Блок кода | ||
|---|---|---|
| ||
INVITE sip:135@1024001@192.25168.7280.151129:50605080 SIP/2.0 Via: SIP/2.0/UDP 10192.25168.7280.3526:50635070;rport;branch=z9hG4bK-1104631473191-1-01 From: test <sip:134@1024001@192.25168.7280.15126:50605070>;user=phone>;tag=1 To: sut <sip:135@1023002@192.25168.7280.151:5060;user=phone>129:5070> Call-ID: 1-1104631@10473191@192.25168.7280.3526 CSeqCseq: 1 INVITE Contact: <sip:24001@192.168.80.26:5070> Max-Forwards: 70 Supported: replaces, timer Contact: <sip:134@10.25.72.35:5063>#Заголовок, который необходимо протранзитить и изменить Date: 2024-09-10 Diversion: <sip:11111@test.loc>;reason=time-of-day Subject: Performance Test Allow: INVITE, ACK, BYE, CANCEL, UPDATE, SUBSCRIBE Content-Type: application/sdp Content-Length: 153118 [SDP]... |
На TRUNK_OUT отправляется уже модифицированный INVITE с измененным заголовком From и без заголовка Diversion:
| Блок кода | ||
|---|---|---|
| ||
INVITE sip:23002@192.168.80.26:5080 SIP/2.0 Via: SIP/2.0/UDP 10192.25168.7280.151129:50605080;rport;branch=z9hG4bKPjc5kLf-R0rh5Stla2eTvpoVAxOc0Jrz9hG4bKPjbURYAQZxa2m1zsT6x.kXs6RQ28ONE4EifS Max-Forwards: 70 From: "11111" <sip:134@1024001@192.25168.7280.151>129>;tag=lMWgbj2x66hzNDHhP8ef8tWvB2HT2DwHJfl7n8XBMrh6vjCcB036Ogz6QX4BTDCo To: "sut" <sip:135@19223002@192.168.2380.140>26> Contact: <sip:134@1024001@192.25168.7280.151:5060;transport=udp>129:5080> Call-ID: c09c3761560702267daaee76eb769a9cbbf5db1c228015eecddfe0d7079ce876 CSeq: 50218798 INVITE Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE Supported: 100rel, replaces #Измененный заголовок: Date: 09/10/2024 Content-Type: application/sdp Content-Length: 163119 [SDP]... |
Scroll Pagebreak
Работа с логами
...
- Активируйте 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. Нажмите кнопку «Войти». В окне браузера откроется страница "Информация об устройстве".:














