Корпоративный VoIP сервер на базе Asterisk в Ubuntu Server 8.04.2

Published on Март 30, 2009 by   ·   Комментариев нет

Задача: поднять корпоративный сервер IP телефонии с несколькими потоками
E1 от разных провайдеров и несколькими SIP провайдерами, завернуть логи
в базу и настроить подбивку статистики, настроить электронные факсы.

В течении двух недель экспериментировал с Asterisk на различных
платформах и сборках — FreeBSD, CentOS, Trixbox, AsteriskNOW, Elastix,
Akozia… везде что-то не нравилось и не сросталось, и в итоге я
остановился на Ubuntu Server 8.04.2.

ASTERISK

Итак, ставим Ubuntu, во время установки отмечаем LAMP (Linux Apache
MySQL PHP) и OpenSSH.
Обновляемся и устанавливаем необходимые пакеты:

        aptitude update
        aptitude upgrade
        aptitude install make gcc cpp g++ linux-headers-2.6.24.23-server \
            bison ncurses-dev mysql-client libmysqlclient-dev libnewt-dev php-gd

Основную часть будем ставить из исходников, скачанных с сервера Digium:

        wget http://downloads.digium.com/pub/asterisk/releases/asterisk-1.6.0.5.tar.gz
        wget http://downloads.digium.com/pub/asterisk/asterisk-addons-1.6.0.1.tar.gz
        wget http://downloads.digium.com/pub/telephony/dahdi-linux/dahdi-linux-2.1.0.4.tar.gz
        wget http://downloads.digium.com/pub/telephony/dahdi-tools/dahdi-tools-2.1.0.2.tar.gz
        wget http://downloads.digium.com/pub/libpri/releases/libpri-1.4.9.tar.gz

Распаковываем все это дело в /usr/src и начинаем по-порядку устанавливать.

Libpri:

   make
        make install

Dahdi:

  make
        make install

Dahdi-tools:

   ./configure
        make menuselect
        make
        make install

Asterisk:

   ./configure
        make menuselect
        make
        make install

Asterisk addons:

    ./configure
        make menuselect
        make
        make install
        reboot

Make menuselect делаем для проверки необходимых компонентов. Особенно
нас интересует mysql.

После того как все установлено необходимо поправить несколько основных файлов.

У меня установлены две платы Openvox D110P, которые являются полным
аналогом (китайская подделка =)) плат от Digium TE110P. Провайдеры
телефонии — Peterstar & Golden Telecom.

# cat /etc/dahdi/system.conf

        span=1,1,0,ccs,hdb3,crc4
        bchan=1-15
        echocanceller=mg2,1-15
        dchan=16
        bchan=17-21
        echocanceller=mg2,17-21
        loadzone = us
        defaultzone=us
        span=2,0,0,ccs,hdb3
        bchan=32-46
        dchan=47
        echocanceller=mg2,32-46


# cat /etc/asterisk/chan_dahdi.conf
[cc lang="bash" tab_size="2" lines="-1"]
        [channels]
        switchtype=euroisdn
        pridialplan=unknown
        prilocaldialplan=national
        resetinterval = 100000000
        facilityenable = yes
        signalling=pri_cpe
        rxwink=300
        usecallerid=yes
        cidsignalling=bell
        cidstart=ring
        hidecallerid=no
        callwaiting=yes
        usecallingpres=yes
        sendcalleridafter=1
        callwaitingcallerid=yes
        threewaycalling=yes
        transfer=yes
        canpark=yes
        cancallforward=yes
        callreturn=yes
        echocancel=yes
        echocancelwhenbridged=yes
        echotraining=800
        relaxdtmf=yes
        rxgain=0.0
        txgain=0.0
       
        group=1
        context=from_peterstar
        immediate=no
        channel=>1-15,17-21
        mohsuggest=default
       
        group=2
        context=from_golden
        immediate=no
        channel=>32-46
        mohsuggest=default

Теперь можно уйти в ребут.

После перезагрузки смотрим подгрузились ли необходимые модули:

        lsmod | sort

        dahdi 197768 87 dahdi_echocan_mg2,xpp,dahdi_transcode,wcb4xxp,wctdm,wcfxo,wctdm24xxp,wcte11xp,wct1xxp,wcte12xp,wct4xxp
        dahdi_echocan_mg2 6920 0
        dahdi_transcode 9352 1 wctc4xxp
        .....
        wcb4xxp 83492 0
        wcfxo 13984 0
        wct1xxp 16544 0
        wct4xxp 353920 0
        wctc4xxp 49180 0
        wctdm24xxp 135008 0
        wctdm 40652 0
        wcte11xp 27424 37
        wcte12xp 71392 0
        .....

Дальше проверяем как dahdi переварил наши платы:

        # dahdi_cfg -vvvvvvvv

        DAHDI Tools Version - 2.1.0.2

        DAHDI Version: 2.1.0.4
        Echo Canceller(s): MG2
        Configuration

        SPAN 1: CCS/HDB3 Build-out: 0 db (CSU)/0-133 feet (DSX-1)
        SPAN 2: CCS/HDB3 Build-out: 0 db (CSU)/0-133 feet (DSX-1)

        Channel map:

        Channel 01: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 01)
        ...
        Channel 15: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 15)
        Channel 16: D-channel (Default) (Slaves: 16)
        Channel 17: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 17)
        ...
        Channel 46: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 46)
        Channel 47: D-channel (Default) (Slaves: 47)

        37 channels to configure.

        Setting echocan for channel 1 to mg2
        ...
        Setting echocan for channel 46 to mg2

Еще одна утилита:

        dahdi_scan

        [1]
        active=yes
        alarms=OK
        description=Digium Wildcard TE110P T1/E1 Card 0
        name=WCT1/0
        manufacturer=Digium
        devicetype=Digium Wildcard TE110P T1/E1
        location=PCI Bus 04 Slot 01
        basechan=1
        totchans=31
        irq=23
        type=digital-E1
        syncsrc=0
        lbo=0 db (CSU)/0-133 feet (DSX-1)
        coding_opts=HDB3
        framing_opts=CCS,CRC4
        coding=HDB3
        framing=CCS
        [2]
        active=yes
        alarms=OK
        description=Digium Wildcard TE110P T1/E1 Card 1
        name=WCT1/1
        manufacturer=Digium
        devicetype=Digium Wildcard TE110P T1/E1
        location=PCI Bus 04 Slot 02
        basechan=32
        totchans=31
        irq=21
        type=digital-E1
        syncsrc=0
        lbo=0 db (CSU)/0-133 feet (DSX-1)
        coding_opts=HDB3
        framing_opts=CCS,CRC4
        coding=HDB3
        framing=CCS

Настраиваем Asterisk. Приведу только основные блоки своей конфигурации
т.к. всё достаточно индивидуально.

# cat /etc/asterisk/extensions.conf

        [general]
        static = yes
        writeprotect = yes
        clearglobalvars = yes
       
        [globals]
        CONSOLE = Console/dsp ; Console interface for demo
        TRUNKMSD = 1 ; MSD digits to strip (usually 1 or 0)
        FEATURES =
        DIALOPTIONS =
        RINGTIME = 20
        FOLLOWMEOPTIONS =
        PAGING_HEADER = Intercom
        PAGING_TIMEOUT = 60
       
        [default]
       
        [from_peterstar]
        exten => 1111111,1,Ringing
        exten => 1111111,n,Wait(1)
        exten => 1111111,n,Answer
        exten => 1111111,n,Dial(SIP/100,90,tr)
        exten => 1111111,n,Queue(office)
        exten => 1111111,n,Hangup()
       
        [from_golden]
        exten => 2222222,1,Ringing
        exten => 2222222,n,Wait(1)
        exten => 2222222,n,Answer
        exten => 2222222,n,Dial(SIP/200,90,tr)
        exten => 2222222,n,Queue(sklad)
        exten => 2222222,n,Hangup()
       
        [to_peterstar]
        exten => _[1-9]XXXXXX,1,Set(CALLERID(all)=1111111)
        exten => _[1-9]XXXXXX,2,Dial(dahdi/g1/${EXTEN},90,t)
        exten => _7XXXXXX,1,Set(CALLERID(all)=1111111)
        exten => _7XXXXXX,2,Dial(dahdi/g1/${EXTEN},90,t)
        exten => t,1,Busy

        [to_golden]
        exten => _[1234569]XXXXXX,1,Set(CALLERID(all)=2222222)
        exten => _[1234569]XXXXXX,2,Dial(dahdi/g2/${EXTEN},90,t)
        exten => _7XXXXXX,1,Set(CALLERID(all)=2222222)
        exten => _7XXXXXX,2,Dial(dahdi/g2/${EXTEN},90,t)
        exten => t,1,Busy

        [to_sipnet]
        exten => _7921XXXXXXX,1,Dial(SIP/sipnet_et/${EXTEN},90,t)
        exten => _7921XXXXXXX,2,Hangup()
        .....


# cat /etc/asterisk/queue.conf

        [general]
       
        [default]
       
        [office]
        music=default
        strategy=ringall
        timeout=60
        retry=30
        wrapuptime=15
        ;periodic-announce-frequency=30
        ;periodic-announce = queue-periodic-announce
        monitor-format = wav49
        monitor-type = MixMonitor
        context = office
        member => SIP/100

        [sklad]
        music=default
        strategy=ringall
        timeout=60
        retry=30
        wrapuptime=15
        ;periodic-announce-frequency=30
        ;periodic-announce = queue-periodic-announce
        monitor-format = wav49
        monitor-type = MixMonitor
        context = sklad
        member => SIP/200

Вобщем в город звоним через Peterstar & Golden, а на мобильные и
межгород прописываем sipnet и его аналоги.

Дальше я решил запустить астериск стандартным для убунты образом:

/etc/init.d/asterisk start

Но оказолось что при компиляции никакие стартовые скрипты не создались.
Хотя в других версиях такого бага небыло.
Мое решение — вписываем в конец скрипта /etc/init.d/rc.local строчку:

  /usr/sbin/asterisk -f -vvvg -c


Для проверки можно перезагрузиться и посмотреть сработало ли:

      [cc lang="bash" tab_size="2" lines="-1"]  ps -aux | grep asterisk | grep -v grep

        root 6184 0.1 1.1 28612 12108 ? Sl Feb19 4:05 /usr/sbin/asterisk -f -vvvg -c

Залезаем на консоль Астериска, начинаем звонить и смотреть не лезут ли ошибки:

   asterisk -r
        ....

ФАКС

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

Лирическое отступление: сначала я решил поставить факс из репозиториев
убунты — asterisk-app-fax, это чудо потянуло за собой астериск 1.4.22 и
все мои труды накрылись медным тазом =). Поэтому будем ставить связку
iaxmodem + hylafax, хоть из репозитория, но без вышеуказанных проблем.

  aptitude install hylafax-serveк hylafax-client iaxmodem

Создаем несколько виртуальных модемов:

# cat /etc/iaxmodem/ttyIAX0

        device /dev/ttyIAX0
        owner uucp:uucp
        mode 660
        port 4570
        refresh 50
        server 127.0.0.1
        peername iaxmodem
        secret password
        codec alaw
        cidname Company
        cidnumber +7(812)1111111

Выполняем для каждого модема:

        cd /etc/iaxmodem
        cp ttyIAX0 ttyIAX1
        ....

Не забываем менять название девайса в первой строчке файла настроек.
Запусаем iaxmodem:

    /etc/init.d/iaxmodem start

Проверяем появились ли виртуальные модемы:

        ls /dev | grep ttyIAX

        ttyIAX0
        ttyIAX1
        ....

Дальше нужно настроить взаимодействие этих модемов с hylafax.
Начальная настройка hylafax:

  faxsetup

И для чего для каждого модема проделываем:

   faxaddmodem

Прописывам модемы в астериске:

# cat /etc/asterisk/iax.conf

        [general]
        bindport = 4569
        bindaddr = 0.0.0.0
        disallow=all
        allow=ulaw
        allow=alaw

        [iaxmodem]
        type=friend
        secret=password
        port=4570
        host=dynamic
        context=office
        disallow=all
        allow=alaw

        [iaxmodem1]
        type=friend
        secret=password
        port=4580
        host=dynamic
        context=sklad
        disallow=all
        allow=alaw
        .....


# cat /etc/asterisk/sip.conf

        ...
        [111]
        type=friend
        context=office
        secret=111
        callerid="FAX-Office"<111>
        nat=yes
        host=dynamic
        qualify=yes

        [222]
        type=friend
        context=sklad
        secret=222
        callerid="FAX-Sklad"<222>
        nat=yes
        host=dynamic
        qualify=yes
        ....


# cat /etc/asterisk/extensions.conf

        exten => 111,1,Dial(IAX2/iaxmodem)
        exten => 222,1,Dial(IAX2/iaxmodem1)
        ....

Для того, чтобы факсы отправлялись по e-mail необходимо настроить
почтовую систему на релей к вашему почтовому серверу и прописать
следующее:

# cat /etc/hylafax/FaxDispatch

        case "$DEVICE" in
        ttyIAX0) SENDTO=office@comp.spb.ru; FILETYPE=tif;;
        ttyIAX1) SENDTO=sklad@comp.spb.ru; FILETYPE=tif;;
        esac

При такой схеме факсы, приходящие на номер 111, будут идти на один
адрес, а приходящие на 222 — на другой, и т.д…

    reboot

Отправлять факсы из винды можно после установки какой-нибудь клиентской
проги. Я использую Winprint Hylafax.

СТАТИСТИКА

Если аддон астериска собран с поддержкой MySQL:

# cat /etc/asterisk/cdr_mysql.conf

        [global]
        hostname=localhost
        dbname=asterisk
        table=cdr
        password=password
        user=root
        port=3306
        sock=/var/run/mysqld/mysqld.sock
        userfield=1

Создаем базу:

        mysql -p

        > CREATE DATABASE asterisk;

        GRANT INSERT
        ON asterisk.*
        TO asterisk@localhost
        IDENTIFIED BY &#039;yourpassword&#039;;

        USE asterisk;

        CREATE TABLE `cdr` (
        `calldate` datetime NOT NULL default &#039;0000-00-00 00:00:00&#039;,
        `clid` varchar(80) NOT NULL default &#039;&#039;,
        `src` varchar(80) NOT NULL default &#039;&#039;,
        `dst` varchar(80) NOT NULL default &#039;&#039;,
        `dcontext` varchar(80) NOT NULL default &#039;&#039;,
        `channel` varchar(80) NOT NULL default &#039;&#039;,
        `dstchannel` varchar(80) NOT NULL default &#039;&#039;,
        `lastapp` varchar(80) NOT NULL default &#039;&#039;,
        `lastdata` varchar(80) NOT NULL default &#039;&#039;,
        `duration` int(11) NOT NULL default &#039;0&#039;,
        `billsec` int(11) NOT NULL default &#039;0&#039;,
        `disposition` varchar(45) NOT NULL default &#039;&#039;,
        `amaflags` int(11) NOT NULL default &#039;0&#039;,
        `accountcode` varchar(20) NOT NULL default &#039;&#039;,
        `userfield` varchar(255) NOT NULL default &#039;&#039;
        );

        ALTER TABLE `cdr` ADD `uniqueid` VARCHAR(32) NOT NULL default &#039;&#039;;
        ALTER TABLE `cdr` ADD INDEX ( `calldate` );
        ALTER TABLE `cdr` ADD INDEX ( `dst` );
        ALTER TABLE `cdr` ADD INDEX ( `accountcode` );

        reboot

Проверяем:

        asterisk -r

        pbx*CLI> cdr show status

        CDR logging: enabled
        CDR mode: simple
        CDR output unanswered calls: no
        CDR registered backend: mysql
        CDR registered backend: csv
        CDR registered backend: cdr-custom

Сие означает, что логи у нас пошли в базу.
Теперь прикручиваем модуль статистики:

   wget http://areski.net/asterisk-stat-v2/asterisk-stat-v2_0_1.tar.gz

Распаковываем сожержимое в /var/www и настраиваем соответствующим
образом файлы ./lib/defaults.php и ./lib/DB-modules/phplib_mysql.php

  apache2ctl restart

Заходим через браузер на адрес http://your-pbx-ip/cdr.php (можно сделать
и по-красивее) и радуемся тому, что все работает! =)

PS: При написании использовались следующие материалы:
* http://bbs.chinaunix.net/archiver/tid-1290435.html
* http://www.the-asterisk-book.com/unstable/faxserver-mit-iaxmodem-und-hylafax.html
* http://www.voip-info.org/wiki-Asterisk+cdr+mysql

adobe cs6 download

PPS: http://alchemist-unix.blogspot.com/2009/02/ip-e1-sip.html — мой блог ;)

zp8497586rq






























Смотрите также:

Readers Comments (Комментариев нет)

Comments are closed.



Exchange 2007

Проведение мониторинга Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 3)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Проведение мониторинга Exchange 2007 с помощью диспетчера System ... [+]

Практическое рассмотрение перехода с Exchange 2003 на Exchange 2007 (часть 1)

Введение В этой статье из нескольких частей я хочу показать вам процесс, который недавно использовал для перехода с существующей среды Exchange 2003 ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 2)

Если вы пропустили первую часть этой серии, пожалуйста, прочтите ее по ссылке Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (Часть ... [+]

Мониторинг Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 2)

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Мониторинг Exchange 2007 с помощью диспетчера System Center Operations ... [+]

Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 5)

Если вы пропустили предыдущие части этой серии статей, перейдите по ссылкам: Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 1) ... [+]

Установка и настройка Exchange 2007 из командной строки (Часть 3)

If you missed the previous parts in this article series please read: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 1)

Инструмент ExRCA Текущий выпуск инструмента предоставляется только в целях тестирования и оснащен 5 опциями: Тест подключения Outlook 2007 Autodiscover Тест подключения Outlook 2003 RPC ... [+]

Развертывание сервера Exchange 2007 Edge Transport (часть 5)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Развертывание сервера Exchange 2007 Edge Transport (часть 1) Развертывание ... [+]

Установка и настройка Exchange 2007 из командной строки (часть 2)

Если вы пропустили первую статью данного цикла, пожалуйста, перейдите по ссылке: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование интегрированных сценариев Using Exchange Server 2007 – часть 2: генерирование отчетов агента Transport AntiSpam Agent

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Использование интегрированных сценариев Using Exchange Server 2007 – часть ... [+]