OpenWRT Asterisk SIP GSM гейт

Автор: | 17.05.2015

Что бы настроить Asterisk на OpenWRT необходимо выполнить следующие шаги

  1. Установить OpenWRT на маршрутизатор;
  2. Перенести систему на внешний диск (флешку);
  3. Установить и настроить Asterisk.

Теперь пройдёмся подробней по каждому пункту.

Что бы установить OpenWRT понадобится маршрутизатор с его поддержкой. У меня под рукой был TP-Link MR3220 v.2

Установить систему можно из браузера, это подробно описано на WIKI OpenWRT для каждого маршрутизатора индивидуально, так что думаю можно пропустить.Для переноса системы нам понадобится флешка размера ну наверное больше 1 гБ, это будет даже много, но смотря для чего кому нужно. Её предварительно нужно отформатировать. Создать на ней раздел с файловой системой ext4. Это можно сделать с любого дистрибутива Linux. Я делал из под виртуальной машины на которой установлена Ubuntu.

Дальше запускаем маршрутизатор и делаем вход по ssh. Набираем в консоли:

opkg update

пойдёт обновление дерева пакетов.

opkg install kmod-usb-uhci kmod-usb-storage block-mount kmod-fs-ext4

здесь мы устанавливаем необходимые модули для работы с usb и работы с файловой системой

далее делаем reboot и вставляем флешку (ещё не больше дополнение, я использовал USB hub т.к. у меня нет флешки MicroSD для использования  в USB модеме, поэтому в USB порт подключён USB hub, а тем временем флешка вставлена в USB hub)

в системе флешка должна определится как sda (для уточнения нужно смотреть dmseg)

Дальше приступаем к переносу системы

root@OpenWrt:~# mkdir -p /mnt/usb
root@OpenWrt:~# mount -t ext4 /dev/sda1 /mnt/usb -o rw,sync
root@OpenWrt:~# tar -C /overlay -cvf — . | tar -C /mnt/usb -xvf —

После того как копирование завершено, нужно отредактировать файл fstab

root@OpenWrt:~# vi /etc/config/fstab

находим и меняем секцию mount

config mount
option target   /overlay
option device   /dev/sda1
option fstype   ext4
option options  rw,sync
option enabled  1
option enabled_fsck 0

Сохраняемся и делаем reboot

Система должна загрузится с флешки, проверить это можно набрав df -h (увидим размеры разделов)

Дальше приступим к установке Asterisk. Я выбрал версию asterisk11, т.к. для этой версии есть собранный пакет chan-dongle, который необходим для работы USB модема и Asterisk

пишем в консоли:

opkg install asterisk11

opkg install asterisk11-chan-dongle

opkg install asterisk11-codec-alaw

opkg install asterisk11-codec-gsm

opkg install asterisk11-app-sms

дальше запускаем демон Asterisk

/etc/init.d/asterisk start

если он был запущен делаем stop start

Далее входим в консоль управления Asterisk

asterisk -rv

пишем туда module load chan_dongle.so (или ругнётся что уже запущен или запустится)

вводим dongle show devices

будет что то вроде такого

OpenWrt*CLI> dongle show devices
ID           Group State      RSSI Mode Submode Provider Name  Model      Firmware          IMEI             IMSI             Number
dongle0      0     Free       16   3    3       life:) BY      E173       11.126.16.00.715  861976xxxxxxxxxxx  257040xxxxxxx  3752592xxxxxxx

Значения IMEI и IMSI нужно записать, нам они понадобсятся

Открываем /etc/asterisk/dongle.conf и в самом низу где секция [dongle0] пишем:

[dongle0]
audio=/dev/ttyUSB1              ; tty port for audio connection;        no default value
data=/dev/ttyUSB2               ; tty port for AT commands;             no default value
imei=861xxxxxxxxxxxxx
imsi=257xxxxxxxxxxxxx
context=dongle-incoming;
group=0
rxgain=3;
txgain=3;
resetdongle=yes;
u2diag=-1
usecallingpres=yes
callingpres=allowed_passed_screen

Сохраняем и выходим.

В файле /etc/asterisk/modules.conf прописываем load => chan_dongle.so и перезапускаем Asterisk.

Запускаем asterisk -rv, выполняем dongle show devices и должны увидеть свой модем.

Дальше нужно отредактировать два файла, это sip.conf и extensions.conf

в /etc/asterisk/sip.conf в самом конце пишем следующее:

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

Логин для софтового sip клиента будет ew8bak и пароль который вы указали (конечно это всё можно поменять в этой секции)

Дальше открываем extensions.conf

находим секцию [default] и пишем туда

exten => _375X.,1,Dial(Dongle/dongle0/holdother:+${FILTER(0-9,${EXTEN})})
exten => _+375X.,1,Dial(Dongle/dongle0/holdother:+${FILTER(0-9,${EXTEN})})
exten => _8X.,1,Dial(Dongle/dongle0/holdother:+375${FILTER(0-9,${EXTEN:1})})
exten => _00375X.,1,Dial(Dongle/dongle0/holdother:+375${FILTER(0-9,${EXTEN:3})})
exten => h,1,Hangup()

и закоментируем строку include => demo

дальше ниже пишем

[dongle-incoming-sms]
exten => sms,1,Noop(Incoming SMS from ${CALLERID(num)} ${BASE64_DECODE(${SMS_BASE64})})
exten => sms,n,System(echo ‘${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} — ${DONGLENAME} — ${CALLERID(num)}: ${BASE64_DECODE(${SMS_BASE64})}’ >> /var/log/asterisk/sms.txt)
exten => sms,n,Hangup()

[dongle-incoming-ussd]
exten => ussd,1,Noop(Incoming USSD: ${BASE64_DECODE(${USSD_BASE64})})
exten => ussd,n,System(echo ‘${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} — ${DONGLENAME}: ${BASE64_DECODE(${USSD_BASE64})}’ >> /var/log/asterisk/ussd.txt)
exten => ussd,n,Hangup()

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

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

Сохраняем и перезагружаем Asterisk.

Дальше я установил на компьютер SIP клиент PhonerLite с помощью его соединился с Asterisk и попробовал позвонить — всё работает 🙂

Если будут вопросы, постараюсь ответить.

OpenWRT Asterisk SIP GSM гейт: 23 комментария

  1. Metall

    Какая версия OpenWrt?
    И второй вопрос, по такому принципу можно подключится к SIP с другой страны имея выделенный IP адрес?

  2. vladimir Автор записи

    Сейчас уже не скажу какая была версия, я знаю что в последней версии они странным образом собрали, что не хватало места для установки пакетов работы флешки и мне пришлось собирать свою версию из svn. Позже может быть выложу как это делается. По второму вопросу — да можно, в принципе для этого и делалось это всё :), главное открыть порты за маршрутизатором ну и т.д.

  3. UB1AAJ (Андрей)

    Приветствую!
    А какой USB донгл использовался в эксперименте? На сколько я понимаю, так называемые 3G/4G модемы умеют только режим передачи данных.

    1. vladimir Автор записи

      Здравствуйте. Использовался Huawei E173. На счёт 4G может быть, но 3G модемы которые я знаю могут и звонить.

  4. Георгий

    Здравствуйте. Хочу построить данный шлюз из E173 + D-Link DIR620. Все вроде бы ничего, но как только я пытаюсь сделать вызов (не важно на какой номер) происходит Segmentation Fault. dmesg,log,консоль никакой инфы для отладки больше не дает. Подскажите, как можно было бы с вами связаться ? Очень нужно.

    1. vladimir Автор записи

      Здравствуйте Георгий, отписал Вам на почту

  5. Георгий

    Здравствуйте еще раз. Ответил на письмо, но ответа от Вас так и не получил. Возможно не дошло ? Если таки нет, возможно у вас есть какие-либо Skype,ICQ, Jabber для того чтобы можно было оперативно связаться ?
    С Уважением Георгий.

  6. Leonid

    Здравствуйте.DIR320, установил прош. от Олега не могу найти chan_datacard.so для Asterisk18, или можно лучше настроить через dongle ?

    1. vladimir Автор записи

      Здравствуйте, для Asterisk18 нужно собирать самому из исходников chan_dongle. С chan_datacard я не связывался поэтому не скажу. Да и что то не так вообще даже с Asterisk11 версии, с Георгием пол вечера пытались запустить — бестолку… Хотя возможно дело было в прошивке. Пробуйте использовтаь версию Asterisk11. На 18 версию потренеруюсь может на выходных к своему маршрутизатору.

    1. vladimir Автор записи

      Здравствуйте Леонид. Буквально несколько недель назад у сообщества openwrt произошло что то странное. Они потеряли свой сервер на котором всё хранилось. Сейчас они восстанавливают его, и на данный момент, не знаю как будет дальше, в конфигах opkg необходимо поменять зеркала на http://downloads.openwrt.org/snapshots/trunk/brcm47xx/generic/packages/
      т.е. у них поменялась структура, может быть в будущих прошивках это учтут, но я не знаю. Я всё таки не разработчик openwrt и не помогаю их сообществу.

  7. Leonid

    Здравствуйте. Да еще одна проблема, не могу найти прошивку для DIR320 А2 с файловой системой ext4, только ext2.

  8. Leonid

    Здравствуйте Владимир. Подшоманил я но так толком и не получилось. В просторах интернета добыл прошивку. Устанавил необходимые модули для работы с usb и работы с файловой системой ext4, но флешку так и не видит. Да и файл vi /etc/config/fstab не дает изменять. Чем можете помочь ?

  9. Leonid

    Здравствуйте. Установил Asterisk, правда, настроил как вы написали и исходящая связь есть а входящей нету, перерыл интернет сделал. Dir-320 + Asterisk + E173, с E171 пробовал не хочет работать.

  10. vladimir Автор записи

    Здравсвуйте Леонид, скажите из-за чего не работали входящие звонки? У меня где то ошибка в статье? А по поводу модемов честно ничего не скажу, не знаю и модема у меня такого нету что бы проверить( может быть прошивка новая? и он не понимает, разное может быть…

  11. Юрий

    Здравствуйте. Хочу построить данный шлюз из E1550 + Asus WL500GP V2 . Все установил, вроде все настройки прописал, но как только я пытаюсь сделать вызов (не важно на какой номер) происходит Segmentation Fault. dmesg,log,консоль никакой инфы для отладки больше не дает. Видел подобную ситуацию в комментах.Подскажите, как можно было бы с вами связаться ? Очень нужно.

    1. Vladimir Автор записи

      Я вот не помню была ли именно в моём случае такая беда, вроде как из транка норм было, а релизная тоже не работала, я уже и не вспомню, а то что разбирались так я ничем помочь и не смог тогда

  12. alex

    Юрий. таже проблема. для Asus WL500GP V2 лучше используй прошивку от Энтузиастов

  13. niifee

    Дорогой Владимир, в Вашем описании всё предельно понятно и ясно, Спасибо.
    Но, собственно ключевой монет истины — Как именно собрать образ с пакетами (для переноса системы на флешку и dongle- asterisko- достаточный)?
    Прошу Вас, пожалуйста, будьте любезны — распишите пожалуйста подробно в командах терминала. Можно без комментариев.
    С Уважением к Вашему таланту.

  14. Александр

    Интересует еще 1 вопрос..
    Обязатель указывать imai донлгла?
    или можно сделать както универсально?

    1. Vladimir Автор записи

      Вроде как да, это давно было, да я и не пробовал не указывать

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

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