Настройка Asterisk, Dahdi и Hylafax.
Эта статья очень помогла после проблем с сервером Asterisk. Оригинал статьи смотрите на сайте lipovetskiy.wordpress.com. Спасибо автору за помощь. ЗадачаПоднять корпоративный сервер IP телефонии с несколькими потоками E1 от разных провайдеров и несколькими SIP провайдерами, завернуть логи в базу и настроить подбивку статистики, настроить электронные факсы. Сервер на Ubuntu 9.04 Server.ASTERISKИтак, ставим Ubuntu, во время установки отмечаем LAMP (Linux Apache MySQL PHP) и OpenSSH.Обновляемся и устанавливаем необходимые пакеты: # aptitude update # aptitude upgrade # aptitude install make gcc cpp g++ linux-headers-`uname -r` bison ncurses-dev mysql-client libmysqlclient-dev libnewt-dev php5-gd libxml2 libopenh323-dev mc # wget http://downloads.digium.com/pub/asterisk/releases/asterisk-1.6.1.tar.gz # wget http://downloads.digium.com/pub/asterisk/asterisk-addons-1.6.1.tar.gz # wget http://downloads.digium.com/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz # wget http://downloads.digium.com/pub/libpri/releases/libpri-1.4.10.tar.gz Распаковываем все это дело в /usr/src и начинаем по-порядку устанавливать. Сначала устанавливаем поддержку работы наших PRI карт. Libpri: # make # make install Dahdi: # make # make install # make config Дальше ставим сам Астериск: Asterisk: # ./configure # make menuselect # make # make install # make config # make samples Make menuselect делаем для выбора необходимых компонентов. Не пугаемся отсутствия поддержки MySQL — ее мы будем ставить из аддонов. Asterisk addons: # ./configure # make menuselect # make # make instal # reboot Настраиваем Asterisk для работы с нашими платами: У меня установлены две платы Openvox D110P, которые являются полным аналогом (китайская подделка =)) плат от Digium TE110P. Провайдеры телефонии — Peterstar & Golden Telecom. Для их корректной работы с потоками E1 необходимо сгенерировать основные файлы dahdi (платы физически должны быть установлены): # dahdi_genconf Смотрим: # cat /etc/dahdi/system.conf span=1,1,0,ccs,hdb3,crc4 # PETERSTAR bchan=1-15,17-31 dchan=16 echocanceller=mg2,1-15,17-31 span=2,2,0,ccs,hdb3 # Golden Telecom bchan=32-46,48-62 dchan=47 echocanceller=mg2,32-46,48-62 loadzone = us defaultzone = us Обратите внимание на значение CRC4: Golden Telecom не поддерживает его, но по-умолчанию dahdi_genconf его выставляет. Уточняйте у провайдера. # cat /etc/asterisk/dahdi-channels.conf ; Span 1: WCT1/0 "Digium Wildcard TE110P T1/E1 Card 0" (MASTER) HDB3/CCS/CRC4 group=0,11 context=from-pstn switchtype = euroisdn signalling = pri_cpe channel => 1-15,17-31 context = default group = 63 ; Span 2: WCT1/1 "Digium Wildcard TE110P T1/E1 Card 1" HDB3/CCS group=0,12 context=from-pstn switchtype = euroisdn signalling = pri_cpe channel => 32-46,48-62 context = default group = 63 # /etc/init.d/dahdi start После этого должна подгрузиться куча новых модулей: # 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_cfg -vvvvvvvv # dahdi_scan Правим # cat /etc/asterisk/chan_dahdi.conf [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 Приведу только основные блоки своей конфигурации т.к. всё достаточно индивидуально. # 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 После внесения изменений в конфигурационные файлы перезапускаем астериск: # asterisk -rvvvgc > reload Иногда может потребоваться полная перезагрузка: # /etc/init.d/asterisk restart ФАКСВ-общем все красиво, все работает, дальше будем прикручивать электронный факс.Лирическое отступление: сначала я решил поставить факс из репозиториев убунты — asterisk-app-fax, это чудо потянуло за собой астериск 1.4.22 и все мои труды накрылись медным тазом =). Поэтому будем ставить связку iaxmodem + hylafax, хоть из репозитория, но без вышеуказанных проблем. # aptitude install hylafax-server 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 'yourpassword'; USE asterisk; CREATE TABLE `cdr` ( `calldate` datetime NOT NULL default '0000-00-00 00:00:00', `clid` varchar (80) NOT NULL default '', `src` varchar (80) NOT NULL default '', `dst` varchar (80) NOT NULL default '', `dcontext` varchar (80) NOT NULL default '', `channel` varchar (80) NOT NULL default '', `dstchannel` varchar (80) NOT NULL default '', `lastapp` varchar (80) NOT NULL default '', `lastdata` varchar (80) NOT NULL default '', `duration` int (11) NOT NULL default '0', `billsec` int (11) NOT NULL default '0', `disposition` varchar (45) NOT NULL default '', `amaflags` int (11) NOT NULL default '0', `accountcode` varchar (20) NOT NULL default '', `userfield` varchar (255) NOT NULL default '' ); ALTER TABLE `cdr` ADD `uniqueid` VARCHAR (32) NOT NULL default ''; ALTER TABLE `cdr` ADD INDEX ( `calldate` ); ALTER TABLE `cdr` ADD INDEX ( `dst` ); ALTER TABLE `cdr` ADD INDEX ( `accountcode` ); # reboot # asterisk -r pbx*CLI> cdr mysql status Connected to asterisk@localhost, port 3306 using table cdr for 9 hours, 27 minutes, 4 seconds. Wrote 321 records since last restart. Сие означает, что логи у нас пошли в базу. Теперь прикручиваем модуль статистики: # wget http://areski.net/asterisk-stat-v2/asterisk-stat-v2_0_1.tar.gz В apache2.conf вписываем строчку: DirectoryIndex index.htm index.html index.php cdr.php # apache2ctl restart Заходим через браузер на адрес http://your-pbx-ip и радуемся тому, что все заработало. UPDATEВ случае, если астериск стоит в локальной сети и в resolv.conf стоит IP адресс рутера, который резольвит имена через свой wan-порт (adsl, или что угодно), то при падении wan соединения и отсутствия на рутере какой-либо статической таблицы хостов, рутер будет бесконечно долго (либо пока истечет его таймаут) думать что же ответить линуксу (libresolv) на его запрос. Пока линукс ждет ответ - астериск тормозит по полной програме - отваливаются внутрение extensions, не работает voicemail, не правильно загораются BLF. Тут надо заметить, что в файле resolv.conf также можно установить свой timeout, например 1 секунду. (с) alphil http://asterisk-support.ru/question/14387/ne-rabotaet-telefoniia-bez-dostupa-servera-k/?answer=19830#post-id-19830 В resolv.conf добавляем строку options attempts:1 timeout:1 |