Установка Asterisk LTS на CentOS
В описанной инструкции рассмотрим пример установки с нуля Asterisk 18 LTS (с длительной поддержкой) на Linux CentOS 7.
Подготовка сервера
Перед установкой телефонии выполним предварительные действия.
1. Устанавливаем необходимые программы
Обновляем пакеты:
yum updateУстанавливаем пакеты:
yum install gcc wget ntpdate automake libtool
* gcc нужен для сборки исходников, wget — для загрузки файлов из командной строки; ntpdate — синхронизации времени; automake — участвует в создании Makefile при запуске configure; libtool — обеспечивает процесс сборки и использования динамических библиотек.
2. Настраиваем время
Устанавливаем временную зону:
timedatectl set-timezone Europe/Moscow
* в данном примере московское время.
Устанавливаем утилиту для синхронизации времени и запускаем ее:
yum install chrony
systemctl enable chronyd --now
3. Настройка безопасности:
Создаем новый сервис в брандмауэре:
firewall-cmd --permanent --new-service=asterisk
Добавим в сервис нужные порты:
firewall-cmd --permanent --service=asterisk --add-port=5060/tcp
firewall-cmd --permanent --service=asterisk --add-port=5060/udp
firewall-cmd --permanent --service=asterisk --add-port=5061/tcp
firewall-cmd --permanent --service=asterisk --add-port=5061/udp
firewall-cmd --permanent --service=asterisk --add-port=4569/udp
firewall-cmd --permanent --service=asterisk --add-port=5038/tcp
firewall-cmd --permanent --service=asterisk --add-port=10000-20000/udp* где 5060 — SIP, 5061 — SIP over TLS, 4569 — IAX, 5038 — AMI (Asterisk Manager Interface), 10000-20000 — диапазон для динамических портов.
Теперь добавляем созданный сервис как разрешенный:
firewall-cmd --permanent --add-service=asterisk
и перезапускаем фаервол:
firewall-cmd --reload
Установка Asterisk
Установка астериска выполняется путем сборки исходников. Сама процедура проходит в 3 этапа:
- Установка DAHDI (драйверов плат интерфейсов);
 - Установка LibPRI (библиотека для работы с потоковыми TDM-интерфейсами);
 - Собственно, сборка и установка Asterisk.
 
1. Сборка DAHDI
Устанавливаем исходники для используемого ядра:
yum install "kernel-devel-uname-r == $(uname -r)"
Загружаем исходник, распаковываем его и переходим в распакованный каталог:
wget https://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz
tar -xvf dahdi-linux-complete-current.tar.gz
cd dahdi-linux-complete-*/
Выполняем сборку и установку:
make
make install
make install-config
Выходим из каталога с исходником:
cd ..
2. Сборка LibPRI
Процедура, во многом, похожа на сборку DAHDI. Загружаем исходник, распаковываем его и переходим в распакованный каталог:
wget https://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz
tar -xvf libpri-current.tar.gz
cd libpri-*/
Выполняем сборку и установку:
make
make install
Выходим из каталога с исходником:
cd ..
3. Установка самого астериска
Для начала, загружаем исходник на сервер. Так как мы планируем установить LTS версию, заходим на страницу https://www.asterisk.org/downloads/asterisk/all-asterisk-versions, раздел «Long Term Support (LTS) Releases» и копируем ссылку на загрузку пакета:

* Certified Asterisk — бизнес версия с поддержкой для коммерческих клиентов.
Используя ссылку, скачиваем на сервер программу:
wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gzРаспаковываем архив и переходим в него:
tar -xvf asterisk-*.tar.gz
cd asterisk-*
Используем встроенный скрипт, чтобы установить зависимости для астериска:
./contrib/scripts/install_prereq install
./contrib/scripts/install_prereq install-unpackaged
Чистим образовавшиеся временные файлы:
make distclean
Добавляем библиотеку для работы с mp3:
./contrib/scripts/get_mp3_source.sh
Конфигурируем исходник:
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --libdir=/usr/lib64 --with-dahdi --with-pri --with-iconv --with-libcurl --with-speex --with-mysqlclient --with-jansson-bundled --with-pjproject-bundled
* полный перечень опция и что они означают можно посмотреть командой ./configure -h.

Продолжаем настройку:
make menuselect
Выбираем необходимые компоненты (в данном примере res_config_mysql, app_mysql, cdr_mysql):

Запускаем сборку и установку:
make
make installУстанавливаем скрипты для автозапуска АТС и готовые конфигурационные файлы:
make config
make samplesУстановка завершена!
Базовая настройка и запуск
Открываем конфигурационный файл:
vi /etc/asterisk/asterisk.confСнимаем комментарии и редактируем следующие пункты:
runuser = asteriskrungroup = asteriskdefaultlanguage = rudocumentation_language = ru_RU
Создаем учетную запись:
useradd asterisk -mЗадаем права на следующие каталоги:
chown -R asterisk:asterisk /var/run/asterisk
chown -R asterisk:asterisk /etc/asterisk
chown -R asterisk:asterisk /var/{lib,log,spool}/asterisk
chown -R asterisk:asterisk /usr/lib64/asterisk
chown -R asterisk:asterisk /var/log/asteriskОткрываем файл:
vi /etc/asterisk/modules.confДобавляем две опции:
require = chan_sip.so
require = chan_pjsip.soПроверяем настройки:
asterisk -cЕсли программа запустится, мы увидим Asterisk Ready:

* все ошибки и предупреждения можно проигнорировать, но правильнее их исправить, отключив неиспользуемые модули.
Теперь можно запустить астериск как службу:
systemctl enable asterisk
systemctl start asterisk
Заведение пользователя
Создадим наш первый диалплан (правило обработки звонков):
vi /etc/asterisk/extensions.conf
Допишем в него следующее:
[outcaling]
exten => _XXX,1,Dial(SIP/${EXTEN},,m)
* в данном примере мы создаем контекст с именем outcaling для трехзначных номеров (XXX) с вызовом по SIP по внутреннему номеру.
Теперь создадим два внутренних номера:
vi /etc/asterisk/sip.conf
[public](!)
type=friend
context=outcaling
host=dynamic
disallow=all
allow=alaw
allow=ulaw
language=ru
qualify=yes
canreinvite=yes
call-limit=4
nat=no
[101](public)
regexten=101
secret=1234
callerid="101" <101>
callgroup=1
pickupgroup=1
[102](public)
regexten=102
secret=5678
callerid="102" <102>
callgroup=1
pickupgroup=1
* сначала мы создали шаблон public, в который занесли общие параметры. Шаблон мы применили к создаваемым коротким номерам.
* где:
- [101], [102] — имена для обозначения номеров.
 - 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
Подключение телефона и проверка
Для проверки сервера устанавливаем софт-телефон на компьютер. Например, а качестве SIP-клиента под Windows можно установить бесплатную программу 3CX Phone, для Android — Zoiper.
Пример настройки клиента 3CX Phone:
Настраиваем подключение с логином и паролем 101 / 1234, второй — 102 / 5678. Пробуем позвонить.
Исправление ошибок
Рассмотрим процесс устранения предупреждений и ошибок во время запуска Asterisk.
Из-за неиспользуемых модулей
Для устранения данных проблем необходимо просто отключить данные модули.
Открываем файл:
vi /etc/asterisk/modules.conf
И в зависимости от ошибок, добавляем нижеперечисленные исправления...
res_phoneprov ... Unable to find a valid server address or name
Отключаем res_phoneprov:
noload => res_phoneprov.so
res_config_ldap ... No directory URL or host found
Отключаем res_config_ldap:
noload => res_config_ldap.so
res_config_pgsql ... PostgreSQL RealTime: Failed to connect database asterisk on 127.0.0.1
Отключаем res_config_pgsql:
noload => res_config_pgsql.so
cel_pgsql ... CEL pgsql config file missing global section
Отключаем cel_pgsql:
noload => cel_pgsql.so
cel_tds ... cel_tds module had config problems; declining load
Отключаем cel_tds:
noload => cel_tds.so
Другие ошибки
ari/config ... No configured users for ARI
ARI предоставляет API для Asterisk REST Interface. В данном примере, отключаем поддержку:
vi /etc/asterisk/ari.conf
Находим параметр enabled и меняем его значение на no:
enabled = no
                                
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.