Роутер + gprs модем = mini voip АТС или gsm шлюз своими руками _...
DESCRIPTION
mini VoIP АТСTRANSCRIPT
![Page 1: Роутер + GPRS модем = mini VoIP АТС или GSM шлюз своими руками _ Хабрахабр](https://reader031.vdocuments.mx/reader031/viewer/2022013115/563db837550346aa9a91a56d/html5/thumbnails/1.jpg)
29 июля 2011 в 10:01
Роутер + GPRS модем = mini VoIP АТС илиGSM шлюз своими руками из песочницы
Железо
На днях появилась необходимость поднять в удаленном, маленьком, офисе
телефонию.
Стабильного канала Интернет, как и в большинстве удаленных регионов, в городке
не нашлось, по этому задача свелась к созданию бюджетной АТС с локальным
GSM каналом + VoIP связь с центральной (корпоративной) АТС.
Описание решения
Система состоит:
1. Роутер — DLink DIR-320. Конечно можно было посмотреть на более
производительные (например ASUS RT-N16, 400Мгц против 200Мгц), но задача
собрать бюджетное рещение (4500р. Asus против 1500 Dlink).
2. GPRS модем — Huawei E1550, этот выбор обаснован техническими
особенностями, причины будут ясны по мере прочтения статьи.
3. USB Hub 7 портов — StLab, можно любой другой, главное — внешнее питание.
4. MicroSD Flash на 1ГБ — любая (объем тоже может быть большим).
Предстоящие задачи:
1. Прошиваем роутер «альтернативной» прошивкой.
2. Подготовка GPRS модема.
3. Монтируем MicroSD карту для устанавливаемого на роутер ПО.
4. Установка и настройка на роутер IP-PBX Asterisk.
Прошиваем роутер «альтернативной» прошивкой
Этот пункт наверное очень «замылен», и тем неменее крадко приведу
последовательность действий.
Саму прошивку можно взять отсюда, ее особенностью является ядро верси 2.6,
т.к. 2.4 не поддерживает тайминги процессора, что очень необходимо как
астериску так и его модулю chan_datacard (с помощью которого мы и будем
использовать GSM модем как канал).
В связи с ограничениями Flash выбранного роутера из прошивки исключены Samba,
FTP, SSH, что без труда можно доустановить потом.
Прошивку скачали, осталось прошить. Предпологается что в руках DIR-320 «из
коробки».
В корне системного диска на ПК (для удобства) создадим каталог «bin», в него
помещаем прошивку и переименовываем ее в firmware.bin.
Там-же (в каталоге bin), создаем скрипт flashing.bat со следующим содержимым:
@Echo Off
:BEGIN
ping -n 1 -w 1 192.168.0.1
If errorlevel 1 Goto BEGIN
If errorlevel 0 Goto FLASH
Goto END
:FLASH
Echo *** Start Flashing ****
tftp -i 192.168.0.1 put c:\bin\firmware.bin
:END
В строке «c:\bin\firmware.bin» букву диска меняем на свою.
Устанавливаем настройки сетевой карты (к которой подключен роутер):
![Page 2: Роутер + GPRS модем = mini VoIP АТС или GSM шлюз своими руками _ Хабрахабр](https://reader031.vdocuments.mx/reader031/viewer/2022013115/563db837550346aa9a91a56d/html5/thumbnails/2.jpg)
IP адрес — 192.168.0.2
Маска подсети — 255.255.255.0
При выключенном питании роутера нажимаем и удерживаем кнопку Reset (задняя
панель роутера), включаем питание.
Как только на роутере загорится индикатор LAN порта отпускаем кнопку Reset и
запускаем скрипт flashing.bat.
Прошивка займет 1-2 минуты, как только загорится индикатор статуса —
сбрасываем настройки роутера, нажатием с удержанием кнопки Reset пока не
заморгает индикатор статуса.
Настройки сетевой карты возращаем на «получать автоматически».
IP адрес роутера — 192.168.1.1, логин от WEB интерфейса управления —
admin/admin.
Кратко необходимые настройки роутера:
1. Change Name — для удобства можно сменить на root.
2. Change Password — меняем на свой.
3. Убеждаемся что telnet разрешен.
4. Примеряем настройки и перезагружаем роутер.
Подготовка GPRS модема
В своем «нормальном» состоянии модем E1550 виден ОС как составное USB
устройство.
Роутеру мешает наличие эмуляции модемом CDRom с ПО, вот ее то (эмуляцию) мы
и отключим, а заодно и привязку к симкарте оператора снимем.
1. Нам потребуется dc-unloker для ввода команд и отображения состояния
устройства, скачать его можно здесь.
Качаем, устанавливаем.
2. Подключаем GSM модем с MicroSD картой к ПК, дожидаемся установки
драйверов и обнаружения уствройства.
3. Запускаем dc-unloker и нажимаем «Поиск».
4. Как только устройство будет найдено увидим краткое его описание, с
перечислением IMEI, версии ПО и прочее. Копируем IMEI в буфер.
5. Идем на страницу OnLine генератора кодов разблокировки.
6. Вставляем IMEI и заполняем капчу. В резултате получаем 2 кода Unlock и Flash
(код для перепрошивки устройства). Нам нужен Unlock, копируем в буфер.
7. В dc-unloker необходимо выполнить 2 команды, в текстовом окне:
AT̂U2DIAG=256 (девайс в режиме модем + Card Reader)
AT̂CARDLOCK="<Unlock код из буфера>"
Модем отвязан от опеторских SIM и не эмулирует CDRom.
Монтируем MicroSD карту для устанавливаемого на роутер ПО
1. Используемое ПО:
Putty
WinCP
2. Подключаем модем к роутеру. Включаем питание роутера.
3. Используя протокол Telnet в Putty подключаемся к роутеру IP 192.168.1.1,
логин/пароль admin/admin.
4. Используя утилиту fdisk удаляем существующие разделы с карты, MicroSD будет
видна как /dev/sda.
Выполняем команды:
fdisk /dev/sda
Command (m for help): p
Если разделы есть, последовательно удаляем их:
Command (m for help): d
Если разделов нет либо удалили на предыдущем этапе:
Command (m for help): n
p
1
далее везде по умолчанию (просто Enter)
Command (m for help): w
5. Созданный раздел отформатируем:
mke2fs -j /dev/discs/disca/part1
6. Смонтируем раздел в каталог /opt
mount /dev/discs/disca/part1 /opt
7. Следующие команды позовлят в дальнейшем использовать ipkg для установки
пакетов из репозитория:
mkdir -p /opt/tmp/ipkg
ipkg.sh update
ipkg.sh install ipkg-opt
![Page 3: Роутер + GPRS модем = mini VoIP АТС или GSM шлюз своими руками _ Хабрахабр](https://reader031.vdocuments.mx/reader031/viewer/2022013115/563db837550346aa9a91a56d/html5/thumbnails/3.jpg)
ipkg update
8. Установим необходимый (либо просто удобный) софт из репозитория:
ipkg install mc (файловый менеджер)
ipkg install nano (текстовый редактор)
ipkg install opnenssh (SSH сервер и SFTP)
ipkg install asterisk16 (IP АТС астериск)
9. Настроим автомонтирование MicroSD карты и автозапуск OpenSSH сервера и
Asterisk:
в каталоге /etc создаем файл fstab, наприемр так:
touch /etc/fstab
открываем (nano /etc/fstab) и пишем в него:
#!/bin/sh
/dev/discs/disca/part1 /opt ext3 rw,noatime 1 1
в каталоге /tmp/local/ создаем файл .files:
touch /tmp/local/.files
записываем в него:
/etc/fstab
в каталоге /tmp/local/ создаем каталог sbin и в нем следующие файлы
mkdir /tmp/local/sbin
touch /tmp/local/sbin/pre-mount (скрипт вызывающийся перед монтированием)
touch /tmp/local/sbin/post-mount (скрипт вызывающийся после монтирования)
touch /tmp/local/sbin/pre-shutdown (скрипт вызывающийся перед выключении/
перезагрузке)
в файл pre-mount записываем:
#!/bin/sh
e2fsck -f -y -v /dev/discs/disca/part1 (проверка файловой системы перед
монтированием)
в файл post-mount записываем:
#!/bin/sh
/opt/etc/init.d/S40sshd (запуск OpenSSH демона)
/opt/sbin/asterisk (запуск astrisk)
в файл pre-shutdown записываем:
#!/bin/sh
/bin/umount /opt (отмонтировать каталог /opt)
назначаем на созданные скрипты права на исполнение:
cd /tmp/local/sbin
chmod +x /usr/local/sbin/*
сохраняем все изменения в энергонезависимой памяти:
flashfs save
flashfs commit
flashfs enable
перезагружаем роутер:
reboot
После загрузки, если все было выполнено верно, к роутеру можно подключится по
SSH и SFTP.
Установка и настройка на роутер IP-PBX Asterisk
Установку Астериск мы выполнили на предыдущем шаге, осталось настроить его.
Для начала скачиваем архив с модулем chan_datacard отсюда (можете собрать
сомостоятельно его, но описывать весь процесс сборки не хочу, по этому
выкладываю).
Файл chan_datacard.so копируем в каталог /opt/lib/asterisk/modules/
Файл datacard.conf копируем в каталог /opt/etc/astrisk/
В конфиге /opt/etc/astrisk/modules.conf пишем (оригинал желательно сохранить в
другое место):
[modules]
autoload=no
load => format_pcm.so
load => codec_ulaw.so
load => codec_alaw.so
load => app_dial.so
load => app_macro.so
load => app_playback.so
load => app_setcallerid.so
load => app_disa.so
load => app_transfer.so
load => func_timeout.so
load => func_callerid.so
load => func_logic.so
load => func_strings.so
load => pbx_config.so
![Page 4: Роутер + GPRS модем = mini VoIP АТС или GSM шлюз своими руками _ Хабрахабр](https://reader031.vdocuments.mx/reader031/viewer/2022013115/563db837550346aa9a91a56d/html5/thumbnails/4.jpg)
load => pbx_spool.so
load => chan_sip.so
load => res_musiconhold.so
load => func_shell.so
load => func_channel.so
load => chan_datacard.so
load => chan_oss.so
В конфиге /opt/etc/asterisk/datacard.conf пишем (обратите внимание, в данном
конфиге подключено 2 модема):
[datacard0]
context=datacard-incoming ; context for incoming calls
audio=/dev/ttyUSB1 ; tty port for audio connection
data=/dev/ttyUSB2 ; tty port for AT commands
resetdatacard=yes ; reset datacard during initialization
disablesms=yes
rxgain=3 ; increase the incoming volume
txgain=3 ; increase the outgoint volume
group=1 ; calling group
[datacard1]
context=datacard-incoming ; context for incoming calls
audio=/dev/ttyUSB4 ; tty port for audio connection
data=/dev/ttyUSB5 ; tty port for AT commands
resetdatacard=yes ; reset datacard during initialization
disablesms=yes
rxgain=3 ; increase the incoming volume
txgain=3 ; increase the outgoint volume
group=1 ; calling group
В конфиге /opt/etc/asterisk/sip.conf пишем (оригинал желательно сохранить в
другое место):
[general]
context=from-pstn-unauth
allowoverlap=yes
allowguest=yes
alwaysauthreject=yes
bindport=5060
bindaddr=0.0.0.0
srvlookup=no
nat=yes
canreinvite=no
insecure=invite
tos_sip=cs3
tos_audio=ef
tos_video=af41
disallow=all
allow=ulaw
allow=alaw
[101]
type=friend
defaultuser=101
secret=test
host=dynamic
context=test
disallow=all
allow=alaw
allow=ulaw
В конфиге /opt/etc/asterisk/extensions.conf пишем (оригинал желательно сохранить
в другое место):
[general]
static=yes
writeprotect=no
autofallthrough=no
clearglobalvars=no
priorityjumping=yes
[globals]
![Page 5: Роутер + GPRS модем = mini VoIP АТС или GSM шлюз своими руками _ Хабрахабр](https://reader031.vdocuments.mx/reader031/viewer/2022013115/563db837550346aa9a91a56d/html5/thumbnails/5.jpg)
[test]
exten => _8XX.,1,Dial(Datacard/g1/${EXTEN})
exten => _8XX.,n,Hangup()
[datacard-incoming]
exten => _.,1,Dial(SIP/101)
exten => _.,n,Hangup()
Убеждаемся что симкарты используемые в модеме не требуют PIN (в противном
случае отключаем).
Перезегружаем роутер.
Подключаемся SIP клиентом к серверу с учеткой [email protected] и паролем test.
Входящие вызовы будут поступать на этот внутренний номер.
Исходящие вызовы будут посылаться через GSM модемы.
PS: настройки астериска приведены исключительно в позновательных целях, для
построения демонстрационного стенда, для использования в боевом режиме
рекомендую изучить документацию по Asterisk.
Astrisk, DIR-320, VoIP, GSM E1550
32152+56 254 Dobrotin G+6,7
Комментарии (29)
Количество модемов поразило.
Не буду обманывать, на 7 модемах не проверялись одновременные звонки, боюсь 230 Мгц
роутера это не потянут. Хотя… учитывая что DSP обработка находится на модеме а не на
роутере, все может быть )
За подготовку GPRS модема — спасибо!
Перенесите же его скорей из Песочницы в профильный блог, например DIY
В VoIP имхо
Я перешивал роутер и юзал сторонний софт. Делал IP ATX на астере. Но почему-то никогда не
совмещал это. Интересное бюджетное решение.
Интересует использование этого 200мгц железа с астером, я думаю, что тормозить будет при
интенсивном использовании/при использовании в качестве IVR и т.п. У меня такой дома стоит,
он при 40мбит/с под 100% занятость процессора показывает.
Да, тестирование под серьезной нагрузкой не проводилось, т.к. нужны были 4 рабочие
места с телефоном.
Но однозначно сказать, что при незначительных нагрузках просядет, не могу.
В плане трафика — он мал, если пользовать 711 кодек — 64 килобита (без заголовков).
IVR — да, может нагрузить прилично.
Номера для скорой и милиции как будете пользовать? Через мобильник нет автоматического
перенаправления в ближайшую неотложку. Рекомендую добавить шлюз на аналог линию,
поверьте мне это намного спокойней.
Да, именно по этому в ближайшее время хочу к этому решению добавить шлюз LinkSys
SPA 3102 (1fxo,1fxs), и с него внешнюю линию регистрировать на астериске (на роутере) как
транкового абонента.
И «бюджетность» сохранится, т.к. это один из самых дешевых шлюзов :-)
+2zedalert, 29 июля 2011 в 10:09 #
0Dobrotin, 29 июля 2011 в 10:13 # ↑
01nd1go, 29 июля 2011 в 11:40 #
+21nd1go, 29 июля 2011 в 11:56 #
+1Litiy, 29 июля 2011 в 14:29 # ↑
0Litiy, 29 июля 2011 в 14:32 #
0Dobrotin, 29 июля 2011 в 14:42 # ↑
0xReaper, 29 июля 2011 в 15:16 #
0Dobrotin, 29 июля 2011 в 15:20 # ↑
![Page 6: Роутер + GPRS модем = mini VoIP АТС или GSM шлюз своими руками _ Хабрахабр](https://reader031.vdocuments.mx/reader031/viewer/2022013115/563db837550346aa9a91a56d/html5/thumbnails/6.jpg)
А экстренные вызовы по 112 по-моему сейчас все операторы принимают.
И сами перенаправляют вызов в зависимости от локации.
Они ничего не гарантируют, ни один сотовый оператор даже в европе не гарантирует
точное перенаправление звонков в неотложку, да они пытаются, но если дойдёт до суда
то в контракте очень четко всё написано. А крайний Вы.
А вбить прямые номера в датаплан? Вроде помимо 03 и т.д. есть и локальные номера
отделения милиции местного, пожарки районной и т.д.? Это с «чистым» мобильным
проблема — где именно находитесь — фз относительный, а тут — просто заранее
выяснить можно.
Да, действительно это выход. В голову сразу не пришло.
Что произойдёт если без вашего ведома номер сменился? У нас была такая же
проблема, и мы Временнo сделали перенаправление вручную, но в конце концов
перебили на авто определение.
Такие вещи имеют тенденцию забыватся, до рокового момента.
Спасибо, хорошая статья. Только вот модем всё-таки Huawei
Спасибо, поправил. К сожалению грамматика страдает :-(
Ну тогда уж и утилита fdisk
* Используя утилиту fdisck *
Спасибо, поправил.
Прошу прощения.
а как живет связка при активных 2х (я так понял сейчас 2 модема используется) звонках на
GSM, у обоих абонентов связь не цокает, не рвется и эхо не мучает? роутер справляется или
сильно проседает?
При 2х активных разговорах нареканий нет.
Единственное о чем наверное стоит упомянуть это не совсем понятное поведение софтфона
«CounterPath Bria Professional» который учавствовал в тестах до подключения аппаратных
VoIP телефонов.
Заключалось это «поведение» в повторном ложном входящем вызове при завершении
(входящего) разговора. Т.е. стоило только закончить разговор как софтфон считал, что
поступает новый вызов (которого на самом деле не было).
У этой конторы был отличный софтфон 3тей версии, сейчас слепили, извините говно, не
ищите правды это софтфон.
Да, полностью согласен. И для Android их детище меня не впечатлило, предполагал
что будет иначе.
Астериск по-умолчанию сам определяет какой из GSM каналов сейчас свободен и куда
посылать вызов, или это кропотливая работа с конфигами?
0Dobrotin, 29 июля 2011 в 15:24 # ↑
0xReaper, 29 июля 2011 в 15:33 # ↑
+1Siorinex, 1 августа 2011 в 11:40 # ↑
0Dobrotin, 1 августа 2011 в 12:02 # ↑
0xReaper, 1 августа 2011 в 13:48 # ↑
0sanfteam, 29 июля 2011 в 15:30 #
0Dobrotin, 29 июля 2011 в 15:36 # ↑
0garbager, 30 июля 2011 в 18:29 # ↑
0Dobrotin, 30 июля 2011 в 18:31 # ↑
0sanfteam, 29 июля 2011 в 15:43 #
0Dobrotin, 29 июля 2011 в 15:49 # ↑
0xReaper, 29 июля 2011 в 15:51 # ↑
0Dobrotin, 29 июля 2011 в 15:53 # ↑
0sanfteam, 29 июля 2011 в 16:28 #
![Page 7: Роутер + GPRS модем = mini VoIP АТС или GSM шлюз своими руками _ Хабрахабр](https://reader031.vdocuments.mx/reader031/viewer/2022013115/563db837550346aa9a91a56d/html5/thumbnails/7.jpg)
Самая сложная игра всехвремён
Почему существует так многоПитонов?
Портативный спектрометрнабрал на Kickstarter 1,3
миллиона долларов вместо 200тысяч
Да, оба модема входят в группу «1», диалплан использует группу «1» для исходящих
вызовов, соответственно выбор модема «на совести» астериска.
Хочу посоветовать вместо модема E1550, более современную модель E1820. Не знаю, удастся
ли его так же препарировать, но радиочасть у него полчуше будет. Мои эксперименты
показали, что при прочих равных, когда E1550 дает скорость 600 кбит/с, у E1820 получается
3,5 Мбит/с.
E1820 не имеет прошивок поддерживающих передачу голоса к сожалению.
Собираюсь примерно таким же способом отдать домашний воип родителям в сельскую
местность. У них сейчас хуавей B220 (4LAN, WiFi, 1SIM 3G/GPRS) к нему поставить Linksys
WRT54GL с прошивкой ddwrt. OpenVPN до дома и IAX2 до домашнего астериска. Или как
вариант dd-wrt c asterisk и sip пиры до провайдеров телефонии. В качестве телефона Gigaset
470IP.
Вопрос такой, в вашем случае почему не использовали dd-wrt с астериском + мультифон или
пир до головного офиса?
Дело в том что у Linksys WRT54GL как и у DIR-320 есть одна очень не приятная «болезнь» —
флешь 4 Мб.
Существующая dd-wrt для обоих (этих) устройств основана на ядре Linux версии 2.4, но
поддержка таймингов процессора появилась начиная с ядра версии 2.6 (что очень нужно
астриску и модулю chan_datacard, но будет и на ядре 2.4 работать с проблемами).
Я пробовал пересобирать openwrt на версии 2.6 под dir-320, что только не выкидывал из
прошивки (т.к. превышал 4 Мб при сборке) так и не удалось собрать более менее рабочей
прошивки.
Мультифон и линк до офиса думал, но канал не стабильный, по этому основные каналы все-же
GSM.
спасибо, отличный мануал!
замечание: в строке
ipkg install opnenssh (SSH сервер и SFTP)
описка в openssh. для копи-пастеров критично :) только что «помогал» одному.
0Dobrotin, 29 июля 2011 в 16:35 # ↑
0Barabek, 29 июля 2011 в 23:13 #
0Dobrotin, 29 июля 2011 в 23:49 # ↑
0akshakirov, 30 июля 2011 в 00:19 #
+1Dobrotin, 30 июля 2011 в 00:29 #
0denisnikulin, 4 августа 2011 в 02:26 #
Только зарегистрированные пользователи могут оставлять комментарии.Войдите, пожалуйста.
Все мозги в одном месте
Q&A-сервис для разработчиков
Заказы для фрилансеров
Уютная и дружелюбная