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

Ключ

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

...

Блок кода
vesr# commit
vesr# confirm


В приведенной схеме описаны базовые настройки, описание всех команд приведено в разделе Настройка ESBC

Настройка ESBC для SIP-транков

Схема применения:

...

Примечание

Cоздание транков с одинаковым SIP-транспортом и IP:Port разрешено только в случае, если отличается домен.

В приведенной схеме описаны базовые настройки, описание всех команд приведено в разделе Настройка ESBC

Scroll Pagebreak
Создание/конфигурирование медиаресурсов (media resources)

...

Медиапрофили служат для настройки общих параметров передачи и приёма медиаданных. Медиапрофили используются в user-interface, транках и транк-группах. 

Разрешённые типы медиаданных

В медиапрофиле можно настроить разрешённые типы медиаданных для направления. Для выбора доступны 3 типа:

  • audio
  • image
  • video

Если какой-то тип из представленных в SDP выключен в медиапрофиле, то он будет деактивирован.

...

Управление кодеками (codec)

Обработка медиа потоков осуществляется в двух режимах: проксирование и транскодирование. По умолчанию E-SBC работает в режиме проксирования.

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

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

#Создание медиапрофиля NEW_MEDIA_PROFILE:
vesrvesbc(config-esbc)# media-profile NEW_
vesbc(config-esbc)# media-profile MEDIA_PROFILE 
vesrvesbc(config-esbc-media-profile)# 

#Отключениеdo передачи image и video:
vesrcommit 
vesbc(config-esbc-media-profile)# no media-type imagedo confirm 
vesrvesbc(config-esbc-media-profile)# nodo sh mediarunning-typeconfig video 
vesr(config-esbc-esbc media-profile)# 

vesr(config-esbc-media-profile)# exit
vesr(config-esbc)#

#Привязать медиапрофиль к user-interface NEW_USER_IFACE:
vesr(config-esbc)# user-interface sip NEW_USER_IFACE
vesr(config-esbc-user-interface-sip)# media profile NEW_MEDIA_PROFILE 
vesr(config-esbc-user-interface-sip)# 

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

После внесения изменений любой тип медиаданных, пришедших на user-interface, кроме audio будет отключен. 

Scroll Pagebreak

Таймаут ожидания RTP-пакетов

Это функция контроля состояния разговора по наличию RTP-трафика от встречного устройства. Контроль осуществляется следующим образом: если в течение заданного времени от встречного устройства не поступает ни одного RTP-пакета, то вызов завершается.
По умолчанию контроль выключен.

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

#Создание медиапрофиля NEW_MEDIA_PROFILE:
vesr(config-esbc)# media-profile NEW_MEDIA_PROFILE 
vesr(config-esbc-media-profile)# 

#Включение таймера в медиапрофиле:
vesr(config-esbc-media-profile)# rtp-timeout 100
vesr(config-esbc-media-profile)# 
 
vesr(config-esbc-media-profile)# exit
vesr(config-esbc)#

#Привязать медиапрофиль к транку NEW_TRUNK:
vesr(config-esbc)# trunk sip NEW_TRUNK
vesr(config-esbc-trunk-sip)# media profile NEW_MEDIA_PROFILE 
vesr(config-esbc-trunk-sip)# 

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

Если после внесения изменений во время вызова с транка NEW_TRUNK в течение 100 секунд не будут приходить RTP-пакеты, то вызов будет принудительно завершён. 

Scroll Pagebreak

SRTP

SRTP (Secure Real-time Transport Protocol) это расширенная версия протокола RTP с набором защитных механизмов. Протокол был опубликован организацией IETF в стандарте RFC 3711. SRTP обеспечивает конфиденциальность за счет шифрования RTP-нагрузки. Для шифрования медиа потока, SRTP стандартизирует использование только единственного шифра, AES, который может использоваться в двух режимах:

  • Сегментированный целочисленный счётчик — типичный режим, который осуществляет произвольный доступ к любым блокам, что является существенным для трафика RTP, передающегося в публичных сетях с непредсказуемым уровнем надежности и возможной потерей пакетов. Но стандарт для шифрования данных RTP — только обычное целочисленное значение счётчика. AES, работающий в этом режиме, является алгоритмом шифрования по умолчанию, с длиной шифровального ключа в 128 бит и ключом сессии длиной в 112 бит.
  • f8-режим — вариант режима способа обратной связи, расширенного, чтобы быть доступным с изменённой функцией инициализации. Значения по умолчанию для шифровального ключа и ключа сессии — то же, что и в AES в режиме, описанном выше.

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

В конфигурации доступны 2 метода обмена ключами:

И 3 режима использования SRTP:

  • disable – SRTP запрещён;
  • optional – SRTP не обязателен, но ключи будут подставлены в offer SDP второго плеча, без изменения профиля транспорта в медиа секции SDP;
  • mandatory – SRTP обязателен, профиль транспорта в медиа секции SDP будет изменён на соответствующий профиль SRTP.

Если выбран режим mandatory и включены оба метода, то на втором плече будет выбран DTLS-SRTP, как более приоритетный.

Примечание

По умолчанию поддержка SRTP выключена.

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

Схема:

Image RemovedВ конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT.  На TRUNK_OUT включаем обязательное использование SRTP с методом обмена ключами – SDES.

 MEDIA_PROFILE
  codec allow AMR
  codec allow CLEARMODE
  codec allow CN
  codec allow G72
  codec allow G722/ 9
  codec allow G728 15
  codec allow G729/ 18
  codec allow GSM 3
  codec allow H26
  codec allow H261 31
  codec allow H263 34
  codec allow ILBC
  codec allow L16/44100 11
  codec allow L16/44100/2 10
  codec allow OPUS
  codec allow PCMA 8
  codec allow PCMU 0
  codec allow SPEEX
  codec allow T38 t38
  codec allow VP
  codec allow telephone-event
exit

Для очистки списка используется команда - no codec allow all. При использовании данной команды будут удалены кодеки добавленные автоматически при создании профиля и кодеки добавленные пользователем.

Список кодеков, разрешенных для проксирования можно изменять и добавлять любые кодеки, командой:

Блок кода
languagec#
codec allow <full or partial codec name> [payload type]

где:

<full or partial codec name> - часть или полное название кодека (в соответствии с SDP rtpmap);

[payload type] - номер payload type. Параметр опциональный.

Допускается указания части названия кодека, например: codec allow G72, в таком случае будет разрешено проксирование кодеков G726-16, G726-24, G726-32, G726-40.

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

Для кодеков со статическим payload type рекомендуется указывать номер payload type, иначе, если в SDP не будет указан атрибут rtpmap, вызов будет отбиваться кодом 488.

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

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

- codec audio

- codec video

- codec image (в текущей версии ПО не поддержено, данная команда аналогична команде codec allow T38 t38)

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

1. Offer SDP фильтруется согласно разрешённым кодекам на плече A.
2. Offer SDP фильтруется согласно разрешённым кодекам на плече B.
3. В конец Offer SDP добавляются недостающие кодеки, транскодинг которых включен в media-profile на плече B.
4. Answer SDP фильтруется согласно разрешённым кодекам на плече B.
5. В конец Answer SDP добавляются недостающие кодеки, транскодинг которых включен в media-profile на плече A.

В результате, транскодирование включается, если, самые приоритетные кодеки из Offer и Answer SDP не совпадают.
Иначе, при совпадении приоритетных кодеков, будет использоваться проксирование.

Пример.

На плече A разрешён только кодек PCMA:

Блок кода
languagec#
media-profile MP_A
codec audio PCMA
exit


на плече B - PCMU:

Блок кода
languagec#
media-profile MP_B
codec audio PCMU
exit

В данном случае, на плечах А и B будут согласованы кодеки PCMA и PCMU соответственно и будет включено транскодирование.

Если на плече B включить поддержку PCMA:

Блок кода
languagec#
media-profile MP_B
codec audio PCMU
codec audio PCMA
exit

то выбор режима работы (проксирование/транскодирование) будет осуществляться в зависимости от кодека указаного в Answer SDP плеча B.

Если в ответе первым кодеком будет представлен PCMA, то будет выбран режим проксирования, если PCMU - транскодирования.

 

Scroll Pagebreak

Таймаут ожидания RTP-пакетов

Это функция контроля состояния разговора по наличию RTP-трафика от встречного устройства. Контроль осуществляется следующим образом: если в течение заданного времени от встречного устройства не поступает ни одного RTP-пакета, то вызов завершается.
По умолчанию контроль выключен.

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

#Создание медиапрофиля NEW_MEDIA_PROFILE:
vesr(config-esbc)# media-profile NEW_MEDIA_PROFILE 
vesr(config-esbc-media-profile)# 

#Настройка#Включение SRTPтаймера (включили обязательный режим использования, метод обмена ключами – SDES):
vesrв медиапрофиле:
vesr(config-esbc-media-profile)# srtp keying 
  dtls-srtp  Enable DTLS-SRTP keying method
  sdes       Enable SDES keying method

rtp-timeout 100
vesr(config-esbc-media-profile)# srtp
 keying sdes 
vesr(config-esbc-media-profile)# srtp mode 
  disable    SRTP is disabled
  mandatory  SRTP is mandatory
  optional   SRTP is optional

exit
vesr(config-esbc)#

#Привязать медиапрофиль к транку NEW_TRUNK:
vesr(config-esbc)# trunk sip NEW_TRUNK
vesr(config-esbc-mediatrunk-profilesip)# srtpmedia mode mandatoryprofile NEW_MEDIA_PROFILE 
vesr(config-esbc-media-profile)# 

 
vesr(config-esbc-media-profile)# exit
vesr(config-esbc)#

#Привязать медиапрофиль к транку TRUNK_OUT:
vesr(config-esbc)# trunk sip TRUNK_OUT
vesr(config-esbc-trunk-sip)# media profile NEW_MEDIA_PROFILE 
vesr(config-esbc-trunk-sip)# 

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

Если после внесения изменений во время вызова с транка NEW_TRUNK в течение 100 секунд не будут приходить RTP-пакеты, то вызов будет принудительно завершён. 

Scroll Pagebreak
C TRUNK_IN приходит INVITE с SDP offer:

Блок кода
languagec#
Session Description Protocol
    Session Description Protocol Version (v): 0
    Owner/Creator, Session Id (o): 100 61 74 IN IP4 10.25.72.54
    Session Name (s): Talk
    Connection Information (c): IN IP4 10.25.72.54
    Time Description, active time (t): 0 0
    Session Attribute (a): rtcp-xr:rcvr-rtt=all:10000 stat-summary=loss,dup,jitt,TTL voip-metrics
    Session Attribute (a): record:off
    Media Description, name and address (m): audio 7078 RTP/AVP 96 97 98 0 8 18 101 99 100
    Media Attribute (a): rtpmap:96 opus/48000/2
    Media Attribute (a): fmtp:96 useinbandfec=1
    Media Attribute (a): rtpmap:97 speex/16000
    Media Attribute (a): fmtp:97 vbr=on
    Media Attribute (a): rtpmap:98 speex/8000
    Media Attribute (a): fmtp:98 vbr=on
    Media Attribute (a): fmtp:18 annexb=yes
    Media Attribute (a): rtpmap:101 telephone-event/48000
    Media Attribute (a): rtpmap:99 telephone-event/16000
    Media Attribute (a): rtpmap:100 telephone-event/8000
    Media Attribute (a): rtcp-fb:* trr-int 5000
    Media Attribute (a): rtcp-fb:* ccm tmmbr
    [Generated Call-ID: l0XaoKkqav]
Scroll Pagebreak

...

SRTP

SRTP (Secure Real-time Transport Protocol) это расширенная версия протокола RTP с набором защитных механизмов. Протокол был опубликован организацией IETF в стандарте RFC 3711. SRTP обеспечивает конфиденциальность за счет шифрования RTP-нагрузки. Для шифрования медиа потока, SRTP стандартизирует использование только единственного шифра, AES, который может использоваться в двух режимах:

  • Сегментированный целочисленный счётчик — типичный режим, который осуществляет произвольный доступ к любым блокам, что является существенным для трафика RTP, передающегося в публичных сетях с непредсказуемым уровнем надежности и возможной потерей пакетов. Но стандарт для шифрования данных RTP — только обычное целочисленное значение счётчика. AES, работающий в этом режиме, является алгоритмом шифрования по умолчанию, с длиной шифровального ключа в 128 бит и ключом сессии длиной в 112 бит.
  • f8-режим — вариант режима способа обратной связи, расширенного, чтобы быть доступным с изменённой функцией инициализации. Значения по умолчанию для шифровального ключа и ключа сессии — то же, что и в AES в режиме, описанном выше.

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

В конфигурации доступны 2 метода обмена ключами:

И 3 режима использования SRTP:

  • disable – SRTP запрещён;
  • optional – SRTP не обязателен, но ключи будут подставлены в offer SDP второго плеча, без изменения профиля транспорта в медиа секции SDP;
  • mandatory – SRTP обязателен, профиль транспорта в медиа секции SDP будет изменён на соответствующий профиль SRTP.

Если выбран режим mandatory и включены оба метода, то на втором плече будет выбран DTLS-SRTP, как более приоритетный.

Примечание

По умолчанию поддержка SRTP выключена.

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

Схема:

Image AddedВ конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT.  На TRUNK_OUT включаем обязательное использование SRTP с методом обмена ключами – SDES.

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

#Создание медиапрофиля NEW_MEDIA_PROFILE:
vesr(config-esbc)# media-profile NEW_MEDIA_PROFILE 
vesr(config-esbc-media-profile)# 

#Настройка SRTP (включили обязательный режим использования, метод обмена ключами – SDES):
vesr(config-esbc-media-profile)# srtp keying 
  dtls-srtp  Enable DTLS-SRTP keying method
  sdes       Enable SDES keying method

vesr(config-esbc-media-profile)# srtp keying sdes 
vesr(config-esbc-media-profile)# srtp mode 
  disable    SRTP is disabled
  mandatory  SRTP is mandatory
  optional   SRTP is optional

vesr(config-esbc-media-profile)# srtp mode mandatory 
vesr(config-esbc-media-profile)# 

 
vesr(config-esbc-media-profile)# exit
vesr(config-esbc)#

#Привязать медиапрофиль к транку TRUNK_OUT:
vesr(config-esbc)# trunk sip TRUNK_OUT
vesr(config-esbc-trunk-sip)# media profile NEW_MEDIA_PROFILE 
vesr(config-esbc-trunk-sip)# 

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

Scroll Pagebreak
C TRUNK_IN приходит INVITE с SDP offer:

Блок кода
languagec#
Session Description Protocol
    Session Description Protocol Version (v): 0
    Owner/Creator, Session Id (o): 100 393201891761 393201891774 IN IP4 19210.16825.2372.19954
    Session Name (s): Talk
    Connection Information (c): IN IP4 19210.16825.2372.19954
    Time Description, active time (t): 0 0
    Session Attribute (a): rtcp-xr:rcvr-rtt=all:10000 stat-summary=loss,dup,jitt,TTL voip-metrics
    Session Attribute (a): record:off
    Media Description, name and address (m): audio 80647078 RTP/SAVPAVP 96 97 98 0 8 18 101 99 100
    Media Attribute (a): rtpmap:96 opus/48000/2
    Media Attribute (a): fmtp:96 useinbandfec=1
    Media Attribute (a): rtpmap:97 speex/16000
    Media Attribute (a): fmtp:97 vbr=on
    Media Attribute (a): rtpmap:98 speex/8000
    Media Attribute (a): fmtp:98 vbr=on
    Media Attribute (a): fmtp:18 annexb=yes
    Media Attribute (a): rtpmap:101 telephone-event/48000
    Media Attribute (a): rtpmap:99 telephone-event/16000
    Media Attribute (a): rtpmap:100 telephone-event/8000
    Media Attribute (a): rtcp-fb:* trr-int 5000
    Media Attribute (a): rtcp-fb:* ccm tmmbr
    [Generated Call-ID: l0XaoKkqav]

Scroll Pagebreak
На второе плечо (TRUNK_OUT) пересылаем SDP offer c ключами: 

Блок кода
languagec#
Session Description Protocol
    Session Description Protocol Version (v): 0Media Attribute (a): crypto:1 AES_256_CM_HMAC_SHA1_80 inline:FGdOolKfBlrQzUIedHcIqs9uauWEnUbqxXpop9PaI1dPIHVnO/vdb7JJHRLBLw==
    Media AttributeOwner/Creator, Session Id (ao): crypto:2 AES_256_CM_HMAC_SHA1_32 inline:Galc9UfOqBFNmr3ICc3Fiuc3HgEXlj+p1dRw85LavzjWR1sGZUr1nsLQjfaTQA==100 3932018917 3932018917 IN IP4 192.168.23.199
    MediaSession AttributeName (as): crypto:3 AES_CM_128_HMAC_SHA1_80 inline:jEjWFKpqdf6d94g/ddSjj1i08dEWQA1tTI75Hqx3Talk
    Connection Information (c): IN IP4 192.168.23.199
    Time Description, active time (t): 0 0
    MediaSession Attribute (a): crypto:4 AES_CM_128_HMAC_SHA1_32 inline:uFYI2UDA/+woJJY4fWljfoxRROffXNtEO81bBnHJrtcp-xr:rcvr-rtt=all:10000 stat-summary=loss,dup,jitt,TTL voip-metrics
    [Generated Call-ID: 503d40e930910767a2dd95f88b483189]

Создание/конфигурирование SIP-профилей (sip-profile)

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

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

Пример настройки контроля доступности направления

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

#Создание sip-профиля NEW_SIP_PROFILE:
vesr(config-esbc)# sip-profile NEW_SIP_PROFILE 
vesr(config-esbc-sip-profile)# 

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

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

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

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

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

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

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

Контроль доступности не работает для user-interface. 

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

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

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

Scroll Pagebreak

Схема:

Image Removed

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

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

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

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

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

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

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

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

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

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

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

Если из user-interface пришёл ответ, совпадающий с маской, то перемаршрутизации не будет.

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

...

Session Attribute (a): record:off
    Media Description, name and address (m): audio 8064 RTP/SAVP 96 97 98 0 8 18 101 99 100
    Media Attribute (a): rtpmap:96 opus/48000/2
    Media Attribute (a): fmtp:96 useinbandfec=1
    Media Attribute (a): rtpmap:97 speex/16000
    Media Attribute (a): fmtp:97 vbr=on
    Media Attribute (a): rtpmap:98 speex/8000
    Media Attribute (a): fmtp:98 vbr=on
    Media Attribute (a): fmtp:18 annexb=yes
    Media Attribute (a): rtpmap:101 telephone-event/48000
    Media Attribute (a): rtpmap:99 telephone-event/16000
    Media Attribute (a): rtpmap:100 telephone-event/8000
    Media Attribute (a): rtcp-fb:* trr-int 5000
    Media Attribute (a): rtcp-fb:* ccm tmmbr
    Media Attribute (a): crypto:1 AES_256_CM_HMAC_SHA1_80 inline:FGdOolKfBlrQzUIedHcIqs9uauWEnUbqxXpop9PaI1dPIHVnO/vdb7JJHRLBLw==
    Media Attribute (a): crypto:2 AES_256_CM_HMAC_SHA1_32 inline:Galc9UfOqBFNmr3ICc3Fiuc3HgEXlj+p1dRw85LavzjWR1sGZUr1nsLQjfaTQA==
    Media Attribute (a): crypto:3 AES_CM_128_HMAC_SHA1_80 inline:jEjWFKpqdf6d94g/ddSjj1i08dEWQA1tTI75Hqx3
    Media Attribute (a): crypto:4 AES_CM_128_HMAC_SHA1_32 inline:uFYI2UDA/+woJJY4fWljfoxRROffXNtEO81bBnHJ
    [Generated Call-ID: 503d40e930910767a2dd95f88b483189]

Создание/конфигурирование SIP-профилей (sip-profile)

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

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

Пример настройки контроля доступности направления

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

#Создание sip-профиля NEW_SIP_PROFILE:
vesr(config-esbc)# sip-profile NEW_SIP_PROFILE 
vesr(config-esbc-sip-profile)# 

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

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

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

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

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

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

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

Контроль доступности не работает для user-interface. 

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

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

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

Scroll Pagebreak

Схема:

Image Added

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

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

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

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

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

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

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

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

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

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


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

Если из user-interface пришёл ответ, совпадающий с маской, то перемаршрутизации не будет.

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

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

Работа с NAT (nat comedia-mode)

С целью преодоления соединений через устройства NAT, в ESBC реализована поддержка nat comedia-mode для абонентов и транков.

Настройка и принцип работы nat comedia-mode для транков (trunk)

Включение режима nat comedia-mode осуществляется в настройках транка

Блок кода
languagec#
vesbc# configure 
vesbc(config)# esbc 
vesbc(config-esbc)# trunk sip 
vesbc(config-esbc-trunk-sip)# nat comedia-mode 
    Select NAT comedia mode for trunk:
        off
        on
        flexible

vesbc(config-esbc-trunk-sip)# nat comedia-mode on

Возможна работа в двух режимах:

flexible – проверяет источник во входящем RTP-потоке и транслирует исходящий поток на IP-адрес и UDP-порт, с которого принимается медиапоток, в случае прерывания входящего RTP-потока более чем на 1 секунду, исходящий поток продолжает транслироваться;

on – проверяет источник во входящем RTP-потоке и транслирует исходящий поток на IP-адрес и UDP-порт, с которого принимается медиапоток, в случае прерывания входящего RTP-потока более чем на 1 секунду, исходящий поток перестает транслироваться;

Настройка и принцип работы nat comedia-mode для абонентов (user-interface)

Включение режима nat comedia-mode осуществляется в настройках user-interface

Блок кода
languagec#
vesbc# 
vesbc# configure 
vesbc(config)# esbc 
vesbc(config-esbc)# user-interface sip USERS
vesbc(config-esbc-user-interface-sip)# nat comedia-mode 
    Select NAT comedia mode for user-interface:
        off
        on
        flexible
vesbc(config-esbc-user-interface-sip)# nat comedia-mode on

Возможна работа в двух режимах:

flexible – проверяет источник во входящем RTP-потоке и транслирует исходящий поток на IP-адрес и UDP-порт, с которого принимается медиапоток, в случае прерывания входящего RTP-потока более чем на 1 секунду, исходящий поток продолжает транслироваться;

on – проверяет источник во входящем RTP-потоке и транслирует исходящий поток на IP-адрес и UDP-порт, с которого принимается медиапоток, в случае прерывания входящего RTP-потока более чем на 1 секунду, исходящий поток перестает транслироваться;

Также данная настройка позволяет передавать сообщения протокола SIP симметрично (на порт, с которого был принят запрос) в случае, если клиент в инициирующем запросе не использовал параметр RPORT;

Команда nat keep-alive-interval ипользуется для поддержки соединения за NAT для сигнального трафика. (Не поддержана в текущей версии ПО)

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

При включении опции nat comedia-mode, все атрибуты direction в SDP, при отпавке offer sdp заменяются на sendrecv.
При отправке sdp answer в сторону транка/user-interface с включенной опцией, все атрибуты direction заменяются на максимально возможные, вне зависимости от того, какие атрибуты были в полученном answer на другом плече (в ответ на sendrecv - sendrecv, в ответ на sendonly - recvonly, в ответ на recvonly - sendonly).

Примеры:

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

ЭТУ ТАБЛИЦУ НАДО СДЕЛАТЬ КРАСИВОЙ СХЕМОЙ

Блок кода
UAC ---------------trunk-------------------E-SBC-------trunk/user interface with nat comedia-mode---------UAS

--> INVITE (sendonly)                                                                             --> INVITE (sendrecv)
<-- 200OK (recvonly)                                                                              <-- 200OK(sendrecv)

--> INVITE (sendonly)                                                                              --> INVITE (sendrecv)
<-- 200OK (recvonly)                                                                               <-- 200OK(recvonly)

--> INVITE (recvonly)                                                                               --> INVITE (sendrecv)
<-- 200OK (sendonly)                                                                                <-- 200OK(sendrecv)


2. Замена атрибутов direction в answer sdp

ЭТУ ТАБЛИЦУ НАДО СДЕЛАТЬ КРАСИВОЙ СХЕМОЙ

Блок кода
UAC ------------trunk/user interface with nat comedia-mode-------------E-SBC---------------------trunk--------------------UAS


--> INVITE (sendrecv)                                                                                            --> INVITE (sendrecv)
<-- 200OK (sendrecv)                                                                                              <-- 200OK(sendonly)

--> INVITE (sendrecv)                                                                                             --> INVITE (sendrecv)
<-- 200OK (sendrecv)                                                                                               <-- 200OK(recvonly)

--> INVITE (sendrecv)                                                                                              --> INVITE (sendrecv)
<-- 200OK (sendrecv)                                                                                               <-- 200OK(sendrecv)


Создание/конфигурирование модификаторов (modification table)

...