Что бы настроить Asterisk на OpenWRT необходимо выполнить следующие шаги
- Установить OpenWRT на маршрутизатор;
- Перенести систему на внешний диск (флешку);
- Установить и настроить 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?
И второй вопрос, по такому принципу можно подключится к SIP с другой страны имея выделенный IP адрес?
Сейчас уже не скажу какая была версия, я знаю что в последней версии они странным образом собрали, что не хватало места для установки пакетов работы флешки и мне пришлось собирать свою версию из svn. Позже может быть выложу как это делается. По второму вопросу — да можно, в принципе для этого и делалось это всё :), главное открыть порты за маршрутизатором ну и т.д.
Приветствую!
А какой USB донгл использовался в эксперименте? На сколько я понимаю, так называемые 3G/4G модемы умеют только режим передачи данных.
Здравствуйте. Использовался Huawei E173. На счёт 4G может быть, но 3G модемы которые я знаю могут и звонить.
Здравствуйте. Хочу построить данный шлюз из E173 + D-Link DIR620. Все вроде бы ничего, но как только я пытаюсь сделать вызов (не важно на какой номер) происходит Segmentation Fault. dmesg,log,консоль никакой инфы для отладки больше не дает. Подскажите, как можно было бы с вами связаться ? Очень нужно.
Здравствуйте Георгий, отписал Вам на почту
Здравствуйте еще раз. Ответил на письмо, но ответа от Вас так и не получил. Возможно не дошло ? Если таки нет, возможно у вас есть какие-либо Skype,ICQ, Jabber для того чтобы можно было оперативно связаться ?
С Уважением Георгий.
Здравствуйте.DIR320, установил прош. от Олега не могу найти chan_datacard.so для Asterisk18, или можно лучше настроить через dongle ?
Здравствуйте, для Asterisk18 нужно собирать самому из исходников chan_dongle. С chan_datacard я не связывался поэтому не скажу. Да и что то не так вообще даже с Asterisk11 версии, с Георгием пол вечера пытались запустить — бестолку… Хотя возможно дело было в прошивке. Пробуйте использовтаь версию Asterisk11. На 18 версию потренеруюсь может на выходных к своему маршрутизатору.
Здравствуйте,На мой 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.
Здравствуйте Леонид. Буквально несколько недель назад у сообщества openwrt произошло что то странное. Они потеряли свой сервер на котором всё хранилось. Сейчас они восстанавливают его, и на данный момент, не знаю как будет дальше, в конфигах opkg необходимо поменять зеркала на http://downloads.openwrt.org/snapshots/trunk/brcm47xx/generic/packages/
т.е. у них поменялась структура, может быть в будущих прошивках это учтут, но я не знаю. Я всё таки не разработчик openwrt и не помогаю их сообществу.
Здравствуйте. Да еще одна проблема, не могу найти прошивку для DIR320 А2 с файловой системой ext4, только ext2.
Леонид, посмотрите эту статью
Здравствуйте Владимир. Подшоманил я но так толком и не получилось. В просторах интернета добыл прошивку. Устанавил необходимые модули для работы с usb и работы с файловой системой ext4, но флешку так и не видит. Да и файл vi /etc/config/fstab не дает изменять. Чем можете помочь ?
Здравствуйте. Установил Asterisk, правда, настроил как вы написали и исходящая связь есть а входящей нету, перерыл интернет сделал. Dir-320 + Asterisk + E173, с E171 пробовал не хочет работать.
Здравсвуйте Леонид, скажите из-за чего не работали входящие звонки? У меня где то ошибка в статье? А по поводу модемов честно ничего не скажу, не знаю и модема у меня такого нету что бы проверить( может быть прошивка новая? и он не понимает, разное может быть…
Здравствуйте. Я правда не искал в чем проблема, но взял с этого примера http://blog.denisbondar.com/post/asterisk-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-2-%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0-%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2%D0%BE%D0%B2-%D1%81%D0%BD%D0%B0-dongle
Здравствуйте. Хочу построить данный шлюз из E1550 + Asus WL500GP V2 . Все установил, вроде все настройки прописал, но как только я пытаюсь сделать вызов (не важно на какой номер) происходит Segmentation Fault. dmesg,log,консоль никакой инфы для отладки больше не дает. Видел подобную ситуацию в комментах.Подскажите, как можно было бы с вами связаться ? Очень нужно.
Я вот не помню была ли именно в моём случае такая беда, вроде как из транка норм было, а релизная тоже не работала, я уже и не вспомню, а то что разбирались так я ничем помочь и не смог тогда
Юрий. таже проблема. для Asus WL500GP V2 лучше используй прошивку от Энтузиастов
Дорогой Владимир, в Вашем описании всё предельно понятно и ясно, Спасибо.
Но, собственно ключевой монет истины — Как именно собрать образ с пакетами (для переноса системы на флешку и dongle- asterisko- достаточный)?
Прошу Вас, пожалуйста, будьте любезны — распишите пожалуйста подробно в командах терминала. Можно без комментариев.
С Уважением к Вашему таланту.
Интересует еще 1 вопрос..
Обязатель указывать imai донлгла?
или можно сделать както универсально?
Вроде как да, это давно было, да я и не пробовал не указывать