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

 

Проект Asterisk

По адресу en.wikipedia.org/wiki/List_of_SIP_software находится один из самых больших списков серверов и клиентов SIP (протокол установления сессии для работы пользовательских сеансов, включающих передачу видеоданных и голоса). В этом списке 10 серверов, распространяемых под свободной лицензией, но администраторы чаще всего предпочитают

Несмотря на свою софтовость, 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, Mac OS X/Darwin, Open/Solaris. Клиенты доступны практически для всех систем, в том числе и Windows. Исключение составляют драйверы Zaptel и ISDN-устройств, реализации которых пока есть не для всех платформ.

 

Установка Asterisk

К сожалению, четких указаний насчет аппаратных средств дать невозможно — слишком много тонкостей и нюансов, поэтому за примерными конфигурациями компьютеров отсылаю на страницу сайта voip.rus.net «Trixbox, VoIPonCD.

Asterisk присутствует в репозитариях пакетов большинства дистрибутивов. Так, в Ubuntu команда sudo apt-cache search Asterisk выдает приличный список пакетов, после установки которых сразу же можно приступать к настройке. Но установка из репозитария имеет один минус — как правило, в нем версия 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

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

$ 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-телефонии он является необходимым. Но если Zaptel-устройства под рукой нет, для его эмуляции можно использовать специальный драйвер — 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

Создаем правила для 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-канала.

Подробные указания для всевозможных устройств даны в документации. На русском по этому поводу можно почитать в документе «ZoIPer (ранее Idefisk). Есть версии для Linux, Windows и Mac OS X. Еще один неплохой и также мультиплатформенный клиент — X-Lite.

Если все нормально, в консоли должно появиться сообщение вроде «Registered SIP ‘grinder’ at 192.168.0.1 port 5060», набираем номер и звоним.

Мы настроили Asterisk в минимальной конфигурации, но это далеко не все, что он может. За кадром осталось подключение к другому серверу IP-телефонии, парковка вызова, музыка во время ожидания, биллинг, использование GUI для администрирования сервера и прочее, но мы постараемся восполнить эти пробелы в следующих статьях.