...
| Объект | Количество |
|---|---|
| sip transport | 500 |
| trunk | 500 |
| user-interface | 500 |
| trunk-group | 250 |
| sip profile | 1000 |
| route table | 500 |
| rule | 64 на таблицу route table |
| condition | 64 на правило rule |
| media profile | 1000 |
| media resource | 1000 |
| mod-table | 500 |
| mod | 64 на таблицу mod-table |
| cause-list | 64 |
| crypto profile | 64 |
| flood filter | 250 |
| security-profile | 500 |
| Предупреждение |
|---|
Не рекомендуется использовать максимальное количество объектов конфигурации одновременно, это может повлиять на работоспособность системы. |
| Scroll Pagebreak |
|---|
Расчет максимального количества контактов зарегистрированных абонентов для vESBC:
Объем оперативной памяти (RAM) vESBC, GB | Количество абонентовконтактов |
|---|---|
3 | 4500 |
≥4 | 20000*(объем RAM - 3) |
...
| Информация |
|---|
ESBC-3200 поддерживает до 420000 контактов зарегистрированных абонентов. |
Настройка абонентских интерфейсовЯкорь user-interface user-interface
| user-interface | |
| user-interface |
...
- Таблица модификаций (для входящих и исходящих сообщений);
- SIP-профиль;
- Медиапрофиль;
- Профиль безопасности;
- Режим работы абонентов за NAT;
- Public IP;
- QoS;
- Ограничение входящего трафика;
- SIP-домен. При настройке домен , который будет использоваться в host-part URI в заголовках To и From для исходящих сообщениях на SIP-абонентов;сообщений. Во входящих сообщениях будет осуществляться проверка домена в заголовке From.
- Опция "Разрешить вызовы без регистрации". Разрешает принимать входящие сообщения INVITE от незарегистрированных абонентов.
| Примечание |
|---|
По умолчанию вызовы с абонентского интерфейса без предварительной регистрации запрещены. |
...
SIP-транк представляет собой интерфейс для подключения к вышестоящему SIP-устройсву устройству (IP АТС/ SIP-proxy/Удаленный SSW и др.) . В или группе вышестоящих устройств при включении динамического режима работы транка. При включении динамического режима работы в конфигурации необходимо задать адрес и порт удалённой стороны , эти или диапазон адресов и портов. Эти параметры используются для идентификации источника запроса.
...
Для создания SIP-транка необходимо настроить:
- Адрес удалённой стороны (или диапазон адресов для динамического режима);
- Порт удалённой стороны (или диапазон адресов для динамического режима);
- SIP-транспорт;
- Медиаресурсы.
...
- Таблица маршрутизации;
- Таблица модификаций (для входящих и исходящих сообщений);
- SIP-профиль;
- Медиапрофиль;
- Профиль безопасности;
- Режим работы за NAT;
- Public IP;
- QoS;
- Ограничение входящего трафика;
- Динамический режим;. Используется для подключения к группе вышестоящих SIP-устройств (IP АТС/ SIP-proxy/Удаленный SSW и др.).
- Опция "Доверенная сеть" для переадресаций;
- SIP-домен, который . При настройке домен будет использоваться в host-part URI в заголовках To и From для исходящих сообщениях на SIP-транксообщений. Во входящих сообщениях будет осуществляться проверка домена в заголовке From.
Подробное описание параметров всех настроек можно найти в разделе Настройки 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:
| Блок кода | ||
|---|---|---|
| ||
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:
| Блок кода | ||
|---|---|---|
| ||
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)
Схема:
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.
| Блок кода | ||
|---|---|---|
| ||
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 с добавленным заголовком:
| Блок кода | ||
|---|---|---|
| ||
INVITE sip:24000@192.168.114.129:5460 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPj-fvzSQlwN2zoMaGUR5JCLMkjmkBV3Vz1
Max-Forwards: 70
From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=l2jkRSMeumV03IdhjPntOt7l0XBKy-Ln
To: "24000" <sip:24000@192.168.114.129>
Contact: <sip:24001@192.168.114.130:5460;transport=udp>
Call-ID: P-W.2oee.2vJw0JoaFbNkRDvnxY40FoP
CSeq: 30738 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: timer, 100rel, replaces
Session-Expires: 1800
Min-SE: 90
#Добавленный через таблицу модификаторов заголовок:
Test_header: example string
Content-Type: application/sdp
Content-Length: 157
v=0
o=tester 3927594021 3927594021 IN IP4 192.168.114.130
s=A conversation
c=IN IP4 192.168.114.130
t=0 0
m=audio 8062 RTP/AVP 8
a=rtpmap:8 PCMA/8000 |
| Scroll Pagebreak |
|---|
Модификатор удаления заголовка (no-transit)
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Test_header. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, вырезался заголовок Test_header, если в его содержимом есть "example string".
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:
| Блок кода | ||
|---|---|---|
| ||
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:
| Блок кода | ||
|---|---|---|
| ||
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)
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, был добавлен заголовок Test_header со значением example string.
| Блок кода | ||
|---|---|---|
| ||
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# 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 с добавленным заголовком:
| Блок кода | ||
|---|---|---|
| ||
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)
Схема:
В конфигурации настроено два транка и настроена маршрутизация из транка TRUNK_IN в TRUNK_OUT. Требуется передать заголовок "User-Agent" из входящего INVITE, только если в нем указано значение "TestUA".
| Примечание |
|---|
По умолчанию все необязательные и пользовательские заголовки удаляются на входящем плече и не передаются на исходящее плечо. |
Решение:
Создаем таблицу модификации MODTABLE_IN:
| Блок кода | ||
|---|---|---|
| ||
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)
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из 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)
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Test_header. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, вырезался заголовок Test_header, если в его содержимом есть "example string".
| Примечание |
|---|
По умолчанию все необязательные и пользовательские заголовки удаляются на входящем плече и не передаются на исходящее плечо. В данном примере демонстрируется модификация только для исходящего плеча (TRUNK_OUT), поэтому подразумевается что на входящем плече (TRUNK_IN) настроен модификатор transit для заголовка Test_header. |
| Блок кода | ||
|---|---|---|
| ||
vesbc#
vesbc# configure
vesbc(config)# esbc
#Создание таблицы модификаторов MODTABLE_OUT:
vesbc(config-esbc | ||
| Блок кода | ||
| ||
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:
| Блок кода | ||
|---|---|---|
| ||
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 | ||
| Блок кода | ||
| ||
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 (схема та же):
| Блок кода | ||
|---|---|---|
| ||
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)
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Из TRUNK_IN приходит INVITE с заголовком Test_header: 123. Требуется, чтобы в TRUNK_OUT отправился INVITE с заголовком Test_header: 123456.
| Блок кода | ||
|---|---|---|
| ||
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
| ||
| Блок кода | ||
| ||
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 символов.
Схема:
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.
| Блок кода | ||
|---|---|---|
| ||
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 (схема та же):
| Блок кода | ||
|---|---|---|
| ||
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:
| Блок кода | |
|---|---|
| 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:
| Блок кода | ||
|---|---|---|
| ||
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 — текущее время в секундах (заполняется на момент применения модификации).
Синтаксис обращения к системным переменным:
| Блок кода | ||
|---|---|---|
| ||
${VAR_NAME} |
Схема:
163 |
Пример 2.
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Требуется, чтобы в запросе INVITE, который отправляется При отправке сообщения INVITE, полученного из TRUNK_IN в TRUNK_OUT, добавлялся заголовок Call-Info с информацией об имени транка, на который отправляется запрос, и версией ESBC.
| Блок кода | ||
|---|---|---|
| ||
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-адреса в соответствии с конфигурацией:
| Блок кода | ||
|---|---|---|
| Блок кода | ||
| ||
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:
| Блок кода | ||
|---|---|---|
| ||
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 символов.
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Diversion (предварительно следует настроить таблицу модификации на IN транка TRUNK_IN для транзита заголовка Diversion на второе плечо). Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, вырезался заголовок Diversion, а его значение из user part было добавлено в display name заголовка From.
| Блок кода | ||
|---|---|---|
| ||
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:
| Блок кода | ||
|---|---|---|
| ||
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:
| Блок кода | ||
|---|---|---|
| ||
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 — текущее время в секундах (заполняется на момент применения модификации).
Синтаксис обращения к системным переменным:
| Блок кода | ||
|---|---|---|
| ||
${VAR_NAME} |
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, добавлялся заголовок Call-Info с информацией об имени транка, на который отправляется запрос, и версией ESBC.
| Блок кода | ||
|---|---|---|
| ||
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:
| Блок кода | ||
|---|---|---|
| ||
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:
| Блок кода | ||
|---|---|---|
| ||
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-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.
Контроль доступности направления
| Блок кода | ||
|---|---|---|
| ||
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.
| Блок кода | ||
|---|---|---|
| ||
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), если проверка успешна, то вызов смаршрутизируется по привязанной таблице маршрутизации и в случае недоступности транка/совпадении ответа с маской из списка произойдёт маршрутизация на следующее направление.
Поведение при перенаправлении
| Якорь | ||||
|---|---|---|---|---|
|
Настройка поведения при перенапрвлении позволяет использовать разные режимы обработки сообщений 3XX.На ESBC есть возможность настроить поведение при перенаправлении (получении 3xx ответа), доступны 3 варианта:
- forbidden — при получении 3xx ответа вызов завершается;
- transit — 3xx передаётся на другое плечо без изменений контакта;
- process — локальная обработка 3xx ответа.
...
Отправляем INVITE абоненту на тот транк, где он зарегистрирован и 181 в сторону A.
| Блок кода | ||
|---|---|---|
| ||
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 в сторону А.
| Блок кода | ||
|---|---|---|
| ||
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
| security_profile | |
| security_profile |
ESBC поддерживает создание профилей Профили безопасности используются для конфигурирования механизма управления механизмом защиты от SIP-атак. Использование профилей безопасности позволяет гибко управлять уровнями защиты для каждого направления.
Необходимый уровень защиты обеспечивается следующими настройками профиляВ текущей версии поддержаны следующие настройки:
- фильтрация SIP-флуда;
- блокировка по AOR/User-Agent;
- объединение ошибок по IP-адресу.
Профиль безопасности может использоваться в транках, транк-группах и абонентских интерфейсах.
Для обеспечения единой политики безопасности может быть привязан к абонентскому интерфейсу, транку, транковой группе. В общих настройках возможна привязка профиля ко всем абонентским интерфейсам или ко всем транкамможет быть использован один профиль для всех транков и один профиль для всех абонентских интерфейсов. Это может быть как один и тот же профиль безопасности, так и разные. Эти профили указываются в общих настройках ESBC.
| Информация |
|---|
Если к транку для транка и к транковой группегруппы, в которую входит этот транк входит, настроены используются разные профили безопасности, то применится настройка на транке.Если к транку/абонентскому интерфейсу будет применяться профиль, указанный в настройках транка. Если для транка/абонентского интерфейса и в общих настройках (для всех транков/абонентских интерфейсов) привязаны используются разные профили безопасности, то применится настройка на транке/абонентском интерфейсе.будет применяться профиль, указанный в настройках транка/абонентского интерфейса. |
Описание всех команд для настройки профилей безопасности приведено в разделе Настройки профиля безопасности.
Общий принцип работы модуля fail2banЯкорь fail2ban 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, пример:
| Блок кода | ||
|---|---|---|
| ||
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 на транке:для транка
| Блок кода | ||
|---|---|---|
| ||
#Настройка 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:
| Блок кода | ||
|---|---|---|
| ||
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 для аудиотрафика на абонентском интерфейсев конфигурации абонентского интерфейса:
| Блок кода | ||
|---|---|---|
| ||
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
| count | |
| count |
При обработке сигнального SIP-трафика и медиапотоков RTP, ресурсы CPU используются разными модулями ESBC. Соответственно для оптимизации нагрузки на CPU предусмотрена возможность управлять количеством модулей.
При высокой нагрузке сигнальным SIP-трафиком наибольшую нагрузку на ядро CPU производит модуль sip worker, а при большом количестве одновременных вызовов (особенно в режиме транскодирования медии) — media worker.
Поэтому для установления баланса производительности, для многоядерных систем следует использовать оптимальное количество каждого из модулей, т. к. каждый дополнительный экземпляр модуля будет использовать ресурс дополнительного ядра CPU системы.
По умолчанию в системе используется по одному экземпляру каждого модуляESBC поддерживает добавление дополнительных модулей для распределения нагрузки.
Список модулей, количество которых можно изменить:
...
| Примечание |
|---|
Заданное в конфигурации количество модулей не изменяется при увеличении/уменьшении количества ядер CPU системы. |
Описание всех команд для настройки количества модулей приведено в разделе Общие настройки ESBC.
| Scroll Pagebreak |
|---|
Пример:
| Блок кода | ||
|---|---|---|
| ||
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 |
...
Ограничение на транковой группе применяется для всех транков, входящих в состав этой группы, и имеет приоритет над ограничением, установленным в настройках транка.
При этом суммарное количество входящего трафика на транках, входящих в состав группы, также не может превышать ограничение на группе.
ПримерПример:
| Блок кода | ||
|---|---|---|
| ||
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 секунд.
| Блок кода | ||
|---|---|---|
| ||
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
| 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 с резервированием в случае неудачной отправки приведен ниже.
| Блок кода | ||
|---|---|---|
| ||
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
...
| Блок кода | ||
|---|---|---|
| ||
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_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. Применить конфигурацию и подтвердить изменения:
...







