Настройка ip телефонии asterisk. Установка и настройка телефонии Asterisk в Linux Ubuntu

Это статья заметка, на случай если мне нужно будет вспомнить, как настроить Asterisk для приема и отправки вызовов. Этой заметки должно хватить для настройки офисной станции на ip pbx Asterisk . До сих пор у меня не было сильного понятия и опыта, как настроить Asterisk для работы не используя FreePbx , то есть, используя только конфигурационные файлы и консоль. Да и сейчас я только учусь этому. В интернете все настройки сводятся к решению той или иной задачи, но я не увидел статьи способной дать хотя бы базу для минимальной настройки IP станции. Может плохо искал.

Итак, я собрал и установил asterisk в папке /etc/asterisk уйма конфигурационных файлов. Что же дальше?

1. Возможность внутренним абонентам совершать вызовы друг другу

2. Настройка внешних линий с целью получения станцией услуги выхода на городские, междугородние номера и приема входящих звонков

3. Настройка возможности совершать вызовы абонентам на городские и междугородние номера. И принимать вызовы из города.

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

Поэтому первое, что мы делаем - создаем внутренних абонентов (peer) в файле sip.conf

Абонент А будет иметь следующие настройки :

Disallow=all
allow=ulaw
allow=alaw
type=friend
username=101
secret=password
qualify=yes
context=101
callerid=101
host=dynamic
call-limit=1
canreinvite=yes
accountcode=101
amaflags=billing
deny=0.0.0.0/0
permit=192.168.0.66

Где:
disallow=all , запрещаем использовать все кодеки кроме G.711
allow=ulaw
allow=alaw

type=friend, этот параметр может принимать три значения:

- peer , этот тип используется для совершения входящих и исходящих вызовов. Для входящих вызовов, никогда не будет проверяться соответствие имени пользователя и пароля, а только соответствие с IP адресом и номером порта источника вызова.

- user запись, которая может только совершать входящие вызовы

- friend запись, которая одновременно и peer и user
username=101
secret=password
Логин и пароль соответственно

Периодически отправлять SIP сообщение типа Options, для проверки мониторинга доступности устройства для регистрации, полезно использовать при работе через NAT для сохранения значений в таблице трансляций

Имя контекста, с правилами маршрутизации

АОН нашего номера

host=dynamic
host ip с которого будет происходить регистрация

call-limit=1
(callcounter)
Ограничение одновременных вызов, здесь можно установить количество каналов

canreinvite=yes
(directmedia)

Этот параметр отвечает за процедуру RE- Invite , если no, то все вызовы будут проходить через Asterisk , если yes RTP поток будет отправляться между двумя устройствами минуя Asterisk

accountcode=101
amaflags=billing

CDR запись для поля accountcode будет иметь значение 101
Значение поля AMA flag для исходящих вызовов от этого SIP пользователя

deny=0.0.0.0/0
permit=192.168.0.66
ACL ip, кому разрешим регистрацию

Аналогично для абонента Б :

Disallow=all
allow=ulaw
allow=alaw
type=friend
username=102
secret=password
qualify=yes
context=102
callerid=102
host=dynamic
call-limit=1
canreinvite=yes
accountcode=102
amaflags=billing
deny=0.0.0.0/0
permit=192.168.0.67

Еще часть опций в пире которая может быть полезна:

transport=tcp,udp
Могу работать не только используя udp, требует установки tcpenable=yes в general
rtptimeout=180
rtpholdtimeout=420

Полезно для SIP клиентов, которые не выполняют Hangup при закрытии или отключении. В данном случае RTP сессия сможет сброситься самостоятельно по таймауту, rtpholdtimeout – если вызов на удержании

nat=force_rport,comedia

Если устройство находится за NAT, то фиксируем работу через rport, отправляем RTP пакеты обратно на IP адрес и порт, с которого они были получены, игнорируя информацию из SDP

defaultexpiry=60
Срок действия регистрации в секундах для входящих и исходящих регистраций

dtmfmode=rfc2833

Как будем работать с DTMF сигналами

1. Итак, задача один, настроить маршрутизацию между sip клиентами 101 и 102, в простейшем варианте решается одной строчкой в файле sip.conf и конфигах по include


exten => _XXX,1,Dial(SIP/${EXTEN},20,T)

sip.conf удобно эксплуатировать вот так:

Include => in_out_peer_local

Теперь абонент 101 сможет общаться с абонентом 102 и наоборот 102 сможет позвонить 101

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

То есть создадим транк
type=peer
host=XX.XXX.XXX.XX
port=5060
fromdomain=ip нашей станции
nat=no
disallow=all
allow=ulaw
allow=alaw
allow=gsm
canreinvite=no
;allow=g722
trustrpid=yes
sendrpid=yes
dtmfmode=rfc2833
qualify=yes
insecure=invite,port
deny=0.0.0.0/0.0.0.0
permit=XX.XXX.XXX.XX/255.255.255.255
context=provide

Настройки транка очень похожи на настройки пира, в принципе это и есть пир, важные опции
fromdomain – устанавливаем fromdomain в sip пакете, чтобы можно было понять, куда вернуть sip пакеты нашей станции
trustrpid=yes
sendrpid=yes

Доверять или нет полученному Remote- Party- ID

insecure=invite,port

Не требуем аутентификацию входящих сообщений INVITE, не проверяем номер порта только соответствие ip адреса

3. Дело за малым, как только транк активирован, нужно прописать исходящую маршрутизацию для совершения вызовов абонентам А и Б
Стандарт де факто как бы гласит всегда сначала настраивать исходящую связь

Создаем контекст для совершения исходящих вызовов

Для исходящих вызовов на город


exten => _XXXXXX,1,Dial(SIP/ provider /${EXTEN})
exten => _XXXXXX,n,Hangup

Для исходящих вызовов на междугородние направления


exten => _8.,1,Dial(SIP/ provider /${EXTEN})
exten => _8.,n,Hangup

После того как исходящая связь заработала, настраиваем входящую

В простом случае без автоинформатора, групп и очередей это будут выглядеть так


exten => 2466754,1,Dial(SIP/${EXTEN})
exten => 2466754,n,Hangup

Аналогичным образом настраивается любая станция по принципу рассмотренных пунктов

Asterisk - это решение для компьютерной телефонии с открытым исходным кодом, которое поддерживает протоколы VoIP, SIP и PJSIP для операционной системы Linux. Если подключить к компьютеру соответствующее оборудование, то с помощью Asterisk можно создать полноценную станцию ATC. Среди основных возможностей программы можно отметить голосовую почту, конференции, интерактивное голосовое меню и распределение звонков.

В этой статье мы рассмотрим как выполняется установка Asterisk 13 на Ubuntu 16.04. Самой новой версии программы нет в официальных репозиториях, так как используется она рядовыми пользователями на так часто, поэтому нам придется собрать ее из исходников.

Установка Asterisk на Ubuntu 16.04

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

Обратите внимание, что если вы заходите зайти на свой сервер по ssh от имени root, то вам все равно придется подключаться от имени обычного пользователя, а уже потом переключаться в консоль root. Дальше вам нужно установить зависимости для работы программы:

apt-get install build-essential wget libssl-dev libncurses5-dev libnewt-dev libxml2-dev linux-headers-$(uname -r) libsqlite3-dev uuid-dev git subversion

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

Для распаковки исходников наберите:

tar zxvf asterisk-13-current.tar.gz

Перед тем как компилировать программу нам нужно собрать и установить pjproject. Сначала скачаем исходники:

git clone git://github.com/asterisk/pjproject pjproject
$ cd pjproject
$ ./configure --prefix=/usr --enable-shared --disable-sound --disable-resample --disable-video --disable-opencore-amr CFLAGS="-O2 -DNDEBUG"
$ make dep make && make install
$ ldconfig
$ ldconfig -p|grep pj

Наконец теперь мы готовы выполнить сборку и установку Asterisk на Ubuntu 16.04:

cd .. contrib/scripts/get_mp3_source.sh
$ contrib/scripts/install_prereq install

Эти команды позволят вам установить некоторые зависимости для проигрывания mp3. Выполнение может занять некоторое время, а также вам нужно будет ввести код страны. Дальше начинаем сборку:

./configure && make menuselect && make && make install

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

Чтобы установить скрипты инициализации, которые позволят запускать asterisk автоматически, при каждой загрузке выполните:

make config ldconfig

Теперь вы можете запустить сервер asterisk и убедится, что все действительно работает:

service asterisk start

И смотрим информацию про утилиту через терминал:

Если все было сделано правильно и установка Asterisk на Ubuntu 16.04 прошла успешно, то все будет работать.

Настройка Asterisk в Ubuntu 16.04

Программа запускается от суперпользователя. Но нам нужно, чтобы ее можно было запустить ее от пользователя asterisk, а поэтому нужно выполнить еще несколько настроек. Так ваша система будет в большей безопасности. Для начала нужно остановить запущенный сервис:

groupadd asterisk
$ useradd -d /var/lib/asterisk -g asterisk asterisk

Дальше нам нужно изменить скрипт инициализации так, чтобы программа запускалась от имени нужного пользователя. Мы можем отредактировать файл /etc/default/asterisk вручную, но проще использовать такие команды:

sed -i "s/#AST_USER="asterisk"/AST_USER="asterisk"/g" /etc/default/asterisk
$ sed -i "s/#AST_GROUP="asterisk"/AST_GROUP="asterisk"/g" /etc/default/asterisk

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

chown -R asterisk:asterisk /var/spool/asterisk /var/run/asterisk /etc/asterisk /var/{lib,log,spool}/asterisk /usr/lib/asterisk

Также укажем правильные настройки пользователя для полей runuser и rungroup в файле asterisk.conf:

sed -i "s/;runuser = asterisk/runuser = asterisk/g" /etc/asterisk/asterisk.conf

$ sed -i "s/;rungroup = asterisk/rungroup = asterisk/g" /etc/asterisk/asterisk.conf

Когда все будет готово запустите ранее остановленную службу или перезагрузите, если не останавливали:

sudo service asterisk start

Затем проверяем:

Если пользователь и группа - asterisk, а значит мы сделали все правильно.

Выводы

Вот и все. Установка Asterisk 13 на Ubuntu 16.04 завершена. Теперь вы можете перейти к дальнейшей настройке сети для совершения звонков между вашими абонентами прямо через интернет. В качестве клиентского программного обеспечения можно использовать любую программу, поддерживающую нужные протоколы, например Jitsi или Linphone.

Об авторе

Основатель и администратор сайта сайт, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux интересуюсь всем, что связано с информационными технологиями и современной наукой.

Файл конфигурации для каналов в , как для входящих, так и для исходящих вызовов.

Каждый SIP клиент или сервер определяется в этом файле как текстовый блок, по типу приведенного ниже:


type=yyy
parameter1=value
parameter2=value

Где xxx - это имя, ассоциируемое с SIP клиентом, или это может быть произвольным именем SIP устройства, на которое можно ссылаться из других конфигурационных фалов. Обычно, если SIP телефон имеет номер екстеншена 123, тогда, соответствующие ему настройки в этом файле начинается со строки . Обратите внимание, что для того, чтобы можно было позвонить на этот экстеншен 123, вы должны описать его в Вашем плане набора. может быть: "user", "peer" или "friend".

Сервер Asterisk определяет соответствие входящего вызова с именем устройства, для клиентов с type=user, основываясь на заголовке From: имя пользователя (игнорируя SIP домен). Другой путь обработки входящих SIP запросов - это определение их соответствия секции в этом файле, используя IP адрес поступившего запроса для определения того, от кого этот запрос поступил, и поиск подходящего значения параметра Host= в секции пользователя . Если этот параметр задан как Host=dynamic, тогда не будет подходящих совпадений, до того как SIP клиент не зарегистрируется на сервере.

Asterisk в роли SIP клиента В файле конфигурации в секции добавьте определение register:

Формат:
register => user [:secret[:authuser]] @host [:port]

Пример:
; Зарегистрировать 2345 у sip провайдера, как номер 1234 на нашей стороне.
register => 2345:[email protected]/1234

user - идентификатор пользователя, используемый для SIP сервера (например, 2345) authuser - не обязательное имя пользователя для авторизации на SIP сервере secret - пароль пользователя host - имя домена или хоста SIP сервера. Этот SIP сервер должен быть определен в своей секции файла sip.conf, где должны быть заданы его параметры (mysipprovider.com). port - на какой номер порта посылать запросы на регистрацию на сервере host. По умолчанию - 5060 /1234 - номер екстеншена для приема вызовов в Вашем Asterisk. 1234 - вставляется в SIP заголовок contact, SIP запроса на регистрацию. Этот екстеншен используется удаленным SIP сервером, когда ему необходимо совершить вызов в сторону Вашего Asterisk. Смотри примеры, приведенные ниже. По умолчанию, используется контекстный "s".
Это, конечно, все хорошо, но использование незашифрованных паролей в текстовом файле - не самая удачная идея, но что же можно еще сделать теперь.
Вам необходимо регистрироваться, только если: a) должна быть возможность позвонить к Вам, и b) одна из сторон имеет динамический IP адрес. Проверить, удачно ли зарегистрировался Ваш сервер, можно с помощью CLI команды: "SIP SHOW REGISTRY", аналогично, можно получить список клиентов, зарегистрированных на Вашем сервере, с помощью команды: "SIP SHOW PEERS". Вы можете просмотреть более детальную информацию о зарегистрированном клиенте, при помощи команды: "SIP SHOW PEER ". Выполните команду "HELP SIP" в CLI консоли, чтобы получить список дополнительных команд.

Определение сервера, для совершения исходящих вызовов, должно быть примерно таким:


type=peer
secret=password
username=2345
host=sipserver.mysipprovider.com
fromuser=2345
fromdomain=fwd.pulver.com
nat=yes
context=from-mysipprovider ; этот контест должен быть определен в extensions.conf

В файле extensions.conf, для совершения исходящих вызовов, у Вас должно присутствовать правило набора, примерно такого вида:

Exten => _9.,1,Dial(SIP/${EXTEN:1}@mysipprovider-out,30,r)

Обратите внимание, что конструкция ${EXTEN:1} извлекает все содержимое переменной, в которой содержится вызываемый екстеншен (совпавший с шаблоном), за исключением первой цифры, в данном случае: 9 + набор цифр. Обратитесь к разделу по работе с подстроками в описании , для более подробной информации.


exten => 1234,1,Answer ; 1234 - екстеншен из контактной информации, по умолчанию - "s"
exten => 1234,2,Dial(SIP/111,25,Ttr) ; входящий вызов перенаправляем на SIP телефон с номером 111
exten => 1234,3,Hangup

Конфигурация SIP - секция general Секция , файла sip.conf, включает в себя следующие переменные:

= : Разрешенные кодеки, порядок выбора кодека, задается порядком их описания в этой команде (Сначала используйте: DISALLOW=ALL, перед тем, как разрешить какие то конкретные кодеки) allowtransfer= yes | no: Появилась, начиная с версии 1.4.0. При установке в значение "no" - запрещает все виды перевода вызовов. (за исключением тех, что разрешены в описании настроек пользователя). =all:Запрещает использование всех кодеков (глобальная настройка) allowguest = yes (по умолчанию) | no: Разрешить или запретить гостевые вызовы (по умолчанию - yes, в качестве значения можно указать параметр "osp", если asterisk собран с поддержкой OSP) = yes | no: Если разрешено, кто угодно может использовать сервер в качестве пира (без проверки на возможность доступа; может быть удобно, при работе с SER SIP прокси). bindaddr = 0.0.0.0:IP адрес, на который Asterisk будет принимать IP пакеты SIP вызовов bindport=5060:номер порта, на который Asterisk будет принимать IP пакеты SIP вызовов callerid = : Информация для Сaller*Id, используется, когда нет ничего из того, что можно было бы использовать в качестве этого значения. По умолчанию - "asterisk". (Возможность переназначить значение по умолчанию есть в версии Asterisk 1.0.9. Насчет других версий нет полной уверенности.) = update | yes | no (глобальная настройка). По некоторым причинам, значение по умолчанию - "Yes", будьте внимательны... context = :Это используемый по умолчанию, который используется, когда для клиента не определен свой . Этот , определенный для клиента, используется для маршрутизации вызовов от этого клиента до нужного места назначения. Содержимое описывается в файле плана набора - extensions.conf. defaultexpirey=120:Продолжительность периода входящей или исходящей регистрации. : inband | info | rfc2833 (глобальная настройка) = domains: Список доменов, разделенных запятыми, за которые отвечает сервер Asterisk. (появилось в Asterisk 1.2.x) = 200.201.202.203:IP адрес, который будет использоваться в SIP сообщениях, если наш сервер находиться за NAT. externhost = hostname.tld: (новый параметр в Asterisk 1.2.x) externrefresh = xxx: Этим параметром мы определяем, как часто будет производиться поиск записи в DNS имени хоста, определенном в параметре "externhost" (новый параметр в Asterisk 1.2.x) = 192.168.1.0/255.255.255.0: определение локальной сети и ее маски. fromdomain= : Установка домена по умолчанию в поле From: SIP сообщений, при работе в качестве SIP ua (клиента). maxexpirey=3600: Максимально разрешенная продолжительность регистрации. minexpiry=60: (Переменная появилась, начиная с версии Asterisk 1.4.0) Минимально разрешенная продолжительность регистрации. = yes | no (установка для соединений с пирами) Обратите внимание, что в Asterisk 1.0.x, параметр nat может принимать значения: no | never | route | yes. notifymimetype=text/plain:Позволяет переопределить mime type в сообщениях MWI NOTIFY, используемых в сообщениях, которые отправляются системой . pedantic = yes|no:Включить медленную, педантичную проверку полей Call-ID и всех строк в многострочном заголовке SIP сообщения и кодированных URI заголовков port = : SIP порт, используемый по умолчанию. (это не тот порт, на котором Ваш Asterisk ждет IP пакеты. Смотри параметр: bindport) promiscredir=yes | no: Включение поддержки сообщений 302 Redirects; (No - будет переадресовать все к локальному екстеншену, который получен в поле Contact, а не к екстеншену, который указан в поле назначения вызова.) realm = realm (Этой настройкой можно изменить realm для авторизации, со значения по умолчанию - Asterisk, на любое выбранное Вами. Работает, начиная с Asterisk версии 1.x) register => @ / :Зарегистрироваться на сервере SIP провайдера. = yes|no: Включить поиск для вызовов tos= : Данный параметр удален, начиная с версии Asterisk 1.4.0. Установка параметров IP QoS для исходящих медиапотоков. t1min= : (Переменная появилась, начиная с версии Asterisk 1.4.0) Минимальная задержка прохождения сообщений до хоста и обратно (roundtrip time), для которого отслеживается состояние (monitored host). Значение по умолчанию - 100 ms. = : (Переменная появилась, начиная с версии Asterisk 1.4.0) Установка параметров IP QoS для SIP пакетов. = : (Переменная появилась, начиная с версии Asterisk 1.4.0) Установка параметров IP QoS для пакетов, передающих аудиоданные по протоколу RTP. = : (Переменная появилась, начиная с версии Asterisk 1.4.0) Установка параметров IP QoS для пакетов, передающих видео данные по протоколу RTP.
videosupport=yes|no: Включает поддержку SIP видео : Параметр позволяет изменить значение SIP заголовка "User-Agent". = yes|no: Если включено, то полученному значению Remote-Party-ID можно доверять.

Конфигурация SIP - клиенты и пиры Нижеприведенные переменные могут быть заданы в описании каждого SIP клиента:

: Пользователь может быть ассоциирован с неким кодом доступа (accountcode). Используется для . : Разрешенные и запрещенные кодеки. : Категория для CDR записей. Можно выбрать: default, omit, billing, documentation. Смотри: .allowoverlap: Начиная с версии 1.4.x. Значения: yes/no, по умолчанию: yes. Установка в "no" запрещает поддержку "overlap dialing".allowsubscribe: Начиная с версии 1.4.x. Значения: yes/no, по умолчанию: no. Установка в "no" запрещает отслеживание состояние (subscriptions) данного клиента.allowtransfer: Начиная с версии 1.4.x. Разрешить (yes) или запретить (no) перевод вызова для этого пользователя.auth: Начиная с версии 1.4.x. Ссылка на запись из секции (только для типа peer).autoframing: Начиная с версии 1.4.x. Включение (yes) или выключение (no) autoframing"a.buggymwi: Начиная с версии 1.4.x. Значения: yes/no, по умолчанию: no. Cisco SIP firmware не полностью поддерживает RFC для индикации наличия новой голосовой почты (MWI). Установите значение этого параметра в "yes", чтобы не получать сообщения об ошибке, при отправке MWI телефонам с данной проблемой. : Определяет группу вызовов (call group) для вызовов через это устройство.callingpres: Начиная с версии 1.4.x. Режим публикации CallerId, значения смотри в файле doc/callingpres.txt из дистрибутива asterisk.call-limit: Начиная с версии 1.4.x__. Ограничение на кол-во вызовов для пользователя. Для типа "peer" - на исходящие, для "user" - на входящие. : Включайте, если только на клиенте поддерживается функция: .cid_number: Начиная с версии 1.4.x. Номерная часть поля CallerID.context: Контекст плана набора, в который попадают вызовы, поступающие от данного клиента. : IP адрес клиента по умолчанию, когда host= определен, как DYNAMIC. Используется, если клиент еще не зарегистрировался, при необходимости его вызова. : Как клиент обрабатывает сигнализацию DMTF. : Указываем имя пользователя для поля "from", когда происходит вызов с использованием этой записи. = : Установка домена по умолчанию в поле From:, SIP сообщений, когда происходит вызов с использованием этой записи.fullname: Начиная с версии 1.4.x. Часть с именем, поля CallerID.g726nonstandard: Начиная с версии 1.4.x. Значения: yes/no, по умолчанию: no. Если клиент собирается для сеанса связи "договориться" использовать звуковой кодек G726-32, с использованием компрессии AAL2, вместо RFC3551 (что требуется для аппаратов фирмы Sipura и шлюзов от Grandstream, и может другим). То это противоречит спецификации RFC3551, клиент _должен_ вместо этого "договориться" использовать AAL2-G726-32:-(host: Как нам найти нашего клиента - IP адрес или имя хоста. Если Вам нужно, чтоб телефон самостоятельно зарегистрировался, используйте значение dynamic вместо IP адреса или имени хоста. : Ограничение на число одновременных соединений с нашим SIP клиентом. Эти параметры устарели, в версии 1.4.x - не используются. : very|yes|no|invite|port: Определяет как обрабатывать соединения с пирами. По-умолчанию значение "no" (аутентификация для всех соединений включена). (invite и port добавлено в версии 1.2.x). : Код языка, которые определены в файле indications.conf - где определяется язык приветствий и специфичные для каждой страны настройки сигналов телефонов. : Екстеншен голосового ящика (для работы индикатора новых сообщений)maxcallbitrate: Начиная с версии 1.4.x. Максимальный битрейт для видео в kbit/s. По умолчанию: 384 kbit/s.mohsuggest: Начиная с версии 1.4.x. Назначение см. в sip.conf. : MD5-Hash строки: " :asterisk: " (может использоваться вместо параметра secret).musiconhold: Устанавливает класс музыки ожидания (musiconhold) для вызовов с данного SIP телефона. Для вызовов, которые поступают на данный телефон, задание этого класса необходимо делать командой , расположенной выше по приоритету (меньшее значение приоритета в плане набора), чем команда Dial в плане набора. Параметр MusicOnHold устанавливается для совершаемых вызовов, а не для телефонов, и если для обработки вызова для екстеншена используется команда , то она переопределит, заданное этим параметром значение, для этого вызова. : Эта переменная изменяет образ действия сервера Asterisk для клиентов находящихся за файрволом с трансляцией адресов (NAT). Но этот параметр не решает проблемы, если сам Asterisk находится за таким файрволом, а клиент снаружи (в сети internet с нормальным IP адресом).outboundproxy: Адрес прокси сервера для исходящих вызовов (только для типа peer).permit, deny: Ограничения по IP адресу и IP сети для клиента. Примечание: в версии 1.4.x параметр mask уже не используется. : Группа для "pickup" вызовов поступающих вашим сослуживцам, используя комбинацию "*8" и приложение Pickup() для работы с екстеншеном *8.port: SIP порт клиента.progressinband: Начиная с версии 1.4.x. Значения: yes/no/never, по умолчанию: never. Должен ли asterisk генерировать самостоятельно звуковой сигнал вызова для вызывающего абонента (in-band ringing). Используйте значение "never", чтобы никогда не производилась генерация этого сигнала, даже в случае, когда некоторые странные устройства не могут генерировать его самостоятельно.promiscredir: Начиная с версии 1.4.x. Значения: yes/no, по умолчанию: no. Если установлено в значение "yes", то этим мы разрешаем отправлять SIP сообщения с кодом 302 или сообщения для переадресации вызова, для SIP клиентов с не локальными IP адресами. Стоит отметить, что поведение promiscredir при совершении переадресации вызова, который производиться в локальной системе, может привести к зацикливанию вызова, т.к. Asterisk не умеет обрабатывать "hairpin" вызовы. : Периодическая проверка доступности клиента. restrictcid: (yes/no) Этот параметр не используется, вместо него используйте callingpres. rfc2833compensate: Начиная с версии 1.4.x. Значения: yes/no, по умолчанию: no. Включение компенсации передачи DTMF сигналов с других серверов asterisk версии до 1.4.*. В данных случаях, Вы должны включить эту функцию или прием DTMF сигналов не будет работать должным образом. : Прерывать вызов, если нет активности RTP медиапотока более чем x секунд и если линия не находиться в режиме удержания (hold). : Прерывать вызов, если нет активности RTP медиапотока более чем x секунд, в режиме удержания линии (hold) (значение должно быть больше, чем rtptimeout)secret: Если Asterisk выступает в роли SIP сервера, тогда данный SIP клиент должен автризироваться с данным паролем (shared secret). Если же Asterisk выступает в роли SIP клиента, работающим с удаленным SIP сервером, для которого требуется авторизация для запросов "SIP INVITE", тогда это поле будет использовано для авторизации в сообщениях "SIP INVITE", которые наш Asterisk будет отправлять удаленному SIP серверу.sendrpid: Отправлять или нет заголовок Remote-Party-Id этому SIP клиенту. Значения: yes/no, по умолчанию: yes.setvar: Начиная с версии 1.4.x. В значении указывается пара "переменная=значение" для переменной канала, при вызовах с данного девайса.subscribecontext: Начиная с версии 1.4.x. Указывается название контекста, в котором будут обрабатываться SIP запросы SUBSCRIBE.subscribemwi: Начиная с версии 1.4.x. Значения "yes" и "no". Назначение см. sip.conf.t38pt_udptl: Начиная с версии 1.4.x. Значения: yes/no, по умолчанию: no. Включить/выключить поддержку T.38 для данного клиента. : Значения: yes/no, по умолчанию: no. Устанавливается в "yes", если можно доверять полученному от SIP клиента Remote-Party-ID. : Тип клиента - только исходящие вызовы, только входящий или все вместе?useclientcode: Начиная с версии 1.4.x. Значения: yes/no, по умолчанию: no.usereqphone: Начиная с версии 1.4.x. Значения "yes" и "no". Добавить или нет ";user=phone" в URI, которое содержит нормальный вызываемый номер. : Если Asterisk выступает в роли SIP клиента, работающим с удаленным SIP сервером, для которого требуется авторизация для запросов "SIP INVITE", тогда это поле будет использовано для авторизации в сообщениях "SIP INVITE", которые наш Asterisk будет отправлять удаленному SIP серверу. А также, для пиров, которые регистрируются на нашем сервере Asterisk, если это имя пользователя используется в сообщениях INVITE, до тех пор, пока он зарегистрирован на сервере.videosupport: Значения: yes/no, по умолчанию: yes. Параметр для включения поддержки SIP видео. Вам может понадобиться включить поддержку видео для конкретного SIP клиента, если, например, в глобальной части конфигурации она выключена, и Вы хотите выборочно ее включить только для конкретных пользователей.vmexten: Начиная с версии 1.4.x. Назначение см. sip.conf (только для типа peer).

Обратите внимание Asterisk (пока) не поддерживает протокол SIP через TCP транспорт. Поддерживается только через UDP протокол. Для телефонов Grandstream: устанавливайте параметр dtmfmode=info, а для GXP2000 dtmfmode=inband Asterisk использует входящий поток, в качестве источника для тайминга (timing) для отправки исходящего потока. Если входящий поток прерывается из-за работы функции подавления тишины (silence suppression), тогда качество музыки ожидания (musiconhold) будет очень плохим. Как следствие, Вы не можете использовать функцию подавления тишины в паузах (silence suppresion). Обязательно убедитесь, что у ВСЕХ SIP телефонов выключена возможность подавление тишины (silence suppression).Примеры Каждый SIP клиент, который должен работать с Asterisk, должен быть определен в файле SIP.CONF. Ниже приводиться несколько примеров:


type=friend ; может быть: "friend" (это: peer+user), "peer" или "user"
context=from-sip
username=grandstream1 ; обычно, этот параметр совпадает с названием секции -
fromuser=grandstream1 ; переназначает callerid, например,
; бывает необходимо для форварда вызовов - FWD
callerid=John Doe
host=192.168.0.23 ; У нас используется статический но интранетовский IP адрес
nat=no ; между нашим телефоном и Asterisk нет трансляции IP адресов (NAT)
canreinvite=yes ; заставляет весь голосовой RTP трафик проходить через Asterisk
dtmfmode=info ; может быть, как INBAND, так и INFO, например, для телефонов BudgeTone
mailbox=1234@default ; у клиента есть голосовой ящик 1234 в контексте голосовых ящиков: "default"
disallow=all ; необходимо задать disallow=al, перед тем, как использовать параметр allow=
allow=ulaw ; Обратите внимание: в клиентских секциях, порядок выбора кодека
; описанный в параметре allow= не имеет никакого значения!
;allow=alaw
;allow=g723.1 ; Asterisk поддерживает кодек g723.1 только в режиме pass-thru!
;allow=g729 ; Только в режиме Pass-thru , если у Вас нет лицензии на использование кодека g729


Выключите функцию подавления тишины (silence suppression) в клиенте X-Lite ("Transmit Silence"=YES)!
;Обратите внимание, что Xlite сам посылает NAT пакеты keep-alive, следовательно, надобности в qualify=yes нет.
type=friend
username=xlite1
callerid="Jane Smith"
host=dynamic
nat=yes ; клиент X-Lite находиться за роутером с трансляцией IP адресов (NAT)
canreinvite=no ; Обычно, устанавливается в "NO", если клиент находиться за NAT
disallow=all
allow=gsm ; Кодек GSM требует намного меньшую полосу пропускания, тем ulaw.
allow=ulaw
allow=alaw


type=friend
secret=blah
host=dynamic
dtmfmode=inband ; Можно выбрать из: inband, rfc2833, или info
defaultip=192.168.0.59
mailbox=1234,2345 ; Голосовой ящик для работы индикатора "полученных новых сообщений"
disallow=all
allow=ulaw ; если режим для dtmf установлен "inband",
allow=alaw ; то мы должны использовать только кодек g.711


type=friend
username=user2_pingtel
secret=blah
host=dynamic
qualify=1000 ; Рассматриваем клиента как неработающего,
; если ответ от него идет более 1 сек.
callgroup=1,3-4 ; Клиент является членом групп вызовов: 1, 3 и 4
pickupgroup=1,3-4 ; Мы можем совершать "pick-up" вызовов, нажатием *8,
; для вызовов из групп 1, 3 и 4
defaultip=192.168.0.60
disallow=all
allow=ulaw
allow=alaw
allow=g729

Type=friend
username=user3_cisco
secret=blah
nat=yes ; Этот телефон находиться за роутером с NAT
host=dynamic
canreinvite=no ; Аппараты Cisco иногда подвисают,
; через некоторое кол-во reinvite запросов
qualify=200 ; Рассматриваем пир как нерабочий,
; если отклик от него приходит дольше, чем 200ms
defaultip=192.168.0.4
disallow=all
allow=ulaw
allow=alaw
allow=g729


type=friend

Username=user4_cisco
fromuser=markster ; Определяем имя пользователя, помещаемого в поле "from" вместо callerid
secret=blah
defaultip=192.168.0.4 ; используйте или host=dynamic или defaultip=...
amaflags=default ; Может быть: default, omit, billing, documentation
accountcode=markster ; Пользователь ассоциирован с accountcode для упрощения билинга.
disallow=all
allow=ulaw
allow=alaw
allow=g729
allow=g723.1

Нижеприведенное описание взято с Digium Asterisk handbook.

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

Exten => 1010,1, Dial(SIP/user3_cisco,10,t)

Если кто-нибудь совершит вызов на номер 1010, тогда будут совершена попытка вызвать SIP клиента, зарегистрированного как user3_cisco.

Замечания Переменная ${VXML_URL} может быть использована для добавления дополнительного элемента в заголовке SIP сообщения "To:". Значение этой переменной будет добавлено, через точку с запятой, в конец заголовка "To:" SIP сообщения. Обратите внимание, что предыдущее описание использования этой возможности содержало ошибки; использование этой переменной не имеет никакого эффекта при загрузке сообщений в телефон Cisco 7960 (что-то в данный момент отключено в SIP firmware телефонов Cisco). Это проблема описана в: author"s e-mail Переменная ${ALERT_INFO} может использоваться для создания нового заголовка с именем "Alert-Info:", он может использоваться для задания определенного типа звонка на телефонных аппаратах фирмы Cisco, работающих с протоколом SIP, на которых установлено firmware версии 6.0 или выше. Для телефонов , переменная ALERT_INFO может принимать следующие значения, для задания определенного встроенного сигнала вызова: - Bellcore-BusyVerify
- Bellcore-Stutter
- Bellcore-MsgWaiting
- Bellcore-dr1
- Bellcore-dr2
- Bellcore-dr3
- Bellcore-dr4
- Bellcore-dr5
На данный момент нет возможности определить другой вызовов, можно выбрать только варианты проигрывания какого-либо вызова. Нужно весьма тщательно слушать, чтобы сказать, что сигналы вызова действительно чем-то отличаются. Существует багрепорт к Cisco: Cisco bug ID CSCec42938 , в котором предлагается доделать возможность выбора сигналов вызова.Пример 1 John Todd, loligo.com: http://www.loligo.com/asterisk/current/sip.conf Соединение с Free World Dialup (без использования NAT) [ general ]
disallow=all
allow=gsm
allow=ulaw
allow=alaw
context=from-sip
maxexpirey=180
defaultexpirey=160
tos=reliability
register => : @fwd.pulver.com/CONTACT

[ fwd.pulver.com ]
type=friend
secret=
username=
host=fwd.pulver.com
insecure=very ; необходимо для поддержки входящих FWD вызовов

Теперь идем к описанию файла , и смотрим как нам настроить контексты и в плане набора.

Пример 2 Использование Asterisk в связке с SIP прокси SER [ general ]
context=OUTGOING
autocreatepeer=yes

[ Provider ]
type=friend
username=XXXXX
secret=XXXXX
host=xxxxx.FakeProvider.com

Итак, теперь когда Asterisk получает вызов с SER, то он выполняет действие "autocreatepeer" и позволяет обработать этот вызов в контексте OUTGOING.

Управление sip.conf из внешних источников : использование механизма RealTime для SIP каналов. Так же, как и в других.conf файлах, может использоваться директива #include, для включения другова файла в конфигурацию sip.conf.Замечания для различных версий: Дополнительные возможности, добавленные, начиная с версии 0.7.2 2004-01-23: Добавлена CLI команда "sip reload", для перезагрузки sip канала, чтобы изменения внесенные в файл sip.conf вступили в силу, без перезагрузки сервера Asterisk. 2004-01-25: Поддержка хранения определений SIP пиров в базе данных. Хранение конфигурации в базе данных на этот момент было реализовано не полностью, но работает. Смотри: 2004-06: Поддержка хранения определений SIP пользователей в базе данных.

Asterisk, установка которого будет рассмотрена в данном материале, представляет собой программное обеспечение для организации так называемой офисной телефонной станции или IP-АТС (англ. Private Branch eXchange, PBX). Оно объединяет все телефоны в офисе в одну информационную сеть, на базе которой работают разнообразные службы голосовой связи. Asterisk работает на Linux, BSD, OS X и на Windows с использованием эмулятора.

Asterisk может осуществлять передачу голоса по четырем различным протоколам VoIP и взаимодействовать практически со всеми стандартизованными телефонными аппаратами (включая мобильные) при помощи относительно недорогого оборудования. Asterisk реализует различные возможности голосовой почты (voicemail), включая телефонный справочник, конференц-связь, интерактивный голосовой ответ и очереди вызовов.

В данном материале мы рассмотрим процесс установки Asterisk на ОС Linux, в частности на популярных дистрибутивах CentOS и Debian, а также базовые процедуры настройки сервера голосовой почты.

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

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

Перед установкой сервера IP-телефонии в системе должен быть обеспечен ряд условий. Asterisk должен устанавливаться на систему, работающую на ядре версии не ниже 2.6, при этом в системе должны присутствовать файлы заголовков, чтобы программа успешно скомпилировалась. Asterisk написан на языке C, поэтому для сборки в системе должен быть установлен компилятор gcc с сопутствующими библиотеками, такими как termcap и openssl. Для сборки дополнений Asterisk также требуются предустановленные библиотеки и клиент mysql, а также соответствующие им файлы заголовков.

Когда система подготовлена для установки, вам будет необходимо перейти в раздел Download на официальном сайте и загрузить с него следующие архивы:

  • asterisk.
  • asterisk-sounds.
  • asterisk-addons.
  • zaptel.
  • libpri.
  • Файлы необходимо скопировать на сервер, который будет осуществлять функции офисной АТС. Разместите их в папке /usr/src/.

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

    tar-xzftar.gz

    Архивы будут распакованы в папки с именами, совпадающими с названиями архивов. Последовательно перейдите в каждую из папок командой:

    cd

    И выполните в каждой папке нижеуказанные команды.

    1. Подготовка к сборке:

    2. Сборка:

    3. Установка:

    Если вышеприведенные команды завершатся с успешным результатом, вы соберете и установите Asterisk на своем сервере.

    Процедура установки из исходников одинакова для всех дистрибутивов Linux, но не всем привычна. Как правило, большинство пользователей предпочитает методы установки, предлагаемые конкретным дистрибутивом.

    В связи с этим, рассмотрим процедуры инсталляции Asterisk на двух популярных платформах для создания офисных АТС: CentOS и Debian GNU/Linux.

    Установка Asterisk на CentOS

    В рамках данного примера мы будем устанавливать Asterisk 13. Мы выполним установку Asterisk на CentOS 7.

    Предполагается, что инсталляция будет выполняться в текстовом консольном режиме от имени суперпользователя (root).

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

    В результате в системе будут присутствовать все зависимости, требующиеся для успешной сборки сервера телефонии Asterisk.

    Следующим шагом должно стать отключение SELinux. Система безопасности Security-Enhanced Linux в CentOS включена по умолчанию и очень часто препятствует нормальному функционированию Asterisk. Поэтому для успешной настройки и работы сервера ее необходимо отключить.

    Проверим статус активности системы SELinux следующей командой:

    Если система сообщает, что SELinux включен, выполним процедуру отключения. Для этого необходимо внести изменения в конфигурационный файл в папке /etc/selinux, установив соответствующий флаг.

    sed -i "s/\(^SELINUX=\).*/\SELINUX=DISABLED/" config

    timedatectl set-timezone (например, America/Los_Angeles)

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

    ​timedatectl status

    После этого потребуется перезагрузить систему, чтобы активировать изменения. Для этого используйте команду reboot .

    Теперь непосредственно перейдем к установке Asterisk.

    Фактически, установка Asterisk на CentOS сводится к той же самой сборке из исходников, с которой мы познакомились в предыдущем разделе. Здесь же мы рассмотрим процесс сборки с учетом особенностей конкретного дистрибутива Linux, а именно CentOS 7.

    Для начала загрузим и установим сам сервер IP-телефонии.

    Скачаем из раздела Downloads на официальном сайте продукта архив с Asterisk 13 и сохраним его в папку /usr/src. Распакуем архив командой:

    tar zxvf

    Перейдем в папку с распакованным архивом и выполним команды, приведенные ниже.

    ./configure --libdir=/usr/lib64 --with-pjproject-bundled

    Данная последовательность команд позволит подготовить исходники к сборке.

    make menuselect.makeopts

    После настройки опций компиляции выполните следующую последовательность действий:

    1. Создайте отдельную учетную запись пользователя для сервера IP-телефонии.

    adduser asterisk -s /sbin/nologin -c "Asterisk User"

    2. Соберите и установите сервер.

    make && make install

    3. Задайте права доступа к Asterisk для вновь созданного пользователя.

    chown -R asterisk. /var/lib/asterisk

    В результате базовый сервер Asterisk будет собран и установлен.

    Помимо самого Asterisk, аналогичным способом на CentOS можно установить полезные дополнения к серверу. Об этом читайте ниже.

    FreePBX

    FreePBX - это полнофункциональный графический Web-интерфейс, предназначенный для настройки и управления офисной АТС. Установка Asterisk с FreePBX осуществляется в нижеприведенной последовательности.

    Запустим базу данных:

    systemctl start mariadb

    Скачаем с сайта GitHub в папку /usr/src исходный код FreePBX:

    git clone -b release/13.0 https://github.com/FreePBX/framework.git freepbx

    ./start_asterisk start

    И ряд команд для настройки FreePBX:

    DAHDI

    DAHDI - это драйвер, обеспечивающий взаимодействие Asterisk с различным телефонным оборудованием. Он отвечает за работу плат интерфейсов телефонии, устанавливаемых непосредственно в сервер, на котором работает Asterisk. Процедура установки DAHDI описана ниже.

    Скачайте в каталог /usr/src архив с драйвером, распакуйте его и перейдите в разархивированную папку. В ней выполните команды:

    PJSIP

    PJSIP - это библиотека, написанная на С, которая отвечает за поддержку различных протоколов IP-телефонии. С версии Asterisk 13.8 включительно библиотека PJSIP может устанавливаться отдельно. Впрочем, если Asterisk компилируется с флагом --with-pjproject-bundled (что мы и сделали в предыдущем разделе), библиотека PJSIP будет установлена непосредственно при компиляции сервера.

    Для того, чтобы установить PJSIP отдельно, требуется произвести следующую процедуру.

    Скачайте с сайта pjsip.org в каталог /usr/src архив с драйвером, распакуйте его и перейдите в разархивированную папку. В ней выполните команды:

    Пост-инсталляционные процедуры

    По завершению установки Asterisk необходимо выполнить ряд дополнительных действий. Данные процедуры являются обязательными.

    1. Установить защиту для сервера базы данных:

    mysql_secure_installation

    Для выполнения процедуры просто ответьте Y на все вопросы.

    2. Изменить настройки веб-сервера:

    3. Открыть доступ к службам и портам, необходимым для работы Asterisk:

    firewall-cmd --permanent --zone=public --add-service={http,https} --add-port=5060-5061/tcp --add-port=5060-5061/udp --add-port=10000-20000/udp

    4. Настроить автозагрузку базы данных:

    systemctl enable mariadb

    5. Настроить загрузку веб-сервера при запуске системы:

    systemctl enable httpd

    6. Настроить автозапуск FreePBX при загрузке системы:

    nano /etc/systemd/system/freepbx.service

    systemctl enable freepbx

    7. Настроить соединение с базой данных через ODBC. Если установлен устаревший модуль cdr_mysql.so, этот пункт опционален, но все же рекомендуется:

    nano /etc/odbc.ini

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

    isql -v asteriskcdrdb

    8. Перезагрузите систему, чтобы применить сделанные изменения:

    Установка Asterisk 13 на Debian

    В данном разделе мы рассмотрим процедуру установки на другой популярной платформе - Debian. Хорошая новость для пользователей: она относительно проста, несмотря на то, что также включает в себя сборку из исходников. В качестве примера мы выполним установку Asterisk на Debian 8.

    Установка производится от имени суперпользователя (root). Откройте терминал, получите соответствующие права, после чего можно приступить к инсталляции.

    Сначала загрузите Asterisk 13 с официального сайт и распакуйте загруженный архив. Перейдите в папку с распакованными исходниками.

    Теперь установим необходимые зависимости. Самая важная - компилятор gcc - в Debian уже есть. Поэтому просто загрузим оставшиеся:

    После того, как все зависимости загружены и установлены, выполните в папке с распакованным архивом Asterisk следующую команду:

    Команда должна завершиться без ошибок. Если в результате возникнет сообщение об отсутствии некоторых зависимостей, установите их.

    Перед компиляцией Asterisk есть возможность включить или отключить отдельные модули:

    Будет открыто консольное приложение со списком модулей. Перемещаясь клавишами вниз и вверх по списку, вы можете включать и отключать их. Некоторые дополнительные модули требуют установки зависимостей. Это можно сделать при помощи apt-get.

    Теперь приступим к компиляции Asterisk. Введите в консоли уже знакомые команды:

    1. Сборка исходников:

    2. Установка в системные каталоги:

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

    На этом завершается установка. Asterisk успешно проинсталлирован на ваше сервер. Следующая команда вызовет консоль управления Asterisk:

    asterisk -vvvvvvgc

    Настройка Asterisk

    Теперь рассмотрим базовые процедуры настройки сервера телефонии Asterisk. Они принципиально одинаковы для всех дистрибутивов Linux.

    Для начала нужно добавить следующий текст в файл sip.conf:

    Тем самым мы создадим пять учетных записей, которые могут использоваться любым клиентом SIP (Cisco SIP Phone, xlite, ATA и тому подобные). Все пользователи будут зарегистрированы в Asterisk. Если данная конфигурация не работает, попробуйте отключить сетевой экран до завершения настройки программного обеспечения.

    Создание первого номерного плана

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

    Откройте файл extension.conf в папке /etc/asterisk и добавьте в него строку:

    exten=> _XXXX,1,Dial(SIP/${EXTEN})

    Теперь все сконфигурированные клиенты SIP смогут принимать и отправлять звонки. Благодаря простоте настройки диалплана, Asterisk и является одной из самых дружелюбных платформ IP-телефонии. Не так уж и много навыков требуется, чтобы поднять офисную АТС.

    Создание первого транка SIP

    Asterisk может выполнять исходящие и входящие вызовы. Для исходящих вызовов нам требуется провайдер, который будет перенаправлять вызовы в нашу систему, а также публичный IP-адрес.

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

    Для создания транка добавьте следующий код в файл sip.conf:

    После этого нужно будет внести в extension.conf еще одну строку:

    exten => _XXXXXXX.,1,Dial(SIP/trunk1/${EXTEN})

    Это позволит установить связь с провайдером для осуществления исходящих вызовов.

    Заключение

    Настройка полноценной офисной АТС на базе Asterisk, установка которого была рассмотрена в данной статье, включает в себя гораздо больше процедур, чем описано выше. Подробная информация о сервере телефонии и его возможности представлена к официальной документации по Asterisk.

    23.02.2012 15:56

    Статья, позволяющая начинающим программистам выполнить базовую настройку asterisk

    Asterisk является одним из самых распространенных серверов ip-телефонии наряду с такими системами, как Switchwox и 3CX. Большую популярность данная система обрела с распространением в нашей стране качественного интернета, а также множества телефонных провайдеров, предоставляющих телефонные номера в SIP-формате или так называемые SIP-номера. Одной из таких компаний является Датагруп, которая зарекомендовала себя одним из лидеров рынка услуг связи. С удешевлением SIP-номеров появился смысл использовать современные телефонные системы ip-телефонии взамен старым аналоговым мини-атс. Это связано с широкими функциональными возможностями call-центров на базе Asterisk. При этом стоимость оборудования и настройка Asterisk практически не уступает в денежных затратах.

    Установка asterisk производится путем скачивания и дальнейшей компиляции бесплатно распространяемого исходного кода, разработанного компанией Digium. Исходники asterisk существуют только для unix-совместимых операционных систем, самыми распространенными из которых являются Linux и FreeBSD. Установка asterisk под Windows возможна только путем реализации виртуальной машины . Скачать последние версии asterisk можно по следующей ссылке. На данный момент развивается сразу 4 версии этого сервера. Наибольшую стабильность всех модулей имеют версии asterisk 1.4 и asterisk 1.6. С другой стороны, в функциональном плане выгодно отличается версия asterisk 1.8, в которой есть поддержка множества новых модулей и функций, среди которых можно отметить поддержку протокола SRTP, работу с IPv6 и улучшенные показатели при работе SIP и ISDN.

    В данной статье будет рассмотрена установка asterisk v 1.6.22 на Linux Fedora Core.

    Для начала установки, скачаем исходники asterisk. Для этого, выполняем в консоли сервера команды:

    # wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.6.2.22.tar.gz

    # tar -xzvf asterisk-1.6.2.22.tar.gz

    Перед тем как компилировать исходники, установим все необходимые сопутствующие модули и утилиты:

    # yum install gcc

    # yum install gcc-c++

    # yum install make

    # yum install libxml2-devel

    # yum install ncurses-devel

    После того, как все дополнительные утилиты установлены, производим установку самого asterisk:

    # cd asterisk-1.6.2.22

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

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

    Пример файла sip.conf:

    Qualify=yes
    nat=no

    Defaultexpiry=3600
    disallow=all
    allow=alaw
    allow=ulaw
    fromuser=044XXXXXXX
    host=80.91.169.2
    insecure=invite,port
    secret=xxxxxxxxxxx
    type=peer
    username=044XXXXXXX
    context=incoming
    language=ru
    qualify=yes
    dtmfmode=auto

    Type=friend
    host=dynamic
    insecure=invite,port
    username=fxo
    secret=xxxxxxxx
    context=incoming
    qualify=yes
    nat=no
    canreinvite=no
    allowtransfer=no
    dtmfmode=auto
    disallow=all
    allow=alaw
    allow=ulaw

    Type=friend
    regexten=101
    secret=xxxxxxxxxxxxx
    context=internal
    host=dynamic
    callerid="101"
    disallow=all
    allow=alaw
    allow=ulaw
    language=ru
    callgroup=1
    pickupgroup=1
    qualify=yes
    canreinvite=yes
    call-limit=4
    nat=no

    В данном примере приведен простейший список sip-устройств. Несложно заметить, что в конфигурации имеются блоки, заключенные в квадратные скобки. Именно такими блоками описывается конфигурация любых устройств (пиров) при настройке Asterisk. Пройдемся вкратце по блокам и по самым основным параметрам.

    Блок является обязательным. В него входят настройки и параметры, которые применяются ко всем блокам по умолчанию. Другими словами, если при описании того или иного устройства не указан какой-либо параметр, то Asterisk читает его из этого блока.

    Следующие три блока описывают непосредственно sip-устройства. Для наглядности все три устройства имеют разные предназначения. Блок описывает параметры для sip-номера компании Датагруп, блок описывает параметры, для соединения с VOIP-шлюзом, а блок описывает параметры обычного внутреннего sip-устройства, которым может программный или аппаратный ip-телефон.

    Пробежимся по основным параметрам sip устройств. Параметр context определяет какой алгоритм действий применять к тому или иному устройству. Callerid определяет номер и имя пира, которые будут высвечиваться при исходящем звонке с него. Опции disallow и allow определяют, какие кодеки использовать для связи. Опция secret - это пароль для регистрации данного пира. Пароли желательно составлять достаточно сложными во избежание взломов недоброжелателями.

    Файл extensions.conf описывает взаимодействия между контекстами и каналами связи, которых может быть большое множество. По сути, этот файл является основным при настройке asterisk.

    Пример файла extensions.conf:

    Exten => _XXX,1,Dial(SIP/${EXTEN},120,tT)
    exten => _XXX,n,Hangup

    Exten => _X.,1,Dial(SIP/datagroup/${EXTEN},120,tT)
    exten => _X.,n,Hangup

    Exten => _X.,1,Dial(SIP/101,60,tT)
    exten => _X.,2,Hangup

    Exten => h,1,Hangup

    В данном простейшем примере мы имеем два алгоритма действий (контекста) - internal и incoming. Напомним, что привязка к контекстам осуществляется при создании пиров в файле sip.conf и в дальнейшем присваивается уже в extensions.conf при попытке инициации связи с пиром.

    Опишем подробнее два контекста. Уже по их названиям становится понятно, что они применяются для алгоритмов внутренних абонентов (internal) и входящих звонков (incoming). Разобраться в конструкции этого файла поможет обобщенный пример, который можно выразить строкой:

    Exten => _XXX,n,Command(Options)

    Расшифровываются эти опции так:

    Exten => _XXX - служебный префикс, с которого начинаются практически все строчки в данном файле. Он описывает представление входящего контекста. Другими словами, если на этот контекст обратился пир с номером 101, то алгоритм для него должен начинаться с конструкции exten => 101. Префикс поддерживает регулярные выражения и может указываться обобщенно. Например, exten => _XXX говорит о том, что под данный алгоритм попадают все пиры, которые состоят из трех цифр.

    N - номер строчки алгоритма. В любом программном коде имеется последовательность операторов, которые выполняются по очереди. Точно также и в настройках asterisk есть такая последовательность. Единственное отличие - команды, выполняемые asterisk’ом, нумеруются. Обязательным является указание первой сточки явно. Как вы успели заметить, все контексты начинаются со строчек:

    Exten => _XXX,1,…..
    exten => _X.,1,…..
    exten => h,1,……

    А вот дальнейшие строчки могут нумероваться неявно, то есть так:

    Exten => _XXX,n,…..
    exten => _X.,n,…..
    exten => h,n,……

    При неявном указании номера строчки, asterisk выполняет их последовательно сверху вниз, как это происходит с любым другим кодом.

    Command - команда выполняемая asterisk’ом. Основных команд не так уж много. Для базовой настройки достаточно знать синтаксис команды Dial (позвонить), на примере которой мы рассмотрим оставшиеся опции.

    Например:
    exten => _X.,1,Dial(SIP/101,60,tT) - asterisk наберет внутренний номер 101 и будет пытаться дозвониться до абонента в течении 60 секунд с возможностью перехвата звонка со стороны звонящего и принимающего пиров (опции tT)
    exten => _X.,1,Dial(SIP/datagroup/${EXTEN},120,tT) asterisk наберет номер, которые передан в переменной ${EXTEN} с помощью пира datagroup ранее указанного в sip.conf

    Первый пример применялся в контексте incoming. Это говорит о том, что все входящие звонки, приходящие на этот контекст перенаправляются на внутреннего абонента, который отвечает на эти звонки. Второй пример в свою очередь показывает, как осуществляется исходящий звонок передавая набранный номер в служебной переменной ${EXTEN}.

    Примеры файлов можно напрямую скопировать с этой статьи и вставить в ваши sip.conf и extensions.conf и подредактировать некоторые опции (логины, названия пиров, пароли и т.д). После настройки asterisk, запускаем сервер простой командой:

    Дальнейшие действия могут производиться из командной строки астериска, которая запускается командой:

    # asterisk -rvvvvd

    Попав в консоль вы можете проверить работу вашего сервера. В ней будут отображаться все действия, которые он выполняет.

    P.S. В случае, если у вас не получилось настроить сервер, либо же вам нужна более сложная конфигурация, с радостью поможем в настройке asterisk. Наши контакты.


    По установке системы.
    Наконец тем или иным образом у нас появился установленный Asterisk и FreePBX.

    Опишу ситуацию немного подробнее для сравнения подойдет ли Вам наша схема работы. Мы небольшой интернет провайдер, нам нужна запись разговоров, очереди звонков на городские и мобильные телефоны, голосовое меню рассказывающее про акции с выбором в какой отдел попасть, и возможность быстро поставить перед всем этим сообщение об авариях на определенных улицах города, чтобы люди не перенапрягали тех поддержку, причем желательно бесплатно. Чтобы не покупать дорогие шлюзы мы решили сменить городские телефонные номера и купить пару номеров + десяток каналов у провайдера ip-телефонии. Кто то скажет что это ненадёжно и т.д. Только скажите- какая разница интернет провайдеру на городские телефоны, если у него упал весь интернет? Зато это дешево. Подключение нам обошлось всего то в 38 $, каждый телефонный номер в 2$ и линия в 1,2$ в месяц. После чего мы получили настройки даже без авторизации и к нашему ip адресу привязали аккаунт. Сразу хотелось бы оговорить как будет построена эта статья, чтобы не перегружать её тоннами скринов я опишу создание каждого элемента по одному разу(что советую проделать т.к. они понадобятся для ваших же последующих экспериментов), а потом уже распишу схему что на что ссылается в нашей схеме работы. Наверняка схема у вас будет другая, но зато сможете понять смысл. Описывать буду только те элементы, которые непосредственно понадобились при настройке.

    Теперь самое время завести транк:

    Для наглядности я буду писать на английском т.к. интерфейс переведен кусками и достаточно загадочно. Заходим в Connectivity> Trunks > Add SIP Trunk.

    В правом углу будет список уже созданных вами транков. Открыв новый я заполнил произвольно название - Trunk Name, назвав его Vega(Vegatelecom наш провайдер). Outbound CallerID вписав номер в формате 380652ХХХХХХ как его и выдает наш оператор, это номер с которого будут исходящие вызовы, если его не задать то позвонить с использованием этого транка не получалось, говорил все линии заняты. В Outgoing Settings заполнил ещё одно поле Trunk Name и ввёл настройки которые дал провайдер:

    host=93.178.205.29
    type=peer
    disallow=all
    allow=alaw&ulaw&g729
    nat=no
    canreinvite=nonat
    insecure=invite
    dtmfmode=rfc2833

    Внизу нажал кнопочку Submit Changes и получил созданный транк.

    Теперь нужно выбрать куда же мы будем принимать звонки. Заходим Applications > Extension> Generic SIP Device > Submit

    Есть три важных пункта данной настройки:

  • Настроить статический IP – адрес для сервера
  • Настроить DNS
  • Настроить временную зону
  • Перейдем к настройке IP. Для этого, перейдите во вкладку Admin → System Admin → Network Settings


    Здесь мы настраиваем следующие опции:

    • Network Interface - сетевой интерфейс, то есть конкретная сетевая карта (NIC)
    • IP Assignment - выберите Static чтобы настроить статический IP - адрес
    • Static IP - введите IP – адрес сервера
    • Netmask - маска сети
    • Gateway - шлюз по умолчанию
    • Start Automatically - старт при загрузке сервера


    Настроим уведомления нашего сервера Asterisk, при таких сбоях, как например малое дисковое пространство или сбой в работе RAID массива:


    Производим настройку следующих опций:

    • From Address - адрес электронной почты, который АТС будет указывать как адрес отправителя при формировании письма
    • Storage Notifications - почта для уведомлений о проблемах с хранением данных (сбой RAID или нехватка места на дисках)
    • Intrusion Detection Notifications IP - почта для уведомлений о вторжениях или попытках взлома сервера

    Конфигурация системы безопасности

    В Asterisk встроена система обнаружения вторжений – Fail2Ban. Для настройки системы перейдите во вкладку Admin → System Admin → Intrusion Detection


    Система гибкая, и, порой реагирует когда не нужно:) Поэтому, советуем заранее вносить в Whitelist перечень нужных IP – адресов, таких как IP SIP – прокси, адреса шлюзов, например FXS. Порой, бывает так, что в бан попадает IP – адрес FXS шлюза, к которому подключены все офисные аналоговые телефоны.

    • Status - мы рекомендуем всегда контролировать состояние Fail2Ban, чтобы статус был running
    • Intrusion Detection - в данном пункте можно остановить и перезапустить службу.
    • Ban Time - время в секундах, которое IP – адрес будет находиться в статусе блокировки
    • Max Retry - количество попыток подключения к АТС, которое пользователь может осуществить в течение Find Time.
    • Find Time - время, в течение которого у пользователя есть Max Retry попыток подключения к системе.
    • E-mail: - адрес электронной почты, на которую будут отправляться уведомления о внесении нового IP – адреса в бан.
    • Whitelist - список заранее внесенных IP – адресов, которым доверяет администратор.

    Настройка внутренних номеров

    Для настройки телефонных аппаратов и создания внутренних номеров перейдите во вкладку Applications → Extensions . Процесс создания внутренних номеров (Extension) мы описали в статье по ссылке ниже:

    Настройка SIP - транка

    Подключение к провайдеру является важнейшим этапом в настройке вашего сервера IP - АТС Asterisk. Именно настройки провайдера, позволят нашим пользователям совершать исходящие, и принимать входящие вызовы. Для настройки SIP – транка перейдите во вкладку Connectivity → Trunks . Процесс создания SIP - транка подробно расписан в статье по ссылке ниже:

    Настройка маршрутизации

    После того, как мы настроили внутренние номера и SIP – транки для подключения к провайдеру, нам необходимо настроить маршрутизацию вызова. В рамках данной настройки, мы будем учить наш сервер Asterisk как обрабатывать входящий и исходящие вызовы. b>Connectivity → Inbound/Outbound Routes . Данный процесс мы подробно описали в статье по ссылке ниже:

    Так как наш Астериск будет установлен в небольшой компании, мы планируем сделать голосовое меню, в котором будем помогать пользователям быстрее связаться с нужным человеком. Настройка голосового меню (IVR), регламентируется в модуле IVR, консоль конфигурации которого располагается во вкладке Applications → IVR . Настройку вы можете найти по ссылке ниже::

    Полезна ли Вам эта статья? Пожалуйста, расскажите почему?

    Нам жаль, что статья не была полезна для вас:(Пожалуйста, если не затруднит, укажите по какой причине? Мы будем очень благодарны за подробный ответ. Спасибо, что помогаете нам стать лучше!