Роутер + gprs модем = mini voip АТС или gsm шлюз своими руками _...

7
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» букву диска меняем на свою. Устанавливаем настройки сетевой карты (к которой подключен роутер):

Upload: ttv100

Post on 04-Dec-2015

36 views

Category:

Documents


7 download

DESCRIPTION

mini VoIP АТС

TRANSCRIPT

Page 1: Роутер + GPRS модем = mini VoIP АТС или GSM шлюз своими руками _ Хабрахабр

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 шлюз своими руками _ Хабрахабр

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 шлюз своими руками _ Хабрахабр

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 шлюз своими руками _ Хабрахабр

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 шлюз своими руками _ Хабрахабр

[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 шлюз своими руками _ Хабрахабр

А экстренные вызовы по 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 шлюз своими руками _ Хабрахабр

Самая сложная игра всехвремён

Почему существует так многоПитонов?

Портативный спектрометрнабрал на 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-сервис для разработчиков

Заказы для фрилансеров

Уютная и дружелюбная