Установка и базовая настройка сервера Asterisk на Ubuntu
Инструкция позволит быстро познакомиться с сервером Asterisk, выполнив базовые действия по установке и настройке сервера. Нижеописанные действия протестированы на Ubuntu 16.04 и Asterisk 15.
Подготовка сервера
Актуализируем список пакетов:
Установка
Установку можно выполнить с помощью команды apt install asterisk. Но в данной инструкции мы разберем установку путем сборки из исходников.
Рекомендуется установить Asterisk с DAHDI (драйверы плат интерфейсов телефонии) и LibPRI (библиотека для работы с потоковыми TDM-интерфейсами). Сначала необходимо собрать DAHDI, затем LibPRI и только потом — Asterisk.
Устанавливаем пакеты, необходимые для корректной сборки DAHDI и LibPRI:
Сборка DAHDI
Распаковываем его и переходим в распакованный каталог:
tar -xvf dahdi-linux-complete-current.tar.gz
Собираем пакет и устанавливаем его:
Выходим из каталога dahdi:
Сборка LibPRI
tar -xvf libpri-current.tar.gz
Выходим из каталога libpri:
Установка Asterisk
Переходим по ссылке https://downloads.asterisk.org/pub/telephony/asterisk и копируем ссылку на последнюю версию asterisk. Используя ссылку, скачиваем исходник:
* в моем случае, последняя версия была 15.
Распаковываем архив и переходим в папку, появившуюся после распаковки:
Устанавливаем библиотеки для работы с mp3:
./configure —prefix=/usr —sysconfdir=/etc —localstatedir=/var —libdir=/usr/lib64 —with-dahdi —with-pri —with-iconv —with-libcurl —with-speex
- —with-dahdi — с драйверами DAHDI.
- —with-pri — с библиотекой PRI.
- —with-iconv — с возможностью конвертации кодировок (будет не лишним для поддержки русских символов).
- —with-libcurl — возможность извлекать данные посредством CURL-запросов (по http).
- —with-speex — дополнительный VBR-кодек (используется на многих софт-фонах).
** список всех доступных опций можно посмотреть командой ./configure -h.
Мы должны увидеть логотип астериска:
Вызываем оконное меню настройки модулей:
Для большинства случаев, настройки можно оставить по умолчанию. В противном случае рекомендуется изучить опции и выбрать необходимые. После нажимаем Save & Exit.
Установим примеры конфигурационных файлов и документацию:
Устанавливаем скрипт инициализации (для автозапуска):
Устанавливаем скрипты для отсекания логов:
Создаем конфигурационный файл для указания дополнительного пути с библиотеками:
Добавляем в него одну строчку:
* это путь до каталога с библиотеками, с которым мы собирали asterisk (опция —libdir).
Настройка и запуск
Открываем конфигурационный файл:
runuser = asterisk
rungroup = asterisk
defaultlanguage = ru
documentation_language = ru_RU
Создаем системную учетную запись asterisk:
chown -R asterisk:asterisk /var/run/asterisk
chown -R asterisk:asterisk /etc/asterisk
chown -R asterisk:asterisk /var/
chown -R asterisk:asterisk /usr/lib64/asterisk
chown -R asterisk:asterisk /var/log/asterisk
Исправляем ошибки и предупреждения. В моем случае были следующие.
Ошибки запуска
No configured users for ARI. ARI предоставляет API для Asterisk REST Interface. В данном примере, отключаем поддержку:
Name or service not known. Если появится такая ошибка, система не может разрешить имя компьютера в IP-адрес. Необходимо правильно настроить DNS или прописать имя компьютера в файл /etc/hosts.
No directory URL or host found. Модуль для работы lpad неправильно настроен или не настроен.
PostgreSQL RealTime: Failed to connect database asterisk on 127.0.0.1. Модуль для работы с СУБД PostgreSQL.
Failed to open /dev/dahdi/transcode: No such file or directory. Ошибку можно увидеть, если нет оборудования DAHDI.
Вышеописанные ошибки возникают из-за включенных, но не используемых модулей. Отключаем:
noload => res_config_ldap.so
noload => res_config_pgsql.so
noload => codec_dahdi.so
Предупреждения при запуске
- Unable to find a valid server address or name.
- Process_dahdi: Ignoring any changes to .
- CEL pgsql config file missing global section.
- Cel_tds module had config problems; declining load.
Отключаем следующие модули:
noload => res_phoneprov.so
noload => app_dahdiras.so
noload => chan_dahdi.so
noload => res_pjsip_phoneprov_provider.so
noload => cel_pgsql.so
noload => cel_tds.so
Список всех загружаемых модулей можно посмотреть командой:
ls -la /usr/lib64/asterisk/modules/
Разрешаем сервис asterisk и запускаем его:
systemctl enable asterisk
Заведение первых номеров
Для первой настройки достаточно завести 2 номера с возможностью подключения по SIP.
Создаем правило обработки вызова (контекст). Открываем следующий файл:
И добавляем в него следующее:
[outcaling]exten => _XXXX,1,Dial(SIP/$
* создаем контекст с именем outcaling для четырехзначных номеров (XXXX) с вызовом по SIP по внутреннему номеру.
Открываем следующие конфигурационный файл:
И добавляем в него два внутренних номера (extensions):
[1001]type=friend
regexten=1001
secret=1234
context=outcaling
host=dynamic
caller
disallow=all
allow=alaw
allow=ulaw
language=ru
callgroup=1
pickupgroup=1
qualify=yes
canreinvite=yes
call-limit=4
nat=no [1002]
type=friend
regexten=1002
secret=1234
context=outcaling
host=dynamic
caller
disallow=all
allow=alaw
allow=ulaw
language=ru
callgroup=1
pickupgroup=1
qualify=yes
canreinvite=yes
call-limit=4
nat=no
- [1001], [1002] — имена для обозначения номеров.
- type — типы проверки номеров. Могут быть peer, user или friend. Peer — вызовы сопоставляются с IP-адресами и номерами портов. User — проверка username. Friend — включает возможности peer и user (проверка username и IP-адреса источника) и лучше всего подходит для телефонов и телефонных программ.
- regexten — добавочный номер. Если не задан, используется имя.
- secret — пароль для аутентификации.
- context — контекст или группа правил.
- host — IP-адрес или имя клиента. Для автоматической регистрации используем dynamic.
- callerid — идентификатор пользователя при звонке.
- disallow — запрещает кодеки (задается перед параметром allow).
- allow — разрешает кодеки. alaw и ulaw — алгоритмы для кодеков g711.
- language — код используемого языка.
- callgroup — задает группу устройства (для возможности перехвата).
- pickupgroup — задает перечень групп, которые можно перехватывать.
- qualify — включает или отключает периодическую проверку подключенного клиента.
- canreinvite — включает или отключает прохождение голосового RTP трафика через Asterisk. Устанавливать, только если клиент поддерживает функцию SIP re-invites.
- call-limit — ограничение количества одновременных вызовов.
- nat — устанавливается в yes, если клиент находиться за NAT.
systemctl restart asterisk
Проверка
Все, что происходит в Asterisk можно посмотреть в лог-файле командой:
tail -f /var/log/asterisk/messages
Для теста настроенного сервера можно воспользоваться IP-телефоном или софт-фоном на компьютере или телефоне. Например, а качестве SIP-клиента под Windows можно установить бесплатную программу X-Lite, для Android — Zoiper.
Настраиваем первый клиент для подключения с логином и паролем 1001 / 1234, второй — 1002 / 1234. Пробуем позвонить.
Установка Asterisk 16 на Debian 10 (под ключ)
В этой статье мы рассмотрим установку Asterisk 16 LTS в Debian 10 / Ubuntu 18 под ключ. Что это значит? Это значит, что мы выполним следующее:
- Настройку ОС Debian 10.
- Установку всех необходимых компонентов и приложений.
- Установку средств администрирования Linux.
- Установку БД MariaDB.
- Установку Asterisk 16 LTS.
- Настройку Asterisk 16 LTS.
- Подключим Asterisk 16 через драйвер unixODBC к MariaDB.
- Выполним настройку безопасности Asterisk !
Данная инструкция позволит Вам выполнить установку Asterisk и настроить ее под свои бизнес-задачи – останется только настроить маршрутизацию и создать SIP-аккаунты.
Введение
Asterisk – это полная АТС с открытым исходным кодом, имеющая функции большинства коммерческих систем УАТС. Asterisk поддерживает конференц-связь, все виды переадресаций, парковку вызовов, очереди вызовов и многие другие функции.
Мы будем производить установку без дополнительных отступлений, комментариев почему мы делаем так, а не иначе, так как мы рассчитываем на знание среды Linux. Ранее мы уже рассматривали установку Asterisk на различные операционные системы, но за это время вышло множество обновлений, поэтому мы решили обновить знания по установке Asterisk.
Исходные данные
- Физический сервер с ОС Debian 10.
- VoIP-шлюзы и IP-телефоны в локальной сети.
- Voice VLAN = 192.168.0.0/16, 172.16.0.0/16.
- Asterisk 16 LTS (*CLI).
- LAMP (Linux Apache2 + MariaDB 10.3 + PHP 7.3 + PhpMyAdmin).
- IPtables
- IPset
Подготовка системы
Исправим файл /etc/apt/sources.list
deb http://ftp.debian.org/debian/ buster main contrib non-free
deb-src http://ftp.debian.org/debian/ buster main contrib non-free
deb http://ftp.debian.org/debian/ buster-updates main contrib non-free
deb-src http://ftp.debian.org/debian/ buster-updates main contrib non-free
deb http://security.debian.org/debian-security buster/updates main contrib non-free
deb-src http://security.debian.org/debian-security buster/updates main contrib non-free
deb http://ftp.debian.org/debian buster-backports main contrib non-free
ОБНОВЛЕНИЕ СИСТЕМЫ
sed -i ‘s/\(NTPSERVERS=\).*/\NTPSERVERS=»0.ru.pool.ntp.org 1.ru.pool.ntp.org 2.ru.pool.ntp.org 3.ru.pool.ntp.org»/’ /etc/default/ntpdate
УСТАНОВКА ЗАВИСИМОСТЕЙ
apt-get install -y git wget curl sudo apt-transport-https lsb-release systemd systemd-sysv ca-certificates dialog nano vim dirmngr libtiff5-dev libtiff-tools openssh-server
apt-get install -y bash bash-completion htop iftop nmap unzip bzip2 mc telnet pwgen
apt-get install -y libvpb1 aptitude aptitude-common aptitude-doc-en libclass-accessor-perl libcwidget3v5 libio-string-perl libparse-debianchangelog-perl libsub-name-perl debtags apt-xapian-index libcwidget-dev libhtml-parser-perl libhtml-template-perl libxml-simple-perl
Установка LAMP
УСТАНОВКА MARIADB
apt-get install -y mariadb-server mariadb-client libmariadb3 libmariadbclient-dev screen
В процессе установки необходимо задать пароль пользователя root к БД MariaDB.
УСТАНОВКА APACHE2
apt-get install -y apache2 apache2-utils
УСТАНОВКА PHP
apt-get install -y php libapache2-mod-php php-cli php-cgi php-pear php-common php-phpseclib php-mbstring php-gettext php-fpm php-json php-pdo php-mysql php-mysqli php-imagick php-zip php-gd php-curl php-mbstring php-curl php-xml php-pear php-bcmath
УСТАНОВКА PHPMYADMIN
tar xvf phpMyAdmin-4.9.1-all-languages.tar.gz
mv phpMyAdmin-4.9.1-all-languages /usr/share/phpmyadmin
chown -R www-data:www-data /var/lib/phpmyadmin
chown -R www-data:www-data /usr/share/phpmyadmin
cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php
Сгенерируем шифр Blowfish
Установим полученное значение в файл конфигурации PhpMyAdmin вместо значения Your_Blowfish_Secret нужно вставить свое значение.
sed -i «s/$cfg[‘blowfish_secret’] = .*/$cfg[‘blowfish_secret’] = ‘Your_Blowfish_Secret’ /» /usr/share/phpmyadmin/config.inc.php
echo «//$cfg[‘TempDir’] = ‘/var/lib/phpmyadmin/tmp’;» >> /usr/share/phpmyadmin/config.inc.php
Настраиваем Apache2 для работы с PhpMyAdmin.
Alias /phpmyadmin /usr/share/phpmyadmin
php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
php_admin_value mbstring.func_overload 0
php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
php_admin_value mbstring.func_overload 0
# Disallow web access to directories that don’t need it
Устанавливаем БД для PhpMyAdmin, где:
- Your_Mariadb_Password – пароль пользователя root от БД MariaDB;
- Phpmyadmin_User – имя пользователя для доступа к PhpMyAdmin;
- Phpmyadmin_User_Password – пароль пользователя Phpmyadmin_User для доступа к PhpMyAdmin.
mariadb -uroot -pYour_Mariadb_Password
GRANT ALL PRIVILEGES ON *.* TO ‘Phpmyadmin_User’@’localhost’ IDENTIFIED BY ‘Phpmyadmin_User_Password’ WITH GRANT OPTION;
sed -i «s/\(upload_max_filesize = \).*/\120M/» /etc/php/7.3/apache2/php.ini
sed -i «s/post_max_size = .*/post_max_size = 80M /» /etc/php/7.3/apache2/php.ini
sed -i «s/memory_limit = .*/memory_limit = 512M /» /etc/php/7.3/apache2/php.ini
sed -i ‘s%;date.timezone =%date.timezone = Europe/Moscow%g’ /etc/php/7.3/apache2/php.ini
cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf_orig
sed -i ‘s/AllowOverride None/AllowOverride All/’ /etc/apache2/apache2.conf
systemctl restart php7.3-fpm.service
systemctl restart apache2.service
Установка Asterisk
УСТАНОВКА ЗАВИСИМОСТЕЙ ДЛЯ ASTERISK
apt-get install -y linux-headers-`uname -r` libapache2-mod-log-sql-ssl libfreetype6-dev doxygen yasm nasm gdb cmake build-essential make automake autoconf ‘libtool-bin|libtool’ python python-dev uuid uuid-dev ‘libjpeg8-dev|libjpeg62-turbo-dev’ libncurses5-dev libssl-dev libpcre3-dev libcurl4-openssl-dev libldns-dev libedit-dev libspeexdsp-dev libsqlite3-dev perl libgdbm-dev libdb-dev ccache libpng-dev libopenal-dev libcodec2-dev libsoundtouch-dev libmagickcore-dev liblua5.2-dev libsndfile-dev libopencv-dev libavformat-dev libx264-dev erlang-dev libldap2-dev libperl-dev
apt-get install -y libpq-dev subversion gcc lynx bison flex memcached libshout3-dev libvpx-dev mpg123 libmpg123-dev libmp3lame-dev libncurses5-dev libpng16-16 libxml2-dev libxml2 libcurl4 libnewt-dev sqlite3
apt-get install -y libasound2-dev sox pkg-config libedit-dev libcppdb-odbc0 unixodbc unixodbc-dev libogg-dev libvorbis-dev libcurl4-openssl-dev libical-dev libneon27-dev libsrtp2-1 libspandsp-dev sendmail sendmail-bin sendmail-cf
apt-get install -y haveged odbcinst
УСТАНОВКА ДОПОЛНИТЕЛЬНЫХ БИБЛИОТЕК
apt-get install -y nodejs dahdi dahdi-linux dahdi-source libpri1.4 libpri-dev
УСТАНОВКА ASTERISK
./configure NOISY_BUILD=yes —with-crypto —with-ssl=ssl —with-srtp —with-jansson-bundled
Включаем следующие модули:
- chan_ooh323
- chan_sip
- app_macro
- res_config_mysql
- app_mysql
- cdr_mysql
- format_mp3
- codec_g726
- codec_g722
- codec_opus
- codec_silk
- codec_siren7
- codec_siren14
- FILE_STORAGE
- cdr_adaptive_odbc
- cdr_csv
- cdr_odbc
- MOH-OPSOUND-WAV
- CORE-SOUNDS-RU-WAV
По желанию можно отключить те, которые вы явно использовать не собираетесь. Мы отключили следующие:
- chan_alsa
- chan_console
- chan_mgcp
- chan_skinny
- BUILD_NATIVE
make && make install && make config && make samples
НАСТРОЙКА ASTERISK
Настройка запуска Asterisk от имени пользователя asterisk:
adduser —system —group —home /var/lib/asterisk —no-create-home —disabled-password —gecos «Asterisk PBX» asterisk
usermod -a -G asterisk,dialout,audio asterisk
sed -i «s/#AST_USER=»asterisk»/AST_USER=asterisk/» /etc/default/asterisk
sed -i «s/#AST_GROUP=»asterisk»/AST_GROUP=asterisk/» /etc/default/asterisk
sed -i «s/;runuser = asterisk/runuser=asterisk/» /etc/asterisk/asterisk.conf
sed -i «s/;rungroup = asterisk/rungroup=asterisk/» /etc/asterisk/asterisk.conf
chown -R asterisk:asterisk /var/lib/asterisk
chown -R asterisk:asterisk /var/log/asterisk
chown -R asterisk:asterisk /var/run/asterisk
chown -R asterisk:asterisk /var/spool/asterisk
chown -R asterisk:asterisk /usr/lib/asterisk
chown -R asterisk:asterisk /etc/asterisk
НАСТРОЙКА ODBC ПОДКЛЮЧЕНИЯ К БД
О том как настроить подключение мы писали ранее в статье .
Запускаем Asterisk как службу:
СОЗДАНИЕ БД ДЛЯ ASTERISK
Импортируем БД через PhpMyAdmin:
- SET SQL_MODE = «NO_AUTO_VALUE_ON_ZERO»;
- SET AUTOCOMMIT = 0;
- START TRANSACTION;
- SET time_zone = «+00:00»;
- /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
- /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
- /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
- /*!40101 SET NAMES utf8mb4 */;
- —
- — База данных: ‘asteriskcdrdb’
- —
- CREATE DATABASE IF NOT EXISTS asteriskcdrdb DEFAULT CHARACTER SET = ‘utf8’ COLLATE = ‘utf8_general_ci’;
- USE asteriskcdrdb;
- — ———————————————————
- —
- — Структура таблицы ‘cdr’
- —
- DROP TABLE IF EXISTS cdr;
- CREATE TABLE IF NOT EXISTS cdr (
- id int (10) NOT NULL,
- calldate datetime NOT NULL DEFAULT ‘0000-00-00 00:00:00’,
- clid varchar (80) NOT NULL DEFAULT »,
- src varchar (80) NOT NULL DEFAULT »,
- realsrc varchar (80) DEFAULT NULL,
- dst varchar (80) NOT NULL DEFAULT »,
- realdst varchar (80) NOT NULL DEFAULT »,
- dcontext varchar (80) NOT NULL DEFAULT »,
- channel varchar (80) NOT NULL DEFAULT »,
- dstchannel varchar (80) NOT NULL DEFAULT »,
- lastapp varchar (80) NOT NULL DEFAULT »,
- lastdata varchar (80) NOT NULL DEFAULT »,
- start datetime NOT NULL DEFAULT ‘0000-00-00 00:00:00’,
- answer datetime NOT NULL DEFAULT ‘0000-00-00 00:00:00’,
- end datetime NOT NULL DEFAULT ‘0000-00-00 00:00:00’,
- duration int (11) NOT NULL DEFAULT 0,
- billsec int (11) NOT NULL DEFAULT 0,
- disposition varchar (45) NOT NULL DEFAULT »,
- amaflags int (11) NOT NULL DEFAULT 0,
- remoteip varchar (60) NOT NULL DEFAULT »,
- accountcode varchar (20) NOT NULL DEFAULT »,
- hangupcause varchar (50) DEFAULT NULL,
- peerip varchar (50) DEFAULT NULL,
- recvip varchar (50) DEFAULT NULL,
- useragent varchar (50) DEFAULT NULL,
- uri varchar (50) DEFAULT NULL,
- fromuri varchar (50) DEFAULT NULL,
- peeraccount varchar (20) NOT NULL DEFAULT »,
- uniqueid varchar (32) NOT NULL DEFAULT »,
- userfield varchar (255) NOT NULL DEFAULT »,
- did varchar (50) NOT NULL DEFAULT »,
- linkedid varchar (32) NOT NULL DEFAULT »,
- sequence int (11) NOT NULL DEFAULT 0,
- filename varchar (255) DEFAULT NULL,
- recordingfile varchar (255) DEFAULT NULL
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- —
- — Триггеры ‘cdr’
- —
- DROP TRIGGER IF EXISTS t_cdr;
- DELIMITER //
- CREATE TRIGGER t_cdr BEFORE INSERT ON cdr
- FOR EACH ROW BEGIN
- IF ((NEW.dst = ‘s’ OR NEW.dst = ‘
‘) AND NEW.realdst != ») THEN
Создадим пользователя asteriskcdruser для доступа к БД asteriskcdrdb и установим пароль для пользователя asteriskcdruser_password :
- mysql -uroot -pYour_Mariadb_Password
- CREATE USER ‘asteriskcdruser’@’localhost’ IDENTIFIED BY ‘asteriskcdruser_password’;
- GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO ‘asteriskcdruser’@’localhost’ WITH GRANT OPTION;
- FLUSH PRIVILEGES;
Настройка безопасности Asterisk
УСТАНОВКА ПАКЕТОВ БЕЗОПАСНОСТИ ASTERISK
УСТАНОВКА БЕЗОПАСНОСТИ НА УРОВНЕ ASTERISK
Безопасность Asterisk и методы обеспечения рассматривались в статье
На этом все! Установка и настройка Asterisk 16 окончена. Пожелания, замечания, предложения просим оставлять в комментариях.