OpenWRT Asterisk SIP GSM гейт

Что бы настроить 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 и попробовал позвонить — всё работает 🙂

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

Всего комментариев: 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 версию потренеруюсь может на выходных к своему маршрутизатору.

  7. Leonid /

    Здравствуйте,На мой dir320, прошил openwrt и вот дальше : root@OpenWrt:~# opkg update
    Downloading http://downloads.openwrt.org/snapshots/trunk/brcm47xx/packages/Packages.gz.
    wget: server returned error: HTTP/1.1 404 Not Found
    Collected errors:
    * opkg_download: Failed to download http://downloads.openwrt.org/snapshots/trunk/brcm47xx/packages/Packages.gz, wget returned 1.

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

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

  8. Leonid /

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

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

      Леонид, посмотрите эту статью

  9. Leonid /

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

  10. Leonid /

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

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

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

  12. Leonid /
  13. Юрий /

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

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

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

  14. alex /

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

  15. niifee /

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

  16. Александр /

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

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

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

Оставить ответ