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
-
В стартовом меню выбираем
Использовать SIP-аккаунт
-
Читаем и принимаем пользовательское соглашение
-
Имя пользователя -
6001
Пароль -
password_for_6001
Домен -
192.168.1.67
- домен или ip адрес raspberry piПротокол -
UDP
Аналогичные настройки нужно выполнить и для второго клиента и можно пользоваться
Заключение
В результате имеем домашнюю ATC с функционалом чата, аудио и видео-звонков. Мы рассмотрели базовую настройку, в дальнейших статьях рассмотрим как настроить шифрование, подключим GSM шлюз, и ещё много всего интересного.