...
Настройка ESBC для SIP-абонентов
Схема применения:
Описание:
Абонентский шлюз/SIP-абоненты отправляют сообщение на IP-адрес 192.168.20.120 порт 5062, ESBC пересылает данный трафик с IP-адреса 192.168.16.113 порт 5061 на адрес Softswitch 192.168.16.65 порт 5060.
...
| Блок кода |
|---|
vesr# commit vesr# confirm |
В приведенной схеме описаны базовые настройки, описание всех команд приведено в разделе Настройка 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 |
...
9. Создать SIP-trunk в сторону транкового шлюза:
...
| Блок кода |
|---|
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 |
...
| Примечание |
|---|
Cоздание транков с одинаковым SIP-транспортом и IP:Port разрешено только в случае, если отличается домен. |
...
В приведенной схеме описаны базовые настройки, описание всех команд приведено в разделе Настройка ESBC.
Создание/конфигурирование медиаресурсов (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 |
...
5. Создать SIP-trunk в сторону TRUNK_IN:
...
| Блок кода |
|---|
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ОК, то вызов устанавливается.
...
Медиапрофили служат для настройки общих параметров передачи и приёма медиаданных. Медиапрофили используются в user-interface, транках и транк-группах.
Разрешённые типы медиаданных
В медиапрофиле можно настроить разрешённые типы медиаданных для направления. Для выбора доступны 3 типа:
- audio
- image
- video
Если какой-то тип из представленных в SDP выключен в медиапрофиле, то он будет деактивирован.
...
Управление кодеками (codec)
Обработка медиапотоков осуществляется в двух режимах: проксирование и транскодирование. По умолчанию ESBC работает в режиме проксирования.
При создании медиапрофиля список кодеков, доступных для проксирования, добавляется автоматически.
| Блок кода | ||
|---|---|---|
| ||
vesr#vesbc# vesr# configure vesrvesbc(config)# esbc #Создание медиапрофиля NEW_MEDIA_PROFILE: vesrvesbc(config-esbc)# media-profile vesbc(config-esbc)# media-profile NEW_MEDIA_PROFILE vesrvesbc(config-esbc-media-profile)# #Отключениеdo передачи image и video: vesrcommit vesbc(config-esbc-media-profile)# no media-type imagedo confirm vesrvesbc(config-esbc-media-profile)# nodo sh mediarunning-typeconfig video vesr(config-esbc-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 будет отключен.
| Scroll Pagebreak |
|---|
Таймаут ожидания 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-пакеты, то вызов будет принудительно завершён.
| Scroll Pagebreak |
|---|
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.
MEDIA_PROFILE
codec allow AMR
codec allow CLEARMODE
codec allow CN
codec allow G72
codec allow G722/ 9
codec allow G728 15
codec allow G729/ 18
codec allow GSM 3
codec allow H26
codec allow H261 31
codec allow H263 34
codec allow ILBC
codec allow L16/44100 11
codec allow L16/44100/2 10
codec allow OPUS
codec allow PCMA 8
codec allow PCMU 0
codec allow SPEEX
codec allow T38 t38
codec allow VP
codec allow telephone-event
exit
|
Для очистки списка используется команда no codec allow all. При использовании данной команды будут удалены кодеки, добавленные автоматически при создании профиля, и кодеки, добавленные пользователем.
Список кодеков, разрешенных для проксирования, можно изменять, а также добавлять в него любые кодеки. Для этого используется команда:
| Блок кода | ||
|---|---|---|
| ||
codec allow <full or partial codec name> [payload type] |
где:
<full or partial codec name> — часть или полное название кодека (в соответствии с SDP rtpmap);
[payload type] — номер payload type. Параметр опциональный.
Допускается указание части названия кодека, например: codec allow G72, в таком случае будет разрешено проксирование кодеков G726-16, G726-24, G726-32, G726-40.
| Предупреждение |
|---|
Для кодеков со статическим payload type рекомендуется указывать номер payload type, иначе, если в SDP не будет указан атрибут rtpmap, вызов будет отбиваться кодом 488. |
Транскодирование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 соответственно, и будет включено транскодирование.
Если на плече B включить поддержку PCMA:
| Блок кода | ||
|---|---|---|
| ||
media-profile MP_B
codec audio PCMU
codec audio PCMA
exit |
то выбор режима работы (проксирование/транскодирование) будет осуществляться в зависимости от кодека, указанного в Answer SDP плеча B.
Если в ответе первым кодеком будет указан PCMA, то будет выбран режим проксирования, если PCMU — режим транскодирования.
| Scroll Pagebreak |
|---|
Таймаут ожидания RTP-пакетов
Это функция контроля состояния разговора по наличию RTP-трафика от встречного устройства. Контроль осуществляется следующим образом: если в течение заданного времени от встречного устройства не поступает ни одного RTP-пакета, то вызов завершается.
По умолчанию контроль выключен.
| Блок кода | ||
|---|---|---|
| ||
vesr#
vesr# configure
vesr( | ||
| Блок кода | ||
| ||
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 rtp-timeout 100 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_OUTexit vesr(config-esbc)# #Привязать медиапрофиль к транку NEW_TRUNK: vesr(config-esbc)# trunk sip NEW_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. |
| Scroll Pagebreak |
|---|
| Блок кода | ||
|---|---|---|
| ||
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] |
| Scroll Pagebreak |
|---|
...
Если после внесения изменений во время вызова с транка NEW_TRUNK в течение 100 секунд не будут приходить RTP-пакеты, то вызов будет принудительно завершён.
| Scroll Pagebreak |
|---|
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. |
| Scroll Pagebreak |
|---|
| Блок кода | ||
|---|---|---|
| ||
Session Description Protocol
Session Description Protocol Version (v): 0
Owner/Creator, Session Id (o): 100 393201891761 393201891774 IN IP4 19210.16825.2372.19954
Session Name (s): Talk
Connection Information (c): IN IP4 19210.16825.2372.19954
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 80647078 RTP/SAVPAVP 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. |
Если в течение 30 секунд (failed-interval) из TRUNK_OUT не будет получено ни одного сообщения, то он станет считаться недоступным, и ESBC будет отправлять в сторону TRUNK_OUT OPTIONS (пока поддержан только этот метод контроля) с интервалом 30 секунд (failed-interval).
Если из транка было получено какое-либо сообщение (в том числе ответ на OPTIONS), то транк считается доступным, следующий запрос OPTIONS отправится через 120 секунд (success-interval).
| Предупреждение |
|---|
Контроль доступности не работает для user-interface. |
Использование списка причин отбоя для перехода на следующее направление
На ESBC есть возможность создать список ответов, при получении которых происходит перемаршрутизация на следующее направление (следующий транк в транковой группе/следующее правило в таблице маршрутизации). Это работает как для вызовов, так и для регистраций.
При создании маски для списка можно использовать регулярные выражения PCRE. Scroll Pagebreak
Схема:
В таблице маршрутизации два правила, первое направляет вызов в 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, поэтому происходит маршрутизация на следующее направление, в транковой группе больше нет транков, поэтому ESBC переходит к RULE_2, и вызов маршрутизируется в TRUNK_3.
| Предупреждение |
|---|
Если нет привязанного списка, то перемаршрутизация происходит только по недоступности транка. |
| Предупреждение |
|---|
Если из user-interface пришёл ответ, совпадающий с маской, то перемаршрутизации не будет. |
Перемаршрутизация абонентовScroll Pagebreak
Вызов с зарегистрированного абонента будет направлен в тот транк, где он регистрировался. В случае неудачи перемаршрутизация запрещена.
При вызове с незарегистрированного абонента сначала идёт проверка, разрешены ли с этого 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
Поддерживаемые модификации
В текущей версии поддерживаются следующие модификации:
...
replace — замена заголовка.
| Предупреждение |
|---|
Данное правило не подразумевает передачу заголовка — если правило используется в in таблице, необходимо добавить передачу соответствующего заголовка с помощью правила transit. |
...
transit — передача заголовка. Данная команда используется только в in таблицах (таблицы out всегда передают все заголовки, полученные с другого плеча).
-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] |
| Scroll Pagebreak |
|---|
| Блок кода | ||
|---|---|---|
| ||
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. |
Если в течение 30 секунд (failed-interval) из TRUNK_OUT не будет получено ни одного сообщения, то он станет считаться недоступным, и ESBC будет отправлять в сторону TRUNK_OUT OPTIONS (пока поддержан только этот метод контроля) с интервалом 30 секунд (failed-interval).
Если из транка было получено какое-либо сообщение (в том числе ответ на OPTIONS), то транк считается доступным, следующий запрос OPTIONS отправится через 120 секунд (success-interval).
| Предупреждение |
|---|
Контроль доступности не работает для user-interface. |
Использование списка причин отбоя для перехода на следующее направление
На ESBC есть возможность создать список ответов, при получении которых происходит перемаршрутизация на следующее направление (следующий транк в транковой группе/следующее правило в таблице маршрутизации). Это работает как для вызовов, так и для регистраций.
При создании маски для списка можно использовать регулярные выражения PCRE. Scroll Pagebreak
Схема:
В таблице маршрутизации два правила, первое — направляет вызов в 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, поэтому происходит маршрутизация на следующее направление, в транковой группе больше нет транков, поэтому ESBC переходит к RULE_2, и вызов маршрутизируется в TRUNK_3.
| Предупреждение |
|---|
Если нет привязанного списка, то перемаршрутизация происходит только по недоступности транка. |
| Предупреждение |
|---|
Если из user-interface пришёл ответ, совпадающий с маской, то перемаршрутизации не будет. |
Перемаршрутизация абонентовScroll Pagebreak
Вызов с зарегистрированного абонента будет направлен в тот транк, где он регистрировался. В случае неудачи перемаршрутизация запрещена.
При вызове с незарегистрированного абонента сначала идёт проверка, разрешены ли с этого user-interface вызовы без регистрации(allow_unreg_call), если проверка успешна, то вызов смаршрутизируется по привязанной таблице маршрутизации и в случае недоступности транка/совпадении ответа с маской из списка произойдёт маршрутизация на следующее направление.
Работа с NAT (nat comedia-mode)
С целью преодоления соединений через устройства NAT, в ESBC реализована поддержка nat comedia-mode для абонентов и транков.
Настройка и принцип работы nat comedia-mode для транков (trunk)
Включение режима nat comedia-mode осуществляется в настройках транка:
| Блок кода | ||
|---|---|---|
| ||
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# trunk sip
vesbc(config-esbc-trunk-sip)# nat comedia-mode
Select NAT comedia mode for trunk:
off
on
flexible
vesbc(config-esbc-trunk-sip)# nat comedia-mode on |
Возможна работа в двух режимах:
- 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 все атрибуты direction в SDP при отправке offer sdp заменяются на sendrecv.
При отправке sdp answer в сторону транка/user-interface с включенной опцией все атрибуты direction заменяются на максимально возможные, вне зависимости от того, какие атрибуты были в полученном answer на другом плече (в ответ на sendrecv — sendrecv, в ответ на sendonly — recvonly, в ответ на recvonly — sendonly).
Примеры:
1. Замена атрибутов direction в offer sdp:
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)
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из 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 |
Порядок применения модификаций
В первую очередь применяются модификации транзита — 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)# exit #Добавление#Привязать в таблицу модификаторов правилак наисходящему добавлениетранку заголовкаTRUNK_OUT: vesr(config-esbc-mod-table)# mod 0 addtrunk sip TRUNK_OUT vesr(config-esbc-modtrunk-table-modificationsip)# #Выбор запроса, в котором будет добавлен заголовок(в данном случае INVITE)mod-table sip out MODTABLE_OUT #Применить и подтвердить изменения: vesr(config-esbc-modtrunk-table-modificationsip)# sip-methoddo typecommit Invite #УказатьConfiguration названиеhas заголовка,been которыйsuccessfully необходимоapplied вставитьand (вsaved данномto случае 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.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_IN приходит следующий INVIITEOUT отправляется следующий INVITE (заголовок Test_header отсутствует):
| Блок кода | ||
|---|---|---|
| ||
INVITE sip:24000@192.168.114.130129:54615460 SIP/2.0 Via: SIP/2.0/UDP 192.168.114.129130:54615460;rport;branch=z9hG4bKz9hG4bKPjz8Y5BfoTrBQlqecLCu34TIyYn-372660-1-56rX5dH Max-Forwards: 70 From: "Simple UAC send bye" <sip:24001@192.168.114.130130>;cpc=priority>;tag=1372660qTwcY3ZHvA6SHvuRsoo7w40r9yXzjEEp To: "24000" <sip:24000@192.168.114.130>129> Call-IDContact: 1-372660@192<sip:24001@192.168.114.129130:5460;transport=udp> Call-ID: yHvNLSIvp0DQYSRFPRpfgVUv9U0uKEHT CSeq: 110147 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 Content-Type: application/sdp Content-Length: 149 157 v=0 o=tester 1234563927597375 6543213927597375 IN IP4 192.168.114.129130 s=A conversation c=IN IP4 192.168.114.129130 t=0 0 m=audio 83388070 RTP/AVP 8 a=rtpmap:8 PCMA/8000 |
На TRUNK_OUT отправляется уже модифицированный INVITE с добавленным заголовком:
| Scroll Pagebreak |
|---|
| Блок кода | ||
|---|---|---|
INVITE sip | ||
| Блок кода | ||
| ||
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.129:5460 SIP/2.0 Via: SIP/2.0/UDP 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)
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Test_header. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, вырезался заголовок Test_header, если в его содержимом есть "example string".
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.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: 90 129: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 |
В случае, если в заголовке Test_header будет содержимое отличное от "example string", заголовок будет отправлен в TRUNK_OUT.
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 (схема та же):
| Блок кода | ||
|---|---|---|
| ||
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 1 replace #Выбор запроса, в котором будут заменяться заголовки: vesr(esbc-mod-table-modification)# sip method-type Invite #Выбор#Указать название запроса, в котором будет транзититься заголовок (в данном случае INVITEзаголовка, содержимое которого необходимо заменить: vesr(esbc-mod-table-modification)# sip header-pattern Date #Указать место в содержимом заголовка, которое необходимо заменить (шаблон — дата в формате "год-месяц-число"): 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(esbc-mod-table-modificationconfig-esbc)# trunk 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. |
| Scroll Pagebreak |
|---|
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: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 с измененным заголовком:
| Блок кода | ||
|---|---|---|
| ||
| Блок кода | ||
INVITE sip:24000@192.168.114.130:5461 SIP/2.0 Via: SIP/2.0/UDP 19210.16825.11472.129151:54615060;rport;branch=z9hG4bK-375510-1-5z9hG4bKPjc5kLf-R0rh5Stla2eTvpoVAxOc0Jr.kX Max-Forwards: 70 From: "Simple UAC send bye" <sip:24001@192134@10.16825.11472.130151>;cpc=priority>;tag=1375510lMWgbj2x66hzNDHhP8ef8tWvB2HT2DwH To: "24000"<sip:135@192.168.23.140> Contact: <sip:24000@192134@10.16825.114.130>72.151:5060;transport=udp> Call-ID: 1-375510@192.168.114.129: c09c3761560702267daaee76eb769a9c CSeq: 15021 INVITE Contact: <sip:24001@192.168.114.129:5461> Max-Forwards: 70 #Заголовок, который необходимо протранзитить и заменить: Test_header: 123Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE Supported: 100rel, replaces #Измененный заголовок: Date: 09/10/2024 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/8000163 |
Пример использования модификатора копирования (copy)
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Diversion (предварительно следует настроить таблицу модификации на IN транка TRUNK_IN для транзита заголовка Dicersion на второе плечо). Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, вырезался заголовок Diversion, а его значение из user part было добавлено в display name заголовка From.На 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 |
|---|
Пример (схема та же):
| Блок кода | ||
|---|---|---|
| ||
vesr# vesr# configure vesr(config)# esbc #Создание таблицы модификаторов MODTABLE_IN: vesr(config-esbc)# mod-table sip MODTABLE_INvesr# 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 #Добавление в таблицу модификаторов правила replace надля транзитзамены заголовка From: vesr(esbc-mod-table)# mod 0 transit 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)# 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 Date #Указать место)# exit #Добавление в содержимомтаблицу заголовка,модификаторов которое необходимо заменить (шаблон - дата в формате "год-месяц-число")правила no-transit для удаления заголовка Diversion: vesr(esbc-mod-table-modification)# mod 2 value-pattern "(\\d{4})-(\\d{2})-(\\d{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-10Diversion: <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
Работа с логами
Логирование работы ESBC осуществляется с помощью syslog. Более подробно настройки syslog описаны в разделе Управление SYSLOG справочника команд CLI.
Модули, входящие в состав ESBC
...
- Активируйте 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. Нажмите кнопку «Войти». В окне браузера откроется страница "Информация об устройстве".:
















