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

    Общий рейтинг статьи: 5 (проголосовало 1 )
    Опубликовано:  [просмотров 1179]


    Несколько лет назад мы внедряли сервер 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"

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

     


    Обсуждение статьи

    Ваш комментарий: