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

Ключ

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

...

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

Пример: 

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

...

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

Scroll Pagebreak

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

...

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

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

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

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

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

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

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

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

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

Scroll Pagebreak

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

...

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

Примечание

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

...

Блок кода
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 также будет присутствовать этот заголовок:  

...

Примечание

Данный модификатор сработает только в случае, когда значение заголовка 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".

...

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

...

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

Scroll Pagebreak

Решение:

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

...

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

Scroll Pagebreak

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

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

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

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

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

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

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

...

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

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

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

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

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

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

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

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

Настройка поведения при перенапрвлении позволяет использовать разные режимы обработки сообщений 3XX.

...

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

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

...

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

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

...

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

...

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

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

...

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

...

Описание всех команд приведено в разделе Настройки медиапрофиля справочника команд 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, разрешенный для транскодирования, и отсутствуют паттерны кодеков для проксирования.

...

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

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

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

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

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

Scroll Pagebreak

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

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

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

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

...

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

...

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

Scroll Pagebreak

Пример:

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

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

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

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

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

...

  • Заголовок файла (опционален) (<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 вызываемого абонента.

...

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

7. Создать 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

...

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

...

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

...