Asterisk + chan_dongle + USB-модем

Автор: | 07.03.2018

Иногда может оказаться полезным поставить дома в шлюз свою симку, а самому совершать и принимать звонки через SIP, благо он сейчас есть практически в каждом смартфоне. Это будет полезным в международном роуминге.

В качестве платформы будет выступать Raspberry Pi 2, под управлением Arch Linux, в качестве модема разлоченный Huawei E173, ну а всем остальным будет заниматься Asterisk с модулем chan_dongle.

Если модем определяется как USB Storage Device, установим usb_modeswitch, который переводит модем в режим, собственно, модема.
Из вывода dmesg видим, по строкам usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB, что у модема появились порты управления, голоса и данных

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

Ставим Asterisk

При наличии yaourt, стандартным путём устанавливаем астериск.

Также его можно установить из исходников.

chan_dongle

Как оказалось, рабочий вариант нужно поискать.

Добавим пользователя asterisk в группу uucp:

Стартуем asterisk, подключаемся к консоли и загружаем модуль chan_dongle:

Возможна ругань, но тем не менее следующая команда отрабатывает как ожидается:

Значения IMEI и IMSI прописываем в /etc/asterisk/dongle.conf.
Теперь на номер можно позвонить, Астериск возьмёт трубку и скажет, что экстеншен недоступен. Также доступен USSD и чтение/отправка SMS.

Настройка Asterisk

Пропишем автозагрузку модуля:

Добавим пользователя с номером 100 в файл sip.conf:

Отредактируем дайлплан в extensions.conf так, чтобы все входящие вызовы на модем направлялись на номер 100, исходящие — шли через модем, а SMS-сообщения записывались в файл в виде json-объектов:

Раз уж у нас всё-таки модем, то было бы странно не появиться идее организовать связь с внешнем миром через него.
Установим wvdial:

Вызов wvdialconf без параметров опросит порты и сгенерит конфиг, который нужно немного подправить:

теперь, вызовом wvdial beeline, подключаемся к Интернету.
Секция [Dialer pin], добавлена чтобы можно было ввести PIN-код SIM-карты командой wvdial pin, если это необходимо.

Логистические проблемы и их решение

Учитывая, что провайдеры физ. лицам статические, белые IP-адреса практически не дают, назревает вопрос: «А как и куда подключиться из Интернета?».
Т.к у меня есть арендованный VDS, проблема решена так: Raspberry Pi и устройство с SIP-фоном, подключаются по OpenVPN к VDS и связываются с друг другом через виртуальные адреса.

OpenVPN-сервер на FreeBSD

Правим конфиг /usr/local/etc/openvpn/openvpn.conf (пути к ключам нужно подставить свои):

Стартуем:

OpenVPN-клиент

Ставим OpenVPN и Easy-RSA:

Для работы потребуются следующие файлы:
/usr/local/share/easy-rsa/pki/ca.crt сертификат УЦ
/usr/local/share/easy-rsa/pki/private/rpi2b.key ключ клиента
/usr/local/share/easy-rsa/pki/issued/rpi2b.crt сертификат клиента
/usr/local/etc/openvpn/ta.key ключ TLS
Копируем их с сервера на Raspberry в папку /etc/openvpn/client/ доступными способами.

Отредактируем конфиг клиента в /etc/openvpn/client/client.conf:

Запускаем OpenVPN:

Проверим связь между сервером и малиной:

Видим, что связь есть. Если же нет, то смотрим логи OpenVPN на обоих концах и принимаем меры.

Ну и наконец настраиваем смартфон/компьютер к нашему VDS и настраиваем SIP-клиент на работу с нашей системой.

Заключение

При подключении малины к Интернету проводным способом, система работает стабильно.
При подключении через модем, появляется задержка голоса и периодические лаги, но, откровенно говоря, я вообще не ожидал, что голос и данные хоть как-то будут работать вместе.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *