Установка VoIP-proxy сервера FlexiSIP

HELP-ME-24.COM (Freelance Team), Черноусов Антон

Несколько лет назад мы внедряли сервер VOIP-телефонии на базе Flexisip для организации внутренних коммуникаций в службе такси. Сейчас мы возвращаемся к старому проекту и попробуем перезапустить его.


FlexiSIP
- VoIP SIP Proxy сервер производства компании Belledonne Communications. Официальный git-репозиторий расположен по адресу https://github.com/BelledonneCommunications/flexisip.

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

Обратите внимание, что FlexiSIP на данный момент является единственным открытым решением (Open Source) поддерживающим помимо аудио-звонков, видео-звонки с кодеком .h264, передачу файлов и аналог SMS-сообщений.

Схема работы flexisip - прокси сервера voip 

Для сборки FlexiSIP из исходных кодов потребуется установить достаточно большой объем зависимостей:

# apt-get install libtool intltool libavcodec-dev libxml2-dev libreadline-dev libgsm1-dev libtheora-dev \
libsqlite3-dev libsrtp-dev unixodbc-dev libupnp6-dev libantlr3c-dev antlr3 libcunit1-dev \
make build-essential autoconf pkg-config libspeex-dev libspeexdsp-dev libvpx-dev libswscale-dev \
libxv-dev libxcb-glx0-dev x11proto-gl-dev xlibmesa-glu-dev glew-utils libglew-dev \
libglewmx-dev libv4l-dev libv4l-0 libv4lconvert0 libv4l2rds0 libssl-dev

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

Сборка sofia-sip:

# git clone -b bc git://git.linphone.org/sofia-sip.git
# cd sofia-sip/
# ./autogen.sh
# ./configure
# make && make install && ldconfig

BcUnit требуется для сборки BcToolBox:

# git clone https://github.com/BelledonneCommunications/bcunit.git# cd ./bcunit/
# ./autogen.sh
# ./configure
# make && make install && ldconfig

Сборка bctoolbox.

Для сборки потребуется polarssl или mbedtls.

# aptitude install libmbedtls-dev

Конфигурация и сборка проводится аналогично:

# git clone https://github.com/BelledonneCommunications/bctoolbox.git# cd ./bctoolbox/
# ./autogen.sh
# ./configure
# make && make install && ldconfig

Сборка библиотеки oRTP:

# git clone https://github.com/BelledonneCommunications/ortp.git# cd ortp
# ./autogen.sh
# ./configure
# make && make install && ldconfig

Сборка  mediastreamer2:

# git clone https://github.com/BelledonneCommunications/mediastreamer2.git# cd mediastreamer2
# ./autogen.sh
# ./configure
# make && make install && ldconfig

Компилируем кодек openh264:

# git clone https://github.com/cisco/openh264.git -b v1.4.0# cd ./openh264
# aptitude install nasm
# make
# make install

Компилируем плагин  msopenh264:

# git clone git://git.linphone.org/msopenh264.git# ./autogen.sh
# ./configure
# make && make install && ldconfig

Скачиваем и компилируем последнюю GIT-версию Flexisip:

# git clone --recursive https://github.com/BelledonneCommunications/flexisip.git# cd ./flexisip
# ./autogen.sh
# ./configure
# make && make install && ldconfig

Если при сборке получаем ошибку :

ISO C++ forbids converting a string constant to ‘char*’ [-Werror=write-strings]

Необходимо внести правки в исходный код и в файле /log/logmanager.cc измените строки:

filehandler.path = DEFAULT_LOG_DIR;filehandler.name = "FlexisipLogs";

на

filehandler.path = (char *)DEFAULT_LOG_DIR;filehandler.name = (char *)"FlexisipLogs";

Конфигурация находится в файле /usr/local/etc/flexisip/flexisip.conf и минимальный конфигурационный файл имеет следующий формат:

[global]debug=false
aliases=198.16.66.182

[module::Registrar]
enabled=true
reg-domains=198.16.66.182
db-implementation=internal

[module::Authentication]
enabled=true
auth-domains=198.16.66.182
db-implementation=file
datasource=/usr/local/etc/flexisip/users.db.txt

Пользователи записаны в текстовом файле /usr/local/etc/flexisip/users.db.txt в формате:

100@198.16.66.182 9876123
101@198.16.66.182 123214

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

# flexisip

Попробуйте авторизоваться на сервере при помощи клиента LinPhone и провести тестовый звонок. Следующим этапом мы должны собрать FlexiSIP с поддержкой баз данных. В таком режиме мы сможем использовать любые поддерживаемые LinuxODBC базы данных для хранения данных авторизации пользователей.

Собираем FlexiSIP с поддержкой ODBC:

# ./configure --with-redis --with-odbc

Для работы с базой данных MySQL потребуется коннектор. Пакет libmyodbc был удален из последних дистрибутивов и вам потребуется или собрать его из исходных кодов:

Собираем libmyodbc из исходных кодов:

# wget http://archive.ubuntu.com/ubuntu/pool/universe/m/myodbc/myodbc_5.1.10.orig.tar.gz

Ставим недостающие пакеты:

# aptitude install libmysqlclient-dev mysql-client

Собираем:

# libtoolize --force# aclocal
# autoheader
# automake --force-missing --add-missing
# autoconf
# ./configure

Можно использовать бинарный пакет, скачать который вы можете по адресу:

https://dev.mysql.com/downloads/connector/odbc/

Для скачивания потребуется учетная запись Oracle (можно будет выбрать версию). Для Ubuntu версии 16.04 вы может использовать прямую ссылку на загрузку:

# wget https://dev.mysql.com/get/Downloads/Connector-ODBC/5.3/mysql-connector-odbc-5.3.7-linux-ubuntu16.04-x86-64bit.tar.gz

После распаковки копируем драйвера из каталога lib в  /usr/lib/x86_64-linux-gnu/odbc/, так как в flexisip используются источники данных odbc необходимо создать системный источник данных в файле /etc/odbc.ini

[flexisip]Description           = MySQL connection to 'flexisip' database
Driver                = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc5a.so
Database              = asterisk
Server                = 192.168.137.149
UserName              = flexisip
Port                  = 3306
Password              = flexisip12345

Обратите внимание, что имя драйвера должно быть именно libmyodbc5a.so, после создания системного источника данных проверяем работу при помощи команды:

# isql -v flexisip flexisip xxxPASSWORDxxx

Если все прошло нормально, то мы модифицируем блок [module::Authentication] в конфигурационном файле flexisip для интеграции с FreePBX:

[module::Authentication]enabled=true
auth-domains=192.168.137.148
db-implementation=odbc
datasource=DSN=flexisip; USER=flexisip;PASSWORD=flexisip12345;
nonce-expires=3600
cache-expire=1800
hashed-passwords=false
no-403=false
trusted-client-certificates=
new-auth-on-407=false
enable-test-accounts-creation=false
disable-qop-auth=false
request=SELECT `data` FROM sip WHERE keyword='secret' AND id=:id;
odbc-pooling=false
odbc-display-timings-interval=0
odbc-display-timings-after-count=0

Для хранения сведений о регистрациях пользователей необходимо использовать встроенную поддержку базы данных Redis. Для сборки FlexiSIP с поддержкой Redis установите следующие зависимости:

# aptitude install libprotobuf-dev
# aptitude install libprotoc-dev
# apt install protobuf-compiler

Так же скачайте пакет xsd:

# wget http://www.codesynthesis.com/download/xsd/4.0/linux-gnu/x86_64/xsd-4.0.0-x86_64-linux-gnu.tar.bz2

Пересобираем FlexiSIP с поддержкой redis и protobuf:

# ./autogen.sh# ./configure --with-redis --with-odbc --enable-protobuf --with-xsd=/opt/xsd/bin/

Добавьте к конфигурации блок поддержки redis:

[module::Registrar]enabled=true
reg-domains=192.168.137.148
#db-implementation=internal
db-implementation=redis-asinc
redis-server-domain=127.0.0.1
redis-server-port=6379
redis-record-serializer=protobuf

Теперь надо проверить пишет ли FlexiSIP он в базу редиса:

# redis-cli keys "*"

Если завпрос вывел значения:

1) "aor:101@192.168.137.148"

Значит все работает.

 

Оставьте комментарий

Вы должны быть вошедший в чтобы отправить комментарий