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

Ключ

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

...

1. Пробросить сетевые интерфейсы в vESR по инструкции:

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

...

1. Пробросить сетевые интерфейсы в vESR по инструкции:

gi1/0/1 — сетевой интерфейс до SSW;
gi1/0/2 — сетевой интерфейс до транкового шлюза.

...

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


Примечание

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


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

Медиаресурсы представляют собой диапазоны UDP-портов и IP-адресов, используемых E-SBC для передачи/получения потоков RTP. 

Пример:

Требуется, чтобы E-SBC для передачи медиатрафика использовал IP-адрес 192.168.16.113 и порты с 20000 до 30000.

...

После привязки созданного медиаресурса к какому-либо направлению (транку, транковой группе или user-interface), он будет использоваться для передачи/получения потоков RTP на выбранных направлениях.

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

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

Создание/конфигурирование SIP-транспорта (sip-transport)

...

Транк-группа представляет собой набор транков различного типа (в текущей версии 1.1.1 поддерживается только SIP-транк) и алгоритм балансировки нагрузки между ними.

Помимо этого группа содержит набор следующих настроек:

  • Таблица маршрутизации;
  • Медиапрофиль;
  • Медиаресурсы;
  • SIP-профиль;
  • Таблицы модификации всех типов как для пре-роутинга так и для пост-роутинга.

В текущей версии 1.1.1 балансировка вызовов осуществляется алгоритмом round-robin.

...

Все исходящие вызовы, маршрутизируемые через транковую группу, используют первый транк в группе. В случае недоступности транка (Timer B, ответы 4XX, 6XX), или при совпадении ответа с маской из списка причин отбоя, вызов будет направлен через следующий транк в группе.

...

На E-SBC натроена транковая группа TRUNK_GROUP, в состав которой входят 3 транка (TRUNK_1, TRUNK_2 и TRUNK_3). Приходит вызов и по правилу маршрутизации уходит на эту транковую группу. В результате E-SBC совершает попытку вызова в первый транк в составе транковой группы (TRUNK_1), если вызов неуспешный (например вызов разрушился по Timer B, или с транка пришел ответ 4XX, 6XX), транк недоступен, то происходит попытка позвонить во второй транк (TRUNK_2). Если попытка вызова также неуспешна, то будет попытка позвонить в последний транк (TRUNK_3). Если попытка также неуспешна, то вызов на первом плече отбивается. Если на каком-то из транков пришел ответ 200ОК, то вызов устанавливается.

...

Все исходящие вызовы, маршрутизируемые через транковую группу, используют первый транк в группе. В случае недоступности транка (Timer B, ответы 4XX, 6XX), или при совпадении ответа с маской из списка причин отбоя, вызов НЕ будет направлен через следующий транк в группе, вызов на первом плече сразу отбивается.

...

Каждый последующий исходящий вызов, маршрутизируемый через транковую группу, используют следующий транк в группе независимо от результата маршрутизации предыдущего вызова в данную транковую группу. В случае недоступности транка (Timer B, ответы 4XX, 6XX) транка или при совпадении ответа с маской из списка причин отбоя, вызов будет направлен через следующий транк в группе.

...

На E-SBC настроена транковая группа TRUNK_GROUP, в состав которой входят 3 транка (TRUNK_1, TRUNK_2 и TRUNK_3). Приходит вызов и по правилу маршрутизации уходит на эту транковую группу. В результате E-SBC совершает попытку вызова в первый транк в составе транковой группы (TRUNK_1), если вызов неуспешный (например вызов разрушился по Timer B или с транка пришел ответ 4XX, 6XXтранк недоступен или ответ совпал с маской из списка причин отбоя), то происходит попытка позвонить во второй транк (TRUNK_2). Если попытка вызова также неуспешна, то будет попытка позвонить в последний транк (TRUNK_3). Если попытка также неуспешна, то вызов на первом плече отбивается. Если на каком-то из транков пришел ответ 200ОК, то вызов устанавливается. 

Второй вызов, который смаршрутизировался на данную транковую группу, сначала уйдет на TRUNK_2. Если вызов неуспешный, то E-SBC совершит попытку позвонить в TRUNK_3 и потом в TRUNK_1. Если попытки неуспешны, то вызов на первом плече отбивается. По такому же принципу третий вызов сначала распределится в TRUNK_3, четвертый вызов — в TRUNK_1 и т. д. 

...

Каждый последующий исходящий вызов, маршрутизируемый через транковую группу, использует следующий транк в группе. В случае недоступности транка (Timer B, ответы 4XX, 6XX) или при совпадении ответа с маской из списка причин отбоя вызов НЕ будет направлен через следующий транк в группе, вызов на первом плече сразу отбивается.

...

В схеме из п. 3 первый вызов распределяется в TRUNK_1, если он отбивается, то первое плечо вызова сразу отбивается, попыток позвонить в TRUNK_2, TRUNK_3 нет. Второй вызов распределяется в TRUNK_2, третий — в TRUNK_3, четвертый — в TRUNK_1 и т. д. 

Создание/конфигурирование таблиц маршрутизации (route-table)

Схематично таблица маршрутизации выглядит следующим образом:

Image Modified

Таблица маршрутизации представляет собой набор правил и действий, по которым обрабатывается входящий вызов, и указывается исходящий транк (или транк-группа) для формирования исходящего вызова.

...

Таблица состоит из правил (RULE), правило обязательно должно содержать действие (ACTION), и, опционально, — условия (CONDITION), которые должны быть соблюдены для выполнения данного действия маршрутизации. Если условия отсутствуют, действия совершаются безусловно.
Действие — это операция, результатом которой будет являться конкретное направление (DEST).
В текущей версии 1.1.1 в качестве направлений могут выступают транки и транк-группы, поддержаны условия маршрутизации по CGPN и CDPN.

...

  • при внутренних сбоях, до согласования сессии;

  • при отбое с встречной стороны, кроме 3хх кодов SIP. 

Пример перебора правил:

Image Modified


В таблице маршрутизации два правила, первое направляет вызов в TRUNK_GROUP, второе направляет вызов в TRUNK_3, условия нигде не настроены. Приходит вызов и начинает маршрутизироваться по данной таблице маршрутизации. В результате вызов уходит на TRUNK_GROUP и оттуда в TRUNK_1, в случае если вызов через TRUNK_1 не установился (например, пришел ответ 4ххтранк недоступен), то маршрутизация продолжает выполняться, вызов отправляется в TRUNK_2. Если попытка вызова в TRUNK_2 также завершилась неудачно, E-SBC переходит к RULE_2 и отправляет вызов в TRUNK_3. Если и здесь попытка установить вызов также оказалась неуспешной, то первое плечо отбивается, и вызов завершается, т. к. больше правил в таблице маршрутизации нет. Если попытка установить вызов успешна, то вызов устанавливается.

Блок кода
languagec#
vesr# 
vesr# configure 
vesr(config)# esbc 
vesr(config-esbc)# route-table ROUTE_TABLE

#Добавление первого правила с действием отправить вызов в транковую группу TRUNK_GROUP:
vesr(config-esbc-route-table)# rule 0
vesr(config-esbc-route-table-rule)# action direct-to-trunk-group TRUNK_GROUP
vesr(config-esbc-route-table-rule)# exit

#Добавление второго правила с действием отправить вызов в транк TRUNK_3:
vesr(config-esbc-route-table)# rule 1
vesr(config-esbc-route-table-rule)# action direct-to-trunk TRUNK_3

Пример работы условий:

Image Modified

В таблице маршрутизации два правила, у обоих есть условия по CGPN и CDPN. Например, приходит вызов, у которого номер А=23000, номер Б=24000. E-SBC заходит в RULE_1 и анализирует условие CONDITION_1, условие истинно, далее происходит анализ условия из CONDITION_2, условие также истинно. Значит правило RULE_1 подходит для маршрутизации, и вызов отправляется в TRUNK_1.

...

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

Создание/конфигурирование

...

медиапрофилей (

...

media profile)

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

...

транках и транк-группах.

...

 

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

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

  • audio
  • image
  • video

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

Примечание

По умолчанию все типы медиаданных включены.


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

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

#Отключение передачи image и video:
vesr(config-esbc-media-profile)# no media-type image 
vesr(config-esbc-media-profile)# no media-type video 
vesr(config-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

Неподдерживаемые заголовки

Нельзя модифицировать следующие заголовки:

  • Call-ID

  • Contact

  • Content-Length

  • Content-Type

  • Cseq

  • From

  • To

  • Via

  • Accept

  • Allow

  • Expires

  • Min-Expires

  • Proxy-Authenticate

  • Proxy-Authorization

  • Require

  • Supported

  • WWW-Authenticate

  • Max-forwards

  • Min-SE

  • Session-Expires

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

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

...

replace — замена заголовка.

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

Данное правило не подразумевает передачу заголовка — если правило используется в in таблице, необходимо добавить передачу соответствующего заголовка с помощью правила transit.

...

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

Порядок применения модификаций

В первую очередь применяются модификации транзита — incoming и outcoming. Затем применяются модификации замены в том порядке, в котором они заданы в таблице. В конце добавляются новые заголовки.

Пример использования модификатора добавления заголовка (add)

Схема:

Image Removed

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

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

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

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

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

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

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

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

#Привязать таблицу модификаторов к входящему транку TRUNK_IN:
vesr(config-esbc)# trunk sip NEW_TRUNK_IN 
vesr(config-esbc-trunk-sip)# mod-tablemedia sip in MODTABLE_INprofile 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 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 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
На второе плечо (TRUNK_OUT) пересылаем SDP offer c ключами: 

Блок кода
languagec#
Session Description Protocol
    Session Description Protocol Version (v): 0
    Owner/Creator, Session Id (o): 100 3932018917 3932018917 IN IP4 192.168.23.199
    Session Name (s): Talk
    Connection Information (c): IN IP4 192.168.23.199
    Time Description, active time (t): 0 0
    Session Attribute (a): rtcp-xr:rcvr-rtt=all:10000 stat-summary=loss,dup,jitt,TTL voip-metrics
    Session Attribute (a): record:off
    Media Description, name and address (m): audio 8064 RTP/SAVP 96 97 98 0 8 18 101 99 100
    Media Attribute (a): rtpmap:96 opus/48000/2
    Media Attribute (a): fmtp:96 useinbandfec=1
    Media Attribute (a): rtpmap:97 speex/16000
    Media Attribute (a): fmtp:97 vbr=on
    Media Attribute (a): rtpmap:98 speex/8000
    Media Attribute (a): fmtp:98 vbr=on
    Media Attribute (a): fmtp:18 annexb=yes
    Media Attribute (a): rtpmap:101 telephone-event/48000
    Media Attribute (a): rtpmap:99 telephone-event/16000
    Media Attribute (a): rtpmap:100 telephone-event/8000
    Media Attribute (a): rtcp-fb:* trr-int 5000
    Media Attribute (a): rtcp-fb:* ccm tmmbr
    Media Attribute (a): crypto:1 AES_256_CM_HMAC_SHA1_80 inline:FGdOolKfBlrQzUIedHcIqs9uauWEnUbqxXpop9PaI1dPIHVnO/vdb7JJHRLBLw==
    Media Attribute (a): crypto:2 AES_256_CM_HMAC_SHA1_32 inline:Galc9UfOqBFNmr3ICc3Fiuc3HgEXlj+p1dRw85LavzjWR1sGZUr1nsLQjfaTQA==
    Media Attribute (a): crypto:3 AES_CM_128_HMAC_SHA1_80 inline:jEjWFKpqdf6d94g/ddSjj1i08dEWQA1tTI75Hqx3
    Media Attribute (a): crypto:4 AES_CM_128_HMAC_SHA1_32 inline:uFYI2UDA/+woJJY4fWljfoxRROffXNtEO81bBnHJ
    [Generated Call-ID: 503d40e930910767a2dd95f88b483189]

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

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

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

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

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

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

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

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

Блок кода
languagec#
INVITE sip:24000@192.168.114.129:5460 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPj-fvzSQlwN2zoMaGUR5JCLMkjmkBV3Vz1
Max-Forwards: 70
From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=l2jkRSMeumV03IdhjPntOt7l0XBKy-Ln
To: "24000" <sip:24000@192.168.114.129>
Contact: <sip:24001@192.168.114.130:5460;transport=udp>
Call-ID: P-W.2oee.2vJw0JoaFbNkRDvnxY40FoP
CSeq: 30738 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: timer, 100rel, replaces
Session-Expires: 1800
Min-SE: 90
#Добавленный через таблицу модификаторов заголовок:
Test_header: example string 
Content-Type: application/sdp
Content-Length: 157

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

Пример использования модификатора удаления заголовка (no-transit)

Схема:

Image Removed

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

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

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

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

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

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

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

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

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

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

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

Блок кода
languagec#
INVITE sip:24000@192.168.114.129:5460 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPjjju.7u4O03Aty93vQq0Q1huigSIqGVIr
Max-Forwards: 70
From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=CW.53L5FPJAUBsiRspMYqtjTtOTzZxHg
To: "24000" <sip:24000@192.168.114.129>
Contact: <sip:24001@192.168.114.130:5460;transport=udp>
Call-ID: V4OOROjNahUbinXtA648s9eI2kjE5cCI
CSeq: 18905 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: timer, 100rel, replaces
Session-Expires: 1800
Min-SE: 90
#Заголовок, который должен быть удален:
Test_header: example string
Content-Type: application/sdp
Content-Length:   157

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

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

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

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

В случае, если в заголовке 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

Пример использования модификатора транзита и замены заголовка (replace)

Схема:

Image Removed

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Применить и подтвердить изменения

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

#Настроить интервалы контроля:
vesr(config-esbc-trunksip-sipprofile)# dokeepalive commitsuccess-interval 
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.120
vesr(config-esbc-sip-profile)# keepalive failed-interval 30
vesr(config-esbc-trunksip-sipprofile)# 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 с измененным заголовком:

Блок кода
languagec#
INVITE sip:24000@192.168.114.129:5460 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPjIbcILUaVB0cQTFaGLLb7ccpnbTQIRvV3
Max-Forwards: 70
From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=toP8wIO79wo47ChSYy69MFOyd4vhGRNF
To: "24000" <sip:24000@192.168.114.129>
Contact: <sip:24001@192.168.114.130:5460;transport=udp>
Call-ID: dLsiFI4-aD2faceSTLZu.-kuHfN.pJtG
CSeq: 22556 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: timer, 100rel, replaces
Session-Expires: 1800
Min-SE: 90
#Измененный заголовок:
Test_header: 123456
Content-Type: application/sdp
Content-Length:   157

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

Scroll Pagebreak
Работа с логами

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

Модули, входящие в состав E-SBC

...

Название

...

Описание

...

Назначение

...

esbc_core

...

модуль основной логики

...

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

...

esbc_sip_balancer

...

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

...

получение сообщений SIP (на открытый сокет) и передача их в модуль esbc_sip_worker

...

esbc_sip_worker

...

модуль расширения подсистемы SIP

...

адаптер протокола SIP, обрабатывает сообщения и передает данные модулю esbc_core

...

esbc_media_balancer

...

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

...

управление ресурсами в подсистеме media, выделяет RTP-порты и передает их в модуль esbc_media_worker

...

esbc_media_worker

...

модуль расширения подсистемы media

...

обработка медиапотоков (RTP)

...

esbc_config_manager

...

адаптер базы данных конфигурации

...

хранение конфигурации системы

...

esbc_access_mediator

...

модуль внешнего доступа

...

обработка внешних взаимодействий с системой CLI

...

esbc_ipc

...

брокер сообщений

...

обеспечение связи всех модулей в системе

...

esbc_dispatcher

...

модуль контроля состояния модулей

...

контроль модулей, индикация об изменении состояний модулей

...

esbc_sm

...

модуль управления абонентскими записями

...

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

...

esbc_voip_guard

...

модуль fail2ban

...

отслеживает попытки обращения к сервису телефонии, при обнаружении постоянно повторяющихся неудачных попыток обращения с одного и того же IP-адреса или хоста модуль блокирует попытки с этого IP-адреса/хоста

...

esbc_sysio

...

модуль взаимодействия с ОС

...

служит прослойкой между E-SBC и ОС, на которой он разворачивается, предоставляет единый интерфейс взаимодействия с системой и реализует мониторинг различных системных событий

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 не будет получено ни одного сообщения, то он станет считаться недоступным, и E-SBC будет отправлять в сторону TRUNK_OUT OPTIONS (пока поддержан только этот метод контроля) с интервалом 30 секунд (failed-interval).

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

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

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

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

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

При создании маски для списка можно использовать регулярные выражения 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, поэтому происходит маршрутизация на следующее направление, в транковой группе больше нет транков, поэтому E-SBC переходит к RULE_2, и вызов маршрутизируется в TRUNK_3. 

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

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


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

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

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

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

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

Таблица модификаций содержит список модификаций, которые применяются к входящим или исходящим SIP-сообщениям. Таблицы модификаций используются в транках и транк-группах. Их можно подключить, как out — тогда правила будут применяться при отправке сообщения. Или, как in — тогда правила применяются при получении сообщения.
Таблица из транк-групп применяется только в том случае, если в транке нет своей таблицы. В модификациях можно использовать регулярные выражения PCRE

При сравнении имён заголовков требуется точное совпадение строк, в то время как при поиске в теле заголовка — достаточно совпадения подстроки. По умолчанию из входящего сообщения
вырезаются все заголовки. Модификации не применяются к тем сообщениям, которые создаются самим SBC (100 trying, ack в ответ на 200 OK, 200 OK в ответ на BYE).

Неподдерживаемые заголовки

Нельзя модифицировать следующие заголовки:

  • Call-ID

  • Contact

  • Content-Length

  • Content-Type

  • Cseq

  • From

  • To

  • Via

  • Accept

  • Allow

  • Expires

  • Min-Expires

  • Proxy-Authenticate

  • Proxy-Authorization

  • Require

  • Supported

  • WWW-Authenticate

  • Max-forwards

  • Min-SE

  • Session-Expires

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

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

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

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

    Данное правило не подразумевает передачу заголовка — если правило используется в in таблице, необходимо добавить передачу соответствующего заголовка с помощью правила transit. 


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

Порядок применения модификаций

В первую очередь применяются модификации транзита — incoming и outcoming. Затем применяются модификации замены в том порядке, в котором они заданы в таблице. В конце добавляются новые заголовки.

Пример использования модификатора добавления заголовка (add)

Схема:

Image Added

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Блок кода
languagec#
INVITE sip:24000@192.168.114.129:5460 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPj-fvzSQlwN2zoMaGUR5JCLMkjmkBV3Vz1
Max-Forwards: 70
From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=l2jkRSMeumV03IdhjPntOt7l0XBKy-Ln
To: "24000" <sip:24000@192.168.114.129>
Contact: <sip:24001@192.168.114.130:5460;transport=udp>
Call-ID: P-W.2oee.2vJw0JoaFbNkRDvnxY40FoP
CSeq: 30738 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: timer, 100rel, replaces
Session-Expires: 1800
Min-SE: 90
#Добавленный через таблицу модификаторов заголовок:
Test_header: example string 
Content-Type: application/sdp
Content-Length: 157

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


Scroll Pagebreak

Пример использования модификатора удаления заголовка (no-transit)

Схема: 

Image Added

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

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

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

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

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

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

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

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

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

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

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

Блок кода
languagec#
INVITE sip:24000@192.168.114.129:5460 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPjjju.7u4O03Aty93vQq0Q1huigSIqGVIr
Max-Forwards: 70
From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=CW.53L5FPJAUBsiRspMYqtjTtOTzZxHg
To: "24000" <sip:24000@192.168.114.129>
Contact: <sip:24001@192.168.114.130:5460;transport=udp>
Call-ID: V4OOROjNahUbinXtA648s9eI2kjE5cCI
CSeq: 18905 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: timer, 100rel, replaces
Session-Expires: 1800
Min-SE: 90
#Заголовок, который должен быть удален:
Test_header: example string
Content-Type: application/sdp
Content-Length:   157

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

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

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

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

В случае, если в заголовке 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

Пример использования модификатора транзита и замены заголовка (replace)

Схема:

Image Added

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Scroll Pagebreak
После внесения изменений в конфигурацию с TRUNK_IN приходит следующий 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 с измененным заголовком:

Блок кода
languagec#
INVITE sip:24000@192.168.114.129:5460 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPjIbcILUaVB0cQTFaGLLb7ccpnbTQIRvV3
Max-Forwards: 70
From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=toP8wIO79wo47ChSYy69MFOyd4vhGRNF
To: "24000" <sip:24000@192.168.114.129>
Contact: <sip:24001@192.168.114.130:5460;transport=udp>
Call-ID: dLsiFI4-aD2faceSTLZu.-kuHfN.pJtG
CSeq: 22556 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: timer, 100rel, replaces
Session-Expires: 1800
Min-SE: 90
#Измененный заголовок:
Test_header: 123456
Content-Type: application/sdp
Content-Length:   157

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

Scroll Pagebreak
Есть возможность разбивать скобками шаблон value-pattern на группы (максимум 9 групп). И оперировать ими в replacement с помощью цифр, экранированных обратной чертой ('\1-9'). '\0' - весь текст. 
Пример (схема та же):

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Scroll Pagebreak
После внесения изменений в конфигурацию с TRUNK_IN приходит следующий 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 с измененным заголовком:

Блок кода
languagec#
Via: SIP/2.0/UDP 10.25.72.151:5060;rport;branch=z9hG4bKPjc5kLf-R0rh5Stla2eTvpoVAxOc0Jr.kX
Max-Forwards: 70
From: <sip:134@10.25.72.151>;tag=lMWgbj2x66hzNDHhP8ef8tWvB2HT2DwH
To: <sip:135@192.168.23.140>
Contact: <sip:134@10.25.72.151:5060;transport=udp>
Call-ID: c09c3761560702267daaee76eb769a9c
CSeq: 5021 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: 100rel, replaces
#Измененный заголовок:
Date: 09/10/2024
Content-Type: application/sdp
Content-Length:   163

Scroll Pagebreak
Работа с логами

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

Модули, входящие в состав E-SBC

Название

Описание

Назначение

esbc_core

модуль основной логики

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

esbc_sip_balancer

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

получение сообщений SIP (на открытый сокет) и передача их в модуль esbc_sip_worker

esbc_sip_worker

модуль расширения подсистемы SIP

адаптер протокола SIP, обрабатывает сообщения и передает данные модулю esbc_core

esbc_media_balancer

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

управление ресурсами в подсистеме media, выделяет RTP-порты и передает их в модуль esbc_media_worker

esbc_media_worker

модуль расширения подсистемы media

обработка медиапотоков (RTP)

esbc_config_manager

адаптер базы данных конфигурации

хранение конфигурации системы

esbc_access_mediator

модуль внешнего доступа

обработка внешних взаимодействий с системой CLI

esbc_ipc

брокер сообщений

обеспечение связи всех модулей в системе

esbc_dispatcher

модуль контроля состояния модулей

контроль модулей, индикация об изменении состояний модулей

esbc_sm

модуль управления абонентскими записями

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

esbc_voip_guard

модуль fail2ban

отслеживает попытки обращения к сервису телефонии, при обнаружении постоянно повторяющихся неудачных попыток обращения с одного и того же IP-адреса или хоста модуль блокирует попытки с этого IP-адреса/хоста

esbc_sysio

модуль взаимодействия с ОС

служит прослойкой между E-SBC и ОС, на которой он разворачивается, предоставляет единый интерфейс взаимодействия с системой и реализует мониторинг различных системных событий

Включение логирования работы модулей E-SBC производится в разделе debug:

Блок кода
languagec#
vesr#
 
#Переход в раздел debug:
vesr# debug
vesr(debug)#
 
#Включение логирования модуля esbc_dispatcher:
vesr(debug)# debug esbc disp
 
#Включение логирования модуля esbc_config_manager:
vesr(debug)# debug esbc cfgmgr
 
#Включение логирования модуля esbc_access_mediator:
vesr(debug)# debug esbc accmed
 
#Включение логирования модуля esbc_core:
vesr(debug)# debug esbc core
 
#Включение логирования модуля esbc_sip_balancer:
vesr(debug)# debug esbc sipbl
 
#Включение логирования модуля esbc_sip_worker:
vesr(debug)# debug esbc sipwrk
 
#Включение логирования модуля esbc_media_balancer:
vesr(debug)# debug esbc mediabl
 
#Включение логирования модуля esbc_media_worker:
vesr(debug)# debug esbc mediawrk
 
#Включение логирования модуля esbc_sysio:
vesr(debug)# debug esbc sysio
 
#Включение логирования модуля esbc_sm:
vesr(debug)# debug esbc submngr
 
#Включение логирования модуля esbc_voip_guard:
vesr(debug)# debug esbc voip-guard
 
#Применение и подтверждение настроек:
vesr(debug)# do commit
vesr(debug)# do confirm

Scroll Pagebreak

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

E-SBC поддерживает добавление дополнительных модулей для распределения нагрузки.
Список модулей, количество которых можно изменить:

  • core
  • sip-worker
  • sip-balancer
  • media-worker
  • media-balancer

Максимальное количество модулей определяется динамически в зависимости от количества ядер CPU.

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

После изменения количества модулей для стабильной работы необходим перезапуск ПО E-SBC.


Примечание

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

Пример:

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

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

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

#Применение и подтверждение изменений:
vesr(config-esbc-general)# do commit
2024-09-09T05:26:55+00:00 %SYS-W-EVENT: WARNING!!! After changing E-SBC 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
vesr(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
vesr(config-esbc-general)# 

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


Примечание

Для вывода предупреждения о необходимости перезапуска нужно, чтобы уровень syslog severity был не ниже warning.

Настройка WEB-сервера

WEB-интерфейс по умолчанию отключен. Для активации выполните действия, описанные ниже.

  1. Активируйте web-интерфейс по протоколу HTTP или HTTPS.
Блок кода
vesr# config
vesr(config)# ip http server
vesr(config)# ip https server
vesr(config)# exit
vesr# commit
vesr# confirm

2. Откройте TCP-порт 80 для HTTP-сервера или 443 для HTTPS в Firewall. Пример ниже представлен для открытия 443 порта. Создайте группы web с портом 443:

Блок кода
object-group service web
  port-range 443
exit

Добавьте правило в зону trusted self:

Блок кода
security zone-pair trusted self
  rule 120
    action permit
    match protocol tcp
    match destination-port object-group web
    enable
  exit
exit

Примените и подтвердите конфигурацию:

Блок кода
commit
confirm

3. Откройте web-браузер, например Firefox, Opera, Chrome.

Scroll Pagebreak

4. Введите в адресной строке браузера IP-адрес устройства. Для перехода в web-интерфейс можно использовать URL: http://<ip-address_esbc> или https://<ip-address_esbc>. При успешном обнаружении контроллера в окне браузера отобразится страница авторизации.

Image Added

5. Введите имя пользователя и пароль в соответствующие поля.

Подсказка

Заводские установки: пользователь — admin, пароль — password

6. Нажмите кнопку «Войти». В окне браузера откроется страница "Информация об устройстве".

Image Added

Включение логирования работы модулей E-SBC производится в разделе debug:

...

languagec#

...