Pull to refresh

Asterisk от простого — к сложному

Reading time4 min
Views168K

Вступление


Добрый день. На написание статьи меня сподвигла необходимость передать мои знания подчиненным, которым уже пора бы вникать в работу Asterisk.
Когда я заметил интерес к платформе с их стороны — я чрезвычайно обрадовался, но пришел в недоумение, когда все рвение остановилось на клацанье по триксбоксу и его подобным.

Я ничего не имею против надстроек к Астериску, которые облегчают жизнь, но я боюсь, что скоро появился поколение администраторов Астериска, которые консоли в живую не видели ниразу.

Целью моих статей является желание показать, что астериск красив сам по себе, без дополнительных надстроек, что можно, используя минимальные, ускоряющие работу скриптовые языки — творить чудеса. Хочется показать, ищущим и желающим познать новое, людям нюансы и тонкости работы системы.

Что такое Астериск


Про астериск есть множество статей с описанием функционала и возможностей. Новичку надо знать самое главное — на начальном этапе ( в качестве обучения ) Астериск в состоянии выполнять любые задачи связанные с телефонией, ну или практически любые.
Есть ряд неудобств, либо ограничений, которые присущи работе с Астериском, постараемся их устранять в процессе ознакомления с системой.
Также стоит понимать, что высоконагруженную систему на астериске построить крайне тяжело — для этого есть другие решения.
Для простоты можно считать, что астериск целесообразно использовать в системах, где количество одновременных звонков не превышает 100.

С цего начать


Честно просмотрев 10 страниц результатов поискового запроса Asterisk на хабре, понял, что начинать надо сначала, но без фанатизма. Рассказывать о установке не буду, но о структуре Астериска и тому, что нам понадобится при работе — будем говорить. Говорить мы будем о Asterisk 1.8, но принципы работают на всех версиях астериска.

Структура системы


Астериск, как любое приложение, работает на основании конфигурационных файлов, коих достаточно большое множество. Честно говоря, я до сих пор не знаю роли половины конфигов. Для нашей работы на начальном этапе нам понадобится знать и понимать настройки, хранящиеся в файлах sip.conf и extensions.conf. Отмечу, что при стандартной установке все файлы конфигов хранятся в /etc/asterisk/.

Файл sip.conf

Данный файл содержит описание базовых параметров работы протокола SIP, настройки NAT, кодеков и самое главное — учетных записей. Позже я буду рассказывать о том, каким образом хранить учетные записи в базе данных.

Дефолтный конфиг sip.conf позволяет запускать Астериск, при условии прописывания учетных записей, и он будет работать, слушая при этом входящие соединения на всех интерфейсах.

Учетные записи в sip.conf могут быть трех типов:
— user ( пользователь )
— peer ( пир )
— friend ( пользователь+пир )

Я почти всегда настраиваю учетные записи как friend, по причине того, что она сочетает в себе все функции как пира так и пользователя.

Простой пример учетной записи выглядет так:

[1001]; название пира, его будем использовать в дальнейшем, для работы с правилами звонков, ;cовпадение с логином необязательно
type=friend; тип учетной записи
host=dynamic; разрешаем логин с разных IP адресов
username=1001; имя пользователя
secret=1234; пароль
context=default; контекст, о нем чуть позже
disallow=all; запрещаем все кодеки
allow=alaw; разрешаем кодек G.711a ( alaw )

Такой записи достаточно, чтобы зарегистрироваться на свежем сервере с параметрами пользователя 1001 и паролем 1234.

Создаем две записи с названиями 1001 и 1002 в самом низу файла sip.conf.

Файл extensions.conf

Данный файл — ключевой файл в системе Asterisk, так как в нем описываются правила работы с любым голосовым трафиком, появившимся в системе. Это как статическая таблица маршрутизации. О хранении данных в базе данных будем говорить позже.

Структура файла вполне проста:
-внутри файла прописываются глобальные параметры, в том числе и переменные
-далее файл разбит на контексты, каждый из которых живет своей жизнью и правила работы звонков внутри каждого контекста могут быть своими.

Контексты нужны, для разграничения поведения телефонного звонка и отделения одних групп пользователей и их звонков от других. Контексты позволяют в пределах одной системы создавать множество подсистем со своими правилами и пользователями (аналог виртуальных машин).

Контексты обозначаются как [НАЗВАНИЕ КОНТЕКСТА].
Структура контекста следующая:

exten => МАСКА, ПОРЯДОК, ДЕЙСТВИЕ
, где
МАСКА — маска номера, либо статически заданный номер
ПОРЯДОК — порядок действия для конкретной МАСКИ (возможна последовательность действий)
ДЕЙСТВИЕ — команда, выполняемая системой в случае попадания звонка на данное правило.

Наши тестовые пользователи созданы в контексте default, поэтому, если просто запустить астериск и позвонить на любой номер, можно услышать тестовое демо-меню Астериска.

Открываем на редактирование extensiond.conf, делаем поиск по [default] и в следующей после строки [default] смело вносим правило локального звонка:

Статическое правило:
exten => 1001,1,Dial(SIP/1001)
exten => 1002,1,Dial(SIP/1002)

Динамическое правило:
exten => _XXXX,1,Dial(SIP/${EXTEN}); тут X говорит о том что будет набрана любая цифра, о способах; составления масок ( экстеншинов ) — позже.

Данные правила позволят совершить локальный звонок между тестовыми пользователями.

Напоследок: Работа с консолью сервера


Сервер запускается командой asterisk из под рута, либо /usr/sbin/asterisk.
Для захода в консоль надо из под рута ввести asterisk -r, либо /usr/sbin/asterisk -r (далее, для удобства, будем использовать asterisk, подразумевая, что мы говорим о работе с испольняемым файлом сервера).

Для того, чтобы Астериск перечитал конфиги из консоли достаточно выполнить reload.

Домашняя работа

1.Совершить локальный звонок.
2.Ознакомиться с примерами конфигурации, которые находятся в sip.conf и extensions.conf
3.Добавить в закладки www.voip-info.org/wiki/view/Asterisk

Спасибо за внимание.

Огромное спасибо за отзывы и замечания.
Хочу отметить, что статья расчитана на людей, которые начинают изучать Asterisk и направлена на облегчение им жизни. В перспективе хочу учесть все замечания, и делать и писать новые статьи согласно пожеланий, при этом выдерживая общую линию развития от простых вещей к сложным.
Приятно получать критику, буду стараться, и в случае неточностей исправляться.
Спасибо.
Tags:
Hubs:
+42
Comments41

Articles

Change theme settings