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
Установка 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 СЗ-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 ; длительность
Источники
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/
