Я тут решил оформить задуманное как серия заметок посвященных связке Ubuntu 18.04 Server + Asterisk + поддержка pjsip. Которая будет работать дома под Proxmox на HP MicroServer Gen8 и осуществлять внутреннюю работу между мои домом и сервисами в нем. Короче я хочу чтобы при звонке на определенных номер через IVR меню с авторизацией по PIN-коду будет включаться мои стенды, видеонаблюдения, голосовое упреждение, работать служба точного времени и все производное. Свою задумку я пока оформить в серию нескольких шагов.

  • Шаг №1: Разобрать как установить Asterisk 16 + модуль pjsip
  • Шаг №2: Разобрать как подключать/настраивать Phone к Asterisk
  • Шаг №3: Подключиться к номеру купленному от Zadarma
  • Шаг №4: Сделать план обработки звонков на международное направление, городское и мобильное
  • Шаг №5: Сделать план обработки звонков на получение точного времени
  • Шаг №6: Сделать план обработки звонков на IVR меню
  • Шаг №7: Сделать план обработки звонков, если набираю 1 после pin код то выполняется моя команда (все затевается ради этого, мне нужно чтобы я мог через свою телефонию взаимодействовать с окружением дома) Плюс – это хороший практический опыт, т.к. делаю свой проект.
  • Шаг №8: Настроить Fail2ban + безопасность
  • Шаг №9: Настроить логирование входящих и исходящих звонков

Собирать установку Asterisk 16 буду из исходников не репозитарии, хотя думается можно поставить из PPA-репозитария.

Все установки сводятся к единой инсталляции в порядке:

DAHDI, LibPRI, libSTRP, Jansson

На заметку: Последовательность установки:

  • DAHDI
  • LibPRI
  • Asterisk

Этап №1: Обновляю систему до самого последнего состояния в рамках текущего релиза: Ubuntu 18.04 Server amd64:

ekzorchik@srv-bionic:~$ hg clone --insecure https://ekzorchik@172.40.40.8/hg/dproject

ekzorchik@srv-bionic:~$ sudo ./dproject/default

Этап №2: Устанавливаю зависимости для сборки Asterisk из исходников:

ekzorchik@srv-bionic:~$ sudo apt-get install -y build-essential wget libssl-dev libncurses5-dev libnewt-dev libxml2-dev linux-headers-$(uname -r) libsqlite3-dev uuid-dev

Этап №3: Устанавливаю DAHDI, LibPRI, libSTRP, Jansson

ekzorchik@srv-bionic:~$ wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz

ekzorchik@srv-bionic:~$ tar zxf dahdi-linux-complete-current.tar.gz

ekzorchik@srv-bionic:~$ cd dahdi-linux-complete-*/

ekzorchik@srv-bionic:~/dahdi-linux-complete-3.0.0+3.0.0$ sudo make all

ekzorchik@srv-bionic:~/dahdi-linux-complete-3.0.0+3.0.0$ sudo make install

ekzorchik@srv-bionic:~/dahdi-linux-complete-3.0.0+3.0.0$ cd ~/

ekzorchik@srv-bionic:~$ wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz

ekzorchik@srv-bionic:~$ tar zxf libpri-current.tar.gz

ekzorchik@srv-bionic:~$ cd libpri-*/

ekzorchik@srv-bionic:~/libpri-1.6.0$ sudo make -j$((`nproc`+1))

ekzorchik@srv-bionic:~/libpri-1.6.0$ sudo make install

ekzorchik@srv-bionic:~/libpri-1.6.0$ cd ~/

ekzorchik@srv-bionic:~$ wget https://github.com/cisco/libsrtp/archive/master.zip

ekzorchik@srv-bionic:~$ unzip master.zip

ekzorchik@srv-bionic:~$ cd libsrtp-master/

ekzorchik@srv-bionic:~/libsrtp-master$ ./configure

ekzorchik@srv-bionic:~/libsrtp-master$ sudo make -j$((`nproc`+1))

ekzorchik@srv-bionic:~/libsrtp-master$ sudo make runtest

ekzorchik@srv-bionic:~/libsrtp-master$ sudo make install

ekzorchik@srv-bionic:~/libsrtp-master$ cd ~/

ekzorchik@srv-bionic:~$ wget http://www.digip.org/jansson/releases/jansson-2.12.tar.gz

ekzorchik@srv-bionic:~$ tar zxf jansson-2.12.tar.gz

ekzorchik@srv-bionic:~$ cd jansson-*/

ekzorchik@srv-bionic:~/jansson-2.12$ ./configure

ekzorchik@srv-bionic:~/jansson-2.12$ sudo make -j$((`nproc`+1))

ekzorchik@srv-bionic:~/jansson-2.12$ sudo make install

ekzorchik@srv-bionic:~/jansson-2.12$ cd ~/

Этап №4: Теперь собираю Asterisk 16 из исходников

ekzorchik@srv-bionic:~$ cd /usr/src

ekzorchik@srv-bionic:/usr/src$ sudo wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz

ekzorchik@srv-bionic:/usr/src$ sudo tar zxf asterisk-16-current.tar.gz

ekzorchik@srv-bionic:/usr/src$ sudo ./asterisk-*/contrib/scripts/install_prereq install

Do you want to continue? [Y/n] Y

ITU-T telephone code:7

Установку продолжать с поддержкой pjproject + mysqlclient + mp3: (Если нужно будет что-то еще то можно перекомпилировать и установить все по новой, только забекапить настройки)

ekzorchik@srv-bionic:/usr/src$ cd asterisk-*/

Узнаем доступные опции ./configure --help

ekzorchik@srv-bionic:/usr/src/asterisk-16.5.1$ sudo ./configure --help

А после переходим к своему выбору конфигурирования:

ekzorchik@srv-bionic:/usr/src/asterisk-16.5.1$ sudo ./configure --with-pjproject --with-mysqlclient

ekzorchik@srv-bionic:/usr/src/asterisk-16.5.1$ sudo make menuselect

Отмечаю необходимые мне модули:

  • Add-ons: отмечаю клавишей ENTER: format_mp3, res_config_mysql, app_mysql,cdr_mysql
  • Call Detail Recording: снимаю отметку с cdr_radius, cdr_pgsql
  • Channel Event Logging: снимаю отметку с cel_pgsql, cel_radius
  • Core Sound Packages: отмечаю CORE-SOUNDS-EN-WAV,CORE-SOUNDS-EN-ULAW,CORE-SOUND-EN-ALAW,CORE-SOUNDS-RU-WAV,CORE-SOUNDS-RU-ULAW,CORE-SOUNDS-RU-ALAW,CORE-SOUNDS-RU-GSM
  • Music On Hold File Packages: MOH-OPSOUND-WAV,MOH-OPSOUND-ULAW,MOH-OPSOUND-ALAW,MOH-OPSOUND-GSM
  • Extras Sound Packages: отмечаю EXTRA-SOUNDS-EN-WAV, EXTRA-SOUNDS-EN-ULAW,EXTRA-SOUNDS-EN-ALAW, EXTRA-SOUNDS-EN-GSM

После нажимаю Save & Exit

ekzorchik@srv-bionic:/usr/src/asterisk-16.5.1$ sudo make -j$((`nproc`+1))

ekzorchik@srv-bionic:/usr/src/asterisk-16.5.1$ sudo make install

ekzorchik@srv-bionic:/usr/src/asterisk-16.5.1$ sudo make samples

ekzorchik@srv-bionic:/usr/src/asterisk-16.5.1$ sudo make config

ekzorchik@srv-bionic:/usr/src/asterisk-16.5.1$ sudo ldconfig

ekzorchik@srv-bionic:/usr/src/asterisk-16.5.1$ cd ~/

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

ekzorchik@srv-bionic:~$ sudo groupadd asterisk

ekzorchik@srv-bionic:~$ sudo useradd -d /var/lib/asterisk -g asterisk asterisk

ekzorchik@srv-bionic:~$ sudo sed -i 's/#AST_USER="asterisk"/AST_USER="asterisk"/g' /etc/default/asterisk

ekzorchik@srv-bionic:~$ sudo sed -i 's/#AST_GROUP="asterisk"/AST_GROUP="asterisk"/g' /etc/default/asterisk

ekzorchik@srv-bionic:~$ sudo sed -i 's/;runuser = asterisk/runuser = asterisk/g' /etc/asterisk/asterisk.conf

ekzorchik@srv-bionic:~$ sudo sed -i 's/;rungroup = asterisk/rungroup = asterisk/g' /etc/asterisk/asterisk.conf

ekzorchik@srv-bionic:~$ sudo chown -R asterisk:asterisk /var/spool/asterisk /var/run/asterisk /etc/asterisk /var/{lib,log,spool}/asterisk /usr/lib/asterisk

ekzorchik@srv-bionic:~$ sudo systemctl restart asterisk

ekzorchik@srv-bionic:~$ sudo asterisk -rv

Asterisk 16.5.1, Copyright (C) 1999 - 2018, Digium, Inc. and others.

Created by Mark Spencer <markster@digium.com>

Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.

This is free software, with components licensed under the GNU General Public

License version 2 and other licenses; you are welcome to redistribute it under

certain conditions. Type 'core show license' for details.

=========================================================================

Running as user 'asterisk'

Running under group 'asterisk'

Connected to Asterisk 16.5.1 currently running on srv-bionic (pid = 3172)

srv-bionic*CLI> quit

Asterisk cleanly ending (0).

Executing last minute cleanups

ekzorchik@srv-bionic:~$

Теперь нужно проверить, а работает ли Asterisk с поддержкой pjsip:

ekzorchik@srv-bionic:~$ sudo find / -name *pjsip.so

/usr/src/asterisk-16.5.1/channels/chan_pjsip.so

/usr/src/asterisk-16.5.1/res/res_hep_pjsip.so

/usr/src/asterisk-16.5.1/res/res_pjsip.so

/usr/lib/asterisk/modules/chan_pjsip.so

/usr/lib/asterisk/modules/res_hep_pjsip.so

/usr/lib/asterisk/modules/res_pjsip.so

ekzorchik@srv-bionic:~$ sudo find /usr/src/asterisk-16*/* -name *.so | grep pjsip

из многообразия вывода модуль именуется, как chan_pjsip.so

ekzorchik@srv-bionic:~$ sudo nano /etc/asterisk/modules.conf

[modules]

autoload=yes

и т.д.

ekzorchik@srv-bionic:~$ sudo asterisk -rx "module show like chan_pjsip"

Module Description Use Count Status Support Level

chan_pjsip.so PJSIP Channel Driver 0 Running core

1 modules loaded

ekzorchik@srv-bionic:~$

ekzorchik@srv-bionic:~$ sudo asterisk -rx "module show like res_pjsip.so"

Module Description Use Count Status Support Level

res_pjsip.so Basic SIP resource 45 Running core

1 modules loaded

из вывода видно, что модуль подгружен.

Итого я для себя составил пошаговую инструкцию как установить Asterisk 16 на Ubuntu 18.04 Server amd64 + добавил поддержку pjsip. На этом я прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.