Menu
Asterisk FreePBX на Debian 12

Asterisk FreePBX на Debian 12

Asterisk с интерфейсом FreePBX дает множество преймуществ для простоты настройки и обслуживании АТС. Данный обзор сделан при разработке перехода организации с тяжелого дорогого устаревшего CISCO CUCM с парком аппаратов CISCO, на бесплатное решение Asterisk+FreePBX.

Подготовка системы

Установка пакетов

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/