Asterisk FreePBX на Debian 12
Asterisk с интерфейсом FreePBX дает множество преймуществ для простоты настройки и обслуживании АТС. Данный обзор сделан при разработке перехода организации с тяжелого дорогого устаревшего CISCO CUCM с парком аппаратов CISCO, на бесплатное решение Asterisk+FreePBX.
- подготовка системы
- установка WEB окружения
- установка Asterisk и FreePBX
- Настройка
- CISCO CP-6921
- Asterisk<>CISCO CUCM
- Asterisk 20 на OpenWRT
- Пример конфигурации
- Решение проблем
Подготовка системы
Установка пакетов
apt update
apt -y upgrade
apt install wget tar ca-certificates curl gnupg cron mariadb-server mariadb-client unixodbc odbcinst odbc-mariadb nginx lsb-release apt-transport-https ca-certificates software-properties-common sox mpg123 -y
языковые настрйоки
dpkg-reconfigure locales
Выбрать ru_RU.UTF-8
создать пользователя
groupadd asterisk
useradd -r -d /var/lib/asterisk -g asterisk asterisk
usermod -aG audio,dialout asterisk
Настроить БД
mysql_secure_installation
Switch to unix_socket authentication [Y/n] n
Change the root password? [Y/n] n
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
#mysql
> CREATE DATABASE asterisk DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
> CREATE DATABASE asteriskcdrdb DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
> CREATE USER 'asterisk'@'localhost' IDENTIFIED BY 'asterisk321';
> GRANT ALL PRIVILEGES ON asterisk.* TO 'asterisk'@'localhost';
> GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO 'asterisk'@'localhost';
> QUIT
Настроить ODBC
/etc/odbcinst.ini:
[MySQL]
Description = ODBC for MySQL (MariaDB)
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so
FileUsage = 1
/etc/odbc.ini
[MySQL-asteriskcdrdb]
Description = MySQL connection to 'asteriskcdrdb' database
Driver = MySQL
Server = localhost
Database = asteriskcdrdb
Port = 3306
Socket = /var/run/mysqld/mysqld.sock
Option = 3
установка WEB окружения
Настрйока Nginx и PHP
Установка альтернатиивного источника PHP для 8.2
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://ftp.mpi-inf.mpg.de/mirrors/linux/mirror/deb.sury.org/repositories/php/apt.gpg
sudo sh -c 'echo "deb https://ftp.mpi-inf.mpg.de/mirrors/linux/mirror/deb.sury.org/repositories/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
sudo apt update
PHP_VER=8.2
apt install php${PHP_VER}-fpm php${PHP_VER}-bcmath php${PHP_VER}-gd php${PHP_VER}-mbstring php${PHP_VER}-mysqlnd php${PHP_VER}-snmp php${PHP_VER}-zip php${PHP_VER}-curl php${PHP_VER}-xml --no-install-recommends
Изменить параметры /etc/php/=8.2/fpm/php.ini:
...
upload_max_filesize = 128M
...
post_max_size = 128M
...
date.timezone = "Europe/Moscow"
...
memory_limit = 512M
Создать pool PHP /etc/php/8.2/fpm/pool.d/asterisk.conf
[asterisk]
user = asterisk
group = asterisk
listen = /run/php/php-fpm-asterisk.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 10
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
Настроить ngix
Изменить /etc/nginx/sites-enabled/default:
http {
client_max_body_size 128M;
...
server {
...
root /var/www/html;
...
index index.php ...
...
location ~ \.php$ {
set $root_path /var/www/html;
fastcgi_pass unix:/run/php/php-fpm-asterisk.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SERVER_NAME $host;
}
...
systemctl restart php8.2-fpm
systemctl restart nginx
NodeJS
export NODE_VER=18
curl -sL https://deb.nodesource.com/setup_${NODE_VER}.x | bash -
apt install nodejs
node --version
установка Asterisk и FreePBX
Asterisk 20
wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.tar.gz
tar -zxf asterisk-*.tar.gz
cd asterisk-*/
./contrib/scripts/install_prereq install
Если
## install completed successfully
#############################################
,то всё ОК
make distclean
./contrib/scripts/get_mp3_source.sh
./configure
Если
configure: Menuselect build configuration successfully completed
[...картинка...]
, то все ОК
Выбор параметров
make menuselect
Параметры
Add-ons (See README-addons.txt)
+--> Select format_mp3
Applications
+--> Select app_macro
Bridging Modules
Channel Event Logging
Channel Drivers
+---> chan_sip (Если требуется подключение странных устройств)
Codec Translators
+---> Select all External Codecs
Format Interpreters
Dialplan Functions
PBX Modules
Resource Modules
Test Modules
Compiler Flags
Utilities
AGI Samples
Core Sound Packages
+--> Select WAV, ULAW, ALAW, GSM, G729, G722
Music On Hold File Packages
+--> Select WAV, ULAW, ALAW, GSM, G729, G722
MENUSELECT_EXTRA_SOUNDS
+--> Select WAV, ULAW, ALAW, GSM, G729, G722
СБорка
make -j `nproc`
Если
+ make install +
+-------------------------------------------+
, то выполнить установку
make install
Если
+---- Asterisk Installation Complete -------+
, то
make config
make samples
Исправить /etc/asterisk/asterisk.conf
Раскомментировать
runuser = asterisk
rungroup = asterisk
defaultlanguage = ru
documentation_language = ru_RU
Применить владельца:
chown -R asterisk:asterisk /var/run/asterisk /etc/asterisk /var/{lib,log,spool}/asterisk /var/log/asterisk
Если нужно, добавить chan_sip (chan_sip является устаревшим )
/etc/asterisk/modules.conf
load = chan_sip.so
Проверка настроек
asterisk -c
systemctl enable asterisk
systemctl start asterisk
Если требуется модуль chan-dongle для GSM модема
git clone https://github.com/wdoekes/asterisk-chan-dongle.git
cd asterisk-chan-dongle/
./bootstrap
./configure --with-astversion=20.18.0 #отредактировать верчию
положить /include/ из директории исходников в /usr/local/include/
make
make install
cp ./etc/dongle.conf /etc/asterisk/
apt install usb-modeswitch
Установка FreePBX
cd ~
wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-17.0-latest.tgz
tar -zxf freepbx-*.tgz
cd freepbx
./start_asterisk start
Если
STARTING ASTERISK
Asterisk is already running
, то устанавливаем
./install -n --dbuser=asterisk --dbpass=asterisk321 --webroot=/var/www/html
Если
You have successfully installed FreePBX
, то установить модели
fwconsole ma install pm2 cdr
fwconsole ma updateall
; модуль временнЫх групп
fwconsole ma downloadinstall timeconditions
fwconsole ma install timeconditions
fwconsole reload --verbose
Зайти на http://<IP_адрес_сервера>.
Установить язык и временную зону
Настройка
Отладка
Показать модули
module show
Включить/отдключить отладку по протоколу
pjsip set logger on/off
Настройка аппаратов CISCO CP-6921
(аппараты "любят" TCP и короткие пароли)
Для теста можно запустить Tftpd32
- выложить файлы настроек и прошивку
BOOT69xx.0-0-0-14.zz.sgn
CTLSEP000000000000.tlv
dialplan.xml
DSP69xx.12-4-123-2.160119.zz.sgn
ITLSEP000000000000.tlv
SEP000000000000.cnf.xml
SIP69xx.9-4-1-3SR3.loads
SIP69xx.9-4-1-3SR3.zz.sgn
XMLDefault.cnf.xml
, где 000000000000 -mac адрес телефона
Пример директории с конфигурацией и прошивкой 69xx-SIP-9-4-1-3SR3
В конфигурации SEP000000000000.cnf.xml нужно исрпавить параметры адреса сервера, портов и пароля.
Для постоянного использования
- создать TFTP сервер в подсети для телефонии
- в параметрах DHCP указать TFTP Option 66 на этот сервер
- TODO написать формирователь конфигурации на основе BD.
Настроить аппарат.
Сбросить настройки аппарата:
- Включить питание с зажатым #.
- При позеленении линий ввести последовательно 123456789*0#, после чего загорится красным MUTE микрофона.
(при вводе и нажатии 1 линии 1 и 2 покраснеют и далее по мере ввода последовательности не должны позеленеть, иначе нужно вводить заново)
Настройка сети
- Установить в Настройки - Админ настр.- Натсройки сети - ipv4 - Альтернтивный tftp - ДА
- Установить в Настройки - Админ настр.- Натсройки сети - ipv4 - Альтернтивный tftp1 - адрес своего tftp
- он сразу начнет качать конфигурацию и прошивку, либо сделать принудительно - (шестерня - ***#***)
Настройка FreePBX под аппарат
Включить модуль chan_sip.so в asterisk в "Администратор -> Модули Asterisk"
Включить канал старого SIP в "Общие настройки - Дополнительные настройки" -> SIP Channel Driver -> Both
Настроить прослушивание на портах для SIP и PJSIP в "Общие настройки - Asterisk SIP settings":
Включить на обоих TCP и настроить порты
5060 - для PJSIP, 5160 - для SIP legacy
SIP Legacy параметры:
-Notify Ringing - yes
-Notify Ringing - yes
-Enable TCP - yes
Применить изменения.
Создать внутренний номер типа SIP Legacy с параметрами (где 500 - номер):
Общие:
-Отображаемое имя - имя
-Исходящий Caller ID - 500
-секрет - Пароль не более 8 символов
Расширенные
-Порт - 5160
(в конфигурации телефона должен быть прописан этот порт)
Asterisk-CISCO CUCM
astersk trunk <-> CUCM client
* 4321 - номер телефона на CUCM
На стороне CUCM
Создать пользователя CUCM: User Management - End User
User ID - 4321
Self-Service User ID - 4321
Last nameRequired Field - 4321
Digest Credentials - password
Создать устройство CUCM:
Device - Phone - Add new - Third Party SIP device Basic:
MAC AddressRequired Field - 123412341234 (любой мак)
Description - Asterisk
Owner User IDRequired Field - 4321 (выбрать)
SIP Profile - Standart SIP Porfile
Digest User - 4321
Association - Добавить линию 4321
У пользователя 4321 в User Management - End User добавить созданное устройство
3 На стороне Asterisk Создать транк SIP pjsip
>Общие
Название транка - trunk-Asterisk-CUCM
Исходящий CallerID - 4321
>pjsip Общие настройки
Имя пользователя - 4321
Auth username - 4321
Секрет - password
Аутентификация - Исходящий
SIP сервер - CUCM-ip
Транспорт - х.х.х.х tcp
>Расширенные
Send Line in Registration - Да
Контактная персона - 4321
От Домена - CUCM-ip
От Пользователя - 4321
Asterisk 20 на openwrt
Установка пакетов
opkg install asterisk asterisk-pjsip asterisk-bridge-simple asterisk-codec-alaw asterisk-codec-ulaw asterisk-res-rtp-asterisk asterisk-app-system
Если требуется установка 3G модема, требуется доустановить
asterisk-chan-dongle asterisk-func-base64 kmod-usb-serial kmod-usb2 kmod-usb-serial-option usb-modeswitch usbutils
Добавить asterisk в группы dialout и audio
Требуется ознакомиться с таблицей совместимости и выбрать совместимый (наличия голосовых функций) https://asterisk-service.com/en_US/page/chan-dongle-modems
Необходимо перевести модем в режим "только модем", и разлочить, если требуется.
При установке в роутер должны появиться устройства вида /etc/ttyUSB -..2
Пример простой конфигурации Asterisk 20 с модемом
dongle.conf - содержить конфигурацию модуля работы с модемом
pjsip.conf - содержит endpointы, которые определяют связь с модулями Transport, Auth и AOR
extensions.conf - диалпланы
/etc/asterisk/dongle.conf
[general]
interval=15
[defaults]
context=fromgsm
rxgain=3
txgain=3
usecallingpres=yes
callwaiting=yes
;dtmf=relax
dtmf=inband
mindtmfduration=30
language=ru
resetdongle=yes ; reset dongle during initialization with ATZ command
[dongle0]
audio=/dev/ttyUSB1 ; tty port for audio connection; no default value
data=/dev/ttyUSB2 ; tty port for AT commands; no default value
/etc/asterisk/pjsip.conf
; == trasports ==
[tr-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060
allow_reload=true
; == templates ==
[lisolog-endpoint-udp](!)
type=endpoint
transport=tr-udp
context=from-internal
disallow=all
allow=alaw,ulaw
[pass-auth](!)
type=auth
auth_type=userpass ; userpass / md5
[two-contact-aor](!)
type=aor
remove_existing = yes
max_contacts=1 ; один агент или с указанием контакта sip:777@192.168.0.21:5060
; == numbers ==
; == num 2000
[2000](lisolog-endpoint-udp)
auth=auth2000
aors=2000
[auth2000](pass-auth)
password=somepass
username=2000
[2000](two-contact-aor)
; == num 2001
[2001](lisolog-endpoint-udp)
auth=auth2001
aors=2001
[auth2001](pass-auth)
password=somepass
username=2001
[2001](two-contact-aor)
/etc/asterisk/extensions.conf
[general]
static=yes
writeprotect=no
clearglobalvars=no
[globals]
[from-internal]
;exten = 2001,1,Dial(PJSIP/2001)
exten = _2XXX,1,Dial(PJSIP/${EXTEN})
exten => _8XXXXXXXXXX,1,Dial(dongle/dongle0/${EXTEN})
exten => _7XXXXXXXXXX,1,Dial(dongle/dongle0/${EXTEN})
[fromgsm]
;exten => s,1,Dial(PJSIP/2001)
exten => s,1,Goto(ivr-menu,s,1)
exten => sms,1,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} — ${DONGLENAME} от ${CALLERID(num)} Текст: ${BASE64_DECODE(${SMS_BASE64})}' >> /var/log/asterisk/sms.txt)
exten => ussd,1,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} — ${DONGLENAME} Запрос: ${BASE64_DECODE(${USSD_BASE64})}' >> /var/log/asterisk/ussd.txt)
[ivr-menu]
exten => s,1,Answer()
same => n,WaitExten(6) ; wain 6 sec for DTMF key 0->2000 or 1->2001
exten => 1,1,Dial(PJSIP/2001)
exten => 0,1,Dial(PJSIP/2000)
exten => t,1,Dial(PJSIP/2002) ; dial 2002 if not pressed
Asterisk CLI
Получить вывод из консоли:
asterisk -rx "pjsip show endpoints"
Перейти в интерфейс:
asterisk -cvvvvv
dialplan show <context>
pjsip show endpoints
pjsip show endpoint <endpoint>
pjsip show registration <registration>
dongle show devices
dongle show device state dongle0
Решение проблем
При создании группы вызова, происходит завершение из-за ошибки доступа к серверу FastAGI.
Решение: Выключить сервер FastAGI - Общие настройки - Дополнительные - серверу Launch local AGIs through FastAGI Server - Нет
Не срабатывает DTMFс модема
В dongle.conf указать
dtmf=inband ; модем сам определяет тип
mindtmfduration=30 ; длительность
При смене IP сервера не входит в WEB FreePBX из-за незапущенного ucp
UCP Node Server is not running
Требуется его переустановка, так как он привязывал сертификаты
apt remove nodejs
apt install nodejs
fwconsole ma download ucp
fwconsole ma install ucp
fwconsole reload
fwconsole restart
Текстовые сообщения
В секцию [general] файла sip.conf (для FreePBX - sip_general_custom.conf):
accept_outofcall_message = yes
outofcall_message_context = messages
auth_message_requests = no
В dialplan (для FreePBX — в файл extensions_custom.conf):
[messages]
exten => _XXX,1,MessageSend(sip:${EXTEN},"${CALLERID(name)}"${MESSAGE(from)})
Источники
Asterisk 20 га debian 12 https://sangomakb.atlassian.net/wiki/spaces/FP/pages/10682545/How+to+Install+FreePBX+17+on+Debian+12+with+Asterisk+21
FreePBX 16 on Debian 12 https://unitum.ru/articles/freepbx16-asterisk18-debian12
Тоже (без него нигде никак) https://www.dmosk.ru/instruktions.php?object=asterisk-freepbx-ubuntu
Настройка
PJSIP в конфигах - https://asterisk-pbx.ru/wiki/asterisk/pjsip
PJSIP в FreePBX https://novofon.com/instructions/calls/freepbx1415-voip/
Включение chan_sip
https://sangomakb.atlassian.net/wiki/spaces/FP/pages/242581508/Using+FreePBX+17+with+chan_sip
https://backnet.ru/2017/07/17/asterisk-freepbx-i-cisco-cp-6921/
Транки
https://help.ringostat.com/ru/articles/6485623-freepbx-13-14-%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B2-%D1%80%D0%BE%D0%BB%D0%B8-sip-%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D0%B0
dongle - https://asterisk-service.com/en_US/page/chan-dongle-modems
Транк на CUCM
https://www.youtube.com/watch?v=k1N-6R-XRIw
Прошивка телефонов в SIP
https://documentation.emetrotel.com/cisco-convert-6921-6941-6961-from-sccp-to-sip-protocol/
https://voxlink.ru/kb/ip-phones-configuration/cisco/nastrojka-telefonnogo-apparata-cisco-6921/
https://habr.com/ru/articles/585822/
https://habr.com/ru/articles/177947/
https://backnet.ru/2017/07/17/asterisk-freepbx-i-cisco-cp-6921/
