Главная страница » Raspberry » Установка Asterisk с модемом Huawey на Raspberry Pi

Установка Asterisk с модемом Huawey на Raspberry Pi

В этой статье рассмотрим установку Asterisk на Raspberry Pi с последующим подключением GSM-модема Huawei через модуль chan_dongle. В результате вы получите полноценную IP-АТС, которая сможет обслуживать внутренних SIP-абонентов, принимать и совершать звонки через SIM-карту, а также станет отличной основой для дальнейшей настройки голосового меню, очередей вызовов и записи разговоров.

Несмотря на то, что инструкция написана для Raspberry Pi, она практически без изменений подойдет для Debian и Ubuntu. Все действия выполнялись на чистой установке Raspberry Pi OS Lite.

Важно. В статье используется классический SIP (chan_sip) и модуль chan_dongle. Несмотря на то что современные версии Asterisk рекомендуют использовать PJSIP, для работы с большинством GSM-модемов Huawei именно эта связка по-прежнему остается наиболее распространенной.


Что понадобится

  • Raspberry Pi 3, 4 или 5;
  • Raspberry Pi OS Lite (рекомендуется Bookworm);
  • USB GSM-модем Huawei (E1550, E171, E3131, E3372 в режиме модема и другие совместимые модели);
  • SIM-карта с отключенным PIN-кодом;
  • подключение к Интернету;
  • доступ к серверу по SSH.

Перед началом убедитесь, что модем уже переведен в режим «Только модем». Многие устройства Huawei определяются системой как CD-ROM с драйверами и не будут работать с Asterisk, пока не переключатся в режим модема.

Обновляем систему

Перед установкой любого серверного программного обеспечения рекомендуется обновить операционную систему до актуального состояния.

sudo apt update
sudo apt full-upgrade -y
sudo reboot

После перезагрузки снова подключитесь к Raspberry Pi по SSH.

Устанавливаем необходимые пакеты

Для сборки Asterisk из исходных кодов потребуются компилятор, библиотеки и несколько дополнительных утилит.

sudo apt install -y \
build-essential \
git \
wget \
curl \
vim \
nano \
subversion \
uuid-dev \
libxml2-dev \
libncurses-dev \
libsqlite3-dev \
libjansson-dev \
libssl-dev \
libedit-dev \
libnewt-dev \
libspandsp-dev \
libspeex-dev \
libogg-dev \
libcurl4-openssl-dev \
liburiparser-dev \
libxslt1-dev \
libtiff-dev \
sqlite3 \
mariadb-server

В отличие от старых инструкций, здесь используются современные названия пакетов Debian Bookworm. Некоторые зависимости, которые встречаются в старых руководствах, уже отсутствуют в репозиториях или были заменены более новыми аналогами.

Создаем рабочий каталог

Все дальнейшие действия будем выполнять в каталоге /usr/src, где обычно размещаются исходные коды программ.

cd /usr/src

Скачиваем Asterisk

В оригинальной статье использовался Asterisk 13, однако эта версия уже давно снята с поддержки. Для новой установки рекомендую использовать актуальную LTS-версию Asterisk.

Узнать последнюю доступную LTS-версию можно на официальном сайте Asterisk. После этого скачайте архив, например:

cd /usr/src

wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.tar.gz

tar xzf asterisk-20-current.tar.gz

cd asterisk-20*

Если на момент чтения статьи доступна более новая LTS-версия (например, Asterisk 22), достаточно заменить номер версии в команде — дальнейшая установка практически не изменится.

Устанавливаем зависимости Asterisk

Разработчики Asterisk предусмотрели специальный скрипт, который автоматически установит недостающие зависимости.

sudo contrib/scripts/install_prereq install

При необходимости можно также загрузить поддержку MP3:

sudo ./contrib/scripts/get_mp3_source.sh

После завершения установки зависимостей можно переходить к сборке Asterisk.

Собираем и устанавливаем Asterisk

После установки всех зависимостей можно переходить непосредственно к сборке Asterisk.

Сначала подготовим систему сборки:

sudo ./configure

Если все зависимости установлены корректно, в конце работы скрипта появится сообщение об успешном завершении конфигурации.

Выбираем необходимые модули

Перед компиляцией можно выбрать дополнительные компоненты Asterisk. Для этого используется встроенное меню menuselect.

sudo make menuselect

Если вы только начинаете знакомство с Asterisk, можно оставить настройки по умолчанию. Они подходят для большинства сценариев.

При необходимости можно дополнительно включить:

  • поддержку MP3;
  • дополнительные кодеки;
  • форматы записи разговоров;
  • драйверы CDR и CEL.

После выбора компонентов сохраните настройки и выйдите из меню.

Компилируем Asterisk

Теперь запускаем сборку программы.

sudo make -j$(nproc)

Параметр $(nproc) автоматически использует все доступные ядра процессора и значительно сокращает время компиляции.

После успешной сборки устанавливаем Asterisk:

sudo make install

Установим примеры конфигурационных файлов:

sudo make samples

И базовую конфигурацию службы systemd:

sudo make config

Запускаем Asterisk

Добавим службу в автозагрузку и сразу запустим ее:

sudo systemctl enable --now asterisk

Проверить состояние службы можно командой:

sudo systemctl status asterisk

Если установка прошла успешно, статус службы будет active (running).

Подключаемся к консоли Asterisk

Для дальнейшей настройки удобнее использовать консоль Asterisk.

sudo asterisk -rvvv

Если всё установлено правильно, вы увидите примерно такой вывод:

Asterisk XX.X.X, Copyright (C)
Created by Mark Spencer
Asterisk Ready.

Для выхода из консоли используйте команду:

exit

Проверяем установленную версию

Перед тем как переходить к настройке внутренних SIP-абонентов, убедимся, что используется именно та версия Asterisk, которую мы только что установили.

asterisk -V

Также можно посмотреть информацию непосредственно из CLI Asterisk:

core show version

Если команды отрабатывают без ошибок, значит Asterisk установлен корректно и можно переходить к настройке внутренних SIP-абонентов, после чего подключить GSM-модем Huawei через chan_dongle.

Совет. На этом этапе рекомендую создать резервную копию каталога /etc/asterisk. Если в процессе настройки что-то пойдет не так, вы сможете быстро вернуться к исходной конфигурации.

Настраиваем SIP-абонентов

Прежде чем подключать GSM-модем, создадим внутреннего SIP-абонента и убедимся, что Asterisk корректно принимает регистрации от IP-телефонов или программных клиентов. Это позволит сразу проверить работу станции и исключить ошибки на более поздних этапах настройки.

В этой статье используется классический драйвер chan_sip, поскольку он обеспечивает наилучшую совместимость с модулем chan_dongle.

Создаем первого абонента

Откроем файл sip.conf:

sudo nano /etc/asterisk/sip.conf

В конец файла добавим следующую конфигурацию:

[100]
type=friend
context=internal

host=dynamic

secret=StrongPassword123

disallow=all
allow=alaw
allow=ulaw

callerid=User 100 <100>

nat=force_rport,comedia
qualify=yes

Здесь:

  • 100 — внутренний номер;
  • StrongPassword123 — пароль SIP-абонента (обязательно замените на свой);
  • context — контекст обработки вызовов;
  • host=dynamic — устройство будет самостоятельно регистрироваться на сервере.

Создаем простой диалплан

Теперь откроем файл extensions.conf:

sudo nano /etc/asterisk/extensions.conf

Добавим новый контекст:

[internal]

exten => 100,1,Answer()
 same => n,Playback(demo-congrats)
 same => n,Hangup()

Пока этого достаточно. При звонке на номер 100 будет воспроизводиться стандартное приветствие Asterisk.

Перезагружаем конфигурацию

Перезапускать службу Asterisk полностью не требуется. Достаточно перечитать конфигурационные файлы.

sudo asterisk -rvvv

В консоли выполните команды:

sip reload
dialplan reload

После успешной загрузки выйдите из CLI командой:

exit

Проверяем регистрацию

Установите любой SIP-клиент. Для проверки отлично подойдут:

  • MicroSIP (Windows);
  • Zoiper (Windows, Linux, Android, iOS);
  • Linphone (Windows, Linux, macOS, Android, iOS).

Используйте следующие параметры подключения:

  • Сервер — IP-адрес Raspberry Pi.
  • Логин — 100.
  • Пароль — тот, который указан в параметре secret.
  • Транспорт — UDP.
  • Порт — 5060.

После регистрации снова откройте консоль Asterisk:

sudo asterisk -rvvv

И выполните команду:

sip show peers

Если всё настроено правильно, возле абонента 100 будет отображаться статус OK и IP-адрес зарегистрированного устройства.

На этом этапе у нас уже есть полностью рабочая IP-АТС. В следующем разделе подключим GSM-модем Huawei, установим chan_dongle и научим Asterisk принимать и совершать звонки через SIM-карту.

Подключаем GSM-модем Huawei

Теперь можно переходить к самому интересному — подключению GSM-модема. Прежде чем устанавливать chan_dongle, убедимся, что Linux корректно определил устройство. Если система не видит модем, Asterisk также не сможет с ним работать.

Проверяем, определился ли модем

Подключите модем к Raspberry Pi и выполните команду:

lsusb

В списке устройств должен появиться модем Huawei, например:

Bus 001 Device 004: ID 12d1:1506 Huawei Technologies Co., Ltd.

Если устройство не отображается, попробуйте переподключить его или использовать другой USB-порт.

Проверяем последовательные порты

После инициализации модема система должна создать несколько последовательных устройств.

ls -l /dev/ttyUSB*

Обычно появляется несколько портов:

/dev/ttyUSB0
/dev/ttyUSB1
/dev/ttyUSB2

Именно один из этих портов будет использоваться для голосовых вызовов, второй — для отправки AT-команд, а третий — для передачи данных. Конкретное назначение зависит от модели модема.

Проверяем сообщения ядра

Если последовательные порты не появились, посмотрите последние сообщения ядра:

dmesg | grep ttyUSB

В выводе должно быть примерно следующее:

usb 1-1.3: GSM modem converter now attached to ttyUSB0
usb 1-1.3: GSM modem converter now attached to ttyUSB1
usb 1-1.3: GSM modem converter now attached to ttyUSB2

Если модем определяется как CD-ROM

Некоторые модели Huawei по умолчанию работают в режиме виртуального CD-диска, предлагая установить драйверы Windows. В Linux такой режим не подходит — модем необходимо переключить в режим работы модема.

Установите утилиту usb-modeswitch:

sudo apt install usb-modeswitch -y

В большинстве случаев после установки утилиты переключение происходит автоматически при повторном подключении устройства.

Устанавливаем chan_dongle

Модуль chan_dongle позволяет Asterisk работать с GSM-модемами Huawei как с полноценными телефонными линиями. Именно через него будут приниматься и совершаться звонки, а также отправляться SMS.

Перейдем в каталог с исходными кодами:

cd /usr/src

Склонируем актуальный репозиторий проекта:

git clone https://github.com/wdoekes/asterisk-chan-dongle.git

Перейдем в каталог проекта:

cd asterisk-chan-dongle

Подготовим систему сборки:

./bootstrap
./configure

После успешной проверки зависимостей можно приступать к компиляции.

make -j$(nproc)

Если сборка завершилась без ошибок, устанавливаем модуль:

sudo make install

Проверяем установку

Запустите CLI Asterisk:

sudo asterisk -rvvv

И выполните команду:

module show like dongle

Если установка выполнена успешно, вы увидите загруженный модуль chan_dongle.so.

Следующим шагом настроим файл dongle.conf, подключим модем к Asterisk и проверим выполнение первого звонка через GSM-сеть.

Настраиваем chan_dongle

После установки модуля осталось сообщить Asterisk, какие последовательные порты использовать для работы с модемом. Для этого создадим файл dongle.conf.

Откройте файл:

sudo nano /etc/asterisk/dongle.conf

Добавьте следующую конфигурацию:

[general]
interval=30
jbenable=no

[dongle0]
audio=/dev/ttyUSB1
data=/dev/ttyUSB2

context=from-gsm

group=0

rxgain=0
txgain=0

autodeletesms=yes
resetdongle=yes

u2diag=-1

usecallingpres=yes

callingpres=allowed_passed_screen

disablesms=no

Обратите внимание, что номера устройств ttyUSB1 и ttyUSB2 могут отличаться в зависимости от модели модема. Именно поэтому ранее мы проверяли вывод команды dmesg и наличие устройств в каталоге /dev.

Перезагружаем конфигурацию

Подключимся к консоли Asterisk:

sudo asterisk -rvvv

И выполним:

module reload chan_dongle.so

Если модуль загрузился успешно, проверим состояние модема:

dongle show devices

При корректной настройке вы увидите примерно следующую информацию:

ID           Group  State     RSSI
dongle0      0      Free      18

Если вместо состояния Free отображается Not connected, значит модем не был обнаружен или указаны неправильные последовательные порты.

Проверяем работу AT-команд

Убедимся, что Asterisk действительно может обмениваться командами с модемом.

Проверим уровень сигнала сети:

dongle cmd dongle0 AT+CSQ

Ответ будет выглядеть примерно так:

+CSQ: 20,99

Чем выше первое число, тем лучше качество сигнала.

Проверим IMEI устройства:

dongle cmd dongle0 AT+CGSN

Проверим IMSI установленной SIM-карты:

dongle cmd dongle0 AT+CIMI

Если модем корректно отвечает на AT-команды, значит связь между Asterisk и устройством полностью настроена.

Настраиваем входящие вызовы

Теперь создадим простой маршрут обработки входящих звонков.

Откройте файл extensions.conf:

sudo nano /etc/asterisk/extensions.conf

Добавьте новый контекст:

[from-gsm]

exten => s,1,NoOp(Incoming GSM call)
 same => n,Dial(SIP/100,30)
 same => n,Hangup()

Теперь каждый входящий звонок с SIM-карты будет автоматически направляться на внутреннего абонента 100.

Перезагрузим диалплан:

dialplan reload

На этом этапе уже можно позвонить на номер установленной SIM-карты и убедиться, что SIP-клиент получает входящий вызов.

Совет. Если входящий вызов не поступает, первым делом выполните команды dongle show devices и sip show peers. В большинстве случаев проблема связана либо с регистрацией SIP-клиента, либо с неправильным определением последовательных портов модема.

Настраиваем исходящие звонки через GSM

После настройки входящих вызовов остается научить Asterisk совершать исходящие звонки через установленную SIM-карту. В качестве примера настроим правило, при котором все номера, начинающиеся с 8, будут автоматически отправляться через GSM-модем Huawei.

Откройте файл extensions.conf:

sudo nano /etc/asterisk/extensions.conf

Добавьте в контекст [internal] следующие правила:

[internal]

; Внутренний абонент
exten => 100,1,Dial(SIP/100)

; Исходящие через GSM
exten => _8XXXXXXXXXX,1,NoOp(Outgoing GSM Call)
 same => n,Dial(Dongle/dongle0/${EXTEN},60)
 same => n,Hangup()

Теперь любой номер в формате 8XXXXXXXXXX будет автоматически направляться через GSM-модем.

Если вы привыкли набирать номера в международном формате, можно добавить дополнительное правило:

exten => _+X.,1,NoOp(Outgoing GSM Call)
 same => n,Dial(Dongle/dongle0/${EXTEN},60)
 same => n,Hangup()

После изменения конфигурации перечитайте диалплан:

dialplan reload

Проверяем работу исходящих вызовов

Зарегистрируйте SIP-клиент и попробуйте позвонить на любой мобильный номер. Во время набора в консоли Asterisk должна появиться информация о маршрутизации вызова через модем Huawei.

Для наблюдения за вызовом откройте CLI:

sudo asterisk -rvvv

Если всё работает правильно, вы увидите сообщения о создании канала Dongle/dongle0 и последующем соединении.

Отправка SMS через Asterisk

Одним из преимуществ chan_dongle является возможность отправлять SMS без использования дополнительного программного обеспечения.

Для проверки выполните в CLI следующую команду:

dongle sms dongle0 +79991234567 "Тестовое сообщение"

Если сообщение успешно отправлено, в консоли появится соответствующее уведомление.

Полученные SMS также могут обрабатываться Asterisk и использоваться, например, для автоматизации, уведомлений или управления внешними системами.

Полезные команды диагностики

Во время настройки и эксплуатации чаще всего используются следующие команды:

dongle show devices          # список модемов

dongle show device state     # состояние устройства

dongle cmd dongle0 AT+CSQ    # уровень сигнала

dongle cmd dongle0 AT+COPS?  # оператор сети

dongle cmd dongle0 AT+CGSN   # IMEI

dongle cmd dongle0 AT+CIMI   # IMSI

sip show peers               # SIP-абоненты

core show channels           # активные вызовы

core restart now             # перезапуск Asterisk

Большинство проблем можно диагностировать именно с помощью этих команд, не прибегая к анализу логов.

Частые проблемы

Модем не определяется

Проверьте вывод команд:

lsusb

ls -l /dev/ttyUSB*

dmesg | grep ttyUSB

Если последовательные порты отсутствуют, убедитесь, что модем переведен в режим модема, а не виртуального CD-ROM.

Модуль не загружается

Проверьте наличие модуля:

module show like dongle

Если модуль отсутствует, повторно выполните сборку chan_dongle и убедитесь, что использовалась та же версия Asterisk, под которую он компилировался.

Нет регистрации SIP-клиента

Проверьте регистрацию абонентов:

sip show peers

Также убедитесь, что порт 5060/UDP не блокируется межсетевым экраном.

Заключение

После выполнения всех описанных шагов вы получите полностью работоспособную IP-АТС на Raspberry Pi с поддержкой SIP-абонентов и GSM-модема Huawei. Такая конфигурация отлично подходит для домашнего использования, небольшого офиса, резервного канала связи или различных проектов автоматизации.

В следующих статьях мы рассмотрим подключение нескольких GSM-модемов, запись разговоров, голосовое меню (IVR), маршрутизацию вызовов и интеграцию Asterisk с Telegram и CRM-системами.