...
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)
...
На E-SBC настроена транковая группа TRUNK_GROUP, в состав которой входят 3 транка (TRUNK_1, TRUNK_2 и TRUNK_3). Приходит вызов и по правилу маршрутизации уходит на эту транковую группу. В результате E-SBC совершает попытку вызова в первый транк в составе транковой группы (TRUNK_1), если вызов неуспешный (транк недоступен или ответ совпал с маской из списка причин отбоя), то происходит попытка позвонить во второй транк (TRUNK_2). Если попытка вызова также неуспешна, то будет попытка позвонить в последний транк (TRUNK_3). Если попытка также неуспешна, то вызов на первом плече отбивается. Если на каком-то из транков пришел ответ 200ОК, то вызов устанавливается.
Второй вызов, который смаршрутизировался на данную транковую группу, сначала уйдет на TRUNK_2. Если вызов неуспешный, то E-SBC совершит попытку позвонить в TRUNK_3 и потом в TRUNK_1. Если попытки неуспешны, то вызов на первом плече отбивается. По такому же принципу третий вызов сначала распределится в TRUNK_3, четвертый вызов — в TRUNK_1 и т. д.
...
В схеме из п. 3 первый вызов распределяется в TRUNK_1, если он отбивается, то первое плечо вызова сразу отбивается, попыток позвонить в TRUNK_2, TRUNK_3 нет. Второй вызов распределяется в TRUNK_2, третий — в TRUNK_3, четвертый — в TRUNK_1 и т. д.
Создание/конфигурирование таблиц маршрутизации (route-table)
Схематично таблица маршрутизации выглядит следующим образом:
Таблица маршрутизации представляет собой набор правил и действий, по которым обрабатывается входящий вызов, и указывается исходящий транк (или транк-группа) для формирования исходящего вызова.
...
при внутренних сбоях, до согласования сессии;
при отбое с встречной стороны, кроме 3хх кодов SIP.
Пример перебора правил:
В таблице маршрутизации два правила, первое направляет вызов в TRUNK_GROUP, второе направляет вызов в TRUNK_3, условия нигде не настроены. Приходит вызов и начинает маршрутизироваться по данной таблице маршрутизации. В результате вызов уходит на TRUNK_GROUP и оттуда в TRUNK_1, в случае если вызов через TRUNK_1 не установился (например, транк недоступен), то маршрутизация продолжает выполняться, вызов отправляется в TRUNK_2. Если попытка вызова в TRUNK_2 также завершилась неудачно, E-SBC переходит к RULE_2 и отправляет вызов в TRUNK_3. Если и здесь попытка установить вызов также оказалась неуспешной, то первое плечо отбивается, и вызов завершается, т. к. больше правил в таблице маршрутизации нет. Если попытка установить вызов успешна, то вызов устанавливается.
| Блок кода | ||
|---|---|---|
| ||
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 |
Пример работы условий:
В таблице маршрутизации два правила, у обоих есть условия по CGPN и CDPN. Например, приходит вызов, у которого номер А=23000, номер Б=24000. E-SBC заходит в RULE_1 и анализирует условие CONDITION_1, условие истинно, далее происходит анализ условия из CONDITION_2, условие также истинно. Значит правило RULE_1 подходит для маршрутизации, и вызов отправляется в TRUNK_1.
...
Медиапрофили служат для настройки общих параметров передачи и приёма медиаданных. Медиапрофили используются в user-interface, транках и транк-группах.
Разрешённые типы медиаданных
В медиапрофиле можно настроить разрешённые типы медиаданных для направления, для . Для выбора доступно доступны 3 типа:
- audio
- image
- video
Если какой-то тип из представленных в SDP выключен в медиапрофиле, то он будет деактивирован.
| Примечание |
|---|
По умолчанию все типы медиаданных включены. |
| Блок кода | ||
|---|---|---|
| ||
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-пакетов
...
Если после внесения изменений во время вызова с транка NEW_TRUNK в течение 100 секунд не будут приходить RTP-пакеты, то вызов будет принудительно завершён.
| Scroll Pagebreak |
|---|
SRTP
SRTP (Secure Real-time Transport Protocol) это расширенная версия протокола RTP с набором защитных механизмов. Протокол был опубликован организацией IETF в стандарте RFC 3711. SRTP обеспечивает конфиденциальность за счет шифрования RTP-нагрузки. Для шифрования медиа потока, SRTP стандартизирует использование только единственного шифра, AES, который может использоваться в двух режимах:
...
SRTP использует функцию формирования ключа для создания ключей на основе мастер-ключа. Протокол управления ключами создает все ключи в сессии с помощью мастер-ключа. За счет того, что у каждой сессии свой уникальный ключ, все сессии защищены. Поэтому, если одна сессия была скомпрометирована, то остальные по-прежнему под защитой.
В конфигурации доступны 2 метода обмена ключами:
...
Пример использования SRTP
Схема:
...
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. На TRUNK_OUT включаем обязательное использование SRTP с методом обмена ключами - – SDES.
| Блок кода | ||
|---|---|---|
| ||
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 |
|---|
| Блок кода | ||
|---|---|---|
| ||
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 |
|---|
| Блок кода | ||
|---|---|---|
| ||
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. Его можно привязать к транкам, транк-группам и user-interface.
В текущей версии поддержаны следующие настройки:
- Контроль доступности направления
- Список причин отбоя для перехода на следующее направленинаправление
Пример настройки контроля доступности направления
| Блок кода | ||
|---|---|---|
| ||
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 не будет получено ни одного сообщения, то он станет считаться недоступным, и E-SBC будет слать отправлять в сторону TRUNK_OUT OPTIONS (пока поддержан только этот метод контроля) .
Если транк отвечает на OPTIONS, то следующий запрос будет отправлен через 120 секунд(successс интервалом 30 секунд (failed-interval).
Если не отвечает(транк недоступениз транка было получено какое-либо сообщение (в том числе ответ на OPTIONS), то через 30 транк считается доступным, следующий запрос OPTIONS отправится через 120 секунд (failedsuccess-interval).
| Предупреждение |
|---|
Контроль доступности не работает для user-interface. |
Использование списка причин отбоя для перехода на следующее направление
На E-SBC есть возможность создать список ответов, при получении которых происходит перемаршрутизация на следующее направление (следующий транк в транковой группе/следующее правило в таблице маршрутизации). Это работает как для вызовов, так и для регистраций.
При создании маски для списка можно использовать регулярные выражения PCRE. Scroll Pagebreak
Схема:
В таблице маршрутизации два правила, первое направляет вызов в TRUNK_GROUP, второе направляет вызов в TRUNK_3.
| Блок кода | ||
|---|---|---|
| ||
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
...
Таблица модификаций содержит список модификаций, которые применяются к входящим или исходящим SIP-сообщениям. Таблицы модификаций используются в транках и транк-группах. Их можно подключить, как out — тогда правила будут применяться при отправке сообщения. Или, как in —— тогда правила применяются при получении сообщения.
Таблица из транк-групп применяется только в том случае, если в транке нет своей таблицы. В модификациях можно использовать регулярные выражения PCRE.
При сравнении имён заголовков требуется точное совпадение строк, в то время как при поиске в теле заголовка — достаточно совпадения подстроки. По умолчанию из входящего сообщения вырезаются все заголовки. Модификации не применяются к тем сообщениям, которые создаются самим SBC (100 trying, ack в ответ на 200 OK, 200 OK в ответ на BYE).
...
- add — добавление заголовка.
- no-transit — удаление заголовка. Данная команда используется только в out заголовках (таблицы in всегда вырезают все заголовки, полученные в сообщении из сети).
replace — замена заголовка.
Предупреждение Данное правило не подразумевает передачу заголовка — если правило используется в in таблице, необходимо добавить передачу соответствующего заголовка с помощью правила transit.
transit — передача заголовка. Данная команда используется только в in таблицах (таблицы out всегда передают все заголовки, полученные с другого плеча).
...
| Блок кода |
|---|
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 |
|---|
| Блок кода | ||
|---|---|---|
| ||
INVITE sip:24000@192.168.114.129:5460 SIP/2.0 Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPj-fvzSQlwN2zoMaGUR5JCLMkjmkBV3Vz1 Max-Forwards: 70 From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=l2jkRSMeumV03IdhjPntOt7l0XBKy-Ln To: "24000" <sip:24000@192.168.114.129> Contact: <sip:24001@192.168.114.130:5460;transport=udp> Call-ID: P-W.2oee.2vJw0JoaFbNkRDvnxY40FoP CSeq: 30738 INVITE Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE Supported: timer, 100rel, replaces Session-Expires: 1800 Min-SE: 90 #Добавленный через таблицу модификаторов заголовок: Test_header: example string Content-Type: application/sdp Content-Length: 157 v=0 o=tester 3927594021 3927594021 IN IP4 192.168.114.130 s=A conversation c=IN IP4 192.168.114.130 t=0 0 m=audio 8062 RTP/AVP 8 a=rtpmap:8 PCMA/8000 |
Scroll Pagebreak
Пример использования модификатора удаления заголовка (no-transit)
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Test_header. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, вырезался заголовок Test_header, если в его содержимом есть "example string".
...
| Блок кода | ||
|---|---|---|
| ||
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 и ОС, на которой он разворачивается, предоставляет единый интерфейс взаимодействия с системой и реализует мониторинг различных системных событий
Есть возможность разбивать скобками шаблон value-pattern на группы (максимум 9 групп). И оперировать ими в replacement с помощью цифр, экранированных обратной чертой ('\1-9'). '\0' - весь текст.
Пример (схема та же):
| Блок кода | ||
|---|---|---|
| ||
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 |
|---|
| Блок кода |
|---|
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 с измененным заголовком:
| Блок кода | ||
|---|---|---|
| ||
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:
| Блок кода | ||
|---|---|---|
| ||
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 системы. |
Пример:
| Блок кода | ||
|---|---|---|
| ||
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-интерфейс по умолчанию отключен. Для активации выполните действия, описанные ниже.
- Активируйте 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>. При успешном обнаружении контроллера в окне браузера отобразится страница авторизации.
5. Введите имя пользователя и пароль в соответствующие поля.
| Подсказка |
|---|
Заводские установки: пользователь — admin, пароль — password |
6. Нажмите кнопку «Войти». В окне браузера откроется страница "Информация об устройстве".
Включение логирования работы модулей E-SBC производится в разделе debug:
...
| language | c# |
|---|
...






