‹ Окружение разработчика

Asterisk. Установка и настройка на Raspberry Pi

Jan 15, 2023

Asterisk

В данной серии статей хочу описать накопленный опыт по установке и настройке Asterisk. В качестве сервера будет выступать Raspberry Pi 4 Model B с установленным дистрибутивом Ubuntu Server 22.04

Настройка среды LXD

Я предпочитаю максимально изолировать каждый проект друг от друга, поэтому Asterisk будет устанавливаться в контейнер LXD. Вы может устанавливать asterisk прямо на хост или в Docker. Asterisk’у для работы нужно большое количество портов для rtp каналов. Пробрасывание большого диапазона портов из контейнера к хосту является нетривиальной задачей для LXD. Поэтому было решено выделить отдельный ip адресс из локальной сети. Для этого был использован macvlan драйвер. Macvlan работает только на ethernet адапторе, для wifi сетей для этих целей можно использовать ipvlan драйвер. Установка дополнительных модулей, в которые входи macvlan

sudo apt install linux-modules-extra-raspi

Создание профиля с сетевым интерфейсом типа macvlan

lxc profile device add macvlan eth0 nic nictype=macvlan parent=eth0

Создаём контейнер

lxc launch images:ubuntu/22.04 asterisk --profile default --profile macvlan

Чтобы попасть в контейнер с asterisk нужно использовать такую команду

lxc exec asterisk -- sudo --login --user ubuntu

Установка Asterisk

В поставке ubuntu 22.04 идёт версия Asterisk 18.10, что вполне достаточно под мои нужды, поэтому было решено не мучаться с установкой из исходников

sudo apt install asterisk

Начальная конфигурация

Отключение модуля SIP

Т.к. для SIP будем использовать современный PJSIP стэк избавляемся от старого SIP стэка, удаляя его конфиг

sudo mv /etc/asterisk/sip.conf /etc/asterisk/sip.conf.bac

Конфигурация PJSIP

Создаем конфигурацию PJSIP на двух тестовых пользователей /etc/asterisk/pjsip.conf

;Транспорт
[simpletrans]
type=transport
protocol=udp
bind=0.0.0.0

;Пользователь 6001
[6001]
type=endpoint
context=internal
message_context=messages
disallow=all
allow=h264
allow=ulaw
allow=g722
allow=alaw
aors=6001
auth=auth6001
dtmf_mode = rfc4733
direct_media=no
[6001]
type=aor
max_contacts = 1
[auth6001]
type=auth
auth_type=userpass
password=password_for_6001
username=6001

;Пользователь 6002
[6002]
type=endpoint
context=internal
message_context=messages
disallow=all
allow=h264
allow=ulaw
allow=g722
allow=alaw
aors=6002
auth=auth6002
dtmf_mode = rfc4733
direct_media=no
[6002]
type=aor
max_contacts = 1
[auth6002]
type=auth
auth_type=userpass
password=password_for_6002
username=6002

[sip_phone]
nat=yes
qualify=300

Для поддержки видео добавлен кодек h264, для сообщений определён контекст message_context, далее он будет использован в dialplan

Входим в консоль asterisk sudo asterisk -vvvr и перезагружаем конфигурацию pjsip

pjsip reload

Конфигурация dialplan

Создаём конфигурацию dialplan /etc/asterisk/extensions.conf

[internal]
; разрешаем внутренние звонки
exten => _6XXX,1,Dial(PJSIP/${EXTEN})

[messages]
exten => _6XXX,1,NoOp(SIP send message)
same => n,NoOp(To ${MESSAGE(to)})
same => n,NoOp(From ${MESSAGE(from)})
same => n,NoOp(Body ${MESSAGE(body)})
same => n,Set(ACTUALTO=${CUT(MESSAGE(to),@,1)})
same => n,Set(ACTUALFROM=${CUT(CUT(MESSAGE(from),@,1),:,2)})
same => n,MessageSend(${ACTUALTO},${ACTUALFROM})
same => n,NoOp(Status ${MESSAGE_SEND_STATUS})
same => n,Hangup

Входим в консоль asterisk sudo asterisk -vvvr и перезагружаем конфигурацию dialplan

dialplan reload

Подключение клиентов

В качестве клиентов был выбран linphone

  1. В стартовом меню выбираем Использовать SIP-аккаунт

  2. Читаем и принимаем пользовательское соглашение

  3. Имя пользователя - 6001

    Пароль - password_for_6001

    Домен - 192.168.1.67 - домен или ip адрес raspberry pi

    Протокол - UDP

Аналогичные настройки нужно выполнить и для второго клиента и можно пользоваться

Заключение

В результате имеем домашнюю ATC с функционалом чата, аудио и видео-звонков. Мы рассмотрели базовую настройку, в дальнейших статьях рассмотрим как настроить шифрование, подключим GSM шлюз, и ещё много всего интересного.

Материалы

  1. https://asterisk-pbx.ru/wiki/asterisk/pjsip