Установка Asterisk

9

Статья напечатана в журнале Хакер

Дочитавшие до конца получат видео.

Не смотря на развитие различных систем обмена информации, таких как электронная почта и службы мгновенного обмена сообщений, обычный телефон еще долго будет оставаться самым популярным средством связи. Ключевым этапом в истории телекоммуникаций и Интернета стала передача голоса поверх IP-сетей, поэтому за последние годы изменилось само понятие телефон. Использование VoIP современно, удобно, дешево, так как можно объединить удаленные офисы, даже не прибегая к услугам операторов телефонной связи. Какие доводы еще нужны для того, чтобы поднять свой сервер IP-телефонии?

Проект Asterisk

По адресу en.wikipedia.org/wiki/List_of_SIP_software находится один из самых больших списков серверов и клиентов SIP (протокол установления сессии для работы пользовательских сеансов, включающих передачу видеоданных и голоса). В этом списке 10 серверов, распространяемых под свободной лицензией, но наибольшей любовью у администраторов пользуется Asterisk IP-PBX (www.asterisk.org). Этот проект возник, можно сказать, случайно — его создатель Марк Спенсер (Mark Spencer, кстати Gaim/Pidgin тоже его рук дело) не имел достаточно денег, чтобы купить для своей компании обычную АТС, и потому вынужден был создавать его софтовую реализацию. Открытость кода способствовала быстрому росту популярности нового продукта как среди разработчиков, так и потребителей. Выпускается Asterisk под двойной лицензией. Кроме GNU GPL, возможно создание закрытых модулей, содержащих проприетарный код. Такой подход разрешает включить поддержку закрытых кодеков и оборудования.
Не смотря на свою софтовость, Asterisk обладает всеми функциями классической АТС и даже больше. Вот только некоторые из них: центр обработки вызовов, голосовая почта, возможность проведения конференций, что в итоге делает его мощной и легкорасширяемой платформой для создания телекоммуникационного сервиса любого масштаба. Поддерживаются практически все популярные протоколы IP-телефонии (SIP, H.323, MGCP, Skinny/SCCP, Google Talk, Skype), собственный IAX и некоторые другие, позволяющие передавать видео и факс. Кроме обслуживания локальных клиентов, Asterisk умеет передавать голосовой трафик между серверами. Есть модули для сопряжения с аналоговыми (FXO/FXS) и цифровыми (Т1/E1) линиями.
Если функциональности недостаточно, для написания диалплана можно воспользоваться собственным языком Asterisk, написать модуль на языке C, либо использовать универсальный интерфейс интеграции с внешними системами обработки данных AGI. Чтобы упростить разработку модулей, предназначенных для решения различных задач, предложено несколько уровней API (channel, application, codec, file format). Поэтому новые возможности (например, кодеки) появляются в Asterisk очень быстро, и их внедрение проходит безболезненно. Кроме этого, модульность Asterisk позволяет администраторам подключать только необходимые функции, модифицируя систему под свои нужды. Сервер Asterisk можно установить на компьютерах, работающих под управлением GNU/Linux, Free/Net/OpenBSD, MacOS X/Darwin, Open/Solaris, клиенты доступны практически для всех систем, в том числе и Windows. Исключение составляют драйверы zaptel и ISDN устройств, реализации которых пока есть не для всех платформ.

Установка Asterisk

К сожалению, четких указаний на счет аппаратных средств дать невозможно, слишком много тонкостей и ньюансов, поэтому за примерными конфигурациями компьютеров отсылаю на страницу сайта voip.rus.net «Производительность Asterisk систем» (voip.rus.net/tiki-index.php?page=Asterisk+dimensioning). Если твоя цель — знакомство с Asterisk, можно использовать один из дистрибутивов, в которых уже имеется настроенный и полностью готовый к работе сервер: AsteriskNow (www.asterisknow.org), Trixbox (www.trixbox.org), VoIPonCD (www.voiponcd.com).
Asterisk присутствует в репозитариях пакетов большинства дистрибутивов. Так в Ubuntu команда «sudo apt-cache search asterisk» выдает приличный список пакетов, после установки которых сразу же можно приступать к настройке.

Пакеты Ubuntu

Но установка из репозитария имеет один минус — как правило, в нем версия Asterisk прилично отстает от текущей, которую можно скачать с официального сайта. Поэтому рассмотрим универсальный способ установки на примере того же Ubuntu, хотя все сказанное (за редким исключением) относится и к остальным дистрибутивам.
Устанавливаем пакеты, необходимые для компиляции:

$ sudo apt-get install build-essential automake autoconf bison flex libtool libncurses5-dev libssl-dev

Кроме того, настоятельно рекомендуется установить библиотеку libpri, даже если не нужна поддержка Primary Rate ISDN (первичный тип цифровой сети с интеграцией услуг). Это можно сделать либо через репозитарий «sudo apt-get install libpri1.2», либо используя исходные тексты:

$ wget -c downloads.digium.com/pub/libpri/libpri-1.4-current.tar.gz

Компиляция библиотеки стандартна, поэтому не будем на этом останавливаться.
Теперь скачиваем с сайта исходные тексты Asterisk и конфигурируем:

$ wget -c downloads.digium.com/pub/asterisk/asterisk-1.4.11.tar.gz
$ tar xzvf asterisk-1.4.11.tar.gz
$ cd asterisk-1.4.11
$ ./configure —prefix=/usr

По окончании работы скрипта в консоли увидим эмблему проекта и некоторую информацию о настройках.

Конфигурируем Asterisk

$ make
$ sudo make install

Примечание: если производится установка версии 1.2, то для поддержки формата mp3 перед командой make следует ввести «make mpg123», версия 1.4 уже никак не реагирует на эту команду.
После компиляции будут установлены, помимо всего прочего, следующие исполняемые файлы:

1. /usr/sbin/asterisk — демон сервера Asterisk, который и обеспечивает всю работу;
2. /usr/sbin/safe_asterisk — скрипт для запуска, перезапуска и проверки проверки работы сервера Asterisk;
3. /usr/sbin/astgenkey – скрипт для создания закрытого и публичного RSA ключей в формате PEM, которые необходимы для работы Asterisk.

Чтобы установить шаблоны конфигурационных файлов и документацию, набираем:

$ sudo make samples

Примеры конфигурационных файлов будут скопированы в /etc/asterisk, если в этом каталоге уже находятся файлы конфигурации, они будут переименованы с префиксом «.old». Для сборки документации потребуется пакет doxygen, если его нет, устанавливаем:

$ sudo apt-get install doxygen
$ sudo make progdocs

Аналогично устанавливаем и пакет с расширениями asterisk-addons (этот шаг не обязательный, его можно смело пропустить). Многие модули, входящие в состав этого набора, являются экспериментальными, их стоит устанавливать только если требуется запись информации в БД, поддержка mp3-файлов и протокола ooh323c (Objective Systems Open H.323 for C):

$ wget -c downloads.digium.com/pub/asterisk/asterisk-addons-1.4.2.tar.gz
$ tar xzvf asterisk-addons-1.4.2.tar.gz
$ cd asterisk-addons-1.4.2
$ ./configure; make; sudo make install; sudo make samples

Установка Asterisk закончена, для начала рекомендуется запустить сервер в отладочном режиме и просмотреть вывод на наличие ошибок:

$ sudo /usr/sbin/asterisk -vvvgc

Если получаем сообщение Asterisk Ready и приглашение консоли управления, значит, все в порядке. Выходим:

*CLI> stop now

Теперь можно переходить к дальнейшей настройке.

Настройка поддержки интерфейсных карт

Если планируется подключение сервера Asterisk с помощью специальных интерфейсных плат к обычным телефонным сетям, следует позаботиться о наличии драйверов, реализованных в виде модуля ядра. Но даже если таких устройств в компьютере нет, все равно рекомендуется установить эти драйвера. Дело в том, что во всех Zaptel устройствах есть таймер, и для полноценной работы сервера IP-телефонии он является необходимым. Но если такого устройства под рукой нет, для его эмуляции можно использовать специальный драйвер — ztdummy.
Из репозитария устанавливаем пакеты zaptel, zaptel-source и собираем модули под свою систему:

$ sudo apt-get install zaptel zaptel-source
$ sudo module-assistant prepare
$ sudo m-a -t build zaptel

После этих команд в /usr/src появится пакет zaptel-modules-*_i386.deb, устанавливаем его с помощью dpkg. После чего проверяем работу модулей ядра:

$ sudo depmod -a
$ sudo modprobe ztdummy

И если нужна поддержка устройств:

$ sudo modprobe zaptel
$ sudo modprobe wcfxo

Чтобы обеспечить их автоматическую загрузку, выполняем следующую команду:

$ echo ‘ztdummy\nzaptel\nwcfxo’ >> /etc/modules

Cоздаем правила для UDEV:

$ sudo mcedit /etc/udev/rules.d/51-zaptel.rules

KERNEL=»zapctl», NAME=»zap/ctl»
KERNEL=»zaptimer», NAME=»zap/timer»
KERNEL=»zapchannel», NAME=»zap/channel»
KERNEL=»zappseudo», NAME=»zap/pseudo»
KERNEL=»zap0-9*», NAME=»zap/%n»
Также можно использовать исходные тексты или CVS-версию драйвера. При самостоятельной компиляции понадобятся заголовочные файлы ядра (или исходные тексты):

$ sudo apt-get install linux-headers-`uname -r`

Создадим символическую ссылку, чтобы Asterisk нашел исходники ядра:

$ sudo ln -s /usr/src/linux-headers-2.6.20-15-generic /usr/src/linux-2.6

Теперь получаем последнюю версию драйверов:

$ cd /usr/src
$ wget -c downloads.digium.com/pub/zaptel/zaptel-1.4-current.tar.gz

Компилируем и устанавливаем:

$ tar xzvf zaptel-1.4-current.tar.gz
$ cd /usr/src/zaptel-1.2.17.1
$ ./configure
$ make
$ sudo make install

И чтобы вручную не создавать конфигурационные файлы:

$ sudo make config

После этой команды будет создан скрипт для автоматического запуска модулей, входящих в состав Zaptel, и конфиг /etc/default/zaptel (или /etc/sysconfig/zaptel), в котором указаны, какие модули необходимо загружать. Рекомендую в этом файле оставить только необходимое. Пробуем загрузить модуль:

$ sudo modprobe ztdummy
$ lsmod | grep ztdummy
ztdummy 6184 0
zaptel 189860 1 ztdummy

Все нормально. После установки в системе появятся еще два файла:

1. /etc/zaptel.conf – описывает конфигурацию аппаратного обеспечения;
2. /etc/asterisk/zapata.conf — настройки сервера Asterisk для работы драйвера Zap канала.

Подробные указания для всевозможных устройств даны в документации, на русском по этому поводу можно почитать в документе «Конфигурация драйвера ядра Zaptel» (voip.rus.net/tiki-index.php?page=Asterisk+config+zaptel.conf), поэтому на этом не останавливаемся, впереди у нас еще много работы. После настройки проверяем работу командой «ztcfg -vv».

Регистрация пользователей

Если сейчас посмотреть в каталог /etc/asterisk, можно обнаружить большое количество файлов. Из-за сжатых объемов журнальной статьи мы познакомимся только с некоторыми из них. Так в asterisk.conf указаны каталоги, которые будет использовать Asterisk во время работы, расположение и владелец сокета, используемого для подключения удаленной консоли управления, а также параметры запуска сервера, используемые по умолчанию. Некоторые каталоги во время установки не создаются, это придется сделать вручную:

$ sudo mkdir -p /var/{run,log,spool}/asterisk
$ sudo adduser —system –-no-create-home asterisk
$ sudo addgroup —system asterisk

Добавим пользователя asterisk в группу audio:

$ sudo adduser asterisk audio
$ sudo chown asterisk:asterisk /var/run/asterisk
$ sudo chown -R asterisk:asterisk /var/log/asterisk
$ sudo chown -R asterisk:asterisk /var/spool/asterisk

Дальше нас интересует файл sip.conf, где определяются серверы и клиенты SIP, с которыми будет дружить наш Asterisk. Каждый из них представлен в файле отдельным блоком, который начинается с оглавления, заключенного в квадратные скобки. Параметров в sip.conf довольно много, ограничимся лишь добавлением SIP-аккаунта:

$ sudo mcedit /etc/asterisk/sip.conf

[600]
type=friend
host=dynamic
; defaultip=192.168.1.200
username=600
secret=password
language=ru
nat=no
canreinvite=no
context=office
callerid=grinder <1234>
mailbox=1234@office
; перед использованием параметра allow следует отключить все кодеки
disallow=all
; порядок следования кодеков не имеет значения
allow=ulaw
allow=alaw
Поле type указывает, что может делать этот клиент. При значении user ему будет разрешено только принимать входящие звонки, peer – он сможет только звонить, а friend означает все действия, то есть user+peer. В поле host указывается IP-адрес, с которого разрешено подключение этого клиента. Если клиент может подключаться с любого адреса, указываем «host=dynamic». А чтобы в этом случае можно было вызвать клиента, когда он еще не зарегистрирован, в defaultip следует указать IP-адрес, по которому его всегда можно будет найти. В username и secret указываем логин и пароль, используемые клиентом при подключении. Параметр Language задает код языка приветствий и специфичные настройки сигналов телефонов, которые определены в файле indications.conf. При работе клиента за NAT’ом в соответствующем поле необходимо установить значение «yes». Отключение canreinvite заставляет весь голосовой RTP трафик проходить через Asterisk. Если клиенты поддерживают SIP re-invites, им можно разрешить соединяться напрямую, указав «canreinvite=yes». Поле Context определяет план набора, в который попадают вызовы, поступающие от этого клиента, а сallerid — строку, которая будет выводиться при звонке от клиента. По умолчанию используется контекст default, который берет все настройки из контекста demo. Последний предназначен исключительно для демонстрационных целей, в рабочей системе необходимо создать свой контекст. Поле mailbox указывает на голосовой ящик 1234 в контексте office. Остальные клиенты настраиваются аналогично.
После определения SIP аккаунтов наши клиенты уже могут регистрироваться на сервере Asterisk и совершать исходящие вызовы. Чтобы у них была возможность принимать звонки, следует обратиться к файлу extensions.conf, в котором описывается план набора (Dialplan), распределяющий каждый звонок в системе. Здесь же указываются все разрешенные расширения.

$ sudo mcedit /etc/asterisk/extensions.conf
[office]
include => default
exten => 1234,1,Dial(SIP/600,20)
exten => 1234,2,Voicemail(600)
Здесь все просто. За пользователем grinder закрепляем номер 1234, и если он не ответит на звонок, ему можно будет оставить сообщение в голосовой почте. Цифра после номера означает приоритет, который определяет последовательность выполнения задач. Теперь, если asterisk запущен, следует подключиться к его консоли, выполнив на той же машине «asterisk -r», и с помощью команды reload заставить его перечитать конфигурационные файлы.

Информация о коннекте клиента

Есть и команды для перезагрузки конкретного файла. Например, план набора перечитывается командой «extensions reload».
Сервер готов к приему клиентов. По адресу www.asteriskguru.com/tutorials/configuration_asterisk_softphone.html выбираем себе софт-клиент и пробуем соединиться. Мне, например, нравится бесплатная версия простой и понятной в использовании программы ZoIPer (ранее Idefisk, www.zoiper.com/free.php). Есть версии для Linux, Windows и Mac OS X.

Клиент ZoIPer

Еще один неплохой и также мультиплатформенный клиент — X-Lite (www.xten.com).

Клиент X-Lite

Если все нормально, в консоли должно появиться сообщение вроде «Registered SIP ‘grinder’ at 192.168.0.1 port 5060», набираем номер и звоним.
Мы настроили Asterisk в минимальной конфигурации, но это далеко не все, что он может. За кадром осталось подключение к другому серверу IP-телефонии, парковка вызова, музыка во время ожидания, биллинг, использование GUI для администрирования сервера и прочее, но мы постараемся восполнить эти пробелы в следующих статьях.

Проект CallWeaver

Чтобы избежать проблем с двойным лицензированием, был создан форк Asterisk, названный CallWeaver (www.callweaver.org/blog). Правда, он обладает меньшей функциональностью, но поддерживает большое количество протоколов и работу по аналоговым и цифровым каналам. Разработчики отказались от ztdummy, однако теперь для работы ядро должно быть собрано с Timer Frequency 1000 HZ. Чтобы в Ubuntu самому не пересобирать ядро, достаточно установить пакет linux-lowlatency .

Видео по установке Asterisk

9 комментариев

  1. krechet
    // Ответить

    Полезный материал. Только если не трудно в будущих статьях хотелось бы поподробнее почитать про CallWeaver и про web-интерфейс… Было бы интересно.


  2. // Ответить

    У меня есть материал по установке A2Billing и AstBill, установке и использованию AstersikNOW. По условиям редакцииб его могу выложить только через 2 месяца. Но что-то придумаю.






  3. // Ответить

    2Александр вообще то это в Ubuntu автоматически так настроено. Даже внимание не обращал :)Посмотрю как сделали и выложу.

Добавить комментарий

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