Asterisk android gsm шлюз

Поднимает телефонию с нуля: Asterisk, FreePBX, GSM-шлюз на Huawei E173 в Debian

Сначала маленькая предыстория. Не так давно наша фирма практически лишилась городской связи, один телефонный оператор, что-то не поделил с другим и в результате между ними перестали проходить звонки. Было принято решение, раз уж так произошло полностью отказаться от обычной телефонной связи и полностью перейти на ip-телефонию.
Постановка задачи:
1) Организовать телефонную связь;
2) Запись разговоров;
3) Очередь звонков;
4) Голосовое меню;
5) GSM-шлюз, так-как должны обрабатываться и звонки с мобильных операторов.
6) Минимальная стоимость решения, так как ситуация форс-мажорная и бюджет выделен не был.

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

Выбор платформы.

Первым делом решил посмотреть готовые сборки, указанные на сайте asterisk.ru, были скачаны готовые образы AsteriskNOW, FreePBX, Elastix, про остальные просто прочитана документация. TrixBox был сразу откинут из-за своей платности, так как противоречил 6 пункту. AsteriskNOW показался сыроватым и не доработанным, FreePBX, Elastix понравились оба, логичные и удобные сборки, но не захотели дружить с имеющимся в наличии модемом Huawei E173, а также были собраны на CentOS с достаточно старым ядром и не вписывались в общий парк серверов на Debian. Принял решение собирать все с нуля, тем самым получив бесценный опыт.

Сборка рабочего окружения, связывание элементов и настройка.

Итак имеем свежеустановленный Debian 6 Squeeze, минимальная установка.
Добавляем необходимые в дальнейшем репозитории в

Из бэкпортов ставим свежее ядро, которое необходимо для корректной работы GSM модема

Ставим web сервер.

Так как нагрузка на веб сервер планируется разовая и небольшая, было лень ставить отдельно apache + php + нужные модули, решил воспользоваться неплохой, на мой взгляд, сборкой Zend Server CE.
Ставить будем все и сразу.

Настройка веб-сервера Zend

Изменяем пользователя из под которого работает апач, на asterisk.

Изменяем параметры php (можно через специальную админку сервера, доступную по ссылке _https://IP:10082/ZendServer или _http://IP:10081/ZendServer.).

Скачиваем необходимые исходники

Собираем их для удобства дальнейшего обновления сразу в пакеты.

Отключаем ненужные модули, вообще мне dahdi был не нужен, но на форумах и в документации советуют все равно собирать с ним.

если планируем включить mp3 выполняем

Включаем в menuconfig следующие опции;
app_mysql, app_saycountpl, cdr_mysql, format_mp3, res_config_mysql, EXTRAS-SOUNDS-EN-GSM EXTRAS-SOUNDS-RU-GSM (нужные кодеки и языки) ну и другие нужные опции.

Если получили ошибку не существующей директории

Создаем и заполняем базу данных необходимую для FreePBX

Запускаем Астериск перед установкой FreePBX

Конфигурируем FreePBX для работы с Asterisk:

Используем все параметры по умолчанию только путь задаем /var/www/freepbx/, который мы создали ранее.

Теперь небольшое отступление, на сайте FreePBX доступна версия freepbx-2.10.0, но ее инсталятор под Debian вел себя очень странно, пришлось наложить несколько патчей из багрепортов, но дальнейшее его поведение также не понравилось и было принято решение использовать freepbx-2.9.0 для установки, а потом обновиться. После успешной установки заходим на веб интерфейс по адресу _http://IP-сервера/freepbx и обновляем систему, процесс обновления хорошо описан в самом интерфейсе и вынесена отдельная ссылка, так что подробно останавливаться на этом не буду, обновление проходит быстро и гладко и через 10 минут имеем у себя последнюю версию системы.

Прикручиваем модем huaway E173

Модем был предварительно разлочен на всех операторов и в нем были разблокированы голосовые функции. На этом моменте подробно останавливаться не буду, все достаточно тривиально и не входит в описываемую тему, но если кому интересно отвечу.

Читайте также:  Аналог андроид для компьютера

Для определения вменяемого имени модема

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

Получаем вывод похожий на

Если не заработало, выясняем идентификатор устройства:

Проверяем наличие файла «12d1:*» в /etc/usb_modeswitch.d, в одном из файлов
должно быть упоминание продукта «1446». Например:

Если файла нет, то его можно создать по вышеприведенному примеру, просто изменив DefaultProduct на:

Перегружаемся, после чего модем имеет вменяемое имя, продолжаем связывать его с Asterisk

Настраиваем параметры модуля под наш модем:

в самом низу конфигурационного файла удаляем все данные (Ctrl+k) после последней черты и вставляем данный конфиг

записываем изменения Ctrl+O и выходим из редактора nano Ctrl+X

Создаем контент в диалплане (Не забываем выключить пинкод на SIM):

Проверка состояния модема:

Теперь в админке FreePBX добавляем маршруты для этого модема.

Исходящий маршрут:
В веб интерфейсе (FreePBX 2.10) — Connectivity — > Trunks -> Add Custom Trunk
Trunk name — Пишем имя чтоб не забыть например GSM-modem
Последний пункт — Custom dial string — указать

где 0000000000000 — IMEI модема (виден в предыдущем пункте).

В веб интерфейсе (FreePBX 2.10) — Connectivity -> Outbound routes -> ADD route
Назвать например Outbound (Исходящий)
match patern ->. (ставим точку в это поле),
в Trunk Sequence for Matched Routes выбираем наш транк.

Входящий маршрут:
В веб интерфейсе (FreePBX 2.10) — Connectivity -> Inbound routes -> ADD Incoming route
Назвать например Inbound (Входящий)
Номер DID -> 0000000000000 (IMEI модема)
в ‘Set destination’ выбрать получателя звонков, поступающих на модем.

Включаем русскоязычную озвучку для протоколов, например для SIP, через WEB-интерфейс
Settings -> Asterisk SIP Settings -> language -> ru

Создаем скрипт автозапуска FreePBX: /etc/init.d/amportal-startup

Даем ему права на выполнение

Добавляем в автозагрузку.

FreePBX частично переведен на русский язык, но его включение у меня изначально не работало, чтоб его починить проделываем следующие манипуляции.
Исправляем файлик /usr/share/locale/locale.alias

Удаляем строку с кодировкой для russian и добавляем 3 строки вместо нее:

затем перегенерируем локаль

и все начинает работать.

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

Источник

Сам себе сотовый роуминг. Создание GSM гейта на asterisk + донгл от сотового оператора

Случилось так, что езжу я в командировки и отпуски не настолько часто чтобы пользоваться какой-то международной телефонией или виртуальным провайдером, но и не настолько редко чтобы вообще не забивать себе этим голову и пользоваться роумингом не заморачиваясь на расходах.
Езжу я не в те страны и не так надолго чтобы покупать симку местного оператора, зато в те страны где вай-фай есть почти везде.
Так уж вышло что в последнее время я плотно познакомился с программной АТС asterisk и перед очередной поездкой подумал о том как было бы классно воткнуть свою сим-карту в качестве входящего транка в asterisk, стоящий в остающейся позади снежной Москве, а самому цепляться к нему sip-клиентом по интернету. Это же и сам звони не хочу, был бы интернет, и звонки принимай на свой же номер, что важно для тех у кого много контактов (всех не оповестишь, да и половина забудет) — сотовый-то с сим-картой фактически стоит в домашнем регионе.

Как это реализуется — под катом.

Первым делом что необходимо обязательно:

из неосязаемого

— Хоть какое-то базовое знание линукса. да, придется немножко пособирать из исходников.
— Реальный айпи-адрес прямо на линукс, ну или проброс портов до него. Все-таки присоединяться из интернета к астериску надо куда-то. Чего, если поставить его за домашним роутером, который сам стоит за маскарадом провайдера, а то и не одним, не получится.
Порты которые использует астериск и на которые нужно делать проброс: udp 5000-31000. Вот такой целый пул.

Читайте также:  Iptv телевидение для андроид
из вполне материального

— Модем от сотового провайдера. Практически все они — huawey 3G E-серии перекрашенные в “корпоративные цвета”. Мегафон даже не стесняется называть их ровно в соответствии с кодировкой производителя. У меня оказался вот такой: moscow.megafon.ru/devices/usbModem/e173. Это Huawey 3G E173.
— Сервер на линуксе

необходимый софт:

— asterisk: www.asterisk.org/downloads
Я расскажу по версии 11 из исходников, если в вашем дистрибутиве есть пакет астериска любой версии — ставьте пакет, особой разницы нет.
— usb-modeswitch: www.draisberghof.de/usb_modeswitch/#download
оба архива www.draisberghof.de/usb_modeswitch/usb-modeswitch-1.2.5.tar.bz2 и www.draisberghof.de/usb_modeswitch/usb-modeswitch-data-20121109.tar.bz2
Если в вашем дистрибутиве есть такой пакет — ставьте пакет
— chan_dongle: github.com/jstasiak/asterisk-chan-dongle/archive/asterisk11.zip для 11-го астериска о котором пойдет речь, либо code.google.com/p/asterisk-chan-dongle/downloads/list если вы поставили астериск из пакетов и у вас более ранняя версия. Это одна и та же версия драйвера, просто в тот который для 11-й версии интегрирован патч который подгоняет его под 11-й астериск с его измененными зависимостями.

Device Drivers -> USB Support -> USB Serial Converter Support -> USB Generic Serial Driver

Втыкате одно в другое, делаете lsusb.
Находите там строку похожую на

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

usb_modeswitch -v 0x12d1 -p 0x1446 -H -s 5 -M 55534243000000000000000000000011060000000000000000000000000000

не забудьте поменять 12d1 и 1446 на свои цифры из lsusb!
Запускаете lsusb снова и вы увидите там примерно тоже самое что и раньше, но вторая 4-ка цифр вашего донгла будет другой.
Это значит что все прошло успешно и теперь ваш модем это модем.
Вот тут-то и должна отработать та самая опция про USB Serial Driver ядра и в /dev должны появится несколько устройств /dev/ttyUSB0 /dev/ttyUSB1 и т.д.
Это интерфейсы к модему, какие-то звуковые, какие-то управления, насколько я понял какой из них какой зависит от модема.

Треть дела сделана, цифровой интерфейс к сотовой сети у нас есть, переходим к астериску.

Не буду описывать его установку, будем считать что он поставлен (не настроен, просто установлен). Если из исходников, то хорошо. Если пакет — понадобится еще и -dev, потому что мы будем собирать chan_ модуль к нему.

А именно тот самый chan_dongle.
Все стандартно, распаковываем, ./configure && make && make install
копируем файл etc/dongle.conf в /etc/asterisk/

Запускаем asterisk прямо без настройки.
Запускаем asterisk -rv и попадаем в консоль.
Пишем module load chan_dongle.so.
Модуль загрузится и скорее всего о чем-нибудь начнет ругаться.
Но по выполнении команды dongle show devices покажет что-то вроде

ID Group State RSSI Mode Submode Provider Name Model Firmware IMEI IMSI Number
dc_4823_7851 0 Free 11 0 0 MegaFon RUS E173 11.126.15.00.209 xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxx xxxxxxxxxxx

Открываем на редактирование файл /etc/asterisk/dongle.conf и в самом низу, где описывается устройство [dongle0]
комментируем все кроме строки imei, куда вписываем imei вашего модема из строки которую показал dongle show devices
и дописываем

[dongle0]
imei=xxxxxxxxxxxxxxxx
context=dongle-incoming; контекст
group=0
rxgain=3; увеличение громкости
txgain=3; увеличение громкости
resetdongle=yes; сбрасывать карту при инициализации
u2diag=-1
usecallingpres=yes
callingpres=allowed_passed_screen

Теперь модуль chan_dongle можно вписать в /etc/asterisk/modules.conf в виде строки load => chan_dongle.so
чтобы он подргужался сам при запуске asterisk.
Перезапускаем asterisk.
Вот теперь, по правильному imei, chan_dongle должен сам все правильно найти — и какие из устройств являются командными, и какие аудио, и так далее.
Запускаем asterisk -rv, выполняем dongle show devices и видим свой модем. Все в порядке.

Теперь к настройке астериска.

[general]
externip=х.х.х.х; внешний айпишник астериска, не важно его или гейта который прокидывает к нему порты, это внешний айпишник, адрес которого будут содержать пакеты идущие к астериску и он будет считать их своими
externaddr=х.х.х.х; тоже самое
localnet=192.168.0.0/255.255.0.0; сеть, которую астериск будет считать внутренней и не устраивать сложные танцы с маскарадом для нее
nat=force_rport,comedia; необходимый режим работы если астериск за натом и к нему прокидываются порты
context=public; контекст, в который приходят звонки по умолчанию. важно чтобы тут был какой-то контекст в котором будет совершенно не определен план звонков, чтобы все звонки по умолчанию никуда не попадали! в интернете полно ботов которые сканят день и ночь на предмет плохо настроеных астерисков чтобы звонить через них на халяву
allowguest=no; не принимать звонки неизвестно от кого.

[me]
type=friend
host=dynamic
secret=пароль
context=default
canreinvite=yes
dtmfmode=rfc2833
permit=0.0.0.0/0.0.0.0
qualify=yes

me — это будет логин, пароль где задать понятно.

Читайте также:  Rpg mod для андроид

Записываем sip.conf. Тут все.

Открываем extensions.conf — это план звонков, описание того куда и как передаются звонки.

То что нам нужно, так это описать два контекста: [dongle-incoming] — то, что делать со звонками поступающими в модем и [default] — то, что делать со звонками поступающими с софт. телефона.
Начинаем с простого:

Это фактически 4-ре строки которые делают одно и то же, только первая когда телефон назначения подходит под шаблон 7цифры, вторая когда +7цифры, третья 8цифры и 4-я 007цифры (во многих софтовых телефонах стоит опция передавать “+” как “00”).
И делает каждая строка одно и то же — передает звонок в канал dongle0 (наш модем) в виде +7цифры.
Ну и последняя строка вызовется при событии “трубка положена” и просто кладет трубку. Впрочем ее можно даже не писать, это формальность.

Чтобы было доходчиво как это работает — любой поступивший звонок с телефона зарегистрировавшегося на астериске под аккаунтом me будет обрабатываться в контексте [default], как указано в опции context для [me]. В контексте [default] номер назначения будет сверен с шаблоном и, если попадет под один из шаблонов, то будет исполнено действие “Dial(Dongle. )”. Кстати если номер назначения в шаблон не попадет, звонок будет сброшен как неизвестно куда направляемый, можете попробовать позвонить куда-нибудь типа +4. если интересно. Тоже какой-никакой способ защититься от телефонных мошенников, хоть не в Уганду звонить будут, если как-то проберутся.

Теперь контекст [dongle-incoming], для звонков поступающих на сотовый номер:

[dongle-incoming]
include => dongle-incoming-sms
include => dongle-incoming-ussd

exten => _X.,1,Dial(SIP/me)
exten => h,1,Hangup()

Тут все еще проще — любой входящий звонок передается как звонок для клиента [me].
Верхние два раздела включенные как include => dongle-incoming-sms принимают sms и ussd соответственно, и записывают их в обычные текстовые файлы /var/log/asterisk/sms.txt и /var/log/asterisk/ussd.txt где их можно потом прочитать (кодировка UTF-8).

Эпилог

Вот вкратце и все. Но это только самая основа, если кому-то реально интересно как, или не получится у самого (все-таки те кто может все это повторить я уверен на 95% могут все это сделать и сами, без инструкции, и даже дополнить всем чего тут не хватает), я могу продолжить развив эту тему — как настроить sms чтобы они принимались и отправлялись на софт-клиент так же как звонки; как изменить dialplan таким образом чтобы номер был занят когда SIP клиент не подключен, либо звонящий попадал в Voicemail.

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

PPS. WARNING, DISCLAIMER: поступила информация:
«Дело в том, что использование любых шлюзов прямо запрещено всеми сотовыми операторами. Вот „Условия оказания услуг связи МТС“:
static.mts.ru/uploadmsk/contents/1656/uslovia_msk_06042012.pdf

Пункт 1.3 Услуги связи МТС не могут быть использованы Абонентом без дополнительного письменного согласования с Оператором для… установки шлюзов для доступа к сети
электросвязи и Интернет-телефонии…

Такие же пункты есть в условиях других операторов сотовой связи, ибо маржа на роуминге зашкаливающая, и отказываться от такого навара операторы не будут. За использование подобного шлюза могут просто заблокировать сим-карту.»

Источник

Оцените статью