Настройка Asterisk c модемами на OpenWRT (LEDE) 17 Voip GSM CDMA Gateway


Самым первым делом рекомендую прочитать законы своей страны.

https://ibigdan.livejournal.com/7493442.html
https://itc.ua/news/nelegalnaya-torgovlya-mezhdunarodnyim-golosovyim-trafikom-v-ukraine-refayl-prinosit-moshennikam-millionyi-dollarov-ezhegodno/
НИКАКОЙ ОТВЕТСТВЕННОСТИ ЗА ТО, ЧТО МЫ ДЕЛАЕМ СО СВОИМИ ДЕВАЙСАМИ, НИКТО КРОМЕ НАС НЕСТИ НЕ МОЖЕТ.
Итак, приступим.
Как-то попросили меня помочь с настройкой Asterisk и модемов (2 GSM — HUAWEI 1550, 2 CDMA — ZTE AC8710 либо AC8700 разлоченные, настроенные, прошитые) через usb хаб (Orico MH4U USB 3.0 с дополнительным питанием в 4 ампера) на роутере Xiaomi Mini. 
Модемы cdma могут быть как с прошитым номером так и с руим картой, модемы должны быть переключены в работу в режиме 1х а не в EVDO. По вопросам настройки cdma модемов обращайтесь в скайп: vitalydgan
Модемы gsm должны быть разлочены на работу в voice режиме, прошиты оптимальной прошивкой для работы с asterisk chan_dongle, так же оператор видит IMEI модема и может заблокировать сим карту изза звонков с модема.

Роутер имеет следующие характеристики и поддерживает OpenWRT:
  • Процессор MT7620A 580MHz;
  • ROM: 16MB SPI Flash;
  • ОЗУ: 128MB DDR2;
  • Нет встроенного HDD (можно подключить по USB внешний);
  • 2.4 Ghz WiFi 2×2 (до 300 Мбит/сек);
  • 5 Ghz WiFi 2×2 (до 867 Мбит/сек);
  • WAN (до 100 Мбит/сек);
  • LAN х2 (до 100 Мбит/сек);
  • Внешние двухдиапазонные ненаправленная антенны — 2 шт.
Видео обзор Xiaomi Mini: Тыцклац или на выбор.
Первым делом нужно было бы его прошить OpenWRT.

Прошивка Xiaomi Mini

Востановление, после неудачной прошивки, можно сделать только через дамп (выпаиваем SPI Flash память и прошиваем ее дампом в программаторе).
В youtube много видео как это сделать: Прошивка openwrt xiaomi
Есть несколько вариантов прошивки:
  1. Самый легкий описан тут https://teamhelps.pp.ua/top/kak-proshit-router-xiaomi-mini/.
  2. Самая сложная для меня через официальный сайт (http://en.miui.com/thread-64391-1-1.html).
  3. Прошить дамп (Видел на 4pda.ru).
Прошиваем LEDE например эту (https://downloads.openwrt.org/releases/17.01.4/targets/ramips/mt7620/lede-17.01.4-ramips-mt7620-miwifi-mini-squashfs-sysupgrade.bin).

Сборка прошивки LEDE из исходников.


Так как для работы CDMA модемов нам нужен Asterisk модуль chan_dongle с поддержкой cdma которого нет в репозитории OPENWRT, прийдется собрать его в ручную, заодно и все прошивку в настройками соберем. Для того чтобы при сбросе настроек не потерять настройки asterisk и usb hub.
Итак для этого нам понадобится ОС Ubuntu (КАК УСТАНОВИТЬ UBUNTU В VIRTUALBOX), например на виртуальной машине либо на физической (чем мощнее процессор тем быстрее ее соберем, у меня на Atom N2800, 4GB RAM выходит около 8-12 часов сборки). Видео подборка мануалов по сборке openwrt: тут, заметьте в видео мануалы идут под другую платформу, не копируйте команды которых не знаете, подборка для личного развития.
  1. Устанавливаем нужные для сборки пакеты в Ubuntu, открываем консоль и пишем:
  sudo apt-get install subversion git g++ libncurses5-dev zlib1g-dev gawk libssl-dev unzip make
2. Копируем исходные коды OpenWRT:
git clone git://github.com/openwrt/openwrt.git
3. Переходим в каталог openwrt в который загрузились исходные коды:
cd openwrt
4. Обновляем пакеты:
./scripts/feeds update -a
5. Нужно заменить make файл модуля Asterisk, chan_dongle на make файл с поддержкой CDMA (исходники с поддержкой CDMA автоматически скачиваются отсюда https://github.com/superl3n1n/asterisk-chan-cdma-gsm-dongle):
скачиваем файл http://teamhelps.pp.ua/repo/cdma/Makefile
заменяем файл в openwrt/feeds/telephony/net/asterisk-11.x-chan-dongle/
6. Устанавливаем пакеты:
./scripts/feeds install -a
7. Проверим все исходники:
make prereq
8. Вызовим меню для конфигурации прошивки:
make menuconfig
Перемещение по пунктам осуществляется клавишами клавиатуры: вверх-вниз, пробел и esc.
Target System для Xiaomi Mini будет ramips процессор mt7620
Target Profile выберите miwifi-mini.
Также нужно выбрать все те пакеты (программы) которые нам нужны в прошивке:
  • * — встроенная в прошивку парограмма
  • М- пакет для установки


Как добавить свои настройки в саму прошивку (например добавить настройки asterisk, чтобы после hard reset роутера настройки сохранялись) :

Сборка прошивки осуществляется коммандой:
make -j5 V=-1
Где -j5 это колличество ядер -1, V=-1 минимальная выдача информации во время сборки. make -j5 V=-1 (сборка для 4 ядер)
После сборки прошиваем/обновляем свой роутер.

Подключение к роутеру по SSH

Заходим в админку роутера по адресу http://192.168.1.1 нажимаем на кнопку Login, переходим по ссылке и ставим свой пароль на вход, он же будет для авторизации по shh.
Скачиваем putty либо используем другой ssh client:
Host Name: 192.168.1.1
Port: 22
Connection type: SSH
Нажимаем кнопку Open, в открывшимся окне вводим логин root и пароль (тот что ставили в Luci админке роутера).
Хорошо будет знать команды для управления openwrt.
Для удобного перемещения по каталогам можно установить файловый менеджер midnight commander:
opkg update
opkg install mc

Настройка портов USB хаба

Из-за того что cdma модемы нельзя привязать к asterisk по IMEI нам нужно будет настроить симлинк на порт USB хаба.
Для этого скачиваем 2 файла и один заменяем:
wget https://teamhelps.pp.ua/repo/cdma/hotplug.d/usb/99-modem-usb1 -O /etc/hotplug.d/usb/99-modem-usb1
wget https://teamhelps.pp.ua/repo/cdma/hotplug.d/usb/99-modem-usb3 -O /etc/hotplug.d/usb/99-modem-usb3
В файле /etc/rc.local перед exit 0 поменять содержимое на:
echo ‘1-1.1’ > /sys/bus/usb/drivers/usb/unbind
echo ‘1-1.3’ > /sys/bus/usb/drivers/usb/unbind
sleep 5
echo ‘1-1.1’ > /sys/bus/usb/drivers/usb/bind
echo ‘1-1.3’ > /sys/bus/usb/drivers/usb/bind
/etc/init.d/asterisk restart
Эти действия создают правила для hotplug.d чтобы при подключении либо отключении модемов с USB портов (1 и 3) автоматически создавалить симлинки
/dev/usb1cdma0, /dev/usb1cdma1, /dev/usb1cdma2 и для 3 порта /dev/usb3cdma0, /dev/usb3cdma1, /dev/usb3cdma2. Таким же способом можно увеличить колличество управляемых портов. Нужно сделать для тех портов на хабе куда будем подключать CDMA модемы, GSM умеют находится по IMEI либо IMSI номеру. Также при загрузке роутера (файл rc.local исполняется после загрузки роутера) происходит сброс 1 и 3 порта на usb хабе для того чтобы создались симлинки без физического выключения модемов из хаба.

Настройка Asterisk

Переходим в каталог с настройками Asterisk:
cd /etc/asterisk
Далее нужно открыть файл dongle.conf (файл настроек модуля для asterisk chan_dongle) для редактирования:
mcedit dongle.conf
и в самый конец файла добавить:
[gsm1]
rxgain=2
txgane=2
dtmf=inband
context=from_gsm1
imei=352600110136751 //поиск модема по IMEI
exten=+380660000000
[gsm2]
rxgain=2
txgane=2
dtmf=inband
context=from_gsm2
imei=352622140036851 //поиск модема по IMEI
exten=+380979990000
[cdma1]
context=from_cdma
audio=/dev/usb1cdma2 //поиск модема по симлинку 1 usb порта
data=/dev/usb1cdma0 //поиск модема по симлинку 1 usb порта
dm=/dev/usb1cdma1 //поиск модема по симлинку 1 usb порта
rxgain=3
txgain=3
group=1
cdma=yes
disablesms=yes
[cdma2]
context=from_cdma
audio=/dev/usb3cdma2 //поиск модема по симлинку 3 usb порта
data=/dev/usb3cdma0 //поиск модема по симлинку 3 usb порта
dm=/dev/usb3cdma1 //поиск модема по симлинку 3 usb порта
rxgain=3
txgain=3
group=1
cdma=yes
disablesms=yes
1 и 3 порт хаба будут занимать cdma модемы и подкллючатся к ним будем с помощью symlink, 2 и 4 порт у нас будут подключенны gsm модемы, заметьте что замена cdma модемов между портами 1 и 3 будет иметь последствия тогда как gsm нет. Пример файла: https://teamhelps.pp.ua/repo/cdma/asterisk/dongle.conf
Настройка правил маршрутизации в файле extensions.conf:
Открываем для редактирования:
mcedit extensions.conf
дописываем в конец строки:
[home]
exten => _1XX.,1,Dial(SIP/${EXTEN})
exten => _1XX.,n,Hangup()
exten => _01.,1,Dial(Dongle/gsm1/${EXTEN:2}) //EXTEN:2 удаляет 2 цыфры с начала
exten => _02.,1,Dial(Dongle/gsm2/${EXTEN:2})
exten => _03.,1,Dial(Dongle/cdma1/${EXTEN:2})
exten => _04.,1,Dial(Dongle/cdma2/${EXTEN:2})
exten => _0.,n,Hangup()
[from_cdma]
exten => s,1,Dial(SIP/100)
exten => s,2,Hangup()
[from_gsm1]
exten => sms,1,Noop(Incoming SMS from ${CALLERID(num)} ${BASE64_DECODE(${SMS_BASE64})})
exten => sms,n,System(echo ‘ ${CALLERID(num)}: ${BASE64_DECODE(${SMS_BASE64})}’&)
exten => sms,n,Set(MESSAGE(body)=»From: ${CALLERID(num)}: ${BASE64_DECODE(${SMS_BASE64})}»)
exten => sms,n,Hangup()
exten => ussd,1,Noop(Incoming USSD: ${BASE64_DECODE(${USSD_BASE64})})
exten => ussd,n,System(echo ‘ ${BASE64_DECODE(${USSD_BASE64})}’&)
exten => ussd,n,Hangup()
exten => s,1,Dial(SIP/100)
exten => s,2,Hangup()
[from_gsm2]
exten => sms,1,Noop(Incoming SMS from ${CALLERID(num)} ${BASE64_DECODE(${SMS_BASE64})})
exten => sms,n,System(echo ‘ ${CALLERID(num)}: ${BASE64_DECODE(${SMS_BASE64})}’&)
exten => sms,n,Set(MESSAGE(body)=»From: ${CALLERID(num)}: ${BASE64_DECODE(${SMS_BASE64})}»)
exten => sms,n,Hangup()
exten => ussd,1,Noop(Incoming USSD: ${BASE64_DECODE(${USSD_BASE64})})
exten => ussd,n,System(echo ‘ ${BASE64_DECODE(${USSD_BASE64})}’&)
exten => ussd,n,Hangup()
exten => s,1,Dial(SIP/100)
exten => s,2,Hangup()
С этими настройками звонить через определенный модем можно с помощью префикса, 010974394744 позвоним с модема gsm1 на номер 0974394744, 020974394744 с модема gsm2, 030974394744 c CDMA модема вставленного в первый usb порт хаба, 040974394744 с cdma модема с 3 порта. Для входящих простые правила звонок на внутренний номер 100.
Пример файла extensions.conf: https://teamhelps.pp.ua/repo/cdma/asterisk/extensions.conf
Настройка sip.conf:
В начале файла после [general] ищем allowguest и меняем в значение no тем самым запрещаем гостям звонить через наш астериск:
allowguest=no
Далее указываем ip адрес на котором будет висеть наша атс:
udpbindaddr=192.168.1.1
Либо 0.0.0.0 — сразу на всех интерфейсах (wan, lan) для wan требуется открыть порты в файерволе openwrt:
udpbindaddr=0.0.0.0
Опускаемся в самый конец файла и добавляем строки:
[home](!)
type=friend
callgroup=1
pickupgroup=1
host=dynamic
context=home //Исходящий контекст
deny=0.0.0.0/0.0.0.0 //Запретить все адреса
permit=192.168.1.0/23 //Разрешить подключения только из локальной сети
disallow=all
allow=alaw //Аудио кодек
allow=ulaw //Аудио кодек
[100](home)
username=100 //Имя пользователя
secret=password //Пароль
Сначала мы создаем шаблон для внутренних пользователей [home](!), в этом шаблоне запрещяем подключения всем кроме сети 192.168.1.*, тут [100](home) мы создаем пользователя 100 с шаблоном (настройками) home.
Пример файла настроек sip.conf: https://teamhelps.pp.ua/repo/cdma/asterisk/sip.conf
Все сохраняем и перезагружаемся на всякий случай, коммандой reboot в консоли роутера.

Проверка

заходим в консоль asterisk и выполняем команду dongle show devices:
asterisk -rvvv
dongle show devices
в ответе должно быть похожее:
ID Group State RSSI Mode Submode Provider Name Model Firmware IMEI IMSI Number
intertelecom 2 Free 0 0 0 CDMA AC7810 hidden by Qualcom 1111111111111111 1111111111111111 Unknown
(Обратите внимание chan_dongle видит модем как AC7810 вместо AC8710, эта ошибка ни на что не влияет, просто опечатка автора cdma lib)

Устанавливаем софтфон на свой пк, например microsip, либо на мобильный телефон:
Ссылка на microsip для windows: https://www.microsip.org/downloads
Обзоры sip клиентов для Android: http://www.voipoffice.ru/tags/sip_klienty_dlja_android/
Открываем настройки добавляем ученую запись, с такими настройками (если ничего не меняли):
Имя учетной записи: Любое
Адрес сервера: 192.168.1.1
Порт сервера: 5060
Тип передачи данных: UDP
Логин: 100
Пароль: password
Сохраняем и подключаемся, пробуем звонить, не забываем о префиксе в номере для исходящих 01, 02, 03.

Собранные прошивки для Xiaomi mini без настроек:

Собранные пакеты:


Готовый дамп для прошивки через программатор:

Поделитесь информацией

Share on FacebookTweet on TwitterPlus on Google+


EmoticonEmoticon