Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

...

ОбъектКоличество
sip transport500
trunk500
user-interface500
trunk-group250
sip profile1000
route table500
rule64 на таблицу route table
condition 64 на правило rule
media profile 1000
media resource1000
mod-table500
mod64 на таблицу mod-table
cause-list64
crypto profile64
flood filter250
security-profile500
Предупреждение

Не рекомендуется использовать максимальное количество объектов конфигурации одновременно, это может повлиять на работоспособность системы.

Scroll Pagebreak

Расчет максимального количества контактов зарегистрированных абонентов для vESBC: 

Объем оперативной памяти (RAM) vESBC, GB

Количество абонентовконтактов

3

4500

≥4

20000*(объем RAM - 3)

...

Информация

ESBC-3200 поддерживает до 420000 контактов зарегистрированных абонентов.

Настройка абонентских интерфейсов
Якорь
user-interface
user-interface

...

Примечание

По умолчанию вызовы с абонентского интерфейса без предварительной регистрации запрещены.

...

SIP-транк представляет собой интерфейс для подключения к вышестоящему SIP-устройсву устройству (IP АТС/ SIP-proxy/Удаленный SSW и др.) . В или группе вышестоящих устройств при включении динамического режима работы транка. При включении динамического режима работы в конфигурации необходимо задать адрес и порт удалённой стороны , эти или диапазон адресов и портов. Эти параметры используются для идентификации источника запроса.

...

Для создания SIP-транка необходимо настроить:

  • Адрес удалённой стороны (или диапазон адресов для динамического режима);
  • Порт удалённой стороны (или диапазон адресов для динамического режима);
  • SIP-транспорт;
  • Медиаресурсы.

...

Подробное описание параметров всех настроек можно найти в разделе Настройки SIP-транка Справочника команд CLI. 

...

В таблицах модификации для отбора значений (header pattern, header value, response-pattern, value-pattern, value, replacement и др.) используются регулярные выражения PCRE

Предупреждение

Перед использованием модификаторов рекомендуется ознакомиться с описанием синтаксиса регулярных выражений PCRE.

Допускается использование следующей конструкции при составлении регулярных выражений PCRE для помещения значений в локальные переменные (от 0 до 9) с помощью цифр, экранированных обратной чертой ('\1-9'). '\0' — весь текст:

...

Примечание

При использовании модификатора CgPN, помимо заголовка From, изменяется user part SIP URI заголовка Contact. При использовании модификатора CdPN, помимо заголовка To, изменяется user part SIP в Requestв Request-URI. 


Примечание

Модификаторы common, настроенные в качестве IN, могут влиять на результат маршрутизации при использовании в route-table условий (condition), т. к. правила route-table обрабатываются после применения модификации. Модификаторы, настроенные в качестве OUT, не влияют на результат маршрутизации.

Предупреждение

Для сообщений REGISTER модификаторы common не применяются.

Описание всех команд для настройки общих модификаторов приведено в разделе Настройки общих модификаторов.  

Scroll Pagebreak

Модификаторы SIP

...

Логика обработки сообщения SIP при использовании OUT-модификации:

Поддерживаемые модификации

Поддерживаются следующие типы модификации:

  • add — добавление заголовка.
  • no-transit — удаление заголовка. Данная модификация применяется только при использовании в качестве out (таблицы in всегда вырезают все заголовки, полученные в сообщении из сети).
  • replace — замена заголовка.

  • transit — передача заголовка. Данная модификация применяется только при использовании в качестве in (таблицы out всегда передают все заголовки, полученные с другого плеча).

  • copy — позволяет скопировать значение или часть значения заголовка в переменную для использования этого значения в модификаторах add или transit в рамках одной таблицы модификаций (на одном плече вызова).

Порядок применения модификаций в таблице

Модификации в рамках одной таблицы применяются последовательно ко всем заголовкам в порядке, добавленном в конфигурации, т. е. первая модификация применяется ко всем заголовкам, затем вторая модификация применится ко всем заголовкам и т. д.

В результате если какой-либо заголовок был добавлен модификацией add, а затем этот же заголовок был указан в правиле no-transit, то в исходящем сообщении этот заголовок не будет передан. 

Scroll Pagebreak

Пример:

Модификаторы SIP позволяют гибко осуществлять выбор требуемого метода (Request) или ответного сообщения (Response) по конкретному коду. Для этого используются команды:

  • sip method pattern <PATTERN> — необходимый метод или несколько методов задается при помощи регулярного выражения PCRE.
  • sip method type <TYPE> — необходимый метод выбирается из списка шести базовых методов стандарта RFC3261 (REGISTER, INVITE, ACK, CANCEL, BYE и OPTIONS). 
  • sip response-pattern <PATTERN> — необходимый код ответного сообщения задается при помощи регулярного выражения PCRE.

Команда sip method typeаналогичнакомандеsip method patternи может использоваться в случае, когда модификацию требуется осуществлять только в одном из шести вышеуказанных методов. При использовании этой команды нет необходимости использовать pattern для написания регулярного выражения, достаточно выбрать метод из списка. Командыsip method type иsip method pattern являются взаимоисключающими.

Предупреждение

При использовании pattern имейте в виду, чтопо умолчанию синтаксис PCRE является регистрозависимым. Поэтому, например, паттерн "sip method pattern INVITE" не эквивалентен паттерну "sip method pattern invite" и отбор метода INVITE не будетосуществляться при использовании выражения "sip method pattern invite". 


Примечание

При настройке модификатора обязательно следует указывать командами выше, для каких методов и кодов ответа он будет применяться. Иначе модификация не будет применена ни к одному сообщению.

Примеры отбора сообщений SIP для модификации:

Требуется применять модификатор, который добавляет заголовок Test_header cо значением test_value только в сообщение INVITEТаблица модификации SIP_MOD используется в качестве OUT:

Блок кода
languagec#
mod-table sip SIP_MOD
  mod 1 add
# Т.к. по условию требуется добавлять заголовок только в сообщения INVITE, можно воспользоваться командой "sip method pattern '.+'
    sip response-pattern '.+'type"
    sip method type Invite
    header name Test_header
    header value Testtest_value
   exit
  mod 2 no-transit
    sip header-pattern 'Test_header'
   exit

Требуется применять модификатор, который добавляет заголовок Test_header cо значением test_value только в сообщения INVITE, BYE и в ответы 200 OK:

Блок кода
languagec#
mod-table sip SIP_MOD
  mod 1 add
# Т.к. по условию требуется добавлять заголовок в INVITE и BYE, надо воспользоваться командой "sip method pattern"
    sip method pattern '.+'
    INVITE|BYE
# Для добавления заголовка в ответы 200 OK следует добавить команду "sip response-pattern"
 '.+'
   sip valueresponse-pattern 'Test_value'
  exit

Заголовок Test_header не будет передан.

Модификатор добавления заголовка (add)

Схема:

Image Removed

200
    header name Test_header
    header value test_value
  exit

Требуется применять модификатор, который добавляет заголовок Test_header cо значением test_value во все запросы и ответы:В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, был добавлен заголовок Test_header со значением example string.

Блок кода
languagec#
vesbc# 
vesbc# configure 
vesbc(config)# esbc 

#Создание таблицы модификаторов MODTABLE_IN:
vesbc(config-esbc)# mod-table sip MODTABLE_IN
vesbc(esbc-mod-table)# 

#Добавление в таблицу модификаторов правила на добавление заголовка:
vesbc(esbc-mod-table)# mod 0 add
vesbc(esbc-mod-table-modification)# 

#Выбор запроса, в котором будет добавлен заголовок (в данном случае INVITE):
vesbc(esbc-mod-table-modification)# sip method type Invite 

#Указать название заголовка, который необходимо вставить (в данном случае Test_header):
vesbc(esbc-mod-table-modification)# header name Test_header

#Указать содержимое заголовка, которое необходимо вставить (в данном случае example string):
vesbc(esbc-mod-table-modification)# header value "example string"

vesbc(esbc-mod-table-modification)# exit
vesbc(esbc-mod-table)# exit

#Привязать таблицу модификаторов к входящему транку TRUNK_IN:
vesbc(config-esbc)# trunk sip TRUNK_IN 
vesbc(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN 

#Применить и подтвердить изменения:
vesbc(config-esbc-trunk-sip)# do commit 
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm 
Configuration has been confirmed. Commit timer canceled.

После внесения изменений в конфигурацию с TRUNK_IN приходит следующий INVIITE:

Блок кода
INVITE sip:24000@192.168.114.130:5461 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.129:5461;branch=z9hG4bK-372660-1-5
From: "Simple UAC send bye" <sip:24001@192.168.114.130;cpc=priority>;tag=1372660
To: "24000" <sip:24000@192.168.114.130>
Call-ID: 1-372660@192.168.114.129
CSeq: 1 INVITE
Contact: <sip:24001@192.168.114.129:5461>
Max-Forwards: 70
Content-Type: application/sdp
Content-Length: 149

v=0
o=tester 123456 654321 IN IP4 192.168.114.129
s=A conversation
c=IN IP4 192.168.114.129
t=0 0
m=audio 8338 RTP/AVP 8
a=rtpmap:8 PCMA/8000

Scroll Pagebreak

На TRUNK_OUT отправляется уже модифицированный INVITE с добавленным заголовком: 

Блок кода
languagec#
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)

Схема: 

Image RemovedВ конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Test_header. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, вырезался заголовок Test_header, если в его содержимом есть "example string".

mod-table sip SIP_MOD
  mod 1 add
# Т.к. по условию требуется добавлять заголовок во все методы, используется отбор любых значений
    sip method pattern .+
# Т.к. по условию требуется добавлять заголовок во все ответы, используется отбор любых значений
    sip response-pattern .+
    header name Test_header
    header value test_value
  exit

Scroll Pagebreak

Требуется применять модификатор, который добавляет заголовок Test_header cо значением test_value только в предварительные ответы 100–199:

Блок кода
languagec#
mod-table sip SIP_MOD
  mod 1 add
# Т.к. по условию требуется добавлять заголовок во все ответы от 100 до 199, используется, например, регулярное выражение '1\d{2}'
    sip response-pattern '1\d{2}'
    header name Test_header
    header value test_value
  exit

Поддерживаемые модификации

Поддерживаются следующие типы модификации:

  • add — добавление заголовка.
  • no-transit — удаление заголовка. Данная модификация применяется только при использовании в качестве out (таблицы in всегда удаляют все заголовки, полученные в сообщении из сети).
  • replace — замена заголовка.

  • transit — передача заголовка. Данная модификация применяется только при использовании в качестве in (таблицы out всегда передают все заголовки, полученные с другого плеча).

  • copy — позволяет скопировать значение или часть значения заголовка в переменную для использования этого значения в модификаторах add или transit в рамках одной таблицы модификаций (на одном плече вызова).

Порядок применения модификаций в таблице

Модификации в рамках одной таблицы применяются последовательно ко всем заголовкам в порядке, добавленном в конфигурации, т. е. первая модификация применяется ко всем заголовкам, затем вторая модификация применится ко всем заголовкам и т. д.

В результате если какой-либо заголовок был добавлен модификацией add, а затем этот же заголовок был указан в правиле no-transit, то в исходящем сообщении этот заголовок не будет передан. 

Пример: 

Таблица модификации SIP_MOD используется в качестве OUT:

Блок кода
languagec#
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 не будет передан.

Описание всех команд для настройки общих модификаторов приведено в разделе Настройки SIP-модификаторов.

Scroll Pagebreak

Модификатор добавления заголовка (add)

Схема:

Image Added

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, был добавлен заголовок Test_header со значением example string.

Блок кода
languagec#
vesbc# 
vesbc# configure 
vesbc(config)# esbc 

#Создание таблицы модификаторов MODTABLE_IN:
vesbc(config-esbc)# mod-table sip MODTABLE_IN
vesbc(esbc-mod-table)# 

#Добавление в таблицу модификаторов правила на добавление заголовка:
vesbc(esbc-mod-table)# mod 0 add
vesbc(esbc-mod-table-modification)# 

#Выбор запроса, в котором будет добавлен заголовок (в данном случае INVITE):
vesbc(esbc-mod-table-modification)# sip method type Invite 

#Указать название заголовка, который необходимо вставить (в данном случае Test_header):
vesbc(esbc-mod-table-modification)# header name Test_header

#Указать содержимое заголовка, которое необходимо вставить (в данном случае example string):
vesbc(esbc-mod-table-modification)# header value "example string"

vesbc(esbc-mod-table-modification)# exit
vesbc(esbc-mod-table)# exit

#Привязать таблицу модификаторов к входящему транку TRUNK_IN
Блок кода
languagec#
vesbc# 
vesbc# configure 
vesbc(config)# esbc 

#Создание таблицы модификаторов MODTABLE_OUT:
vesbc(config-esbc)# mod-tabletrunk sip MODTABLETRUNK_OUTIN 
vesbc(config-esbc-modtrunk-tablesip)# 

#Добавление в таблицу модификаторов правила на удаление заголовкаmod-table sip in MODTABLE_IN 

#Применить и подтвердить изменения:
vesbc(config-esbc-modtrunk-tablesip)# moddo 0commit no-transit
vesbc(esbc-mod-table-modification)# 

#Выбор запроса, в котором будет удален заголовок (в данном случае INVITE):
vesbc(esbc-mod-table-modification)# sip method type Invite

#Указать название заголовка, который необходимо удалить (в данном случае Test_header):
vesbc(esbc-mod-table-modification)# sip header-pattern Test_header

#Указать содержимое заголовка, при совпадении с которым заголовок будет удален (в данном случае example string):
vesbc(esbc-mod-table-modification)# value-pattern "example string"

vesbc(esbc-mod-table-modification)# exit
vesbc(esbc-mod-table)# exit

#Привязать таблицу модификаторов к исходящему транку TRUNK_OUT:
vesbc(config-esbc)# trunk sip TRUNK_OUT 
vesbc(config-esbc-trunk-sip)# mod-table sip out MODTABLE_OUT 

#Применить и подтвердить изменения:
vesbc(config-esbc-trunk-sip)# do commit 
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm 
Configuration has been confirmed. Commit timer canceled.

Scroll Pagebreak

...


Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm 
Configuration has been confirmed. Commit timer canceled.

Scroll Pagebreak

После внесения изменений в конфигурацию с TRUNK_IN приходит следующий INVIITE:

Блок кода
INVITE sip:24000@192.168.114.130:5461 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.129:5461;branch=z9hG4bK-372660-1-5
From: "Simple UAC send bye" <sip:24001@192.168.114.130;cpc=priority>;tag=1372660
To: "24000" <sip:24000@192.168.114.130>
Call-ID: 1-372660@192.168.114.129
CSeq: 1 INVITE
Contact: <sip:24001@192.168.114.129:5461>
Max-Forwards: 70
Content-Type: application/sdp
Content-Length: 149

v=0
o=tester 123456 654321 IN IP4 192.168.114.129
s=A conversation
c=IN IP4 192.168.114.129
t=0 0
m=audio 8338 RTP/AVP 8
a=rtpmap:8 PCMA/8000

На TRUNK_OUT отправляется уже модифицированный INVITE с добавленным заголовком: 

Блок кода
languagec#
INVITE sip:24000@192.168.114.129:5460 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPjjju.7u4O03Aty93vQq0Q1huigSIqGVIrz9hG4bKPj-fvzSQlwN2zoMaGUR5JCLMkjmkBV3Vz1
Max-Forwards: 70
From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=CW.53L5FPJAUBsiRspMYqtjTtOTzZxHgl2jkRSMeumV03IdhjPntOt7l0XBKy-Ln
To: "24000" <sip:24000@192.168.114.129>
Contact: <sip:24001@192.168.114.130:5460;transport=udp>
Call-ID: V4OOROjNahUbinXtA648s9eI2kjE5cCIP-W.2oee.2vJw0JoaFbNkRDvnxY40FoP
CSeq: 1890530738 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 39275952343927594021 39275952343927594021 IN IP4 192.168.114.130
s=A conversation
c=IN IP4 192.168.114.130
t=0 0
m=audio 80668062 RTP/AVP 8
a=rtpmap:8 PCMA/8000

...


Scroll Pagebreak

Модификатор передачи заголовка (transit)

Схема: 

Image AddedВ конфигурации настроено два транка и настроена маршрутизация из транка TRUNK_IN в TRUNK_OUT. Требуется передать заголовок "User-Agent" из входящего INVITE, только если в нем указано значение "TestUA". 

Примечание

По умолчанию все необязательные и пользовательские заголовки удаляются на входящем плече и не передаются на исходящее плечо. 

Решение:

Создаем таблицу модификации MODTABLE_IN:

Блок кода
languagec#
INVITE sip:24000@192.168.114.129:5460 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPjz8Y5BfoTrBQlqecLCu34TIyYn-6rX5dH
Max-Forwards: 70
From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=qTwcY3ZHvA6SHvuRsoo7w40r9yXzjEEp
To: "24000" <sip:24000@192.168.114.129>
Contact: <sip:24001@192.168.114.130:5460;transport=udp>
Call-ID: yHvNLSIvp0DQYSRFPRpfgVUv9U0uKEHT
CSeq: 10147 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: timer, 100rel, replaces
Session-Expires: 1800
Min-SE: 90
Content-Type: application/sdp
Content-Length:   157

v=0
o=tester 3927597375 3927597375 IN IP4 192.168.114.130
s=A conversation
c=IN IP4 192.168.114.130
t=0 0
m=audio 8070 RTP/AVP 8
a=rtpmap:8 PCMA/8000

Scroll Pagebreak

В случае если в заголовке Test_header будет содержимое, отличное от "example string", заголовок будет отправлен в TRUNK_OUT:

vesbc# 
vesbc# configure 
vesbc(config)# esbc 
#Создаем модификаторов MODTABLE_IN:
vesbc(config-esbc)# mod-table sip MODTABLE_IN
vesbc(esbc-mod-table)# 
#Добавляем в таблицу модификаторов правила для транзита заголовков:
vesbc(esbc-mod-table)# mod 0 transit
vesbc(esbc-mod-table-modification)# 
#Выбираем метод, в котором будет осуществляться поиск заголовка (по условиям задачи - INVITE):
vesbc(esbc-mod-table-modification)# sip method type Invite
#Указываем паттерн для выбора названия заголовка, который необходимо передавать (по условиям задачи - User-Agent):
vesbc(esbc-mod-table-modification)# sip header-pattern User-Agent
#Указать содержимое заголовка, при совпадении с которым заголовок будет передан (по условиям задачи - TestUA):
vesbc(esbc-mod-table-modification)# value-pattern TestUA
vesbc(esbc-mod-table-modification)# exit
vesbc(esbc-mod-table)# exit

Используем созданную таблицу в качестве IN для транка TRUNK_IN:

Блок кода
vesbc(config-esbc)# trunk sip TRUNK_IN
vesbc(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN 
vesbc(config-esbc-trunk-sip)# do commit 
vesbc(config-esbc-trunk-sip)# do confirm 

Scroll Pagebreak

В результате, когда в транке TRUNK_IN  будет получен INVITE, содержащий заголовок "User-Agent" со значением "TestUA", в исходящем INVITE также будет присутствовать этот заголовок:  

Блок кода
# INVITE полученный в TRUNK_IN:
INVITE sip:23002@192.168.23.199:5070 SIP/2.0
Via: SIP/2.0/UDP 192.168.23.200:5070;rport;branch=z9hG4bK-1763439-1-1
From: sipp <sip:24001@192.168.23.200:5070>;tag=1
To: sut <sip:23002@192.168.23.199:5070>
Call-ID: 1-1763439@192.168.23.200
Cseq: 1 INVITE
Contact: <sip:24001@192.168.23.200:5070>
Max-Forwards: 70
Subject: Performance Test
Allow:
Блок кода
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: timerPRACK, REGISTER, 100relINFO, replaces
Session-Expires: 1800
Min-SE: 90

#Заголовок Test_header с содержимым, отличным от "example string", не удаляется:
Test_header: new string
REFER, NOTIFY, OPTIONS, SUBSCRIBE, MESSAGE, UPDATE, PUBLISH
Content-Type: application/sdp
User-Agent: TestUA
Content-Length:   157240

[SDP]
v=0
o=tester 3927597832 3927597832 IN IP4 192.168.114.130
s=A conversation
c=IN IP4
# INVITE отправленный c TRUNK_OUT:
INVITE sip:23002@192.168.80.26:5080 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.130
t=0 0
m=audio 8074 RTP/AVP 8
a=rtpmap:8 PCMA/8000

Модификатор транзита и замены заголовка (replace)

Схема:

Image Removed

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Из TRUNK_IN приходит INVITE с заголовком Test_header: 123. Требуется, чтобы в TRUNK_OUT отправился INVITE с заголовком Test_header: 123456.

80.129:5080;rport;branch=z9hG4bKPj88572ec4-0af0-4323-abc6-fe1db1ea6e37
Max-Forwards: 70
From: "sipp" <sip:24001@192.168.80.129>;tag=7da4c833-38da-4523-89d7-adc88b581397
To: "sut" <sip:23002@192.168.80.26>
Contact: <sip:24001@192.168.80.129:5080;transport=udp>
Call-ID: d21bdedb499dbfe992a939a27255c536
CSeq: 6199 INVITE
Allow: INVITE, ACK, BYE, CANCEL, PRACK, REGISTER, INFO, REFER, NOTIFY, OPTIONS, SUBSCRIBE, MESSAGE, UPDATE
Supported: 100rel, replaces, ice
User-Agent: TestUA
Content-Type: application/sdp
Content-Length:   241

[SDP]
Примечание

Данный модификатор сработает только в случае, когда значение заголовка User-Agent будет "TestUA". Если значение отличается, то заголовок User-Agent не будет передаваться на второе плечо. Для передачи заголовка с любым значением не следует использовать команду value-pattern в модификаторе, требуется указать в ней все возможные варианты, например, value-pattern .*

Scroll Pagebreak

Модификатор удаления заголовка (no-transit)  

Схема: 

Image AddedВ конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Test_header. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, вырезался заголовок Test_header, если в его содержимом есть "example string".

Примечание

По умолчанию все необязательные и пользовательские заголовки удаляются на входящем плече и не передаются на исходящее плечо. В данном примере демонстрируется модификация только для исходящего плеча (TRUNK_OUT), поэтому подразумевается что на входящем плече (TRUNK_IN) настроен модификатор transit для заголовка Test_header.


Блок кода
languagec#
vesbc# 
vesbc# configure 
vesbc(config)# esbc 

#Создание таблицы модификаторов MODTABLE_OUT:
vesbc(config-esbc
Блок кода
languagec#
vesbc# 
vesbc# configure 
vesbc(config)# esbc 

#Создание таблицы модификаторов MODTABLE_IN:
vesbc(config-esbc)# mod-table sip MODTABLE_IN
vesbc(esbc-mod-table)# 

#Добавление в таблицу модификаторов правила на замену заголовка:
vesbc(esbc-mod-table)# mod 1 replace

#Выбор запроса, в котором будут заменяться заголовки:
vesbc(esbc-mod-table-modification)# sip method-type Invite

#Указать название заголовка, содержимое которого необходимо заменить:
vesbc(esbc-mod-table-modification)# sip header-pattern Test_header

#Указать место в содержимом заголовка, которое необходимо заменить (конец строки исходного содержимого заголовка):
vesbc(esbc-mod-table-modification)# value-pattern $

#Добавить правило для подмены содержимого заголовка (к концу строки исходного содержимого заголовка добавляется 456):
vesbc(esbc-mod-table-modification)# replacement 456

vesbc(esbc-mod-table-modification)# exit
vesbc(esbc-mod-table)# exit

#Привязать таблицу модификаторов к входящему транку TRUNK_IN:
vesbc(config-esbc)# trunk sip TRUNK_IN
vesbc(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN 

#Применить и подтвердить изменения:OUT
vesbc(config-esbc-trunkmod-siptable)# do commit 
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm 
Configuration has been confirmed. Commit timer canceled.

Scroll Pagebreak

После внесения изменений в конфигурацию с TRUNK_IN приходит следующий INVIITE:

Блок кода
INVITE sip:24000@192.168.114.130:5461 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.129:5461;branch=z9hG4bK-375510-1-5
From: "Simple UAC send bye"  <sip:24001@192.168.114.130;cpc=priority>;tag=1375510
To: "24000" <sip:24000@192.168.114.130>
Call-ID: 1-375510@192.168.114.129
CSeq: 1 INVITE
Contact: <sip:24001@192.168.114.129:5461>
Max-Forwards: 70

#Заголовок, который необходимо протранзитить и заменить:
Test_header: 123
Content-Type: application/sdp
Content-Length:   149

v=0
o=tester 123456 654321 IN IP4 192.168.114.129
s=A conversation
c=IN IP4 192.168.114.129
t=0 0
m=audio 7624 RTP/AVP 8
a=rtpmap:8 PCMA/8000

На TRUNK_OUT отправляется уже модифицированный INVITE с измененным заголовком:



#Добавление в таблицу модификаторов правила на удаление заголовка:
vesbc(esbc-mod-table)# mod 0 no-transit
vesbc(esbc-mod-table-modification)# 

#Выбор запроса, в котором будет удален заголовок (в данном случае INVITE):
vesbc(esbc-mod-table-modification)# sip method type Invite

#Указать название заголовка, который необходимо удалить (в данном случае Test_header):
vesbc(esbc-mod-table-modification)# sip header-pattern Test_header

#Указать содержимое заголовка, при совпадении с которым заголовок будет удален (в данном случае example string):
vesbc(esbc-mod-table-modification)# value-pattern "example string"

vesbc(esbc-mod-table-modification)# exit
vesbc(esbc-mod-table)# exit

#Привязать таблицу модификаторов к исходящему транку TRUNK_OUT:
vesbc(config-esbc)# trunk sip TRUNK_OUT 
vesbc(config-esbc-trunk-sip)# mod-table sip out MODTABLE_OUT 

#Применить и подтвердить изменения:
vesbc(config-esbc-trunk-sip)# do commit 
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm 
Configuration has been confirmed. Commit timer canceled.

Scroll Pagebreak

До внесения изменений в конфигурацию в TRUNK_OUT отправлялся следующий INVIITE:

Блок кода
languagec#
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
Блок кода
languagec#
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.pJtGV4OOROjNahUbinXtA648s9eI2kjE5cCI
CSeq: 2255618905 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: timer, 100rel, replaces
Session-Expires: 1800
Min-SE: 90

#Измененный заголовок#Заголовок, который должен быть удален:
Test_header: example 123456string
Content-Type: application/sdp
Content-Length:   157

v=0
o=tester 39276078713927595234 39276078713927595234 IN IP4 192.168.114.130
s=A conversation
c=IN IP4 192.168.114.130
t=0 0
m=audio 80908066 RTP/AVP 8
a=rtpmap:8 PCMA/8000

Scroll Pagebreak



После внесения изменений в конфигурацию в TRUNK_OUT отправляется следующий INVITE (заголовок Test_header отсутствует):Пример использования локальных переменных pcre в модификации replace (схема та же): 

Блок кода
languagec#
INVITE sip:24000@192.168.114.129:5460 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPjz8Y5BfoTrBQlqecLCu34TIyYn-6rX5dH
Max-Forwards: 70
From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=qTwcY3ZHvA6SHvuRsoo7w40r9yXzjEEp
To: "24000" <sip:24000@192.168.114.129>
Contact: <sip:24001@192.168.114.130:5460;transport=udp>
Call-ID: yHvNLSIvp0DQYSRFPRpfgVUv9U0uKEHT
CSeq: 10147 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: timer, 100rel, replaces
Session-Expires: 1800
Min-SE: 90
Content-Type: application/sdp
Content-Length:   157

v=0
o=tester 3927597375 3927597375 IN IP4 192.168.114.130
s=A conversation
c=IN IP4 192.168.114.130
t=0 0
m=audio 8070 RTP/AVP 8
a=rtpmap:8 PCMA/8000

Scroll Pagebreak

В случае если в заголовке Test_header будет содержимое, отличное от "example string", заголовок будет отправлен в TRUNK_OUT:

Блок кода
INVITE sip:24000@192.168.114.129:5460 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPj8e1WEAvAy16Bk8Vrj-VZiFK-bNOjnjY9
Max-Forwards: 70
From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=R83mrTm4KQsFL1Bk87hTOB8e182yCSJ.
To: "24000" <sip:24000@192.168.114.129>
Contact: <sip:24001@192.168.114.130:5460;transport=udp>
Call-ID: eQueXFpyDZESB.hXK.uCGn7XL7TBUdmQ
CSeq: 8831 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: timer, 100rel, replaces
Session-Expires: 1800
Min-SE: 90

#Заголовок Test_header с содержимым, отличным от "example string", не удаляется:
Test_header: new string
Content-Type: application/sdp
Content-Length:   157

v=0
o=tester 3927597832 3927597832 IN IP4 192.168.114.130
s=A conversation
c=IN IP4 192.168.114.130
t=0 0
m=audio 8074 RTP/AVP 8
a=rtpmap:8 PCMA/8000

Scroll Pagebreak

Модификатор транзита и замены заголовка (replace)

Схема:

Image Added

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Из TRUNK_IN приходит INVITE с заголовком Test_header: 123. Требуется, чтобы в TRUNK_OUT отправился INVITE с заголовком Test_header: 123456.

Блок кода
languagec#
vesbc# 
vesbc# configure 
vesbc(config)# esbc 

#Создание таблицы модификаторов MODTABLE_IN:
vesbc(config-esbcvesbc# 
vesbc# configure 
vesbc(config)# esbc 

#Создание таблицы модификаторов MODTABLE_IN:
vesbc(config-esbc)# mod-table sip MODTABLE_IN
vesbc(esbc-mod-table)# 

#Добавление в таблицу модификаторов правила на замену заголовка:
vesbc(esbc-mod-table)# mod 1 replace

#Выбор запроса, в котором будут заменяться заголовки:
vesbc(esbc-mod-table-modification)# sip method-type Invite

#Указать название заголовка, содержимое которого необходимо заменить:
vesbc(esbc-mod-table-modification)# sip header-pattern Date

#Указать место в содержимом заголовка, которое необходимо заменить (шаблон — дата в формате "год-месяц-число"):
vesbc(esbc-mod-table-modification)# value-pattern "(\\d{4})-(\\d{2})-(\\d{2})"

#Добавить правило для подмены содержимого заголовка (меняем формат даты на "месяц/число/год"):
vesbc(esbc-mod-table-modification)# replacement "\\2/\\3/\\1"

vesbc(esbc-mod-table-modification)# exit
vesbc(esbc-mod-table)# exit

#Привязать таблицу модификаторов к входящему транку TRUNK_IN:
vesbc(config-esbc)# trunk sip TRUNK_IN
vesbc(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN
vesbc(esbc-mod-table)# 

#Применить и подтвердить изменения#Добавление в таблицу модификаторов правила на замену заголовка:
vesbc(config-esbc-trunkmod-siptable)# domod commit1 replace

Configuration#Выбор hasзапроса, beenв successfullyкотором appliedбудут and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm 
Configuration has been confirmed. Commit timer canceled.

Scroll Pagebreak

После внесения изменений в конфигурацию с TRUNK_IN приходит следующий INVIITE:

Блок кода
INVITE sip:135@10.25.72.151:5060 SIP/2.0
Via: SIP/2.0/UDP 10.25.72.35:5063;rport;branch=z9hG4bK-1104631-1-0
From: <sip:134@10.25.72.151:5060;user=phone>;tag=1
To: <sip:135@10.25.72.151:5060;user=phone>
Call-ID: 1-1104631@10.25.72.35
CSeq: 1 INVITE
Max-Forwards: 70
Supported: replaces, timer
Contact: <sip:134@10.25.72.35:5063>

#Заголовок, который необходимо протранзитить и изменить:
Date: 2024-09-10
Content-Type: application/sdp
Content-Length:   153

На TRUNK_OUT отправляется уже модифицированный INVITE с измененным заголовком:

заменяться заголовки:
vesbc(esbc-mod-table-modification)# sip method-type Invite

#Указать название заголовка, содержимое которого необходимо заменить:
vesbc(esbc-mod-table-modification)# sip header-pattern Test_header

#Указать место в содержимом заголовка, которое необходимо заменить (конец строки исходного содержимого заголовка):
vesbc(esbc-mod-table-modification)# value-pattern $

#Добавить правило для подмены содержимого заголовка (к концу строки исходного содержимого заголовка добавляется 456):
vesbc(esbc-mod-table-modification)# replacement 456

vesbc(esbc-mod-table-modification)# exit
vesbc(esbc-mod-table)# exit

#Привязать таблицу модификаторов к входящему транку TRUNK_IN:
vesbc(config-esbc)# trunk sip TRUNK_IN
vesbc(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN 

#Применить и подтвердить изменения:
vesbc(config-esbc-trunk-sip)# do commit 
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm 
Configuration has been confirmed. Commit timer canceled.


Scroll Pagebreak

После внесения изменений в конфигурацию с TRUNK_IN приходит следующий INVIITE:

Блок кода
INVITE sip:24000@192.168.114.130:5461 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.129:5461;branch=z9hG4bK-375510-1-5
From: "Simple UAC send bye"  <sip:24001@192.168.114.130;cpc=priority>;tag=1375510
To: "24000" <sip:24000@192.168.114.130>
Call-ID: 1-375510@192.168.114.129
CSeq: 1 INVITE
Contact: <sip:24001@192.168.114.129:5461>
Max-Forwards: 70

#Заголовок, который необходимо протранзитить и заменить:
Test_header: 123
Блок кода
languagec#
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:   149

v=0
o=tester 123456 654321 IN  163

Scroll Pagebreak

Модификатор копирования (copy)

Работа с переменными модификатора

Значения переменных, полученных в модификаторе copy, можно использовать в модификаторах replace (поле replacement) и add (поле header value) в рамках одной таблицы модификации и только для текущего сообщения.

Например, при использовании модификатора copy в таблице на IN, для каждого входящего сообщения будет использоваться отдельный экземпляр таблицы, соответственно, в каждом случае значение переменных будет разным.

Подстроки ${name_perem} будут заменены на значение соответствующей переменной. Если переменная не задана — подстрока будет удалена. Длина переменной — до 128 символов. 

Схема: 

Image Removed

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 с измененным заголовком:В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Diversion (предварительно следует настроить таблицу модификации на IN транка TRUNK_IN для транзита заголовка Diversion на второе плечо). Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, вырезался заголовок Diversion, а его значение из user part было добавлено в display name заголовка From.

Блок кода
languagec#
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

Пример использования локальных переменных pcre в модификации replace (схема та же): 

Блок кода
languagec#
vesbc# 
vesbc# configure 
vesbc(config)# esbc 

#Создание таблицы модификаторов MODTABLE_IN:
vesbc(config-esbc)# mod-table sip MODTABLE_INvesbc# 
vesbc# configure 
vesbc(config)# esbc 

#Создание таблицы модификаторов MODTABLE_OUT:
vesbc(config-esbc)# mod-table sip MODTABLE_OUT
vesbc(esbc-mod-table)# 

#Добавление в таблицу модификаторов правила copy для копирования значения user part в переменную user_part:
vesbc(esbc-mod-table)# mod 0 copy
vesbc(esbc-mod-table-modification)# 

#Выбор запроса,#Добавление в которомтаблицу будетмодификаторов использоватьсяправила модификаторна copy (в данном случае INVITE)замену заголовка:
vesbc(esbc-mod-table-modification)# mod 1 replace

#Выбор запроса, в котором будут заменяться заголовки:
vesbc(esbc-mod-table-modification)# sip method -type Invite

#Указать название заголовка, изсодержимое которого необходимо копировать значение (в данном случае Diversion)заменить:
vesbc(esbc-mod-table-modification)# sip header-pattern DiversionDate

#Указать место содержимоев содержимом заголовка, прикоторое совпадениинеобходимо сзаменить которым(шаблон будет выполнено копированиедата в переменную. В переменную будет скопирована та часть отбора, которая указана в скобкахформате "год-месяц-число"):
vesbc(esbc-mod-table-modification)# value-pattern '<sip:(.+)@'

#Указать переменную, в которую будет скопировано значение, указанное в скобках, в примере - (.+"(\\d{4})-(\\d{2})-(\\d{2})"

#Добавить правило для подмены содержимого заголовка (меняем формат даты на "месяц/число/год"):
vesbc(esbc-mod-table-modification)# variable-str 'user_part'replacement "\\2/\\3/\\1"

vesbc(esbc-mod-table-modification)# exit

#Добавление в таблицу модификаторов правила replace для замены заголовка From:
vesbc(esbc-mod-table)# mod 1 replaceexit

#Указать#Привязать названиетаблицу заголовка,модификаторов вк которомвходящему будет осуществляться заменатранку TRUNK_IN:
vesbc(esbc-mod-table-modificationconfig-esbc)# trunk sip header-pattern 'From'

#Выбор запроса, в котором будет использоваться модификатор replace (в данном случае INVITE):TRUNK_IN
vesbc(config-esbc-trunk-sip)# mod-table-modification)# sip methodin typeMODTABLE_IN Invite

#Указать#Применить частьи содержимого заголовка, которую необходимо заменитьподтвердить изменения:
vesbc(config-esbc-modtrunk-table-modificationsip)# value-pattern '.+ <sip:'

#Указать переменную user_part, которая содержит значение, полученное в модификации copy:
vesbc(esbc-mod-table-modification)# replacement '${user_part} <sip:$'
vesbc(esbc-mod-table-modification)# exit

#Добавление в таблицу модификаторов правила no-transit для удаления заголовка Diversion:
vesbc(esbc-mod-table)# mod 2 no-transit
vesbc(esbc-mod-table-modification)# sip header-pattern 'Diversion'
vesbc(esbc-mod-table-modification)# sip method type Invite
vesbc(esbc-mod-table-modification)# exit
vesbc(esbc-mod-table)# exit

#Привязать таблицу модификаторов к исходящему транку TRUNK_OUT:
vesbc(config-esbc)# trunk sip TRUNK_OUT 
vesbc(config-esbc-trunk-sip)# mod-table sip out MODTABLE_OUT 

#Применить и подтвердить изменения:
vesbc(config-esbc-trunk-sip)# do commit 
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm 
Configuration has been do commit 
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm 
Configuration has been confirmed. Commit timer canceled.

Scroll Pagebreak

После внесения изменений в конфигурацию с TRUNK_IN приходит следующий INVIITE:

language
Блок кода
c#
INVITE sip:24001@192135@10.16825.8072.129151:50805060 SIP/2.0
Via: SIP/2.0/UDP 19210.16825.8072.2635:50705063;rport;branch=z9hG4bK-4731911104631-1-10
From: test <sip:24001@192134@10.16825.8072.26:5070>151:5060;user=phone>;tag=1
To: sut <sip:23002@192135@10.16825.8072.129:5070>151:5060;user=phone>
Call-ID: 1-473191@1921104631@10.16825.8072.2635
CseqCSeq: 1 INVITE
Contact: <sip:24001@192.168.80.26:5070>
Max-Forwards: 70
DiversionSupported: replaces, timer
Contact: <sip:11111@test.loc>;reason=time-of-day
Subject: Performance Test
Allow: INVITE, ACK, BYE, CANCEL, UPDATE, SUBSCRIBE134@10.25.72.35:5063>

#Заголовок, который необходимо протранзитить и изменить:
Date: 2024-09-10
Content-Type: application/sdp
Content-Length:   118

[SDP]...153

На TRUNK_OUT отправляется уже модифицированный INVITE с измененным заголовком From и без заголовка Diversion:

Блок кода
languagec#
INVITE sip:23002@192.168.80.26:5080 SIP/2.0
Via: SIP/2.0/UDP 19210.16825.8072.129151:50805060;rport;branch=z9hG4bKPjbURYAQZxa2m1zsT6xz9hG4bKPjc5kLf-R0rh5Stla2eTvpoVAxOc0Jr.s6RQ28ONE4EifSkX
Max-Forwards: 70
From: "11111" <sip:24001@192134@10.16825.8072.129>151>;tag=Jfl7n8XBMrh6vjCcB036Ogz6QX4BTDColMWgbj2x66hzNDHhP8ef8tWvB2HT2DwH
To: "sut" <sip:23002@192135@192.168.8023.26>140>
Contact: <sip:24001@192134@10.16825.8072.129:5080>151:5060;transport=udp>
Call-ID: bbf5db1c228015eecddfe0d7079ce876c09c3761560702267daaee76eb769a9c
CSeq: 87985021 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: 100rel, replaces

#Измененный заголовок:
Date: 09/10/2024
Content-Type: application/sdp
Content-Length:   119

[SDP]...

Использование системных переменных

В ESBC поддержано использование системных переменных в модификаторах replace (поле replacement) и add (поле header value).

Список системных переменных, которые можно использовать при модификации:

  • LOCAL_DOMAIN — локальный домен;

  • LOCAL_ADDR — локальный IP-адрес, сейчас то же самое, что LOCAL_HOST;

  • LOCAL_HOST — локальный домен или IP-адрес;

  • LOCAL_PORT — локальный порт;

  • REMOTE_DOMAIN — домен удалённой стороны;

  • REMOTE_ADDR — IP-адрес удалённой стороны;

  • REMOTE_HOST — домен или IP-адрес удалённой стороны;

  • REMOTE_PORT — порт удалённой стороны;

  • IFACE_TYPE — тип интерфейса (TRUNK или USER);

  • IFACE_ID — числовой идентификатор интерфейса;

  • IFACE_NAME — имя интерфейса;

  • VERSION — версия ESBC (x.y.z.patch);

  • TIMESTAMP — текущее время в секундах (заполняется на момент применения модификации).

Синтаксис обращения к системным переменным:

Блок кода
languagec#
${VAR_NAME}

Схема: 

163

Пример 2.

Схема:

Image Modified

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT.   Требуется, чтобы в запросе INVITE, который отправляется При отправке сообщения INVITE, полученного из TRUNK_IN в TRUNK_OUT, добавлялся заголовок Call-Info с информацией об имени транка, на который отправляется запрос, и версией ESBC.

Блок кода
languagec#
vesbc# 
vesbc# configure 
vesbc(config)# esbc 

#Создание таблицы модификаторов MODTABLE_OUT:
vesbc(config-esbc)# mod-table sip MODTABLE_OUT
vesbc(esbc-mod-table)# 

#Добавление в таблицу модификаторов правила copy для копирования значения user part в переменную user_part:
vesbc(esbc-mod-table)# mod 0 add
vesbc(esbc-mod-table-modification)# 

#Выбор запроса, в котором будет использоваться модификатор add (в данном случае INVITE):
vesbc(esbc-mod-table-modification)# sip method type Invite

#Указать название заголовка, который будет добавлен:
vesbc(esbc-mod-table-modification)# header name 'Call-Info'

#Указать содержимое заголовка с использованием системных переменных:
vesbc(esbc-mod-table-modification)# header value 'call to ${IFACE_NAME}; ESBC version: ${VERSION}'
vesbc(esbc-mod-table-modification)# exit

#Привязать таблицу модификаторов к исходящему транку TRUNK_OUT:
vesbc(config-esbc)# trunk sip TRUNK_OUT 
vesbc(config-esbc-trunk-sip)# mod-table sip out MODTABLE_OUT 

#Применить и подтвердить изменения:
vesbc(config-esbc-trunk-sip)# do commit 
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm 
Configuration has been confirmed. Commit timer canceled.

Scroll Pagebreak

После внесения изменений в конфигурацию с TRUNK_IN приходит следующий INVIITE:

в host-part заголовков To и From будут использоваться IP-адрес, настроенный в качестве remote address в транке TRUNK_OUT, и IP-адрес sip-транспорта для TRUNK_OUT соответственно (при условии что в транке TRUNK_OUT не настроен домен). 

Требуется при отправке INVITE заменять эти адреса на testdomain.loc.  

Scroll Pagebreak

Решение:

Конфигурация ESBC до использования модификаторов:

Блок кода
esbc
  media resource MEDIA_IN
    ip address 192.168.23.199
  exit
  media resource MEDIA_OUT
    ip address 192.168.80.129
  exit
  sip transport IN
    ip address 192.168.23.199
    port 5070
  exit
  sip transport OUT
    ip address 192.168.80.129
    port 5080
  exit
  route-table TO_TRUNK_OUT
    rule 0
      action direct-to-trunk TRUNK_OUT
    exit
  exit
  trunk sip TRUNK_IN
    sip transport IN
    route-table TO_TRUNK_OUT
    media resource 0 MEDIA_IN
    remote address 192.168.23.200
    remote port 5070
  exit
  trunk sip TRUNK_OUT
    sip transport OUT
    media resource 0 MEDIA_OUT
    remote address 192.168.80.26
    remote port 5080
  exit
exit

Т. к. в транке TRUNK_OUT не настроен домен, то в host-part заголовков To и From сообщения INVITE будут указаны IP-адреса в соответствии с конфигурацией:

Блок кода
Блок кода
languagec#
INVITE sip:23002@192.168.80.13526:50605080 SIP/2.0
Via: SIP/2.0/UDP 192.168.80.27129:50615080;rport;branch=z9hG4bK-2122485-1-1z9hG4bKPj11eb899a-a1c3-4659-b78d-4bba6bdc17ce
Max-Forwards: 70
From: "24001sipp" <sip:24001@192.168.80.27:5061>129>;tag=1c090d50d-4b15-4db1-94ac-3ea77fe3dd7d
To: "23002sut" <sip:23002@192.168.80.135:5060>
Call-ID: 1-2122485@192.168.80.27
Cseq: 1 INVITE
26>
Contact: <sip:24001@192.168.80.27:5061>
Max-Forwards: 70
Subject: Performance Test129:5080;transport=udp>
Call-ID: db38ba3ff093153f38b412372a1bed35
CSeq: 20022 INVITE
Allow: INVITE, ACK, BYE, CANCEL
Content-Type: application/sdp
Content-Length:   138

[SDP]...

На TRUNK_OUT отправляется уже модифицированный INVITE с заголовком Call-Info, который содержит имя вызываемой стороны и версию ESBC:

Блок кода
languagec#
INVITE sip:23002@192.168.80.27:5063 SIP/2.0
Via: SIP/2.0/UDP 192.168.80.135:5060;rport;branch=z9hG4bKPj69d21930-f472-4e64-8555-6b68a532deae
Max-Forwards: 70
From: "24001" <sip:24001@192.168.80.135>;tag=f3db1c01-0c06-45cf-8b4d-a233070ae693
To: "23002" <sip:23002@192.168.80.27>
Contact: <sip:24001@192.168.80.135:5060;transport=udp>
Call-ID: 977eea09afecfc44932d4d9c1b2eeb15
CSeq: 6757 INVITE
Allow: INVITE, ACK, BYE, CANCEL, PRACK, REGISTER, INFO, REFER, NOTIFY, OPTIONS, SUBSCRIBE, MESSAGE, UPDATE
Supported: 100rel, replaces, ice, timer
Call-Info: call to TRUNK_OUT; ESBC version: 1.6.0.0085
Content-Type: application/sdp
Content-Length:   141241

[SDP]...

Scroll Pagebreak

...

Настраиваем модификатор MOD_TABLE для замены IP-адресов на testdomain.loc:

Блок кода
vesbc# configure 
vesbc(config)# esbc 
vesbc(config-esbc)# mod-table sip MOD_TABLE
#Создаем модификатор замены:
vesbc(esbc-mod-table)# mod 1 replace

#С помощью паттерна выбираем заголовки, в которых необходимо выполнить замену:
vesbc(esbc-mod-table-modification)# sip header-pattern '(From|To)'

#Указываем метод, в котором необходимо выполнить замену:
vesbc(esbc-mod-table-modification)# sip method pattern 'INVITE'

#Выбираем часть заголовка, которая начинается с символа @, содержит любое количество любых символов и заканчивается символом >. Под это выражение попадает host-part заголовков:
vesbc(esbc-mod-table-modification)# value-pattern '@.*>'

#Указываем, что требуется заменить то, что мы получили в предыдущем правиле на @testdomain.loc>:
vesbc(esbc-mod-table-modification)# replacement '@testdomain.loc>'
vesbc(esbc-mod-table-modification)# exit
vesbc(esbc-mod-table)# exit
vesbc(config-esbc)# 

Используем это правило в TRUNK_OUT в кочестве OUT:

Блок кода
vesbc# 
vesbc# configure 
vesbc(config)# esbc 
vesbc(config-esbc)# trunk sip TRUNK_OUT 
vesbc(config-esbc-trunk-sip)# mod-table sip out MOD_TABLE 
vesbc(config-esbc-trunk-sip)# do commit 
vesbc(config-esbc-trunk-sip)# do confirm 

Теперь в результате модификации в host-part заголовков To и From сообщения INVITE будет указан домен testdomain.loc: 

Блок кода
INVITE sip:23002@192.168.80.26:5080 SIP/2.0
Via: SIP/2.0/UDP 192.168.80.129:5080;rport;branch=z9hG4bKPje431c80c-619a-43cc-a631-9ad3be4e6679
Max-Forwards: 70
From: "sipp" <sip:24001@testdomain.loc>;tag=0a5f2f31-e27e-4f7c-a3f8-70ca1d5a9f22
To: "sut" <sip:23002@testdomain.loc>
Contact: <sip:24001@192.168.80.129:5080;transport=udp>
Call-ID: 81a874656978d43e11d57e3662996fde
CSeq: 26399 INVITE
Allow: INVITE, ACK, BYE, CANCEL, PRACK, REGISTER, INFO, REFER, NOTIFY, OPTIONS, SUBSCRIBE, MESSAGE, UPDATE
Supported: 100rel, replaces, ice
Content-Type: application/sdp
Content-Length:   241

[SDP]

Scroll Pagebreak

Модификатор копирования (copy)

Работа с переменными модификатора

Значения переменных, полученных в модификаторе copy, можно использовать в модификаторах replace (поле replacement) и add (поле header value) в рамках одной таблицы модификации и только для текущего сообщения.

Например, при использовании модификатора copy в таблице на IN, для каждого входящего сообщения будет использоваться отдельный экземпляр таблицы, соответственно, в каждом случае значение переменных будет разным.

Подстроки ${name_perem} будут заменены на значение соответствующей переменной. Если переменная не задана — подстрока будет удалена. Длина переменной — до 128 символов. 

Схема: 

Image Added

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Diversion (предварительно следует настроить таблицу модификации на IN транка TRUNK_IN для транзита заголовка Diversion на второе плечо). Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, вырезался заголовок Diversion, а его значение из user part было добавлено в display name заголовка From.

Блок кода
languagec#
vesbc# 
vesbc# configure 
vesbc(config)# esbc 

#Создание таблицы модификаторов MODTABLE_OUT:
vesbc(config-esbc)# mod-table sip MODTABLE_OUT
vesbc(esbc-mod-table)# 

#Добавление в таблицу модификаторов правила copy для копирования значения user part в переменную user_part:
vesbc(esbc-mod-table)# mod 0 copy
vesbc(esbc-mod-table-modification)# 

#Выбор запроса, в котором будет использоваться модификатор copy (в данном случае INVITE):
vesbc(esbc-mod-table-modification)# sip method type Invite

#Указать название заголовка, из которого необходимо копировать значение (в данном случае Diversion):
vesbc(esbc-mod-table-modification)# sip header-pattern Diversion

#Указать содержимое заголовка, при совпадении с которым будет выполнено копирование в переменную. В переменную будет скопирована та часть отбора, которая указана в скобках:
vesbc(esbc-mod-table-modification)# value-pattern '<sip:(.+)@'

#Указать переменную, в которую будет скопировано значение, указанное в скобках, в примере - (.+):
vesbc(esbc-mod-table-modification)# variable-str 'user_part'
vesbc(esbc-mod-table-modification)# exit

#Добавление в таблицу модификаторов правила replace для замены заголовка From:
vesbc(esbc-mod-table)# mod 1 replace

#Указать название заголовка, в котором будет осуществляться замена:
vesbc(esbc-mod-table-modification)# sip header-pattern 'From'

#Выбор запроса, в котором будет использоваться модификатор replace (в данном случае INVITE):
vesbc(esbc-mod-table-modification)# sip method type Invite

#Указать часть содержимого заголовка, которую необходимо заменить:
vesbc(esbc-mod-table-modification)# value-pattern '.+ <sip:'

#Указать переменную user_part, которая содержит значение, полученное в модификации copy:
vesbc(esbc-mod-table-modification)# replacement '${user_part} <sip:$'
vesbc(esbc-mod-table-modification)# exit

#Добавление в таблицу модификаторов правила no-transit для удаления заголовка Diversion:
vesbc(esbc-mod-table)# mod 2 no-transit
vesbc(esbc-mod-table-modification)# sip header-pattern 'Diversion'
vesbc(esbc-mod-table-modification)# sip method type Invite
vesbc(esbc-mod-table-modification)# exit
vesbc(esbc-mod-table)# exit

#Привязать таблицу модификаторов к исходящему транку TRUNK_OUT:
vesbc(config-esbc)# trunk sip TRUNK_OUT 
vesbc(config-esbc-trunk-sip)# mod-table sip out MODTABLE_OUT 

#Применить и подтвердить изменения:
vesbc(config-esbc-trunk-sip)# do commit 
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm 
Configuration has been confirmed. Commit timer canceled.

После внесения изменений в конфигурацию с TRUNK_IN приходит следующий INVIITE:

Блок кода
languagec#
INVITE sip:24001@192.168.80.129:5080 SIP/2.0
Via: SIP/2.0/UDP 192.168.80.26:5070;rport;branch=z9hG4bK-473191-1-1
From: test <sip:24001@192.168.80.26:5070>;tag=1
To: sut <sip:23002@192.168.80.129:5070>
Call-ID: 1-473191@192.168.80.26
Cseq: 1 INVITE
Contact: <sip:24001@192.168.80.26:5070>
Max-Forwards: 70
Diversion: <sip:11111@test.loc>;reason=time-of-day
Subject: Performance Test
Allow: INVITE, ACK, BYE, CANCEL, UPDATE, SUBSCRIBE
Content-Type: application/sdp
Content-Length:   118

[SDP]...

На TRUNK_OUT отправляется уже модифицированный INVITE с измененным заголовком From и без заголовка Diversion:

Блок кода
languagec#
INVITE sip:23002@192.168.80.26:5080 SIP/2.0
Via: SIP/2.0/UDP 192.168.80.129:5080;rport;branch=z9hG4bKPjbURYAQZxa2m1zsT6x.s6RQ28ONE4EifS
Max-Forwards: 70
From: "11111" <sip:24001@192.168.80.129>;tag=Jfl7n8XBMrh6vjCcB036Ogz6QX4BTDCo
To: "sut" <sip:23002@192.168.80.26>
Contact: <sip:24001@192.168.80.129:5080>
Call-ID: bbf5db1c228015eecddfe0d7079ce876
CSeq: 8798 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: 100rel, replaces
Content-Type: application/sdp
Content-Length:   119

[SDP]...

Использование системных переменных

В ESBC поддержано использование системных переменных в модификаторах replace (поле replacement) и add (поле header value).

Список системных переменных, которые можно использовать при модификации:

  • LOCAL_DOMAIN — локальный домен;

  • LOCAL_ADDR — локальный IP-адрес, сейчас то же самое, что LOCAL_HOST;

  • LOCAL_HOST — локальный домен или IP-адрес;

  • LOCAL_PORT — локальный порт;

  • REMOTE_DOMAIN — домен удалённой стороны;

  • REMOTE_ADDR — IP-адрес удалённой стороны;

  • REMOTE_HOST — домен или IP-адрес удалённой стороны;

  • REMOTE_PORT — порт удалённой стороны;

  • IFACE_TYPE — тип интерфейса (TRUNK или USER);

  • IFACE_ID — числовой идентификатор интерфейса;

  • IFACE_NAME — имя интерфейса;

  • VERSION — версия ESBC (x.y.z.patch);

  • TIMESTAMP — текущее время в секундах (заполняется на момент применения модификации).

Синтаксис обращения к системным переменным:

Блок кода
languagec#
${VAR_NAME}

Схема: 

Image Added
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT.  Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, добавлялся заголовок Call-Info с информацией об имени транка, на который отправляется запрос, и версией ESBC.

Блок кода
languagec#
vesbc# 
vesbc# configure 
vesbc(config)# esbc 

#Создание таблицы модификаторов MODTABLE_OUT:
vesbc(config-esbc)# mod-table sip MODTABLE_OUT
vesbc(esbc-mod-table)# 

#Добавление в таблицу модификаторов правила copy для копирования значения user part в переменную user_part:
vesbc(esbc-mod-table)# mod 0 add
vesbc(esbc-mod-table-modification)# 

#Выбор запроса, в котором будет использоваться модификатор add (в данном случае INVITE):
vesbc(esbc-mod-table-modification)# sip method type Invite

#Указать название заголовка, который будет добавлен:
vesbc(esbc-mod-table-modification)# header name 'Call-Info'

#Указать содержимое заголовка с использованием системных переменных:
vesbc(esbc-mod-table-modification)# header value 'call to ${IFACE_NAME}; ESBC version: ${VERSION}'
vesbc(esbc-mod-table-modification)# exit

#Привязать таблицу модификаторов к исходящему транку TRUNK_OUT:
vesbc(config-esbc)# trunk sip TRUNK_OUT 
vesbc(config-esbc-trunk-sip)# mod-table sip out MODTABLE_OUT 

#Применить и подтвердить изменения:
vesbc(config-esbc-trunk-sip)# do commit 
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm 
Configuration has been confirmed. Commit timer canceled.

Scroll Pagebreak

После внесения изменений в конфигурацию с TRUNK_IN приходит следующий INVIITE:

Блок кода
languagec#
INVITE sip:23002@192.168.80.135:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.80.27:5061;rport;branch=z9hG4bK-2122485-1-1
From: "24001" <sip:24001@192.168.80.27:5061>;tag=1
To: "23002" <sip:23002@192.168.80.135:5060>
Call-ID: 1-2122485@192.168.80.27
Cseq: 1 INVITE
Contact: <sip:24001@192.168.80.27:5061>
Max-Forwards: 70
Subject: Performance Test
Allow: INVITE, ACK, BYE, CANCEL
Content-Type: application/sdp
Content-Length:   138

[SDP]...

На TRUNK_OUT отправляется уже модифицированный INVITE с заголовком Call-Info, который содержит имя вызываемой стороны и версию ESBC:

Блок кода
languagec#
INVITE sip:23002@192.168.80.27:5063 SIP/2.0
Via: SIP/2.0/UDP 192.168.80.135:5060;rport;branch=z9hG4bKPj69d21930-f472-4e64-8555-6b68a532deae
Max-Forwards: 70
From: "24001" <sip:24001@192.168.80.135>;tag=f3db1c01-0c06-45cf-8b4d-a233070ae693
To: "23002" <sip:23002@192.168.80.27>
Contact: <sip:24001@192.168.80.135:5060;transport=udp>
Call-ID: 977eea09afecfc44932d4d9c1b2eeb15
CSeq: 6757 INVITE
Allow: INVITE, ACK, BYE, CANCEL
Supported: 100rel, replaces, ice, timer
Call-Info: call to TRUNK_OUT; ESBC version: 1.6.0.0085
Content-Type: application/sdp
Content-Length:   141

[SDP]...

Scroll Pagebreak

Настройка SIP-профилей
Якорь
sip-profile
sip-profile

В SIP-профиле настраивается конфигурация общих параметров SIP. Профиль используется в транках, транк-группах и абонентских интерфейсах. 
В текущей версии ПО поддержаны следующие настройки:

  • Контроль доступности направления;
  • Список причин отбоя для перехода на следующее направление;
  • Поведение при перенаправлении; 
  • Игнорирование OPTIONS.

Описание всех команд для настройки  SIP-профилей приведено в разделе Настройки SIP-профиля.

Контроль доступности направления

Используется для периодической отправки keep-alive сообщений для контроля состояния встречной стороны.

В текущей версии ПО в качестве keep-alive сообщений используется метод OPTIONS.

По умолчанию keep-alive не используется. Для включения необходимо использовать команду keepalive enable в SIP-профиле.

Контроль осуществляется путем отправки сообщений OPTIONS с заданными интервалами success-interval(по умолчанию 60 сек.)и failed-interval(по умолчанию 20 сек.). 

Алгоритм работы:

Сообщение OPTIONS отправляется только в случае, когда в транке отсутствует активность SIP после окончания периода success-interval. Т. е. в случае если через транк проходят вызовы с  большей частотой, чем указано в настройке success-interval, то сообщения OPTIONS не будут отправляться на встречную сторону, т. к. очевидно, что направление доступно. Если после последнего отправленного или полученного сообщения SIP прошел период равный success-interval, то отправляется OPTIONS. При получении ответа на него (с любым статус-кодом) направление считается доступным. Сообщения OPTIONS будут отправляться с периодом success-interval до того момента, пока либо не появится активность SIP, либо не будут получены ответы на отправленные OPTIONS. Если не будет ответов на OPTIONS, транк считается недоступным, и сообщения OPTIONS будут отправляться с интервалом failed-interval до тех пор, пока транк снова не станет доступным.  

Scroll Pagebreak

Пример настройки:

...

SIP-профиль служит для конфигурации общих параметров SIP. Его можно привязать к транкам, транк-группам и абонентским интерфейсам. 
В текущей версии поддержаны следующие настройки:

  • Контроль доступности направления;
  • Список причин отбоя для перехода на следующее направление;
  • Поведение при перенаправлении;
  • Игнорирование OPTIONS.

Контроль доступности направления

Блок кода
languagec#
vesbc# 
vesbc# configure 
vesbc(config)# esbc 

#Создать SIP-профиль NEW_SIP_PROFILE:
vesbc(config-esbc)# sip profile NEW_SIP_PROFILE 
vesbc(config-esbc-sip-profile)# 

#Включить контроль доступности:
vesbc(config-esbc-sip-profile)# keepalive enable 
vesbc(config-esbc-sip-profile)# 

#Настроить интервалы контроля:
vesbc(config-esbc-sip-profile)# keepalive success-interval 120
vesbc(config-esbc-sip-profile)# keepalive failed-interval 30
vesbc(config-esbc-sip-profile)#  
 
vesbc(config-esbc-sip-profile)# exit
vesbc(config-esbc)#

#Привязать SIP-профиль к транку TRUNK_OUT:
vesbc(config-esbc)# trunk sip NEW_TRUNK 
vesbc(config-esbc-trunk-sip)# sip profile NEW_SIP_PROFILE 
vesbc(config-esbc-trunk-sip)# 

#Применить и подтвердить изменения:
vesbc(config-esbc-trunk-sip)# do commit 
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm 
Configuration has been confirmed. Commit timer canceled.

Если в течение 30 секунд (failed-interval) из TRUNK_OUT не будет получено ни одного сообщения, то он станет считаться недоступным, и ESBC будет отправлять в сторону TRUNK_OUT OPTIONS (пока поддержан только этот метод контроля) с интервалом 30 секунд (failed-interval).

Если из транка было получено какое-либо сообщение (в том числе ответ на OPTIONS), то транк считается доступным, следующий запрос OPTIONS отправится через 120 секунд (success-interval).

 in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm 
Configuration has been confirmed. Commit timer canceled.


Предупреждение

При использовании SIP-профиля с включенным контролем доступности, для абонентских интерфейсов отправка OPTIONS осуществляться не будет. Данная настройка используется только для контроля транков.

Предупреждение

Контроль доступности не работает для абонентских интерфейсов. 

Список причин отбоя для перехода на следующее направление

На ESBC есть возможность создать список ответов, при получении которых происходит перемаршрутизация на следующее Список причин отбоя для указания статус-кодов ответов SIP, по которым будет осуществляться перемаршрутизация вызовов и регистраций на альтернативное направление (следующий транк в транковой группе/следующее правило в таблице маршрутизации). Это работает как для вызовов, так и для регистраций. 

При создании маски для списка можно использовать регулярные выражения PCRE

СхемаПример использования:

В таблице маршрутизации два правила, первое — направляет вызов в TRUNK_GROUP, второе — направляет вызов в TRUNK_3.

Блок кода
languagec#
vesbc# 
vesbc# configure 
vesbc(config)# esbc 

#Создать список ответов:
vesbc(config-esbc)# cause-list sip LIST
vesbc(config-esbc-cause-list-sip)#

#Создать маску, по которой будут отбираться ответы для перемаршрутизации:
vesbc(config-esbc-cause-list-sip)# cause-mask 404
vesbc(config-esbc-cause-list-sip)# exit

#Создать SIP-профиль, привязать список к SIP-профилю:
vesbc(config-esbc)# sip profile SIP-PROFILE
vesbc(config-esbc-sip-profile)# cause-list LIST 
vesbc(config-esbc-sip-profile)# exit

#Привязать к транковой группе TRUNK-GROUP SIP-профиль:
vesbc(config-esbc)# trunk-group TRUNK-GROUP 
vesbc(config-esbc-trunk-group)# sip profile SIP-PROFILE 
vesbc(config-esbc-trunk-group)# 

#Применить и подтвердить изменения:
vesbc(config-esbc-trunk-group)# do commit 
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-group)# do confirm 
Configuration has been confirmed. Commit timer canceled.

Приходит Входящий вызов и начинает маршрутизироваться по данной таблице маршрутизации (ROUTE_TABLE). В результате вызов уходит маршрутизируется по правилу RULE_1 на TRUNK_GROUP и оттуда в TRUNK_1.  TRUNK_1 , он недоступен, вызов отбивается по истечении Timer B, и происходит перемаршрутизация на TRUNK_2 (следующий транк в транковой группе), из . Из TRUNK_2 приходит ответ 404 Not Found, и т. к. код ответа совпадает с маской из списка, который привязан к используется в TRUNK-GROUP, поэтому то происходит маршрутизация на следующее направление, . Поскольку в транковой группе больше нет транков, поэтому ESBC маршрутизация переходит к RULE_2, и вызов маршрутизируется в TRUNK_3.   

Предупреждение

Если нет привязанного списка, то Без использования списка причин отбоя, перемаршрутизация происходит только по недоступности транка.

Предупреждение

Если с абонентского интерфейса пришёл ответ, совпадающий с маской, то перемаршрутизации Для абонентских интерфейсов, использование списка причин отбоя не влияет на маршрутизацию. Перемаршрутизация осуществляться не будет.

Перемаршрутизация абонентовабонентов 

Вызов с зарегистрированного абонента будет направлен в тот транк, где он регистрировалсячерез который осуществлялась его регистрация. В случае неудачи перемаршрутизация запрещенанеуспешного вызова, перемаршрутизация осуществляться не будет.
При вызове с незарегистрированного абонента сначала идёт проверка, разрешены ли с этого абонентского интерфейса вызовы без регистрации (allow_unreg_call), если проверка успешна, то вызов смаршрутизируется по привязанной таблице маршрутизации и в случае недоступности транка/совпадении ответа с маской из списка произойдёт маршрутизация на следующее направление.

Поведение при перенаправлении
Якорь
redirect
redirect
 

Настройка поведения при перенапрвлении позволяет использовать разные режимы обработки сообщений 3XX.На ESBC есть возможность настроить поведение при перенаправлении (получении 3xx ответа), доступны 3 варианта: 

  • forbidden — при получении 3xx ответа вызов завершается;
  • transit — 3xx передаётся на другое плечо без изменений контакта;
  • process — локальная обработка 3xx ответа.

...

Отправляем INVITE абоненту на тот транк, где он зарегистрирован и 181 в сторону A.

Блок кода
languagec#
A(транк)---IP_a           |     IP_ESBC_1---ESBC---IP_ESBC_3       |        IP_d---D(trunk)
                          |                                        | 
                          |           INVITE number_с@IP_d---------|---------------------->
                          |           From: number_a@IP_ESBC_3     |
                          |           To: number_b@IP_b            |
                          |           Diversion: number_b@IP_ESBC_3|
                          |                                        |
     <--------------------|-----------181 Call is Being Forwarded  |

...

Отправляем INVITE на указанный адрес и 181 в сторону А.

Блок кода
languagec#
A(транк)---IP_a           |     IP_ESBC_1---ESBC---IP_ESBC_2       |                    IP_с
                          |                                        | 
                          |           INVITE number_с@IP_c         |---------------------->
                          |           From: number_a@IP_ESBC_2     |
                          |           To: number_b@IP_b            |
                          |           Diversion: number_b@IP_ESBC_2|
                          |                                        |
     <--------------------|-----------181 Call is Being Forwarded  |

...

В прочих случаях — вызов завершается.

Игнорирование OPTIONS

На ESBC есть возможность настроить поведение при получение OPTIONS:Данный режим используется для обработки входящих сообщений OPTIONS. 

  • ignore options enable — игнорирование запросов OPTIONS. На входящие запросы OPTIONS не будут отправляться ответы;

  • no ignore options enable — отключение игнорирования запросов OPTIONS. На входящие запросы OPTIONS будут отправляться ответы 200 OK.

Предупреждение

Игнорирование OPTIONS по умолчанию включено. 

Информация

Если к user-interface привязан sip profile с включенным игнорированием OPTIONS, то при получении OPTIONS от зарегистрированных абонентов ESBC будет обрабатывать эти запросы и отвечать 200 OK (только если в запросе указан заголовок Contact).

Если OPTIONS приходят не с зарегистрированных абонентов, то такие запросы игнорируются.

...

Блок кода
vesbc# configure 
vesbc(config)# esbc

#Создать медиапрофиль для транка TRUNK_2:  
vesbc(config-esbc)# media profile FOR_TRUNK_2

#Запретить использование всех видеокодеков:
vesbc(config-esbc-media-profile)# no codec allow H26
vesbc(config-esbc-media-profile)# no codec allow H261
vesbc(config-esbc-media-profile)# no codec allow H263
vesbc(config-esbc-media-profile)# no codec allow VP
vesbc(config-esbc-media-profile)# exit

#Привязать медиапрофиль к транку:
vesbc(config-esbc)# trunk sip TRUNK_2
vesbc(config-esbc-trunk-sip)# media profile FOR_TRUNK_2 
vesbc(config-esbc-trunk-sip)# do commit
vesbc(config-esbc-trunk-sip)# do confirm

Scroll Pagebreak

В результате конфигурация медиапрофиля будет выглядеть следующим образом:

Блок кода
  media profile FOR_TRUNK_2
    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 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 telephone-event
  exit

...

2. Запретить использование кодеков G729 и G726 для транка TRUNK_1. 

Блок кода
vesbc# configure 
vesbc(config)# esbc

#Создать медиапрофиль для транка TRUNK_1: 
vesbc(config-esbc)# media profile FOR_TRUNK_1

#Запретить использование кодеков G729 и G726: 
vesbc(config-esbc-media-profile)# no codec allow G729/
vesbc(config-esbc-media-profile)# no codec allow G72
vesbc(config-esbc-media-profile)# exit

#Привязать медиапрофиль к транку:
vesbc(config-esbc)# trunk sip TRUNK_1
vesbc(config-esbc-trunk-sip)# media profile FOR_TRUNK_1 
vesbc(config-esbc-trunk-sip)# do commit
vesbc(config-esbc-trunk-sip)# do confirm

Scroll Pagebreak

В результате конфигурация медиапрофиля будет выглядеть следующим образом:

...

В данном примере в транк TRUNK_1 приходит INVITE c SDP Offer1, в котором наиболее приоритетным кодеком является G729, а также указан кодек G726, но т. к. настройками медиапрофиля FOR_TRUNK_1 данные кодеки запрещены, то в транк TRUNK_2 будет отправлен SDP Offer2 без данных кодеков. UA TRUNK_2 выбирает в качестве приоритетного кодек PCMA (SDP Answer2), и в результате ESBC отправляет в SDP Answer1 наиболее приоритетный кодек из SDP Offer1 (кроме G729) — PCMA.

Scroll Pagebreak

3. Разрешить использование кодека QCELP для обоих транков (в дополнение к паттернам по умолчанию).

Блок кода
vesbc# configure 
vesbc(config)# esbc

#Создать медиапрофиль для использования в обоих транках: 
vesbc(config-esbc)# media profile FOR_TRUNKS

#Добавить паттерн для кодека QCELP:
vesbc(config-esbc-media-profile)#codec allow QCELP
vesbc(config-esbc-media-profile)# exit

#Привязать медиапрофиль к обоим транкам:
vesbc(config-esbc)# trunk sip TRUNK_1
vesbc(config-esbc-trunk-sip)# media profile FOR_TRUNKS
vesbc(config-esbc-trunk-sip)# exit
vesbc(config-esbc)# trunk sip TRUNK_2
vesbc(config-esbc-trunk-sip)# media profile FOR_TRUNKS
vesbc(config-esbc-trunk-sip)# exit
vesbc(config-esbc)# do commit
vesbc(config-esbc)# do confirm

Scroll Pagebreak

В результате конфигурация медиапрофиля будет выглядеть следующим образом:

Блок кода
 media profile FOR_TRUNKS
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 QCELP
codec allow SPEEX
codec allow T38 t38
codec allow VP
codec allow telephone-event
exit

...

В данном примере в транк TRUNK_1 приходит INVITE c SDP Offer1, в котором содержится кодек QCELP, и т. к. настройками медиапрофиля FOR_TRUNKS этот кодек разрешен, то он будет передаваться SDP Offer2, отправляемый в транк TRUNK_2. UA TRUNK_2 выбирает кодек QCELP, и в результате он будет согласован в SDP Answer1.

...

В данном примере в транк TRUNK_1 приходит INVITE c SDP Offer1 с набором кодеков. Т. к. настройками медиапрофиля FOR_TRUNK_1 запрещены все кодеки кроме PCMA, то в транк TRUNK_2 будет отправлен SDP Offer2, содержащий только кодек PCMA.scroll-pagebreak

Транскодирование

Транскодирование — это возможность преобразования медиапотоков, основанных на разных кодеках. 

...

ESBC предоставляет возможности транскодирования на границе сети вместо использования ресурсов сети предприятия для тех же функций.  

Scroll Pagebreak

Список кодеков, поддерживаемых в режиме транскодирования:

Аудиокодеки

Видеокодеки

AMR                

AMR-WB          

G722              

G7221-24        

G7221-32

G7221C-24

G7221C-32          

G7221C-48        

G726-16            

G726-24          

G726-32            

G726-40          

G729               

GSM              

ILBC               

L16-MONO         

OPUS               

PCMA             

PCMU               

SPEEX-NB         

SPEEX-UWB          

SPEEX-WB 

H263-1998   

H264        

VP8         

VP9

Scroll Pagebreak

Поддержка кодеков для транскодирования осуществляется командами: 

...

Описание всех команд приведено в разделе Настройки медиапрофиля справочника команд CLI.

Scroll Pagebreak

Порядок обработки SDP для выбора режима работы:

...

Если на одном из направлений не используется медиапрофиль (т. е. используется медиапрофиль по умолчанию), или в профиле не настроено ни одно правило codec audio/video, то транскодирование осуществляться не будет.

Scroll Pagebreak

Пример:

В транке TRUNK_1 используется медиапрофиль FOR_TRUNK_1, в котором разрешены кодеки PCMA и PCMU для проксирования, и не указаны кодеки, разрешенные для транскодирования. 

...

Т. о. включение поддержки транскодирования для кодеков командами codec {audio | video | image} {all | <CODEC>} не означает, что передаваемые через ESBC медиаданные всегда будут транскодироваться.

Scroll Pagebreak

Пример:

Для транков TRUNK_1 и TRUNK_2 используется один и тот же медиапрофиль FOR_TRUNKS, в котором указан только кодек PCMA, разрешенный для транскодирования, и отсутствуют паттерны кодеков для проксирования.

...

Настройка профилей безопасности
Якорь
security_profile
security_profile

ESBC поддерживает создание профилей Профили безопасности используются для конфигурирования механизма управления механизмом защиты от SIP-атак. Использование профилей безопасности позволяет гибко управлять уровнями защиты для каждого направления.

Необходимый уровень защиты обеспечивается следующими настройками профиляВ текущей версии поддержаны следующие настройки:

  • фильтрация SIP-флуда;
  • блокировка по AOR/User-Agent;
  • объединение ошибок по IP-адресу.

Профиль безопасности может использоваться  в транках, транк-группах и абонентских интерфейсах. 

Для обеспечения единой политики безопасности может быть привязан к абонентскому интерфейсу, транку, транковой группе. В общих настройках возможна привязка профиля ко всем абонентским интерфейсам или ко всем транкамможет быть использован один профиль для всех транков и один профиль для всех абонентских интерфейсов. Это может быть как один и тот же профиль безопасности, так и разные.  Эти профили указываются в общих настройках ESBC.

Информация

Если к транку для транка и к транковой группегруппы, в которую входит этот транк входит, настроены используются разные профили безопасности, то применится настройка на транке.Если к транку/абонентскому интерфейсу будет применяться профиль, указанный в настройках транка. Если для транка/абонентского интерфейса и в общих настройках (для всех транков/абонентских интерфейсов) привязаны используются разные профили безопасности, то применится настройка на транке/абонентском интерфейсе.будет применяться профиль, указанный в настройках транка/абонентского интерфейса.  

Описание всех команд для настройки профилей безопасности приведено в разделе Настройки профиля безопасности.  

Общий принцип работы модуля fail2ban
Якорь
fail2ban
fail2ban

...

При добавлении адреса в чёрный список указывается причина блокировки. Чёрный список можно просмотреть в CLI командой show esbc black-list или в WEB на странице Мониторинг→Списки доступа→Чёрный Мониторинг → Списки доступа → Чёрный список.

Причины блокировки:

...

Запрещенный User-AgentСоздаваемый дефолтный паттерн

scan

User-Agent:.*scan.*

crack

User-Agent:.*crack.*

flood

User-Agent:.*flood.*

kill

User-Agent:.*kill.*

sipcli

User-Agent:.*sipcli.*

sipv

sipvicious

User-Agent:.*sipv.*

sipsak

User-Agent:.*sipsak.*

sundayddr

User-Agent:.*sundayaddr.*

iWar

User-Agent:.*iWar.*

SIVuS

User-Agent:.*SIVuS.*

Gulp

User-Agent:.*Gulp.*

smap

User-Agent:.*smap.*

friendly-request

User-Agent:.*friendly-request.*

VaxIPUserAgent

VaxSIPUserAgent

User-Agent:.*VaxS{0,1}IPUserAgent.*

siparmyknife

User-Agent:.*siparmyknife.*

Test Agent

User-Agent:.*Test Agent.*

SIPBomber

User-Agent:.*SIPBomber.*

Siprogue

User-Agent:.*Siprogue.*

...

Если к абонентскому интерфейсу привязан профиль безопасности со с включенной блокировкой по AOR, то через какое-то время в чёрный список добавится AOR. 
Все запросы с любого адреса, в котором будет заблокированный AOR во From, обрабатываться не будут.

...

Объединение ошибок по IP-адресу

В настройках профиля безопасности есть опция, которая Данная опция позволяет объединять ошибки по IP-адресу.

...

Для загрузки сертификатов и ключей на устройство через CLI используется команда copy, пример: 

Блок кода
languagec#
vesbc# copy tftp://10.0.0.1:/ca.crt crypto:cert/ca.crt

...

Для управления пользовательскими сертификатами и версией TLS используется crypto profile.

Описание всех команд для настройки криптопрофилей приведено в разделе Настройки криптопрофиля.

Пример настройки crypto profile:

...

Команда nat keep-alive-interval в настройках абонентского интерфейса используется для настройки интервала для поддержки соединения за NAT.  При включении опции, абоненту, с заданным интервалом будут отправляться пакеты с содержанием "0d0a"  для предотвращения разрушения сессии на NAT.  

Подмена атрибутов direction в SDP

При включении опции nat comedia-mode атрибут direction sendonly в SDP при отправке offer/answer sdp заменяются на sendrecv. 

Данный механизм используется для предотвращения ситуации в которой абонент за NAT не начнет первым отправку RTP-пакетов в сторону ESBC и соответственно ESBC не  начнет отправку встречного потока RTP к абоненту.

Примеры:

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

...

Public IP (рус. «публичный IP-адрес») — это внешний IP-адрес, который используется при отправке запросов пользователю или удаленному адресу из внешней сети

Настройка используется в случае, когда ESBC не имеет публичного IP-адреса и выход в публичную сеть осуществляется через NAT. В таком случае в качестве Public IP указывается адрес WAN-интерфейса NAT для подстановки в сигнальные сообщения протокола SIP.

Public IP можно можно задать настроить для абонентского интерфейса, транка и транковой группы. 

Информация

Если Public IP настроен на в транке и на в транковой группе, в которую входит этот транк входит, то применится настройка на транкебудет использоваться Public IP из настроек транка.

Информация

В качестве публичного адреса можно использовать как IPv4, так и IPv6 адрес.

При наличии Public IP,   адрес адреса в SDP, заголовках Via и Contact будут заменены на значение public-ip из конфигурации объекта. Media будет работать в режиме NAT-comedia.    

Предупреждение

Для корректной работы опции Public IP необходимо организовать проброс портов для сигнализации SIP и медиапортов RTP на вышестоящем устройстве NAT "один к одному".

Пример настройки Public IP на транке:для транка

Блок кода
languagec#
#Настройка SIP-транспорта для транка:
vesbc# configure 
vesbc(config)# esbc 
vesbc(config-esbc)# sip transport TRUNK_TRANSPORT
vesbc(config-esbc-sip-transport)# ip address 192.168.1.1
vesbc(config-esbc-sip-transport)# exit

#Настройка медиаресурсов для транка:
vesbc(config-esbc)# media resource TRUNK_MEDIA
vesbc(config-esbc-media-resource)# ip address 192.168.1.1
vesbc(config-esbc-media-resource)# exit

#Настройка параметров транка:
vesbc(config-esbc)# trunk sip TRUNK_PUBLIC_IP
vesbc(config-esbc-trunk-sip)# sip transport TRUNK_TRANSPORT
vesbc(config-esbc-trunk-sip)# media resource 0 TRUNK_MEDIA
vesbc(config-esbc-trunk-sip)# remote address 192.168.1.3
vesbc(config-esbc-trunk-sip)# remote port 5060
vesbc(config-esbc-trunk-sip)# public-ip 10.25.0.1

#Применение и подтверждение изменений:
vesbc(config-esbc-trunk-sip)# do commit 
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-trunk-sip)# do confirm
Configuration has been confirmed. Commit timer canceled..

Scroll Pagebreak

Пример использования Public IP

ESBC получает сообщение, которое должно быть смаршрутизировано в транк TRUNK_PUBLIC_IP: 

Блок кода
languagec#
INVITE sip:23002@192.168.1.1:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.1.4:5061;rport;branch=z9hG4bK-1914230-1-1
From: "24001" <sip:24001@192.168.1.4:5061>;tag=1
To: "23002" <sip:23002@192.168.1.1:5060>
Call-ID: 1-1914230@192.168.1.4
Cseq: 1 INVITE
Contact: <sip:24001@192.168.1.4:5061>
Max-Forwards: 70
Allow: INVITE, ACK, BYE, CANCEL
Content-Type: application/sdp
Content-Length: 138

Session Description Protocol Version (v): 0
Owner/Creator, Session Id (o): user1 77755765 7773687637 IN IP4 192.168.1.4
Session Name (s): -
Time Description, active time (t): 0 0
Connection Information (c): IN IP4 192.168.1.4
Media Description, name and address (m): audio 10000 RTP/AVP 8
Media Attribute (a): rtpmap:8 PCMA/8000

...

ESBC пересылает INVITE в транк TRUNK_PUBLIC_IP.
В SDP, Via и Contact вместо адреса привязанного SIP-транспорта (192.168.1.1) используется Public IP транка (10.25.0.1): 

...

Приоритет определяется значением DSCP (0-63) в поле IP-заголовка DS.

QoS можно настроить Установить необходимое значение DS можно отдельно для:

  • аудио-пакетов;
  • видео-пакетов;
  • пакетов сигнализации-SIP.

QoS можно задать для Параметры QoS настраиваются в конфигурации абонентского интерфейса, транка и транковой группы.

Информация

Если QoS настроен на транке для транка и на для транковой группегруппы, в которую входит этот транк входит, то применится настройка на транкебудет использоваться QoS из настроек транка.

Пример настройки QoS для аудиотрафика на абонентском интерфейсев конфигурации абонентского интерфейса:

Блок кода
languagec#
vesbc# configure 
vesbc(config)# esbc  
vesbc(config-esbc)# user-interface sip ABONENT_QOS_50
vesbc(config-esbc-user-interface-sip)# sip transport ABONENT_TRANSPORT
vesbc(config-esbc-user-interface-sip)# media resource 0 ABONENT_MEDIA
vesbc(config-esbc-user-interface-sip)# route-table TO_SSW
vesbc(config-esbc-user-interface-sip)# dscp audio 50

#Применение и подтверждение изменений:
vesbc(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.
vesbc(config-esbc-user-interface-sip)# do confirm
Configuration has been confirmed. Commit timer canceled.

...

Изменение количества модулей
Якорь
count
count

При обработке сигнального SIP-трафика и медиапотоков RTP, ресурсы CPU используются разными модулями ESBC. Соответственно для оптимизации нагрузки на CPU предусмотрена возможность управлять количеством модулей.

При высокой нагрузке сигнальным SIP-трафиком наибольшую нагрузку на ядро CPU производит модуль sip worker, а при большом количестве одновременных вызовов (особенно в режиме транскодирования медии) — media worker.

Поэтому для установления баланса производительности, для многоядерных систем следует использовать оптимальное количество каждого из модулей, т. к. каждый дополнительный экземпляр модуля будет использовать ресурс дополнительного ядра CPU системы.

По умолчанию в системе используется по одному экземпляру каждого модуляESBC поддерживает добавление дополнительных модулей для распределения нагрузки.

Список модулей, количество которых можно изменить:

...

Примечание

Заданное в конфигурации количество модулей не изменяется при увеличении/уменьшении количества ядер CPU системы.

Описание всех команд для настройки количества модулей приведено в разделе Общие настройки ESBC

Scroll Pagebreak

Пример:

Блок кода
languagec#
vesbc#
vesbc# config 
vesbc(config)# esbc 

#Переход в общие настройки:
vesbc(config-esbc)# general 
vesbc(config-esbc-general)# 

#Увеличение количества медиа-воркеров до 2:
vesbc(config-esbc-general)# count media worker 2
vesbc(config-esbc-general)#

#Применение и подтверждение изменений:
vesbc(config-esbc-general)# do commit
2024-09-09T05:26:55+00:00 %SYS-W-EVENT: WARNING!!! After changing ESBC modules count, the system may work unstable. Please restart software.
2024-09-09T05:26:57+00:00 snmpd restarted
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
2024-09-09T05:26:58+00:00 %CLI-I-CRIT: user admin from console  input: do commit
vesbc(config-esbc-general)# do confirm
Configuration has been confirmed. Commit timer canceled.
2024-09-09T05:27:01+00:00 %CLI-I-CRIT: user admin from console  input: do confirm
vesbc(config-esbc-general)# 

#Перезапуск ПО ESBC для корректного перераспределения модулей:
vesbc(config-esbc-general)# do reload esbc force
Do you really want to reload esbc now? (y/N): y

...

Ограничение на транковой группе применяется для всех транков, входящих в состав этой группы, и имеет приоритет над ограничением, установленным в настройках транка.
При этом суммарное количество входящего трафика на транках, входящих в состав группы, также не может превышать ограничение на группе.

ПримерПример:

Блок кода
languagec#
vesbc#
vesbc# config 
vesbc(config)# esbc 

#Переход в настройки транка:
vesbc(config-esbc)# trunk sip TRUNK_1 
vesbc(config-esbc-trunk-sip)# 

#Ограничение максимального CPS на транке:
vesbc(config-esbc-trunk-sip)# max cps 50

#Переход в настройки транковой группы и добавление транков:
vesbc(config-esbc-trunk-sip)# exit
vesbc(config-esbc)# trunk-group GROUP
vesbc(config-esbc-trunk-group)# trunk 0 TRUNK_0
vesbc(config-esbc-trunk-group)# trunk 1 TRUNK_1
vesbc(config-esbc-trunk-group)# trunk 2 TRUNK_2

#Ограничение максимального CPS на группе:
vesbc(config-esbc-trunk-group)# max cps 30

#Применение и подтверждение изменений:
vesbc(config-esbc-trunk-group)# do commit 
2025-04-22T08:44:46+00:00 snmpd restarted
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
2025-04-22T08:44:46+00:00 %CLI-I-CRIT: user admin from console  input: do commit
vesbc(config-esbc-trunk-group)# do confirm 
Configuration has been confirmed. Commit timer canceled.
vesbc(config-esbc-trunk-group)# 

...

Из TRUNK_IN в TRUNK_OUT через ESBC поступает 2 вызова каждую секунду длительностью 25 секунд.

Блок кода
languagec#
vesbc#
vesbc# config 
vesbc(config)# esbc 

#Просмотр полной статистики при активных вызовах:
vesbc# show esbc statistics all  
ESBC global call counters: 
-----------------------------------------------------------------------
Counter Name                Incoming               Outgoing               
-------------------------   --------------------   --------------------   
CALLS PER SECOND            2                      2                      
CALL LEGS                   50                     50                     
REQUESTS IN CALL            6                      7                      
RESPONSES IN CALL           8                      8                      
ANSWERED CALLS              2                      2                      
CALLS TO WRONG NUMBER       0                      0                      
BUSY CALLS                  0                      0                      
NO ANSWERED CALLS           0                      0                      
FORBIDDEN CALLS             0                      0                      
UNAUTHORIZED CALLS          0                      0                      
3XX CODES                   0                      0                      
4XX CODES                   0                      0                      
5XX CODES                   0                      0                      
6XX CODES                   0                      0                      

ESBC global register counters: 
-----------------------------------------------------------------------
Counter Name                Incoming               Outgoing               
-------------------------   --------------------   --------------------   
REGISTERS PER SECOND        0                      0                      
REGISTER TRANSACTIONS       0                      0                      
RESPONSES                   0                      0                      
SUCCESS REGISTERS           0                      0                      
REQUEST TIMEOUT             0                      0                      
FORBIDDEN REGISTERS         0                      0                      
UNAUTHORIZED REGISTERS      0                      0                      
INTERVAL TOO BRIEF          0                      0                      
3XX CODES                   0                      0                      
4XX CODES                   0                      0                      
5XX CODES                   0                      0                      
6XX CODES                   0                      0                      

ESBC global subscribe counters: 
-----------------------------------------------------------------------
Counter Name                Incoming               Outgoing               
-------------------------   --------------------   --------------------   
SUBSCRIBES PER SECOND       0                      0                      
ACTIVE SUBSCRIBES           0                      0                      
REQUESTS IN SUBSCRIBE       0                      0                      
RESPONSES IN SUBSCRIBE      0                      0                      
SUCCESS SUBSCRIBES          0                      0                      
REQUEST TIMEOUT             0                      0                      
FORBIDDEN SUBSCRIBES        0                      0                      
UNAUTHORIZED SUBSCRIBES     0                      0                      
INTERVAL TOO BRIEF          0                      0                      
3XX CODES                   0                      0                      
4XX CODES                   0                      0                      
5XX CODES                   0                      0                      
6XX CODES                   0                      0

ESBC global rps counters: 
-----------------------------------------------------------------------
Counter Name                Incoming               Outgoing               
-------------------------   --------------------   --------------------   
REQUESTS PER SECOND         6                      6                      
INVITE PER SECOND           2                      2                      
ACK PER SECOND              2                      2                      
BYE PER SECOND              2                      3                      
CANCEL PER SECOND           0                      0                      
REFER PER SECOND            0                      0                      
PRACK PER SECOND            0                      0                      
SUBSCRIBE PER SECOND        0                      0                      
NOTIFY PER SECOND           0                      0                      
UPDATE PER SECOND           0                      0                      
OPTIONS PER SECOND          0                      0                      
INFO PER SECOND             0                      0                      
REGISTER PER SECOND         0                      0                      
MESSAGE PER SECOND          0                      0

#Просмотри#Просмотр статистики вызовов после завершения вызовов:

vesbc# show esbc statistics call 

ESBC global call counters: 
-----------------------------------------------------------------------
Counter Name                Incoming               Outgoing               
-------------------------   --------------------   --------------------   
CALLS PER SECOND            0                      0                                          
CALL LEGS                   0                      0                     
REQUESTS IN CALL            0                      0                      
RESPONSES IN CALL           0                      0                      
ANSWERED CALLS              0                      0                      
CALLS TO WRONG NUMBER       0                      0                      
BUSY CALLS                  0                      0                      
NO ANSWERED CALLS           0                      0                      
FORBIDDEN CALLS             0                      0                      
UNAUTHORIZED CALLS          0                      0                      
3XX CODES                   0                      0                      
4XX CODES                   0                      0                      
5XX CODES                   0                      0                      
6XX CODES                   0                      0

Аварии
Якорь
alarms
alarms

Включение генерации аварий происходит включением SNMP-трапов командой командой snmp-server enable traps esbc в CLI. 

Данная команда без указания параметров включает весь набор SNMP-трапов:

...

Информация

Более подробное описание конфигурирования SNMP-трапов можно прочитать в разделе Управление SNMP.

Аварии можно просмотреть с помощью команды Список аварийных событий выводится командой show alarms brief в CLI. Данная команда выводит историю аварий, включая уже нормализированные аварии.

Если нужно вывести только активные аварии, то Для отображения только активных аварий используется команда show alarms brief active.

...

Авария

Текст аварии

Причины нормализации

cdr-send-error

CDR alarm: failed to send to <main | reserve> ftp server

успешная отправка CDR на FTP-сервер

cdr-write-error

CDR alarm: failed to write

успешная запись CDR

general-max-calls-limit

Host <host_name> max calls limit reached

через 10 секунд после последней аварии ИЛИ при снижении счетчика на 80% от лимита

general-max-cps-limit

Host <host_name> max cps limit reachedчерез 10 секунд после последней аварии

general-max-rps-limit

Host <host_name> max rps limit reachedчерез 10 секунд после последней аварии

media-resources

Session<session_id>: <Trunk/User interface><trunk_name/ui_name> media resources out

через 15 секунд после последней аварии ИЛИ уничтожение превышающий сессии

module-connection

Module <module_type> host <host_id> is down

при успешном добавлении модуля в диспетчер

trunk-group-max-calls-limit

Trunk-Group <trunk_group_name> max calls limit reached

через 10 секунд после последней аварии ИЛИ при снижении счетчика на 80% от лимита

trunk-group-max-cps-limit

Trunk-Group <trunk_group_name> max cps limit reachedчерез 10 секунд после последней аварии

trunk-group-max-rps-limit

Trunk-Group <trunk_group_name> max rps limit reachedчерез 10 секунд после последней аварии

trunk-max-calls-limit

Trunk <trunk_name> max calls limit reached

через 10 секунд после последней аварии ИЛИ при снижении счетчика на 80% от лимита

trunk-max-cps-limit

Trunk <trunk_name> max cps limit reachedчерез 10 секунд после последней аварии

trunk-max-rps-limit

Trunk <trunk_name> max rps limit reachedчерез 10 секунд после последней аварии

trunk-unavailable

Trunk <trunk_name> is unavailable

при обновлении статуса транка на "Available"

user-interface-max-calls-limit

User interface <ui_name> max calls limit reached

через 10 секунд после последней аварии ИЛИ при снижении счетчика на 80% от лимита

user-interface-max-cps-limit

User interface <ui_name> max rps limit reachedчерез 10 секунд после последней аварии

user-interface-max-rps-limit

User interface <ui_name> max cps limit reachedчерез 10 секунд после последней аварии

voip-block-aor

Отсутствуетне нормализуются

voip-block-ip

Отсутствуетне нормализуются
voip-block-user-agentОтсутствуетне нормализуются
Информация

Присутствует возможность Для удаления аварий командой используется команда clear alarms в CLI.


Scroll Pagebreak

...

  • Заголовок файла (опционален) (<hostname> CDR. File started at 'YYYYMMDDhhmmss');

  • Отличительный признак (опционален);

  • Время поступления вызова;

  • Время ответа на вызов;

  • Входящий номер вызывающего абонента;

  • Исходящий номер вызывающего абонента;
  • Входящий номер вызываемого абонента;

  • Исходящий номер вызываемого абонента;

  • Имя trunk/user-interface вызывающего абонента;

  • Имя trunk/user-interface вызываемого абонента;

  • Длительность вызова;

  • Причина разъединения (согласно ITU-T Q.850);

  • Индикатор успешного вызова (1 — успешный, 0 — неуспешный);

  • Сторона-инициатор разъединения (1 — вызывающая сторона, 2 — вызываемая сторона, 3 — ESBC);

  • Call-ID входящего вызова;

  • Call-ID исходящего вызова;

  • Номер вызываемого абонента при переадресации;

  • IP-адрес шлюза вызывающего абонента;

  • IP-адрес шлюза вызываемого абонента;

  • Список IP-адресов из заголовка Record-Route при установлении соединения в направлении от вызывающего абонента;

  • Список IP-адресов из заголовка Via при установлении соединения в направлении от вызывающего абонента;

  • IP-адрес из заголовка Contact вызывающего абонента; 

  • IP-адрес из заголовка Contact вызываемого абонента.

Значения параметров в файле CDR записываются в указанном выше порядке и разделяются символом ";".

Записи CDR можно как сохранять локально (в Хранение записей CDR осуществляется в локальном хранилище ESBC или на внешнем USB-накопителе), так и отправлять по FTP (возможна отправка на 2 сервера). .

Отправка на внешний сервер осуществляется по протоколу FTP. Поддерживается отправка на два FTP-сервера. 

Дополнительно поддерживается сохранение и отправка SDR в SYSLOG. Для отправки в SYSLOG требуется дополнительная конфигурация syslog.

Описание всех команд для настройки CDR приведено в разделе Настройки CDR.

Пример настройки записи CDR с опциональными полями, локальным хранением и отправкой на сервер FTP с резервированием в случае неудачной отправки приведен ниже. 

Блок кода
languagec#
vesbc# 
vesbc# configure 
vesbc(config-esbc)# cdr 
vesbc(config-esbc-cdr)# enable

#Добавление заголовка в CDR-запись:
vesbc(config-esbc-cdr)# add-header 

#Запись неудачных вызовов:
vesbc(config-esbc-cdr)# collect unsuccess

#Запись пустых CDR:
vesbc(config-esbc-cdr)# collect empty-files

#Режим создания записей:
vesbc(config-esbc-cdr)# create-mode periodically
vesbc(config-esbc-cdr)# per days 1
vesbc(config-esbc-cdr)# period hours 12
vesbc(config-esbc-cdr)# per minutes 30

#Включение отправки логов:
vesbc(config-esbc-cdr)# syslog enable

#Добавление отличительного признака:
vesbc(config-esbc-cdr)# signature otlichitelnyi_priznak

#Настройка локального хранения:
vesbc(config-esbc-cdr)# local 
vesbc(config-esbc-cdr-local)# create-directories by-date
vesbc(config-esbc-cdr-local)# keep days 30
vesbc(config-esbc-cdr-local)# keep hours 12
vesbc(config-esbc-cdr-local)# keep minutes 30
vesbc(config-esbc-cdr-local)# path flash:cdr/cdr_record
vesbc(config-esbc-cdr-local)# save
vesbc(config-esbc-cdr-local)# exit

#Настройка основного FTP-сервера:
vesbc(config-esbc-cdr)# ftp 
vesbc(config-esbc-cdr-ftp)# login main_ftp_server
vesbc(config-esbc-cdr-ftp)# password password_m_ftp
vesbc(config-esbc-cdr-ftp)# path /main_ftp/cdr_record
vesbc(config-esbc-cdr-ftp)# remote address 192.168.23.100
vesbc(config-esbc-cdr-ftp)# save
vesbc(config-esbc-cdr-ftp)# exit

#Настройка резервного FTP-сервера:
vesbc(config-esbc-cdr)# reserved-ftp 
vesbc(config-esbc-cdr-res-ftp)# as-reserved 
vesbc(config-esbc-cdr-res-ftp)# login reserve_ftp_server
vesbc(config-esbc-cdr-res-ftp)# password password_r_ftp
vesbc(config-esbc-cdr-res-ftp)# path /reserve_ftp/cdr_record
vesbc(config-esbc-cdr-res-ftp)# remote address 192.168.23.200
vesbc(config-esbc-cdr-res-ftp)# save

#Применение и подтверждение изменений:
vesbc(config-esbc-cdr-res-ftp)# do commit
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesbc(config-esbc-cdr-res-ftp)# do confirm
Configuration has been confirmed. Commit timer canceled.
Информация
Более подробное описание конфигурирования CDR можно прочитать в разделе Настройки CDR Справочника команд CLI.

Если отправка записи CDR на основной FTP-сервер (192.168.23.100) по какой-либо причине не произойдет, то она попытается отправиться на резервный FTP-сервер (192.168.23.200), в случае неудачи и на резервном, запись сохранится только локально.

...

Логирование ESBC осуществляется с помощью syslog. Более подробно настройки syslog описаны в разделе Управление SYSLOG справочника команд CLI.

По умолчанию логирование модулей ESBC выключено.

Предупреждение

Включение логирования всех модулей при большой вызывной нагрузке может повлиять на производительность системы. Наибольшее влияние на производительность оказывает вывод логов в консоль (syslog console).


Модули, входящие в состав ESBC

...

Блок кода
languagec#
vesbc#
 
#Переход в раздел debug:
vesbc# debug
vesbc(debug)#
 
#Включение логирования модуля esbc_dispatcher:
vesbc(debug)# debug esbc disp
 
#Включение логирования модуля esbc_config_manager:
vesbc(debug)# debug esbc cfgmgr
 
#Включение логирования модуля esbc_access_mediator:
vesbc(debug)# debug esbc accmed
 
#Включение логирования модуля esbc_mon:
vesbc(debug)# debug esbc mon

#Включение логирования модуля esbc_aaa:
vesbc(debug)# debug esbc aaa

#Включение логирования модуля esbc_core:
vesbc(debug)# debug esbc core
 
#Включение логирования модуля esbc_sip_balancer:
vesbc(debug)# debug esbc sipbl
 
#Включение логирования модуля esbc_sip_worker:
vesbc(debug)# debug esbc sipwrk
 
#Включение логирования модуля esbc_media_balancer:
vesbc(debug)# debug esbc mediabl
 
#Включение логирования модуля esbc_media_worker:
vesbc(debug)# debug esbc mediawrk
 
#Включение логирования модуля esbc_sysio:
vesbc(debug)# debug esbc sysio
 
#Включение логирования модуля esbc_sm:
vesbc(debug)# debug esbc submngr
 
#Включение логирования модуля esbc_voip_guard:
vesbc(debug)# debug esbc voip-guard

#Применение и подтверждение настроек

Для отключения логирования модулей ESBC используется команда, аналогичная включению, с приставкой no:

Блок кода
#Выключение логирования модуля esbc_voip_guard:
vesbc(debug)# dono commit
vesbc(debug)# do confirm
esbc voip-guard

Для установки параметров логирования по умолчанию используется команда no debug all. Данная команда отключает логирование всех модулей ESBC.


Scroll Pagebreak

Примеры настройки ESBC
Якорь
ESBC_set_examples
ESBC_set_examples
 

...

Порядок конфигурирования ESBC:

1. Пробросить сетевые интерфейсы в vESBC по инструкции (только для vESBC):

gi1/0/1 — внутренний сетевой интерфейс до SSW;
gi1/0/2 — внешний сетевой интерфейс для абонентов.

2. Настроить IP-адрес на интерфейсе в сторону SSW:

Блок кода
vesbc# configure
vesbc(config)# interface gigabitethernet 1/0/1
vesbc(config-if-gi)# description "SSW"
vesbc(config-if-gi)# ip address 192.168.16.113/24
vesbc(config-if-gi)# ip firewall disable

32. Настроить IP-адрес на внешнем интерфейсе в сторону абонентов:

Блок кода
vesbc# configure
vesbc(config)# interface gigabitethernet 1/0/2
vesbc(config-if-gi)# description "ABONENTS"
vesbc(config-if-gi)# ip address 192.168.20.120/24

43. Создать SIP-транспорт в сторону SSW: 

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# sip transport TRANSPORT_SSW
vesbc(config-esbc-sip-transport)# ip address 192.168.16.113
vesbc(config-esbc-sip-transport)# port 5061

54. Создать SIP-транспорт в сторону абонентов:

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# sip transport TRANSPORT_ABONENTS
vesbc(config-esbc-sip-transport)# ip address 192.168.20.120
vesbc(config-esbc-sip-transport)# port 5062

65. Создать медиаресурсы для согласования и передачи голоса на плече SSW --- ESBC:

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# media resource MEDIA_SSW
vesbc(config-esbc-media-resource)# ip address 192.168.16.113

#Указать диапазон портов, который будет выделяться на ESBC для передачи голоса. Данная команда необязательная,. еслиЕсли ее не указывать, будет использоваться диапазон портов 8000–65535 .
vesbc(config-esbc-media-resource)# port-range 1024-65535

Scroll Pagebreak

76. Создать медиаресурсы для согласования и передачи голоса на плече ESBC --- Абонентский шлюз/SIP-абоненты:

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# media resource MEDIA_ABONENTS
vesbc(config-esbc-media-resource)# ip address 192.168.20.120

87. Создать SIP-транк в сторону SSW:

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# trunk sip TRUNK_SSW
vesbc(config-esbc-trunk-sip)# sip transport TRANSPORT_SSW
vesbc(config-esbc-trunk-sip)# remote address 192.168.16.65
vesbc(config-esbc-trunk-sip)# remote port 5060
vesbc(config-esbc-trunk-sip)# media resource 0 MEDIA_SSW

98. Создать абонентский интерфейс в сторону абонентов:

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# user-interface sip ABONENTS
vesbc(config-esbc-user-interface-sip)# sip transport TRANSPORT_ABONENTS
vesbc(config-esbc-user-interface-sip)# media resource 0 MEDIA_ABONENTS

#Если абоненты находятся за NAT выполнить команду:
vesbc(config-esbc-user-interface-sip)# nat comedia-mode on

109. Создать Создать таблицу маршрутизации и добавить туда правила, по которым вызовы, приходящие с абонентов будут маршрутизироваться на SSW:

Блок кода
vesbc# 
vesbc# configure 
vesbc(config)# esbc 
vesbc(config-esbc)# route-table TO_SSW
vesbc(config-esbc-route-table)# rule 0
vesbc(config-esbc-route-table-rule)# action direct-to-trunk TRUNK_SSW

1110. Привязать созданную таблицу маршрутизации к абонентскому интерфейсу:

Блок кода
vesbc# 
vesbc# configure 
vesbc(config)# esbc 
vesbc(config-esbc)# user-interface sip ABONENTS 
vesbc(config-esbc-user-interface-sip)# route-table TO_SSW

Scroll Pagebreak

1211. Применить конфигурацию и подтвердить изменения:

...

Порядок конфигурирования ESBC:1. Пробросить сетевые интерфейсы в vESBC по инструкции (только для vESBC):

...

1

...

2. Настроить IP-адрес на интерфейсе в сторону SSW:

Блок кода
vesbc# configure
vesbc(config)# interface gigabitethernet 1/0/1
vesbc(config-if-gi)# description "SSW"
vesbc(config-if-gi)# ip address 192.168.16.113/24

Scroll Pagebreak

32. Настроить IP-адрес на интерфейсе в сторону транкового шлюза: 

Блок кода
vesbc# configure
vesbc(config)# interface gigabitethernet 1/0/2
vesbc(config-if-gi)# description "TRUNK_GATEWAY"
vesbc(config-if-gi)# ip address 192.168.20.120/24

43. Создать SIP-транспорт в сторону SSW:

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# sip transport TRANSPORT_SSW
vesbc(config-esbc-sip-transport)# ip address 192.168.16.113
vesbc(config-esbc-sip-transport)# port 5065

54. Создать SIP-транспорт в сторону транкового шлюза:

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# sip transport TRANSPORT_TRUNK_GATEWAY
vesbc(config-esbc-sip-transport)# ip address 192.168.20.120
vesbc(config-esbc-sip-transport)# port 5067

65. Создать медиаресурсы для согласования и передачи голоса на плече SSW --- ESBC:

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# media resource MEDIA_SSW
vesbc(config-esbc-media-resource)# ip address 192.168.16.113

# Указать диапазон портов, который будет выделяться на ESBC для передачи голоса. Данная команда необязательная. Если ее не указывать, будет использоваться диапазон портов 8000–65535 .
vesbc(config-esbc-media-resource)# port-range 1024-65535

76. Создать медиаресурсы для согласования и передачи голоса на плече ESBC --- Транковый шлюз:

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# mediaresource MEDIA_TRUNK_GATEWAY
vesbc(config-esbc-media-resource)# ip address 192.168.20.120

Scroll Pagebreak

87. Создать SIP-trunk в транк в сторону SSW: 

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# trunk sip TRUNK_SSW
vesbc(config-esbc-trunk-sip)# sip transport TRANSPORT_SSW
vesbc(config-esbc-trunk-sip)# remote address 192.168.16.65
vesbc(config-esbc-trunk-sip)# remote port 5060
vesbc(config-esbc-trunk-sip)# media resource 0 MEDIA_SSW

98. Создать SIP-транк в сторону транкового шлюза:

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# trunk sip TRUNK_GATEWAY
vesbc(config-esbc-trunk-sip)# sip transport TRANSPORT_TRUNK_GATEWAY
vesbc(config-esbc-trunk-sip)# remote address 192.168.20.99
vesbc(config-esbc-trunk-sip)# remote port 5060
vesbc(config-esbc-trunk-sip)# media resource 0 MEDIA_TRUNK_GATEWAY

109. Создать Создать таблицу маршрутизации и добавить туда правила, по которым вызовы, приходящие с транкового шлюза будут маршрутизироваться на SSW:

Блок кода
vesbc# 
vesbc# configure 
vesbc(config)# esbc 
vesbc(config-esbc)# route-table TO_SSW
vesbc(config-esbc-route-table)# rule 0
vesbc(config-esbc-route-table-rule)# action direct-to-trunk TRUNK_SSW

1110. Создать таблицу маршрутизации и добавить туда правила, по которым вызовы, приходящие с SSW будут маршрутизироваться на транковый шлюз:

Блок кода
vesbc# 
vesbc# configure 
vesbc(config)# esbc 
vesbc(config-esbc)# route-table TO_TRUNK_GATEWAY
vesbc(config-esbc-route-table)# rule 0
vesbc(config-esbc-route-table-rule)# action direct-to-trunk TRUNK_GATEWAY

1211. Привязать созданные таблицы маршрутизации к транкам:

Блок кода
vesbc# 
vesbc# configure 
vesbc(config)# esbc 
vesbc(config-esbc)# trunk sip TRUNK_SSW
vesbc(config-esbc-trunk-sip)# route-table TO_TRUNK_GATEWAY
vesbc(config-esbc-trunk-sip)# exit
vesbc(config-esbc)# trunk sip TRUNK_GATEWAY
vesbc(config-esbc-trunk-sip)# route-table TO_SSW

Scroll Pagebreak

1312. Применить конфигурацию и подтвердить изменения: 

...

Порядок конфигурирования ESBC:

1. Пробросить сетевые интерфейсы в vESBC по инструкции (только для vESBC):

gi1/0/1 — внутренний сетевой интерфейс до SSW;
gi1/0/2 — внешний сетевой интерфейс для абонентов.

2. Настроить IP-адрес на интерфейсе в сторону SSW:

Блок кода
vesbc# configure
vesbc(config)# interface gigabitethernet 1/0/1
vesbc(config-if-gi)# description "SSW"
vesbc(config-if-gi)# ip address 192.168.16.113/24
vesbc(config-if-gi)# ip firewall disable

32. Настроить IP-адрес на внешнем интерфейсе в сторону абонентов:

Блок кода
vesbc# configure
vesbc(config)# interface gigabitethernet 1/0/2
vesbc(config-if-gi)# description "ABONENTS"
vesbc(config-if-gi)# ip address 192.168.20.120/24

43. Создать SIP-транспорт в сторону SSW: 

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# sip transport TRANSPORT_SSW
vesbc(config-esbc-sip-transport)# ip address 192.168.16.113
vesbc(config-esbc-sip-transport)# mode tcp-prefer
vesbc(config-esbc-sip-transport)# port 5061

54. Создать SIP-транспорт в сторону абонентов:

...

Примечание

Если абоненты используют WebSocket, а не WebSocket Secure, то необходимо выбрать mode ws в настройках SIP-транспорта для абонентов.

Scroll Pagebreak

65. Создать медиаресурсы для согласования и передачи голоса на плече SSW --- ESBC:

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# media resource MEDIA_SSW
vesbc(config-esbc-media-resource)# ip address 192.168.16.113

#Указать диапазон портов, который будет выделяться на ESBC для передачи голоса. Данная команда необязательная. Если ее не указывать, будет использоваться диапазон портов 8000–65535.  
vesbc(config-esbc-media-resource)# port-range 1024-65535

76. Создать медиаресурсы для согласования и передачи голоса на плече ESBC --- Абонентский шлюз/SIP-абоненты:

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# media resource MEDIA_ABONENTS
vesbc(config-esbc-media-resource)# ip address 192.168.20.120

87. Создать медиапрофиль с шифрованием DTLS-SRTP для SIP-абонентов:

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# media profile MEDIA_PROFILE_ABONENTS
vesbc(config-esbc-media-profile)# srtp mode mandatory
vesbc(config-esbc-media-profile)# srtp keying dtls-srtp

98. Создать SIP-транк в сторону SSW:

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# trunk sip TRUNK_SSW
vesbc(config-esbc-trunk-sip)# sip transport TRANSPORT_SSW
vesbc(config-esbc-trunk-sip)# remote address 192.168.16.65
vesbc(config-esbc-trunk-sip)# remote port 5060
vesbc(config-esbc-trunk-sip)# media resource 0 MEDIA_SSW

109. Создать Создать абонентский интерфейс в сторону абонентов:

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# user-interface sip ABONENTS
vesbc(config-esbc-user-interface-sip)# sip transport TRANSPORT_ABONENTS
vesbc(config-esbc-user-interface-sip)# media resource 0 MEDIA_ABONENTS
vesbc(config-esbc-user-interface-sip)# media profile MEDIA_PROFILE_ABONENTS

#Если абоненты находятся за NAT, выполнить команду:
vesbc(config-esbc-user-interface-sip)# nat comedia-mode on

1110. Создать таблицу маршрутизации и добавить туда правила, по которым вызовы, приходящие с абонентов, будут маршрутизироваться на SSW: 

Блок кода
vesbc# 
vesbc# configure 
vesbc(config)# esbc 
vesbc(config-esbc)# route-table TO_SSW
vesbc(config-esbc-route-table)# rule 0
vesbc(config-esbc-route-table-rule)# action direct-to-trunk TRUNK_SSW

1211. Привязать созданную таблицу маршрутизации к абонентскому интерфейсу:

Блок кода
vesbc# 
vesbc# configure 
vesbc(config)# esbc 
vesbc(config-esbc)# user-interface sip ABONENTS 
vesbc(config-esbc-user-interface-sip)# route-table TO_SSW

1312. Применить конфигурацию и подтвердить изменения:

...

Блок кода
vesbc(config)# domain lookup enable 
vesbc(config)# domain nameserver 192.168.20.100
vesbc(config)# 

2. Пробросить сетевые интерфейсы в vESBC по инструкции (только для vESBC):

gi1/0/1 — внутренний сетевой интерфейс до SSW;
gi1/0/2 — внешний сетевой интерфейс для абонентов. 

3. Настроить IP-адрес на интерфейсе в сторону SSW:

Блок кода
vesbc# configure
vesbc(config)# interface gigabitethernet 1/0/1
vesbc(config-if-gi)# description "SSW"
vesbc(config-if-gi)# ip address 192.168.16.113/24
vesbc(config-if-gi)# ip firewall disable

43. Настроить IP-адрес на внешнем интерфейсе в сторону абонентов:

Блок кода
vesbc# configure
vesbc(config)# interface gigabitethernet 1/0/2
vesbc(config-if-gi)# description "ABONENTS"
vesbc(config-if-gi)# ip address 192.168.20.120/24

54. Создать SIP-транспорт в сторону SSW: 

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# sip transport TRANSPORT_SSW
vesbc(config-esbc-sip-transport)# ip address 192.168.16.113
vesbc(config-esbc-sip-transport)# port 5061

Scroll Pagebreak

65. Создать SIP-транспорт в сторону абонентов:

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# sip transport TRANSPORT_ABONENTS
vesbc(config-esbc-sip-transport)# ip address 192.168.20.120
vesbc(config-esbc-sip-transport)# port 5062

76. Создать медиаресурсы для согласования и передачи голоса на плече SSW --- ESBC:

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# media resource MEDIA_SSW
vesbc(config-esbc-media-resource)# ip address 192.168.16.113

#Указать диапазон портов, который будет выделяться на ESBC для передачи голоса. Данная команда необязательная,. еслиЕсли ее не указывать, будет использоваться диапазон портов 8000–65535.
vesbc(config-esbc-media-resource)# port-range 1024-65535

87. Создать медиаресурсы для согласования и передачи голоса на плече ESBC --- Абонентский шлюз/SIP-абоненты:

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# media resource MEDIA_ABONENTS
vesbc(config-esbc-media-resource)# ip address 192.168.20.120

98. Создать динамический SIP-транк, в качестве адреса указать подсеть, в которой находятся SSW:

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# trunk sip SSW_DYNAMIC
vesbc(config-esbc-trunk-sip)# sip transport TRANSPORT_SSW
vesbc(config-esbc-trunk-sip)# remote address 192.168.16.0/24
vesbc(config-esbc-trunk-sip)# remote port 5060
vesbc(config-esbc-trunk-sip)# dynamic-mode dns
vesbc(config-esbc-trunk-sip)# media resource 0 MEDIA_SSW

109. Создать Создать абонентский интерфейс в сторону абонентов:

Блок кода
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# user-interface sip ABONENTS
vesbc(config-esbc-trunk-sip)# sip transport TRANSPORT_ABONENTS
vesbc(config-esbc-trunk-sip)# media resource 0 MEDIA_ABONENTS

#Если абоненты находятся за NAT, выполнить команду:
vesbc(config-esbc-user-interface-sip)# nat comedia-mode on

1110. Создать таблицу маршрутизации и добавить туда правила, по которым вызовы, приходящие с абонентов будут маршрутизироваться на SIP-транк с динамическим режимом:

Блок кода
vesbc# 
vesbc# configure 
vesbc(config)# esbc 
vesbc(config-esbc)# route-table TO_SSW
vesbc(config-esbc-route-table)# rule 0
vesbc(config-esbc-route-table-rule)# action direct-to-trunk SSW_DYNAMIC

1211. Привязать созданную таблицу маршрутизации к абонентскому интерфейсу:

Блок кода
vesbc# 
vesbc# configure 
vesbc(config)# esbc 
vesbc(config-esbc)# user-interface sip ABONENTS 
vesbc(config-esbc-user-interface-sip)# route-table TO_SSW

1312. Применить конфигурацию и подтвердить изменения:

...