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

[test]
exten => _8XX.,1,Dial(Datacard/g1/${EXTEN})
exten => _8XX.,n,Hangup()

[datacard-incoming]
exten => _.,1,Dial(SIP/101)
exten => _.,n,Hangup()

Убеждаемся что симкарты используемые в модеме не требуют PIN (в противном случае отключаем).
Перезегружаем роутер.
Подключаемся SIP клиентом к серверу с учеткой 101@192.168.1.1 и паролем test.
Входящие вызовы будут поступать на этот внутренний номер.
Исходящие вызовы будут посылаться через GSM модемы.
PS: настройки астериска приведены исключительно в позновательных целях, для построения демонстрационного стенда, для использования в боевом режиме рекомендую изучить документацию по Asterisk.
Добротин Андрей @Dobrotin
карма
10,2
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (29)

  • +2
    Количество модемов поразило.
    • 0
      Не буду обманывать, на 7 модемах не проверялись одновременные звонки, боюсь 230 Мгц роутера это не потянут. Хотя… учитывая что DSP обработка находится на модеме а не на роутере, все может быть )
  • 0
    За подготовку GPRS модема — спасибо!
  • +2
    Перенесите же его скорей из Песочницы в профильный блог, например DIY
    • +1
      В VoIP имхо
  • 0
    Я перешивал роутер и юзал сторонний софт. Делал IP ATX на астере. Но почему-то никогда не совмещал это. Интересное бюджетное решение.

    Интересует использование этого 200мгц железа с астером, я думаю, что тормозить будет при интенсивном использовании/при использовании в качестве IVR и т.п. У меня такой дома стоит, он при 40мбит/с под 100% занятость процессора показывает.
    • 0
      Да, тестирование под серьезной нагрузкой не проводилось, т.к. нужны были 4 рабочие места с телефоном.
      Но однозначно сказать, что при незначительных нагрузках просядет, не могу.
      В плане трафика — он мал, если пользовать 711 кодек — 64 килобита (без заголовков).
      IVR — да, может нагрузить прилично.
  • 0
    Номера для скорой и милиции как будете пользовать? Через мобильник нет автоматического перенаправления в ближайшую неотложку. Рекомендую добавить шлюз на аналог линию, поверьте мне это намного спокойней.
    • 0
      Да, именно по этому в ближайшее время хочу к этому решению добавить шлюз LinkSys SPA 3102 (1fxo,1fxs), и с него внешнюю линию регистрировать на астериске (на роутере) как транкового абонента.
      И «бюджетность» сохранится, т.к. это один из самых дешевых шлюзов :-)
    • 0
      А экстренные вызовы по 112 по-моему сейчас все операторы принимают.
      И сами перенаправляют вызов в зависимости от локации.
      • 0
        Они ничего не гарантируют, ни один сотовый оператор даже в европе не гарантирует точное перенаправление звонков в неотложку, да они пытаются, но если дойдёт до суда то в контракте очень четко всё написано. А крайний Вы.
        • +1
          А вбить прямые номера в датаплан? Вроде помимо 03 и т.д. есть и локальные номера отделения милиции местного, пожарки районной и т.д.? Это с «чистым» мобильным проблема — где именно находитесь — фз относительный, а тут — просто заранее выяснить можно.
          • 0
            Да, действительно это выход. В голову сразу не пришло.
          • 0
            Что произойдёт если без вашего ведома номер сменился? У нас была такая же проблема, и мы Временнo сделали перенаправление вручную, но в конце концов перебили на авто определение.
            Такие вещи имеют тенденцию забыватся, до рокового момента.
  • 0
    Спасибо, хорошая статья. Только вот модем всё-таки Huawei
    • 0
      Спасибо, поправил. К сожалению грамматика страдает :-(
      • 0
        Ну тогда уж и утилита fdisk
        * Используя утилиту fdisck *
        • 0
          Спасибо, поправил.
          Прошу прощения.
  • 0
    а как живет связка при активных 2х (я так понял сейчас 2 модема используется) звонках на GSM, у обоих абонентов связь не цокает, не рвется и эхо не мучает? роутер справляется или сильно проседает?
    • 0
      При 2х активных разговорах нареканий нет.
      Единственное о чем наверное стоит упомянуть это не совсем понятное поведение софтфона «CounterPath Bria Professional» который учавствовал в тестах до подключения аппаратных VoIP телефонов.
      Заключалось это «поведение» в повторном ложном входящем вызове при завершении (входящего) разговора. Т.е. стоило только закончить разговор как софтфон считал, что поступает новый вызов (которого на самом деле не было).
      • 0
        У этой конторы был отличный софтфон 3тей версии, сейчас слепили, извините говно, не ищите правды это софтфон.
        • 0
          Да, полностью согласен. И для Android их детище меня не впечатлило, предполагал что будет иначе.
  • 0
    Астериск по-умолчанию сам определяет какой из GSM каналов сейчас свободен и куда посылать вызов, или это кропотливая работа с конфигами?
    • 0
      Да, оба модема входят в группу «1», диалплан использует группу «1» для исходящих вызовов, соответственно выбор модема «на совести» астериска.
  • 0
    Хочу посоветовать вместо модема E1550, более современную модель E1820. Не знаю, удастся ли его так же препарировать, но радиочасть у него полчуше будет. Мои эксперименты показали, что при прочих равных, когда E1550 дает скорость 600 кбит/с, у E1820 получается 3,5 Мбит/с.
    • 0
      E1820 не имеет прошивок поддерживающих передачу голоса к сожалению.
  • 0
    Собираюсь примерно таким же способом отдать домашний воип родителям в сельскую местность. У них сейчас хуавей B220 (4LAN, WiFi, 1SIM 3G/GPRS) к нему поставить Linksys WRT54GL с прошивкой ddwrt. OpenVPN до дома и IAX2 до домашнего астериска. Или как вариант dd-wrt c asterisk и sip пиры до провайдеров телефонии. В качестве телефона Gigaset 470IP.

    Вопрос такой, в вашем случае почему не использовали dd-wrt с астериском + мультифон или пир до головного офиса?
  • +1
    Дело в том что у Linksys WRT54GL как и у DIR-320 есть одна очень не приятная «болезнь» — флешь 4 Мб.
    Существующая dd-wrt для обоих (этих) устройств основана на ядре Linux версии 2.4, но поддержка таймингов процессора появилась начиная с ядра версии 2.6 (что очень нужно астриску и модулю chan_datacard, но будет и на ядре 2.4 работать с проблемами).
    Я пробовал пересобирать openwrt на версии 2.6 под dir-320, что только не выкидывал из прошивки (т.к. превышал 4 Мб при сборке) так и не удалось собрать более менее рабочей прошивки.
    Мультифон и линк до офиса думал, но канал не стабильный, по этому основные каналы все-же GSM.
  • 0
    спасибо, отличный мануал!

    замечание: в строке
    ipkg install opnenssh (SSH сервер и SFTP)
    описка в openssh. для копи-пастеров критично :) только что «помогал» одному.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.