Иван Башлаков
03.08.2020
7462

Обзор и установка SIP-сервера FlexiSIP

Flexisip server является продуктом компании Belledonne Communications, известной своими открытыми проектами для VoIP-телефонии. Flexisip представляет собой решение, позволяющее развернуть полноценный SIP-сервер, обладающей простотой управления, конфигурирования, масштабирования и достаточной гибкостью для адаптации под различные задачи на слабом железе. Сервер Flexisip помимо основных возможностей SIP-телефонии может быть использован в качестве SIP-прокси сервера, сервера Push-уведомлений (для использования с […]

SIP-сервер FlexiSIP

Flexisip server является продуктом компании Belledonne Communications, известной своими открытыми проектами для VoIP-телефонии. Flexisip представляет собой решение, позволяющее развернуть полноценный SIP-сервер, обладающей простотой управления, конфигурирования, масштабирования и достаточной гибкостью для адаптации под различные задачи на слабом железе. Сервер Flexisip помимо основных возможностей SIP-телефонии может быть использован в качестве SIP-прокси сервера, сервера Push-уведомлений (для использования с мобильными устройствами), а так же как облачная платформа для взаимодействия SIP-устройств.

Перечень достоинств

Проект Flexisip написан на С++ и успешно используется в качестве SIP-сервера в проекте Linphone c 2011 года. Благодаря своей легковесности и лояльности к аппаратным ресурсам Листинг конфигурации Flexisip может быть развернут на встроенных системах, небольших аппаратных модулях, виртуальных и облачных платформах. Помимо небольших платформ, Flexisip поддерживает возможность кластеризации (используется бекенд Redis для синхронизации нод) и множественного масштабирования. Таким образом, Flexisip представляет собой весьма гибкий и универсальный продукт для различного рода задач.

Перечислим достоинства системы Flexisip:

  • легковесность и нетребовательность к аппаратным ресурсам;
  • простота установки и конфигурирования;
  • модульность, возможность размещения модулей на различных физических серверах;
  • возможность использования в качестве сервера push-уведомлений;
  • аутентификация абонентов по хеш-сумме или TLS-сертификатам;
  • возможность кластеризации и масштабирования встроенными средствами.

Структура сервера Flexisip

Flexisip разработан на основе концепции модулей, отвечающих за определенную функцию приложения: аутентификацию, регистрацию, медиа-ретрансляцию, маршрутизацию и т.д. Все запросы и ответы проходят через цепочку модулей для обработки. Модули выполняются на трех отдельных бекендах, объеденных в АТС Flexisip: сервер присутствия, сервер конференций и SIP-прокси сервер.Обработка базовой сигнализаций SIP в системе Flexisip, основана на использовании открытой библиотеки Sofia-SIP.

 В список модулей входят следующие компоненты:

  • Authentication — модуль аутентификации и авторизации SIP-абонентов с помощью SIP-имени либо с использованием сертификата TLS;
  • DoSProtection -модуль обеспечения безопасности, ограничивает максимальное количество запросов от абонента;
  • Forward — модуль маршрутизации вызовов;
  • GarbageIn — модуль сборки мусора и предотвращения его дальнейшей обработки;
  • MediaRelay — модуль маршрутизации RTP-трафика, включает в себя средства обработки NAT. Обеспечивает гарантированную доставку RTP-пакетов получателю;
  • NatHelper — модуль, обеспечивающий прохождение SIP-трафика через NAT;
  • Presence — модуль, обеспечивающий публикацию, уведомления и подписку на сервере присутствия;
  • PushNotification — модуль пересылки и обработки push-уведомлений для взаимодействия с софтфонами на устройствах ios/android;
  • Redirect — модуль перенаправления запросов;
  • Registrar — модуль регистрации и разрешения запросов маршрутизации;
  • Router — модуль обработки запросов маршрутизации и их выполнения;
  • SanityChecker — модуль проверки корректности SIP-запросов;
  • StatisticsCollector — модуль сбора и обработки статистики;
  • Transcoder — модуль транскодирования голосовых данных.
Структура системы Flexisip

SIP-proxy сервер

SIP-прокси сервер в инфраструктуре Flexisip является инструментом для сбора различной информации об абонентах и передачи ее на последующие уровни обработки (серверу присутствия и серверу конференций). Он является проксирующим SIP-сервером с сохранением состояний абонентов. Основная задача SIP-прокси —  аутентификация абонентов, обеспечение безопасности на уровне SIP, проверке целостности запросов, проверка активности сессий.

Сервер присутствия

Одним из компонентов системы Flexisip является сервер присутствия (Flexisip Presence). Общее поведение этого сервера довольно простое: он обрабатывает запросы от абонентов, которые хотят получать информацию о присутствии для отдельного URI контакта или списка URI-адресов. Сервер присутствия опрашивает целевые URI, для которых запрашивается информация и и генерирует запрос SIP NOTIFY, содержащим информацию о присутствии искомого URI.

Информация о присутствии может быть получена из двух разных источников:

  • Из запросов, которые напрямую публикуются всеми абонентами. Абоненты опубликовывают информацию о своем присутствии на регулярной основе. Полученная таким образом информация о присутствии называется «краткосрочным присутствием».
  • Из базы данных аутентификации Flexisip. Поскольку эта база данных содержит список активных пользователей SIP, она позволяет распространять клиентам информацию о других пользователях в долгосрочной перспективе. Независимо от того, активно ли пользователи используют свое приложение SIP, это дает полезную информацию об их достижимости. Эта информация о присутствии называется «долгосрочным присутствием».

Прежде чем SIP SUBSCRIBE достигает сервера присутствия, он проходит через SIP-прокси, который может аутентифицировать или отклонить запрос. Однако, чтобы обеспечить защиту конфиденциальности пользователей, сервер присутствия ограничивает распространение информации о присутствии пользователям, которые подписаны друг на друга.

Рассмотрим конкретный пример:

  1. A подписывается на присутствие B, но B не подписывается на присутствие A. Тогда A не получит никакой информации о присутствии B.
  2. B решает подписаться на информацию о присутствии для A. A и B теперь взаимно подписываются на присутствие друг друга, и сервер присутствия уведомляет о присутствии B о A, а также о присутствии A B.

Это правило работает как для долгосрочного, так и для краткосрочного присутствия.

Сервер конференций

Сервер конференций Flexisip работает как пользовательский агент SIP для создания и обработки конференций. В настоящее время он поддерживает только IM-конференции (текстовый групповой чат). Тем не менее, поскольку создание и управление конференциями в рамках SIP не зависит от передаваемого по RTP медиа-потока, разработчиками Flexisip планируется расширить его для поддержки всех видов конференций, включая аудио, видео, текст, независимо или совместно.

С системной точки зрения сервер конференций работает как демон в своем собственном процессе и, не влияет на другие бэкенды Flexisip. Его можно запустить, остановить, перезапустить, используя обычные команды systemd, например:

systemctl status flexisip-conference

Запуск сервера осуществляется командой:

/opt/belledonne-communication/bin/flexisip --server conference --debug

Конфигурация сервера конференции по умолчанию хранится в файле /etc/flexisip/flexisip.conf, в разделе [conference-server].

Серверу конференций требуется постоянная связь с базой данных сервера присутствия Flexisip. Это необходимо для реализации следующих механизмов:

  • создание новых конференций и разрешение маршрутизации по URI-адресам внутри конференций;
  • отслеживание активных абонентов в уже созданных конференциях и создание динамической SIP-маршрутизации.

Поскольку IM-конференции (групповые чаты) могут длиться годами, требуется постоянное хранилище для хранения состояния конференций (участники, устройства, URI конференций). Этим хранилищем выступает база данных сервера присутствия.

Сервер Push-уведомлений

Сервер Push-уведомлений (push-шлюз) это дополнительная надстройка над SIP-прокси сервером, которая отвечает за маршрутизацию INVITE-запросов заинтересованным абонентам и рассылает им push-уведомления о входящих звонках. Абонентами сервера push-уведомлений являются мобильные клиенты (софтфоны, установленные на мобильные устройства), для которых push-уведомления являются механизмом перевода устройства из режима экономии батареи в активный режим. В работу данного сервера не входит аутентификация пользователей, этой задачей занимается непосредственно сам SIP-прокси.

Каждый мобильный пользовательский агент использует push-шлюз в качестве прокси для запросов REGISTER. Заголовок запроса содержит URI-адрес, используемый для соединения с абонентом, плюс несколько параметров, содержащих информацию, необходимую для того, чтобы отправить push-уведомление мобильному устройству.

Как только запрос REGISTER поступает в push-шлюз, он пересылается на SIP-прокси сервер путем разрешения доменного имени URI запроса. Перед пересылкой push-шлюз заменяет домен контактного URI своим собственным IP-адресом и заменяет все параметры URI уникальным параметром CtRt <random_key>, содержащим имя домена, в котором расположен сервер. Случайный ключ генерируется при запуске Flexisip и не изменяется в течение установленной сессии между push-шлюзом и sip-прокси. В этот момент оригинальный URI абонента сохраняется в кеше, пока sip-прокси сервер не отправит ответ на запрос REGISTER.

Затем sip-прокси получает запрос REGISTER, поступающий от push-шлюза. Он выполняет регистрацию, связывая идентификатор SIP  с маскируемым URI абонента. Таким образом, когда sip-прокси получает запросы INVITE, адресованные этому идентификатору SIP, он перенаправляет их на push-шлюз.

Как только регистрация завершена, sip-прокси отправит ответ “200 OK” на push-шлюз. При получении этого ответа push-шлюз обновляет свою базу данных регистрации, связывая идентификатор SIP абонента с URI контакта с информацией push-уведомления, которую он сохранил ранее. Затем он передает ответ “200 OK” пользовательскому агенту, чтобы уведомить его об успешной регистрации.

Схема работы сервера push-уведомлений

Режим push-шлюза flexisip работает при условии, что внутренний SIP-сервер удовлетворяет некоторым требованиям:

  • Внутренний SIP-сервер должен записывать адрес контакта SIP URI, установленный клиентом, в REGISTER, как есть, без удаления параметров. Тем не менее, IP-адрес и порт могут быть изменены, чтобы исправить проблемы NAT.
    Например, если клиент отправляет регистрацию с адресом: <sip: mobile@sip.example.org; someparameter = somevalue>; expires = 3600 , SIP-прокси должен направлять запросы этому клиенту с целевым URI. быть sip: mobile@sip.example.org; someparameter = somevalue ; не просто sip: mobile@sip.example.org или, что еще хуже, sip: sip.example.org .
  • Желательно (но не обязательно), если внутренний SIP-сервер поддерживает заголовок Path, как определено в RFC3327.

Установка сервера Flexisip

Установка сервера Flexisip возможна двумя методами: сборка из исходных кодов, либо через менеджер пакетов, подключая дополнительные репозитории. Рассмотрим оба метода:

Установка из репозиториев. Для Centos 7 подключаем репозиторий epel-release:

yum -y install epel-release

затем добавляем конфигурацию репозитория Belledonne Communications в файл /etc/yum.repos.d/BelledonneCom.repo

[Belledonne-stable]
name=Belledonne-stable
baseurl=http://www.linphone.org/snapshots/centos/$releasever/stable
enabled=1
gpgcheck=0

Обновляем список пакетов:

yum update

Производим установку:

yum install bc-flexisip

Сборка из исходных кодов. Для успешной установки сервера Flexisip необходимо наличие в системе следующих зависимостей:

  • sofia-sip
(git clone -b bc git://git.linphone.org/sofia-sip.git
 ./autogen.sh
 ./configure
 make && make install && ldconfig)
  • ortp
  • bctoolbox
  • hiredis (опционально)

Произведем установку зависимостей:

После установки зависимостей копируем исходники из git:

git clone https://gitlab.linphone.org/BC/public/flexisip

Производим компиляцию исходных кодов:

cmake . -DCMAKE_INSTALL_PREFIX=/opt/belledonne-communications -DSYSCONF_INSTALL_DIR=/etc

Производим сборку:

make

Устанавливаем:

make install

После установки сервера выполним его первичную конфигурацию:

/opt/belledonne-communications/bin/flexisip --dump-default all > /etc/flexisip/flexisip.conf

Запуск сервера: по-умолчанию, установка Flexisip происходит в каталоге /opt/belledonne-communications/bin/flexisip. Запуск его без каких-либо аргументов заставит Flexisip вести себя как SIP-прокси, но он может предоставлять другие виды услуг. Их запуск осуществляется из командной строки передачей параметра —server, который принимает три значения:

  • proxy: запуск Flexisip в качестве SIP-прокси (поведение по умолчанию).
  • presence: запустить Flexisip в качестве сервера присутствия.
  • conference: запустить Flexisip в качестве сервера конференции (групповой чат).
systemctl start flexisip-proxy flexisip-”параметр”

Например:

systemctl start flexisip-proxy flexisip-presence

Конфигурация сервера Flexisip

Система Flexisip настраивается с помощью конфигурационных файлов, на сегодняшний день никаких графических средств для этой цели не создано. По-умолчанию, основным файлом конфигурации сервера Flexisip является /etc/flexisip/flexisip.conf. Он содержит разделы для конфигурирования всей системы в целом (секция [global]), сервера присутствия ([presence-server]), сервера конференций ([conference-server]). Настройки SIP-прокси сервера также находятся в секции [global]. Все разделы, название которых начинается с module : являются разделами конфигурации для каждого модуля прокси. Модули — это функции, которые могут быть независимо включены или отключены в соответствии с вашими потребностями. По умолчанию прокси-сервер ведет себя как простой сервер пересылки SIP-сообщений. Каждый модуль можно включить или отключить, установив параметр enable в данном разделе модуля.

Файл конфигурации /etc/flexisip/flexisip.conf

Интерфейсы и порт, который прослушивает Flexisip, задаются в разделе [global] для прокси-сервера и в разделах, специфичных для других серверов.

Модуль [module :: Authentication] используется для настройки параметров аутентификации. Здесь можно разграничить подключения из разных доменов, настроить проверку подлинности пользователя по хеш-сумме либо TLS-сертификатам, также указать путь к базе данных абонентов.

База данных аутентификации пользователей

Сервер Flexisip также позволяет производить конфигурирование в режиме реального времени. Для этого используется вспомогательный скрипт /opt/belledonne-communications/bin/flexisip_cli.py. Он может принимать следующие параметры:

  • REGISTRAR_CLEAR — сбросить все активные sip-подключения от абонентов;
  • CONFIG_SET — применить конфигурацию;
  • CONFIG_LIST — вывести конфигурацию на экран;
  • CONFIG_GET — прочитать конфигурацию из файла.
Листинг конфигурации Flexisip
Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments

Остались вопросы?

Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

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

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.