VoIP

   Написать сие чтиво меня побудило собственные мытарства по обтачиванию напильником АТС на основе Asteriska для собственных нужд предприятия  .  На сегодня проблема стоит уже не протягиванию дополнительных пар в соседние кабинеты для телефонов , а более глобально - например оперативная телефонная связь с  отделом в другом городе . 

  Для связи с внешним миром и удешевления исходящих вызовов будем использовать GSM модемы типа Huawei 1550 и Huawei 153 . Хочется сказать , что заработали обе модели модемов , хотя информации по 153 хайвею о совместимости я признаться честно не нашел - наверное плохо искал .  Качество голоса такого решения для транков в GSM сети получается не очень , но если учитывать стоимость одного GSM модема в размере до 30 у.е и стоимость аналогичных специализированных решений например от ATCOM c ценником , который начинается от 300 у.е , то выбор будет однозначен для многих в пользу дешевых модемов с активированной функцией передачи голоса .

     При установке будем использовать дистрибутив Elastix 2.4.0 .   В основе дистрибутива лежит CentOS 5 ветки  с ядром 2.6.18 , которое не корректно работает с устройствами USB , что приводит к отсутствию звука в направлении Sip -> GSM или сильным искажениям звука до неразборчивости .  На модемах предварительно  следует отключить все устройства (CD и кардридер ) поскольку они будут мешать нормально определиться USB устройствам в системе под операционной системой Linux .

   Мне лично было намного удобней отключить ненужные функции из под форточек , поскольку разлочить и активировать голосовые фунции все равно пришлось под управлением Windows .    Предполагается , что у вас разлоченный модем с активированной функцией голоса .  Отключим не нужные нам виртуальный CD-ROM и Card Reader модема . Для подключения используем Huper Terminal OS Windows .

 

     Обновим ядро системы до 2.6.39 , проблемы с модемами исчезают по разным источникам от версии ядра выше 2.6.32 . Установим необходимые пакеты для обновления ядра

yum install -y ncurses-devel gcc make rpm-build redhat-rpm-config

Перейдем   в каталог с исходниками

cd /usr/src

Загрузим исходники ядра 2.6.39

wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.tar.bz2

Разархивируем его

tar -xf linux-2.6.39.tar.bz2

Создадим симлинк на  исходники ядра

ln -sf /usr/src/linux-2.6.39 /usr/src/linux

Скопируем конфиг от активного ядра

cd linux

cp /boot/config-`uname -r` .config

Запустим конфигуратор ядра
 

make menuconfig

И вносим небольшую корректировочку без которой новое ядро не взлетит:
- в разделе

"General setup --->" активируем  опцию "enable deprecated sysfs features which may confuse old userspace tools"и

"enable deprecated sysfs features by default"
Выходим из кофигуратора
Создаем папки для  rpm файла:

    mkdir -p /usr/src/redhat/SRPMS
    mkdir -p /usr/src/redhat/RPMS/{i386,x86_64}

Редактируем файл

    nano scripts/package/mkspec

добавляя в его конец следующее:

    echo "%post"
    echo "/sbin/new-kernel-pkg --package kernel --mkinitrd --depmod --install "$KERNELRELEASE" || exit \$?"
    echo ""

    echo "%preun"
    echo "/sbin/new-kernel-pkg --rminitrd --rmmoddep --remove "$KERNELRELEASE" || exit \$?"
    echo ""

Сохраняемся {CLTR} X Подтверждаем Y и наконец {ENTER}

Собираем ядро (заодно контролируем время сборки):

    time make rpm

На довольно слабой машинке типа селерона 2.6 это заняло около 2 часов :) .

По окончании устанавливаем новое свежее красивое ядро.

    rpm -ihv /usr/src/redhat/RPMS/i386/kernel-2.6.39-1.i386.rpm

Проверяем правильно ли оно прописалась в настройк grub'а

    [root@voip ~]# cat /boot/grub/menu.lst
    # grub.conf generated by anaconda
    #
    # Note that you do not have to rerun grub after making changes to this file
    # NOTICE:  You have a /boot partition.  This means that
    #          all kernel and initrd paths are relative to /boot/, eg.
    #          root (hd0,0)
    #          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
    #          initrd /initrd-version.img
    #boot=/dev/hdc
    default=0
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title CentOS (2.6.39)
            root (hd0,0)
            kernel /vmlinuz-2.6.39 ro root=/dev/VolGroup00/LogVol00
            initrd /initrd-2.6.39.img
    title Elastix (2.6.18-194.3.1.el5)
            root (hd0,0)
            kernel /vmlinuz-2.6.18-194.3.1.el5 ro root=/dev/VolGroup00/LogVol00
            initrd /initrd-2.6.18-194.3.1.el5.img
     
Перезагружаемся , надеюсь все собралось удачно и паники ядра нет , хотя всегда можно загрузиться со старым ядром
    reboot

После перезагрузки проверяем версию текущего ядра

    [root@voip ~]# uname -a

На момент написания статьи проэкт chan_datacard  http://code.google.com/p/datacard/  гласил , что он закрыт и переехал на chan_dongle  . Загрузим chan_dongle

wget http://asterisk-chan-dongle.googlecode.com/files/chan_dongle-1.1.r14.tgz

Разархивируем

 

Конфигурим

./configure

Установим

make install

Надеюсь у вас все собралось без ошибок

Копируем файл dongle.conf  в папку /etc/asterisk/

 Внесем секцию [incoming-datacard]  в файл /etc/asterisk/extensions_custom.conf , которая описывает поведение наших модемов при входящих СМС и звонках  , подробней об этом на форуме  http://asteriskforum.ru/viewtopic.php?p=61558 .

[incoming-datacard]

exten => sms,1,Verbose(Incoming SMS from ${CALLERID(num)} ${SMS})
exten => sms,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DATACARD} - ${CALLERID(num)}: ${SMS}' >> /var/log/asterisk/sms.txt)
exten => sms,n,Hangup()

exten => ussd,1,Verbose(Incoming USSD: ${USSD})
exten => ussd,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DATACARD}: ${USSD}' >> /var/log/asterisk/ussd.txt)
exten => ussd,n,Hangup()

exten => s,1,Goto(from-pstn,${IMEI},1)

Обратите внимание на последнюю строку секции [incoming-datacard]  , использование ее в таком виде обеспечит возможность обрабатывать звонки в очередях и прочих возможностях астериска с веб морды еластикса . В просторах инета валяется масса вариантов описания диалпланов , но к сожалению они не такие элегантные и как правило выглядят топорно .

В CentOS есть небольшая неприятность , связанная с правами на устройства USB , в результате чего пользователь asterisk не имеет прав на чтение файлов устройств

/dev/ttyUSB....

Для решения этой неприятности подправим напильником файл  50-udev.rules

nano /etc/udev/rules.d/50-udev.rules

Внесите в файл содержимое этих строк , не забыв удалить или закаментить соответствующий старый кусок в файле . Вопросы с правами  на устройства USB будут решены

KERNEL=="ttyUSB*", SUBSYSTEMS=="usb", KERNELS=="1-2:1.0", SYMLINK+="hw-modem-0", MODE="0666", OWNER="asterisk", GROUP="uucp"
KERNEL=="ttyUSB*", SUBSYSTEMS=="usb", KERNELS=="1-2:1.1", SYMLINK+="hw-audio-0", MODE="0666", OWNER="asterisk", GROUP="uucp"
KERNEL=="ttyUSB*", SUBSYSTEMS=="usb", KERNELS=="1-2:1.2", SYMLINK+="hw-data-0", MODE="0666", OWNER="asterisk", GROUP="uucp"

Не  забудьте отключить пин код с карточек :).

Перезагрузим систему

[root@asterisk ~]#reboot

Войдем в консоль астериска

[root@asterisk ~]#asterisk -r

 

asterisk*CLI> datacard show devices

 

 

  

 

 

IP-Телефония. Обзор.

             Итак, что же такое IP-телефония? IP-телефония – это технология, которая связывает воедино преимущества телефонии и Интернет. До недавнего времени сети с коммутацией каналов (телефонные сети) и сети с коммутацией пакетов (IP-сети) существовали практически независимо друг от друга и использовались для различных целей. Телефонные сети использовались только для передачи голосовой информации, а IP-сети – для передачи данных. Технология IP-телефонии объединяет эти сети посредством устройства, называемого шлюз или gateway. Шлюз представляет собой устройство, в которое с одной стороны включаются телефонные линии, а с другой стороны – IP-сеть (например, Интернет).

           В общих чертах передача голоса в IP-сети происходит следующим образом. Входящий звонок и сигнальная информация из телефонной сети передаются на пограничное сетевое устройство, называемое телефонным шлюзом, и обрабатываются специальной картой устройства голосового обслуживания. Шлюз, используя управляющие протоколы семейства H.323, перенаправляет сигнальную информацию другому шлюзу, находящемуся на приемной стороне IP-сети. Приемный шлюз обеспечивает передачу сигнальной информации на приемное телефонное оборудование согласно плану номеров, гарантируя сквозное соединение. После установления соединения голос на входном сетевом устройстве оцифровывается (если он не был цифровым), кодируется в соответствии со стандартными алгоритмами ITU, такими как G.711 или G.729, сжимается, инкапсулируется в пакеты и отправляется по назначению на удаленное устройство с использованием стека протоколов TCP/IP. Приходящие на приемный шлюз IP-пакеты преобразуются обратно в телефонный сигнал и принимающий абонент получает вызов. Конечные потребители услуги могут даже не догадываться о том, КАК осуществляется этот звонок.

 

          Поскольку при IP-телефонном звонке никак не задействован международный (междугородний) телефонный оператор, стоимость этого звонка на порядок меньше стоимости традиционного телефонного соединения.

Asterisk GUI vs Asterisk 1.4.17 на Ubuntu Server 8.04LTS

 

     Asterisk - программная АТС (PBX), бесплатный продукт, позволяющий быстро и легко, с минимальными затратами попробовать и  использовать современные возможности передачи голоса по сети или через интернет - VoIP

        Нам понадобится: Установленная операционная система Ubuntu 8.04LTS.

        В Ubuntu 8.04 пакет с Asterisk поддерживаеться в apt-get  и устанавливаеться довольно просто:

                  apt-get install asterisk 

        После установки смотрим версию и проверяем запустился ли наш Asterisk:

                 asterisk -r 

        Видим версию, у меня на момент написания статьи из репозитариев Ubuntu устанавливаеться версия 1.4.17 (не самая новая), и попадаем в консоль управления  нашей АТС (Asterisk CLI).

        Далее выходим из консоли: quit 

        Теперь нам нужен Asterisk GUI - web-интерфейс управления нашей программной телефонной станцией. Его мы будем брать из репозитариев с помощью svn

        Если у вас не установлен пакет subversion, ставим его: apt-get install subversion

               mkdir -p ~/downloads/asterisk-gui

               cd ~/downloads/asterisk-gui

               svn checkout http://svn.digium.com/svn/asterisk-gui/branches/2.0/

         Откомпилируем и соберем полученный исходный код: 

               cd 2.0

               ./configure

               make 

               make install 

         Думаю что не лишним будет напомнить, что для компиляции и сборки из исходных текстов нужно иметь установленными gcc и make

        Сделаем резервную копию наших конфигурационных файлов для Asterisk:

               cp -r /etc/asterisk /etc/asterisk.backup

         Редактируем /etc/asterisk/manager.conf для разрешения веб-интерфейса и добавления пользователя: 

          enabled = yes

          webenabled = yes

           [administrator]

           secret = YoUrPaSwOrD

           read = system,call,log,verbose,command,agent,user,config

           write = system,call,log,verbose,command,agent,user,config     

        Редактируем  /etc/asterisk/http.conf чтобы сказать Asterisk на каком порту и каком интерфейсе будет работать наш веб сервер: 

              enabled=yes

              enablestatic=yes  

              bindaddr=127.0.0.1

        Запускаем checkconfig для проверки наших настроек:

              make checkconfig

 

        Видим, что все у нас хорошо с конфигурацией. 

       Далее делаем дополнительный шаг, который заключаеться в создании символьной ссылки на static-http которую Asterisk ищет в /usr/share/asterisk вместо /var/lib/asterisk где она в действительности имеется: 

             rm  /usr/share/asterisk/static-http

             sudo ln -s /var/lib/asterisk/static-http/ /usr/share/asterisk/

         После этого добавляем права на запись для каталога usr/share/asterisk/static-http/config  

        Перезапускаем наш Asterisk командой:

             /etc/init.d/asterisk restart

        Теперь вебинтерфейс управления Asterisk PBX доступен нам по адресу: 

           http://127.0.0.1:8088/asterisk/static/config/index.html

        Замените 127.0.0.1 на ваш ip-адрес. 

        Далее вам нужно создать хотябы один DialPlan и несколько пользователей (Users). Минимальная настройка закончена. АТС готова к работе.

       После этого можно пробовать седениться с нашей АТС с помощью программного телефона, например такого как X-Lite.         

RSS-материал
pixelclever