Установка Asterisk 13

Asterisk — пожалуй, самый популярный на сегодняшний день способ организации IP-телефонии. При нулевых затратах на софт и вполне понятным синтаксисом конфигурационных файлов Вы сможете в за пару часов развернуть готовое «боевое» решение с безграничными возможностями расширения и практически неограниченным функционалом. В этой заметке будет рассмотрен весь процесс установки.

Для начала нам потребуется машина с ОС Linux (я использовал «чистый» Ubuntu Server LTS), на которой настроен только openssh. Коннектимся к нашему серверу, делаем апдейт и устанавливаем зависимости.:

$ ssh login@asterisk
$ sudo apt-get update
$ sudo apt-get install build-essential linux-headers-`uname -r` g++ subversion libmysqlclient-dev libxml2-dev libncurses5-dev libsqlite3-dev libssl-dev libsrtp0-dev unixodbc-dev make uuid-dev libjansson-dev
Установка LAMP сервера

Для начала установите LAMP сервер. MySQL нам понадобится для хранения CDR (Call Details Record) записей, PHP и Apache — для работы веб-интерфейса содержащего статистику звонков:

$ sudo tasksel install lamp-server
$ sudo mysql_secure_installation

При установке потребуется задать пароль для root-пользователя MySQL

В остальном установка пройдет тихо и без вывода информации. После установки можно с помощью браузера открыть ссылку http://asterisk_ip/ и увидеть дефолтную страницу Apache.

Установка Asterisk из исходников

Почему не воспользоваться apt-get или yum install? Астериск из репозитариев устанавливается без поддержки записи CDR в MySQL, а нам нужно писать их именно туда, чтобы потом выводить в веб-интерфейс.

Качаем исходники Asterisk c официального сайта в папку /usr/src (права на нее только у суперпользователя, поэтому делаем sudo bash).

$ sudo bash
$ cd /usr/src
$ wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz

Теперь распаковываем и устанавливаем исходники.

$ tar xvf asterisk-13-current.tar.gz
$ cd asterisk-13.13.1/
$ ./configure

После последней команды (./configure) — внимательно посмотрите вывод на наличие ошибок — они могут возникать из-за неразрешенных зависимостей. Многие ошибки разобраны в этой статье.

Дальше нам необходимо выбрать модули, которые установит Астериск:

$ make menuselect

Откроется консольное меню:

asterisk make menuselect

Навигация осуществляется с помощью стрелок, а также клавиш Enter (войти \ установить флаг) и Esc (выйти). Нам потребуется включить:
Add-ons — res_config_mysql
Add-ons — cdr_mysql
При выходе будьте внимательны — сохраните изменения. Идем дальше.

$ make
$ make install
$ make samples
$ make config

Установка закончена. Теперь можно запустить Астериск и войти в его консоль.

$ asterisk
$ asterisk -rv
Запись CDR в базу MySQL

Создаем базу для CDR (для входа используем пароль, заданный при установке mysql).

$ mysql -u root -p
Enter password:
mysql> create database asterisk;
Query OK, 1 row affected (0.00 sec)
mysql> use asterisk;
Database changed

Теперь создадим таблицу базы данных asterisk:

mysql> CREATE TABLE `cdr` (
 `id` int(11) unsigned NOT NULL auto_increment,
 `calldate` datetime NOT NULL default '1970-01-01 00:00:01',
 `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 '',
 `uniqueid` varchar(32) NOT NULL default '',
 `userfield` varchar(255) NOT NULL default '',
 PRIMARY KEY (`id`),
 KEY `calldate` (`calldate`),
 KEY `accountcode` (`accountcode`),
 KEY `uniqueid` (`uniqueid`),
 KEY `dst` (`dst`),
 KEY `src` (`src`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
 
Query OK, 0 rows affected (0.11 sec)

Дальше создадим пользователя astuser и зададим ему пароль astpassword (поменяйте на свои значения) и выйдем из mysql.

mysql> grant all on asterisk.* to 'astuser'@'localhost' identified by 'astpassword';
mysql> flush privileges;
mysql> exit

Теперь, когда создана БД с необходимой структурой и на нее предоставлены права нашему пользователю, поправим конфиг Астериска.

$ nano /etc/asterisk/cdr_mysql.conf

Приведем его к следующему виду (раскомментируем и поправим строки):

[global]
hostname=localhost
dbname=asterisk 
table=cdr
password=astpassword
user=astuser 
port=3306
;sock=/var/run/mysqld/mysql.sock

Теперь перезапустим Астериск и проверим, что соединение с БД прошло успешно.

$ service asterisk restart
$ asterisk -rv
CLI> cdr mysql status
Connected to asterisk@localhost, port 3306 using table cdr for 2 seconds.
Wrote 0 records since last restart.

В листинге приведен пример успешного соединения. Если Вы получили ошибку «Not currently connected to a MySQL server.» — в Ваш конфиг закралась опечатка.

Настройка диалплана

Теперь мы создадим диалплан с минимальным функционалом — настроим несколько SIP-аккаунтов и дадим им возможность совершать и принимать вызовы, а также будем записывать все вызовы, совершаемые через Астериск.

Создадим папки для хранения записей разговоров.

$ cd /
$ mkdir monitor

Очистим файлы sip.conf и extensions.conf от демонстрационного содержимого.

$ cd /etc/asterisk
$ :> extensions.conf
$ :> sip.conf

Теперь наполним их.

$ nano extensions.conf
[globals]
 
[general]
autofallthrough=yes
 
[default]
exten => s,1,Answer()
exten => s,n,Set(fname=${STRFTIME(${EPOCH},,%Y-%m-%d_%H-%M)}-${CALLERID(num)})
exten => s,n,MixMonitor(/monitor/${fname}.wav)
exten => s,n,Dial(SIP/100,10)
exten => s,n,Dial(SIP/100SIP/101SIP/102SIP/103SIP/104SIP/105)
exten => s,n,Hangup()
 
[outgoing]
exten => _8XXXXXXXXXX,1,NoOp()
exten => _8XXXXXXXXXX,n,Set(fname=${STRFTIME(${EPOCH},,%Y-%m-%d_%H-%M)}-${CALLERID(num)}-${CALLERID(dnid)})
exten => _8XXXXXXXXXX,n,MixMonitor(/monitor/${fname}.wav)
exten => _8XXXXXXXXXX,n,Dial(SIP/provider/${EXTEN})
 
[phones]
exten => _1XX,1,NoOp()
exten => _1XX,n,Set(fname=${STRFTIME(${EPOCH},,%Y-%m-%d_%H-%M)}-${CALLERID(num)}-${CALLERID(dnid)})
exten => _1XX,n,MixMonitor(/monitor/${fname}.wav)
exten => _1XX,n,Dial(SIP/${EXTEN})
 
include = outgoing
$ nano sip.conf
[general]
register=>login:password@10.20.30.40
context=default
language=ru
context=default
allowoverlap=no
allowguest=no
autocreatepeer=no
alwaysauthreject=yes
disallow=all
allow=alaw
allow=ulaw
 
[authentication]
auth=login:password@REGISTRAR
 
[provider]
type=peer
host=10.20.30.40
fromuser=login
username=login
secret=password
context=default
dtmfmode=rfc2833
insecure=invite,port
 
[phns](!)
type=friend
context=phones
host=dynamic
dtmfmode=rfc2833
canreinvite=no
directmedia=no
 
[100](phns)
secret=pswd123
 
[101](phns)
secret=pswd123
 
[102](phns)
secret=pswd123
 
[103](phns)
secret=pswd123
 
[104](phns)
secret=pswd123
 
[105](phns)
secret=pswd123

Теперь идем в консоль Астериска и перезагружаем конфиги сип-транков и диалплана.

$ asterisk -rv
CLI> sip reload
CLI> dialplan reload

Если перезагрузка конфигов не выдала ошибок, проверяем список клиентов и регистраций.

CLI> sip show registry
CLI> sip show peers

Теперь мы зарегистрированы у провайдера, входящие вызовы приземляются в контекст default, в соответствии с которым 10 секунд звонит номер 100, затем звонок переводится на все заведенные номера (100-105). Абонентам доступны исходящие звонки на 10-значные номера, начинающиеся на 8 (только РФ, без международных звонков), все разговоры записываются и складываются в папку.

Один комментарий

  1. Дополнительные пакеты для свежих версий убунту:
    make g++ libncurses-dev uuid-dev libjansson-dev libxml2-dev libsqlite3-dev

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *