Pull to refresh

Роутер + GPRS модем = mini VoIP АТС или GSM шлюз своими руками

image
На днях появилась необходимость поднять в удаленном, маленьком, офисе телефонию.
Стабильного канала Интернет, как и в большинстве удаленных регионов, в городке не нашлось, по этому задача свелась к созданию бюджетной АТС с локальным GSM каналом + VoIP связь с центральной (корпоративной) АТС.

Описание решения


Система состоит:

1. Роутер — DLink DIR-320. Конечно можно было посмотреть на более производительные (например ASUS RT-N16, 400Мгц против 200Мгц), но задача собрать бюджетное решение (4500р. Asus против 1500 Dlink).
2. GPRS модем — Huaway 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. Вставляем IMAI и заполняем каптчу. В результате получаем 2 кода Unlock и Flash (код для перепрошивки устройства). Нам нужен Unlock, копируем в буфер.
7. В dc-unloker необходимо выполнить 2 команды, в текстовом окне:
7.1 AT^U2DIAG=256 (устройство в режиме модем + Card Reader)
7.2 AT^CARDLOCK="<Unlock код из буфера>"
Модем отвязан от опеторских SIM и не эмулирует CDRom.

Монтируем MicroSD карту для устанавливаемого на роутер ПО

1. Используемое ПО:
1.1 Putty
1.2 WinCP
2. Подключаем модем к роутеру. Включаем питание роутера.
3. Используя протокол Telnet в Putty подключаемся к роутеру IP 192.168.1.1, логин/пароль admin/admin.
4. Используя утилиту fdisck удаляем существующие разделы с карты, 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.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.
Change theme settings