Yvision.kz
kk
Разное
Разное
399 773 постов42 подписчика
Всяко-разно
2
04:51, 28 января 2016

Установка и базовая настройка Asterisk 13 на CentOS 7.2

Blog post image

Если вам нужна телефонная станция с кучей настроек, то ваш выбор - Asterisk!

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

Самый простой способ, это готовые дистрибутивы в формате ISO. Обычно внутри таких дистрибутивов можно найти саму операционную систему, Asterisk и веб интерфейс к нему. Помимо Asterisk'а и веб интерфейса, добавляют дополнительное ПО, чтобы создать комбайн для удовлетворения некоторых прихотей пользователя. Из самых часто встречающихся приложений вы можете найти: почтовый сервер, CRM, jabber сервер и т.д.

Дистрибутивы обычно помогают быстро "поднять" телефонную станцию со стандартными возможностями. Это кратчайший путь когда заказчик не готов платить нормальные деньги или к вам обратился друг, и вы решили ему помочь. На сегодня, таких дистрибутивов хватает, в Интернете часто можно встретить упоминания про: Elastix, AsteriskNow, TripBox и т.д. Для начала, можно выбрать AsteriskNow, он предлагает только веб интерфейс управления к IP АТС без дополнительных программ. Этого хватит чтобы настроить телефонную станцию. Другие варианты, рассматривайте судя по своим потребностям или устоявшейся сетевой инфраструктуре. Многие пользователи выбирают Elastix, это самый популярный дистрибутив на сегодняшний день по количеству скачиваний с сайта sourcforge.net, а также по нему много документации на русском языке. На нем можно построить кол центр или настроить базовую миниАТС для нужд обычной компании.

Разработчики рекомендуют устанавливать Asterisk из исходников. Этот способ позволит вам установить самую свежую версию IP АТС Asterisk. В отличии от готовых дистрибутивов где доступен красивый веб интерфейс для настройки, этот вариант, потребует от вас знания ручного конфигурирования параметров в файлах. До того как приступить, желательно прочесть книгу "Будущее телефонии - Asterisk IP АТС", чтобы понять как на самом деле работает станция. Asterisk имеет свой язык конфигурирования, который похож на скриптовый. Зная его, вам станут доступны без граничные возможности в мире телефонии.

В таком способе установки есть следующие преимущества: конфигурационные файлы будут иметь только то, что вы прописали. Они будут легко читаемыми и с комментариями. Ничего лишнего, только все что нужно для работы. Плюс, можно усложнять логику работы станции так как вам необходимо. Все что придет вам в голову, может быть воплощено в Asterisk. Здесь не будет рамок которые накладывают веб интерфейсы.

Если вы установили Asterisk из исходников, это не значить что вам больше не доступен веб интерфейс. В сети есть популярная веб морда которая ставится к голому Asterisk, зовут ее FreePBX. После установки FreePBX, рекомендуется ставить модуль из не поддерживаемых "Custom Context", который расширяет возможности по настройке программной станции. На самом деле с помощью FreePBX или же Elastix, возможно создать сложную инсталяцию, для этого существует куча плагинов. Выше был озвучен один из таких плагинов, но есть и другие.

У АТС Asterisk есть злющий конкурент в лице Freeswitch, который таки нравится многим. Этому способствует малая нагрузка на железо/канал и качественный голос по сравнению с тем же Asterisk. В сети встречаются сообщения с форумов, где некоторые пользователи писали, что перешли с Asterisk на FreeSwitch (FS). Популярность Freeswitch вызвана тем, что высоконагруженные станции на борту с Asterisk, не справлялись с большим количеством звонков и нагружали железо/канал, при этом имелась проблема с качеством передаваемого голоса. Поэтому можно встретить перебежчиков в другой лагерь под названием FS, обычно такие юзеры имеют статус опытного телефониста, бородатого сисадмина или разраба. Однако, все бы хорошо, но для обычного пользователя есть один большой минус, к сожалению количество веб интерфейсов к FS очень мало, можно сказать что практически их нет.

Эта статья взята с сайта "Calculate Linux", я в ней исправил ошибки и добавил к ней свои дополнительные настройки.

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

  1. Провайдерский Asterisk
  2. Сервер Asterisk в Алматы
  3. Сервер Asterisk в Астане

Конфигурационные файлы могу выложить по требованию. Настройте три сервера: Алматы, Астаны и провайдерский. Все настройки вы найдете в этой записке. Это позволит вам протестировать базовые возможности этой крутой штуки.

Примерно получится следующая картина:

Blog post image

29.09.2016

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

СОДЕРЖАНИЕ ЗАПИСКИ

1. Постановка задачи

2. Установка Asterisk

2.1. Первоначальная подготовка операционной системы

2.2. Установка модулей из исходников

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

3. Настройка Asterisk

3.1. Создание учетных записей

3.2. Базовая настройка плана набора

3.3. Конфигурация внутренних вызовов

3.4. Настройка связи между двумя серверами и вызовов между ними

3.5. Установка связи между двумя Asterisk-серверами по протоколу SIP

3.6. Конфигурация плана набора для связи между серверами

3.7. Настройка SIP учетных записей ID Phone и конфигурация плана набора

3.8. Конфигурация плана набора для приема вызовов

3.9. Создание очередей вызова

3.10. Установка своей музыки (сообщения) ожидания (Music On Hold, MOH)

3.11. Конфигурация плана набора для совершения исходящих вызовов

3.12. Настройка софтфона X-Lite

4. Дополнительные настройки

4.1. Настройка межсетевого экрана firewalld

4.2. Настройка fail2ban

4.3. Настройка logrotate

4.4. Включение кодека g729

4.5. Включение маркировки пакетов TOS

5. Конфигурационные файлы провайдерского сервера

6. Заключение

7. Источники и ссылки

Настроим офисную АТС на дистрибутиве CentOS 7 x64.

Для превращения вашего компьютера в телефонную станцию, понадобятся исходники или пакет Asterisk. Настройка Asterisk производится путем редактирования файлов находящихся в директории /etc/asterisk/.

Базовые функции Asterisk:

  • голосовое меню (IVR);
  • маршрутизация вызовов по времени;
  • очередь центра обработки вызовов
  • группы приема вызовов;
  • переадресации на внутренних или внешних абонентов;
  • голосовые конференции;
  • запись переговоров;
  • статистика звонков.

1. Постановка задачи

  • Мы имеем один настроенный Asterisk-сервер в первом офисе, нам надо настроить второй сервер для нового офиса
  • На наш новый сервер мы получаем две телефонные линии по SIP от Казахтелекома (ID Phone)
  • Две линии используется для телефонных разговоров
  • Имеющийся сервер находится в Астане, новый будет в Алматы
  • Сервера должны быть связаны между собой и иметь единую систему нумерации внутренних номеров
  • На алматинском сервере должна быть следующая схема очередей звонков при поступающем вызове на две основные линии: Поступил звонок → проигрываем приветствие и предлагаем набрать добавочный номер → если добавочный номер не был набран, то переводим звонок на секретаря в Астану → если секретарь не ответил, то переводим звонок на абонентов алматинского сервера → если алматинские абоненты не ответили, то переводим звонок на астанинских абонентов.
  • Исходящие звонки должны совершаться по первой и второй свободной линии. Если первая телефонная линия занята, то звонок идет через вторую и наоборот.
  • Звонки с алматинского сервера в Астану (код 7172) должны проходить через сервер в Астане.

2. Установка Asterisk

Сперва обновим ОС, установим зависимости, далее установим модули и потом уже установим Asterisk.

2.1. Первоначальная подготовка операционной системы

Первый шаг в установке - это обновление операционной системы, установка зависимостей, и консольного менеджера закачек.

Освежим нашу операционную систему введя команду:

# yum update -y

Установим консольный загрузчик файлов:

# yum install wget -y

Подключим репозиторий Epel:

# rpm -Uvh http://mirror.pnl.gov/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

Установим зависимости:

# yum install gcc gcc-c++ lynx bison mariadb-devel mariadb-server mariadb gmime-devel psmisc php php-mysql php-pear php-mbstring tftp-server httpd make ncurses-devel libtermcap-devel sendmail sendmail-cf caching-nameserver sox newt-devel libxml2-devel libtiff-devel audiofile-devel gtk2-devel subversion kernel-devel kernel-devel-$(uname -r) git subversion kernel-devel php-process crontabs cronie cronie-anacron wget vim php-xml uuid-devel libtool sqlite-devel libuuid-devel bzip2 man-pages doxygen -y

Устанавливаем демон времени:

# yum install ntp -y

# systemctl enable ntpd

# systemctl start ntpd

2.2. Установка модулей из исходников

Поставим СУБД MariaDB в автозагрузку и стартуем ее:

# systemctl enable mariadb.service

# systemctl start mariadb.service

Установим модуль PearDB для Pear :

# pear uninstall db

# pear install db-1.7.14

# pear install pear/MDB2#mysql

Установка pjproject:

# wget http://www.pjsip.org/release/2.5.5/pjproject-2.5.5.tar.bz2

# tar -xjvf pjproject-2.5.5.tar.bz2

# cd pjproject-2.5.5

# ./configure --prefix=/usr --enable-shared --disable-sound --disable-resample --disable-video --libdir=/usr/lib64

# make dep

# make

# make install

# cd ..

pjproject - добавит в asterisk новый канальный SIP драйвер по имени pjsip. Он призван заменить старый драйвер chan_sip который используется по умолчанию.

Установка jansson:

# wget http://www.digip.org/jansson/releases/jansson-2.9.tar.gz

# tar zvxf jansson-2.9.tar.gz

# cd jansson-2.9

# ./configure --prefix=/usr

# make clean

# make

# make install

# ldconfig

# cd ..

jansson - добавляет в Asterisk поддержку JSON.

Установка lame:

# wget http://sourceforge.net/projects/lame/files/lame/3.99/lame-3.99.5.tar.gz

# tar zxvf lame-3.99.5.tar.gz

# cd lame-3.99.5

# ./configure

# make

# make install

# cd ..

lame - позволит кодировать аудио данные в MP3 формат.

Установка dahdi:

# wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz

# wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-2.11.1+2.11.1.tar.gz

# tar xvfz dahdi-linux-complete-2.11.1+2.11.1.tar.gz

# cd dahdi-linux-complete-*

# make all

# make install

# make config

# cd ..

DAHDI(Zaptel) - это специальное ПО которое организует интерфейсный уровень между сервером Asterisk и драйвером интерфейса DAHDI. Он нужен, чтобы Asterisk видел аппаратные платы Digium, которые в свою очередь, помогают подключать аналоговые(FXS/FXO) или цифровые линии (E1) к Asterisk. Этим мы решаем задачу взаимодействия Asterisk с внешней городской телефонной сетью. В записке не используются платы, так как провайдер предоставляет SIP линии по IP (Интернет). Даже если у вас нет Digium подобных плат, DAHDI нужен для специального таймера и конференции meetme. Поэтому мы ставим DAHDI, не смотря на то, что у нас подключение к городу идет по цифровой линии SIP.

Установка libpri:

# wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz

# tar xvfz libpri-current.tar.gz

# cd libpri-*

# make

# make install

# cd ..

Libpri - добавляет поддержку протоколов ISDN.

Установка spandsp:

# wget http://soft-switch.org/downloads/spandsp/spandsp-0.0.6.tar.gz

# tar zxvf spandsp-0.0.6.tar.gz

# cd spandsp-0.0.6

# ./configure

# make

# make install

# ln -s /usr/local/lib/libspandsp.so.2 /usr/lib64/libspandsp.so.2

# cd ..

spandsp - добавляет поддержку факсов.

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

Самые стабильные версии 1.8 и 11, именно их ставит большинство.

Распакуем наш установочный архив Asterisk:

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

# tar -xvzf asterisk-13*

# cd asterisk-13*

# ./configure --libdir=/usr/lib64

# make menuselect

Включаем модули с помощью Enter в "Add-ons" (дополнения):

[*] - format mp3

[*] - res_config_mysql

[*] - app_mysql

[*] - cdr_mysql

Мы включили поддержку MySQL, но эта опция упразднена. Для взаимодействия с СУБД, установите ODBC.

Blog post image

Заходим в Applications и выделяем app_meetme, которая нам понадобится для организации конференц звонков, директора и учредители очень любят групповые переговоры по телефону:

Blog post image

Заходим в Core Sound Packages и выделяем все звуки с RU:

Blog post image

Заходим в Music On Hold File Packages и выделяем позиции

Blog post image

Можно еще добавить дополнительные звуки с английским

Заходим в Extras Sound Packages:

Blog post image

Нажимаем в конце Save & Exit

# contrib/scripts/get_mp3_source.sh

# make && make install

# make samples

# make config

Примечание: Если вы какой-то модуль забыли включить, могут помочь команды make menuselect и make.

После установки, включим в автозагрузку и запустим нашу службу:

# systemctl enable dahdi

# systemctl start dahdi

# groupadd asterisk

# useradd -g asterisk asterisk -s /sbin/nologin

# chown asterisk.asterisk /var/run/asterisk

# chown -R asterisk.asterisk /etc/asterisk

# chown -R asterisk.asterisk /var/{lib,log,spool}/asterisk

# chown -R asterisk.asterisk /usr/lib64/asterisk

# systemctl restart asterisk

# systemctl status asterisk

Настроим запись информации о звонках в базу MySQL:

# mysql -u root -p

create user 'asterisk'@'localhost' identified by 'password';
create database asterisk;
create database cdrdb;
GRANT ALL PRIVILEGES ON asterisk.* TO asterisk@localhost IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON cdrdb.* TO asterisk@localhost IDENTIFIED BY 'password';
flush privileges;

Теперь создадим таблицу "cdr" в только что созданной базе "cdrdb":

mysql> use cdrdb;

Создаем таблицу "cdr":

CREATE TABLE cdr (
calldate datetime NOT NULL default '0000-00-00 00:00:00',
clid varchar(80) NOT NULL default '',
src varchar(80) NOT NULL default '',
dst varchar(80) NOT NULL default '',
dcontext varchar(80) NOT NULL default '',
channel varchar(80) NOT NULL default '',
dstchannel varchar(80) NOT NULL default '',
lastapp varchar(80) NOT NULL default '',
lastdata varchar(80) NOT NULL default '',
duration int(11) NOT NULL default '0',
billsec int(11) NOT NULL default '0',
disposition varchar(45) NOT NULL default '',
amaflags int(11) NOT NULL default '0',
accountcode varchar(20) NOT NULL default '',
uniqueid varchar(32) NOT NULL default '',
userfield varchar(255) NOT NULL default '',
did varchar(50) NOT NULL default '',
recordingfile varchar(255) NOT NULL default '',
KEY `calldate` (`calldate`),
KEY `dst` (`dst`),
KEY `accountcode` (`accountcode`),
KEY `uniqueid` (`uniqueid`)
);

После, чтобы Asterisk знал куда писать данные о звонках отредактируем файл /etc/asterisk/cdr_mysql.conf

# vim /etc/asterisk/cdr_mysql.conf

В этом файле есть блок в комментариях, снимите комментарии:

[global]
hostname=localhost - ip адрес где располагается сервер MySQL
dbname=cdrdb – название базы данных где будут храниться cdr
table=cdr - название таблицы
password= password -пароль для пользователя asteriskcdr
user= asterisk - имя пользователя для базы данных
;port=3306
;sock=/tmp/mysql.sock
;timezone=UTC ; Previously called usegmtime

Запускаем консоль asterisk:

# asterisk -r

*CLI> module load cdr_mysql.so

Мы указали Asterisk'у писать данные о звонках в таблицу "cdr" базы "cdrdb". Можно проверить, поступают ли данные в таблицу "cdr" базы "cdrdb":

# mysql -p

mysql> use cdrdb;
mysql> select * from cdr;
mysql> exit

Конечно, чтобы вывести данные, вы перед этим должны куда нибудь позвонить.

Зайдем в консоль для проверки правильности установки:

# asterisk -r

localhost*CLI>

3. Настройка Asterisk

В этом разделе начнется самое главное - настройка АТС.

Попробуем настроить базовый функционал SIP.

3.1. Создание учетных записей

Сперва добавим несколько локальных SIP-абонентов. Для этого нам необходимо редактировать файл /etc/asterisk/sip.conf

Сначала добавим шаблон для общих настроек внутренних sip-телефонов:

[office-phones](!)
type=friend
context=outcoming-sip
host=dynamic
nat=no
qualify=yes
canreinvite=no
dtmfmode=auto
disallow=all
allow=g722
t38pt_udptl=no
callcounter=yes
call-limit=1
deny=0.0.0.0/0.0.0.0
permit=10.68.50.0/24

Рассмотрим этот участок кода. Шаблон задается при помощи восклицательного знака в скобках около имени секции [office-phones](!)

type — тип соединения (peer — только исходящие вызовы, user — входящие вызовы, friend — входящие и исходящие вызовы)

context — контекст в /etc/asterisk/extension.conf который будет выполняться при звонке с телефона

host — имя хоста телефона (dynamic динамическое имя хоста)

nat — сетевая трансляция адресов

qualify — проверка функционирования телефона

canreinvite — прямой доступ телефона к другому телефону минуя Asterisk

dtmfmode=auto — dtmf режим (auto|inband|info|rfc2833)

disallow=all — запрещает все кодеки

allow=g722 — разрешает использование кодека g722, желательно ставить g729, но это возможно когда установлен кодек g729 который ставиться по инструкции в конце данной записки.

t38pt_udptl=no — запрещает использование протокола t.38 для передачи факсов

callcounter=yes — эту опцию желательно выставлять в «yes». Это позволит Asterisk предоставлять информацию о состоянии SIP устройств.

call-limit=1 — максимум 1 соединение на линию, как и в обычных аналоговых телефонах.

deny=0.0.0.0/0.0.0.0 — запрещаем любые соединения, чтобы потом с помощью опции permit разрешить подключение только из доверенной сети.

permit=10.68.50.0/24 — доверенная локальная сеть, устройства или программные телефоны могут работать с сервером телефонии только из этой подсети. Если вдруг взломают учетную запись, злоумышленник не сможет позвонить.

Теперь добавим шаблон для общих настроек внешних sip-телефонов:

[office-phones-public](!)
type=friend
context=outcoming-sip
host=dynamic
nat=no
qualify=yes
canreinvite=no
dtmfmode=auto
disallow=all
allow=g722
t38pt_udptl=no
callcounter=yes
call-limit=1
nat=force_rport,comedia

Обратите внимание, здесь появилась опция nat=force_rport,comedia — которая позволит соединятся удаленным телефонам с нашим сервером телефонии вне нашей локальной сети.

Теперь добавим секции для каждого телефона:

[800](office-phones)
callerid="Менеджер 1" <800>
secret=xxxxxxxx
callgroup=1
pickupgroup=1
[801](office-phones)
callerid="Менеджер 2" <801>
secret=xxxxxxxx
callgroup=1
pickupgroup=1
[802](office-phones-public)
callerid="Менеджер 3" <802>
secret=xxxxxxxx
callgroup=1
pickupgroup=1

Рассмотрим описания телефонных учетных записей по ближе. Секции телефонных учетных записей начинаются с имени логина [801] и указанием шаблона в круглых скобках который мы создали ранее. Далее идет описание опций, callerid — информация для Сaller*Id (здесь у нас тел. номер), secret — это пароль для SIP телефона, callgroup — номер телефонной группы, pickupgroup — номер группы захвата звонков. В итоге добавлены три учетные записи c телефонными номерами 800, 801 и 802. Отмечу, учетной записи с номером 802 позволено соединятся с сервером из публичной интернет сети.

3.2. Базовая настройка плана набора

Наши телефоны теперь могут зарегистрироваться на сервере, но звонить пока они еще не могут. Для этого нам надо создать контекст [outcoming-sip] в файле /etc/asterisk/extensions.conf

3.3. Конфигурация внутренних вызовов

Добавим основные служебные секции, мы их использовать не будет:

[general]
static=yes
writeprotect=no
autofallthrough=yes
clearglobalvars=no
priorityjumping=no
[globals] ; Раздел для объявления глобальных переменных
[default] ; контекст который используется Asterisk'ом по умолчанию

Здесь в разделе [general] мы прописали:
static=yes - В данное время эта опция влияет только на действие команды «dialplan save»(Asterisk 1.6) или «save dialplan»(Asterisk 1.4). По умолчанию, ее значение равно no, но образец файла extensions.conf, устанавливаемый с Asterisk, явно устанавливает static=yes.
writeprotect=no - Если writeprotect=no и static=yes, тогда вы можете сохранить текущий Диалплан CLI командой “ save dialplan” (Определения глобальных переменных в классе [globals] остаются неизменными). Значение по умолчанию no.
autofallthrough=yes - указывает Asterisk продолжать выполнение, если все действия для добавочного номера исчерпаны. Если задать этому параметру значение no, Asterisk после выполнения всех предусмотренных приоритетов будет ожидать ввода.
clearglobalvars=no - указывает Asterisk сохранять глобальные переменные если произошла перезагрузка или установка расширения. Если стоит yes, при перезгрузке или при установки расширений, глобальные переменные будут очищаться и снова анализироваться при повторной загрузке расширений или перезапуска Астериска.
priorityjumping=no - запрещает "перепрыгивание" по приоритетам приложениям которые умеют это делать.

Для удобства выделим локальные номера в отдельную секцию:

[alm-local-phones]
exten => 800,1,Log(NOTICE,"800 ACCOUNT")
exten => 800,2,Dial(SIP/800,120,Tt)
exten => 801,1,Log(NOTICE,"801 ACCOUNT")
exten => 801,2,Dial(SIP/801,120,Tt)
exten => 802,1,Log(NOTICE,"802 ACCOUNT")
exten => 802,2,Dial(SIP/802,120,Tt)

И сделаем секцию завершающую вызов:

[handup-sip]
exten => _X!,1,HangUp()

В секцию [outcoming-sip] теперь подключим наши секции:

[outcoming-sip]
include => alm-local-phones
include => handup-sip

Теперь перезагрузив настройки Asterisk мы сможем звонить по номерам внутри сервера 800, 801 и 802 соответственно. Перезагрузка настроек asterisk выполняется следующим образом. Запускаем консоль управления Asterisk-сервером командой asterisk -r и прописываем в консоли reload — это заставит Asterisk перечитать все настройки, либо же можно перечитать их по отдельности прописав sip reload для перезагрузки настроек sip и dialplan reload для перезагрузки настроек плана набора.

Введя команду sip show peers мы можем посмотреть, какие абоненты у нас могут присутствовать на сервере и кто сейчас зарегистрирован и с какого IP.

3.4. Настройка связи между двумя серверами и вызовов между ними

Наши абоненты уже звонят друг-другу, но у нас есть еще и абоненты на нашем сервере в Астане, нам надо чтобы они могли звонить и им тоже. Для этого нам надо для начала настроить связь между нашими двумя серверами Asterisk.

3.5. Установка связи между двумя Asterisk-серверами по протоколу SIP

На сервере в Алматы прописываем в файле /etc/asterisk/sip.conf следующее:

В секции [general]:

register => alm_asterisk:XXXXXXXXX@192.168.0.30/ast_asterisk

И в конце создаем новую секцию:

[ast_asterisk]
type=friend
secret=XXXXXXXXX
context=ast_incoming
host=dynamic
qualify=yes
dtmfmode=rfc2833
disallow=all
allow=ulaw

На сервере в Астане пишем очень похожим образом:

В секции [general]:

register => ast_asterisk:XXXXXXXXX@192.168.1.25/alm_asterisk

И в конце создаем новую секцию:

[alm_asterisk]
type=friend
secret=XXXXXXXXX
context=alm_incoming
host=dynamic
qualify=yes
dtmfmode=rfc2833
disallow=all
allow=ulaw

Теперь рассмотрим подробнее что-же мы такое написали и для чего.

register => alm_asterisk:XXXXXXXXX@192.168.0.30/ast_asterisk

Это указывает нашему алматинскому серверу зарегистрироваться на астанинском сервере 192.168.0.30/ast_asterisk с логином alm_asterisk и паролем XXXXXXXXX.

Эти логин и пароль мы как раз задали, создав секцию [alm_asterisk] на нашем сервере в Астане. И соответственно астанинский сервер регистрируется на алматинском 192.168.1.25/alm_asterisk с логином и паролем указанными секцией [ast_asterisk] в конфигурации алматинского сервера.

3.6. Конфигурация плана набора для связи между серверами

Связь между серверами установлена — необходимо описать план набора для того чтобы алматинские абоненты могли звонить астанинским и наоборот.

В файле /etc/asterisk/extensions.conf на алматинском сервере создаем секцию [ast-local-phones], в который мы пропишем наших астанинских абонентов:

[ast-local-phones]
exten => 500,1,Dial(SIP/ast_asterisk/500,120,Tt)
exten => 501,1,Dial(SIP/ast_asterisk/501,120,Tt)

(... и т. д.)

Отметим небольшую разницу с тем, как мы прописывали локальных абонентов.

Если локальным абонентам мы звонили exten => 800,2,Dial(SIP/800,120,Tt), то есть набрав номер 800 мы совершали звонок абоненту, который зарегистрирован с логином 800, то в данном случае exten => 500,1,Dial(SIP/ast_asterisk/500,120,Tt), мы звоним абоненту находящемуся на сервере ast_asterisk с телефонным номером 500.

В имеющуюся секцию [outcoming-sip] добавляем включение новой секции с локальными номерами астанинского сервера:

[outcoming-sip]
include => alm-local-phones
include => ast-local-phones
include => handup-sip

И создаем секцию [ast_incoming] для обработки вызовов поступающих с астанинского сервера:

[ast_incoming]
include => alm-local-phones
include => handup-sip

На сервере в Астане прописываем аналогичным образом:

[alm-local-phones]
exten => 800,1,Dial(SIP/alm_asterisk/800,120,Tt)
exten => 801,1,Dial(SIP/alm_asterisk/801,120,Tt)
exten => 802,1,Dial(SIP/alm_asterisk/802,120,Tt)
[outcoming-sip]
include => alm-local-phones
include => ast-local-phones
include => handup-sip
[alm_incoming]
include => ast-local-phones
include => handup-sip

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

3.7. Настройка SIP учетных записей ID Phone и конфигурация плана набора

Наши абоненты звонят друг-другу, звонят абонентам астанинского сервера, но они пока еще не могут звонить на городские и сотовые телефоны. Приступим к настройке наших SIP ID Phone номеров. Заходим по адресу - http://cabinet.idphone.kz и вводим свой логин/пароль для входа, которые нам выдал провайдер.

Blog post image

Заходим в меню Персональные данные -> Настройка оборудования или телефона

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

3.8. Конфигурация плана набора для приема вызовов

На сервере в Алматы прописываем в файле /etc/asterisk/sip.conf следующее

В секции [general]:

register => login1:password1@sip.telecom.kz/2755343~3600
register => login2:password2@sip.telecom.kz/2755344~3600
allowguest=no;
bindport=5060
bindaddr=0.0.0.0
context=incoming-sip
udpbindaddr=0.0.0.0
tcpenable=no
tcpbindaddr=0.0.0.0
transport=udp
srvlookup=yes
maxexpiry=3600
minexpiry=60
defaultexpiry=800
disallow=all
allow=g729
allow=g722
allow=alaw
allow=ulaw
language=ru
tonezone=ru
dtmfmode = rfc2833
alwaysauthreject = yes

Здесь:

register => login1:password1@sip.telecom.kz/2755343~3600 - регистрируемся на провайдерском SIP сервере.

login1:password1@sip.telecom.kz - это логин/пароль и сам сервер провайдера, 2755343 - это метка (расширение - extension) с номером городского телефона, по этой метке (номеру) можно отлавливать входящие звонки.

allowguest=no - запрещаем гостевые подключения.

bindport=5060 - порт на котором мы ожидаем соединения и bindaddr=0.0.0.0 - слушаем соединения на всех IP адресах сервера. Стоить отметить, что некоторые учетные записи, могут работать без регистрации, эти настройки зависят от провайдера.

context=incoming-sip - контекст в который по умолчанию будут поступать входящие звонки

udpbindaddr=0.0.0.0 - адрес на котором Asterisk "слушает" UDP подключения, 0.0.0.0 - все интерфейсы сервера

tcpenable=no - задаем транспорт, по умолчанию UDP

tcpbindaddr=0.0.0.0 - адрес на котором Asterisk "слушает" TCP подключения

transport=udp - задает транспорт по умолчанию. По умолчанию 'udp', но может быть 'tcp', 'tls', 'ws' или 'wss'. Если задано TCP а tcpenable=no будет использован UDP транспорт.

srvlookup=yes - включить DNS SRV поиск для вызовов. DNS SRV записи определяют имя хоста и номер порта серверов для определенных служб

maxexpiry=3600 - максимальная продолжительность регистрации в секундах.

minexpiry=60 - минимальная продолжительность регистрации в секундах.

defaultexpiry=800 - срок действия регистрации в секундах для входящих и исходящих регистраций. При входящей регистрации, этот параметр задается клиентской стороной, и заданное здесь значение используется, только если клиент не сообщил свое значение. Для исходящих регистраций этот параметр сообщается удаленной стороне UAS (user agent server)

disallow=all - запрещает все кодеки

allow=g729 - разрешает использование кодека g729

allow=g722 - разрешает использование кодека g722

allow=alaw - разрешает использование кодека G.711 ulaw (тот, что используется в US)

allow=ulaw - разрешает использование кодека G.711 alaw (тот, что используется в Европе)

language=ru - для всех SIP-аккаунтов установить русские голосовые звуки (сообщения)

tonezone=ru - определяет стандарт тонового сигнала(соединение, дозвон, занято и т.д.)

dtmfmode = rfc2833 - метод генерации тонального DTFM-кода

alwaysauthreject = yes - если включено, всегда отвечает на INVITE и REGISTER, SIP сообщением 401 Unauthorized, вместо того чтобы сообщить вызывающему о существовании запрашиваемого user или peer. Важная настройка безопасности

Здесь мы зарегистрировали две телефонные учетные записи с городскими номерами 2755343 и 2755344 на провайдерском сервере. Для осуществления звонков, этого мало, помимо регистрации, необходима еще и авторизация на этом же сервере.

Чтобы была авторизация, создадим один шаблон и две секции авторизации для двух городских номеров.

В конце наших настроек, создаем новую секцию шаблона и две секции авторизации:

[id-phone](!)
type=peer
context=incoming-sip
host=sip.telecom.kz
fromdomain=sip.telecom.kz
port=5060
insecure=port,invite
canreinvite=no
qualify=3600
[2755343](id-phone)
disallow=all
allow=g729
allow=alaw
;allow=ulaw
defaultuser=логин1
fromuser=логин1
secret=пароль1
call-limit = 1 ; У нас одно-канальный городской телефон
callbackextension=2755343 ;Городской номер
[2755344](id-phone)
disallow=all
allow=g729
allow=alaw
;allow=ulaw
defaultuser=логин2
fromuser=логин2
secret=пароль2
call-limit = 1 ; У нас одно-канальный городской телефон
callbackextension=2755344 ;Городской номер

Здесь мы создали шаблон для подключения к провайдерскому SIP (ID Phone) серверу по аналогии с астанинским сервером. Также мы авторизовались по двум учетным записям с городскими номерами.

Настроим прием вызовов на наши линии.

Создаем контекст [incoming-sip] в файле /etc/asterisk/extensions.conf:

[incoming-sip]
exten => _X.,1,Answer()
exten => _X.,n,Ringing()
exten => _X.,n,Queue(welcome,n,,,25)
exten => _X.,n,GotoIfTime(19:15-8:00,*,*,*?allRing:default)
exten => _X.,n(allRing),NoOp()
exten => _X.,n,HangUp()
exten => _X.,n,Queue(all,r,,,600)
exten => _X.,n(default),NoOp()
exten => _X.,n,Queue(secretary,r,,,6)
exten => _X.,n,Queue(alm-manager1,r,,,10)
exten => _X.,n,Queue(ast-managers,r,,,600)
include => handup-sip

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

Queue(welcome,n,,,25) отправляет звонок в очередь welcome на 25 секунд, параметр «n» позволяет набор во время нахождения в очереди и проигрывается музыка ожидания(Music On Hold, MOH). В очереди welcome мы проигрываем приветственное сообщение — это будет описано ниже.

GotoIfTime(19:15-8:00,*,*,*?allRing:default) — проверяется условие, если сейчас время от 19:15 вечера до 8:00 утра, то мы переходим к метке allRing после которой идет вызов очереди all, иначе к метке default. Это делается для того, чтобы в то время, когда большинства работников нет в офисе звонили все телефоны, а в рабочие часы — в установленном порядке. Далее под меткой default у нас звонок сначала на 6 секунд идет на секретаря, затем на 10 секунд на алматинских менеджеров и потом на 600 секунд на астанинских менеджеров. Параметр «r» в вызове Queue() отвечает за то, что вместо MOH звонящий слышит гудки, как при звонке (ringing).

Настройте аналогичный контекст на астанинском сервере поменяв городские номера на _X. или явно указав extension - 3755222 и 3755333.

3.9. Создание очередей вызова

Теперь рассмотрим, как именно описываются очереди. Они описываются в файле /etc/asterisk/queues.conf.

[welcome]
strategy = ringall
musicclass=welcome
context=all-local-sip
[secretary]
strategy = ringall
musicclass=default
context=all-local-sip
; Секретарь
member => local/550@ast-local-phones
[ast-managers]
strategy = ringall
musicclass=default
context=all-local-sip
; Менеджеры
member => local/500@ast-local-phones
member => local/501@ast-local-phones
; (… и т. д.)
[alm-manager1]
strategy = ringall
musicclass=default
context=all-local-sip
; Алматинские менеджеры
member => SIP/800,1
member => SIP/801,1
[all]
strategy = ringall
musicclass=default
context=all-local-sip
; Все номера
member => SIP/800,1
member => SIP/801,1
member => SIP/802,1
member => SIP/850,1

Основные параметры при описании очередей:

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

ringall — вызываются все доступные участники до тех пор, пока кто-то из них не ответит на вызов (по умолчанию)

leastrecent — вызывается участник очереди, который вызывался меньшего всего

fewestcalls — вызывается участник очереди, ответивший на наименьшее количество звонков

random — случайным образом из участников очереди вызывается свободный

rrmemory — циклический вызов с памятью (round robin), запоминается последний ответивший участник очереди

rrordered - похоже на предыдущую стратегию, но с учетом агентов в конфиг файле

linear — звонок поступает на агентов в том порядке в котором они перечислены, для динамических агентов — в порядке их регистрации

wrandom — звонок поступает на случайно выбранного оператора с учетом занятости

musicclass — задает, какая музыка или сообщение проигрывается во время ожидания в данной очереди(задается в файле /etc/asterisk/musiconhold.conf)

context — задает, какой контекст будет обрабатывать набор номера во время ожидания.

member — задает участников очереди, обрабатывающих вызов. На каждого участника создается запись.

Для обработки добавочного номера в очереди welcome мы указали контекст [all-local-sip] — он должен включать в себя все локальные алматинские и астанинские номера, создадим для него запись в файле /etc/asterisk/extensions.conf

[all-local-sip]
include => alm-local-phones
include => ast-local-phones
include => handup-sip

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

Функцией Queue(welcome,n,,,12) в плане набора мы отправляемый поступивший звонок на обработку в очередь welcome. В ней в течении 12 секунд звонящий слышит приветственное сообщение и, так как мы передали параметр "n", может набрать добавочный номер, который обрабатывается контекстом all-local-sip. По истечении 12 секунд, если не был набран добавочный номер, звонок выходит из данной очереди и идет на следующий шаг обработки в плане набора.

При вызове функции Queue(alm-manager1,r,,,10) звонок переходит на обработку в очередь alm-manager1 на 10 секунд. При нахождении в очереди, так как мы указали параметр "r", звонящий слышит гудки. В это время звонок обрабатывается в соответствии с заданной стратегией — в данном случае ringall (звонят телефоны у всех указанных членов очереди). Если кто-то из членов очереди берет трубку, то устанавливается соединение. В противном случае, если за 10 секунд трубка взята не была, то обработка вызова снова переходит к следующему шагу в плане набора.

3.10. Установка своей музыки (сообщения) ожидания (Music On Hold, MOH)

У нас уже обрабатываются входящие на наши городские линии и мы проигрываем приветственное сообщение, указав для очереди welcome музыкальный класс welcome — рассмотрим, как именно он задается. Музыка ожидания описывается в файле /etc/asterisk/musiconhold.conf

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

[general]
[default]
mode=files
directory=moh

Нам надо добавить в него следующую секцию:

[welcome]
mode=files
sort=alpha
directory=/etc/asterisk/moh1

В данной записи мы говорим Asterisk-серверу проигрывать файлы в алфавитном порядке из директории /etc/asterisk/moh1. В эту директорию мы помещаем записанное сообщение. Для уменьшения нагрузки на сервере предварительно сконвертируем при помощи ffmpeg наше сообщение в наиболее часто используемые кодеки alaw, ulaw, g722, g729, gsm и в Asterisk Native SLN из которого Asterisk сможет конвертировать сам налету.

Например конвертация в Native SLN при помощи ffmpeg делается следующим образом:

ffmpeg -i "[input file]" -ar 8000 -ac 1 -acodec pcm_s16le -f s16le "[output file].sln"

Сконвертировать имеющиеся mp3 файлы в mono wav и ulaw pcm можно следующим образом:

for f in `ls *.mp3` ; do FILE=$(basename $f .mp3) ; ffmpeg -i $FILE.mp3 -ar 8000 -ac 1 -ab 64 $FILE.wav -ar 8000 -ac 1 -ab 64 -f mulaw $FILE.pcm -map 0:0 -map 0:0 ; done

3.11. Конфигурация плана набора для совершения исходящих вызовов

Теперь нам осталось настроить исходящие вызовы на городские номера. В файле /etc/asterisk/extensions.conf создаем секцию [city-calls]:

[city-calls]
exten => _987172XXXXXXX/_80[0123],1,Dial(SIP/ast_asterisk/${EXTEN:1})
exten => _987172XXXXXXX/_80[0123],2,Congestion
exten => _9870[12578]XXXXXXX/_80[0123],1,Dial(SIP/2755343/+7${EXTEN:2})
exten => _9870[12578]XXXXXXX/_80[0123],2,Dial(SIP/2755344/+7${EXTEN:2})
exten => _98747XXXXXXX/_80[0123],1,Dial(SIP/2755343/+7${EXTEN:2})
exten => _98747XXXXXXX/_80[0123],2,Dial(SIP/2755344/+7${EXTEN:2})
exten => _98747XXXXXXX/_80[0123],3,Congestion
exten => _9[239]XXXXXXX/_80[0123],1,Dial(SIP/2755343/${EXTEN:1})
exten => _9[239]XXXXXXX/_80[0123],2,Dial(SIP/2755344/${EXTEN:1})
exten => _9[239]XXXXXXX./_80[0123],3,Congestion
exten => _9X./_80[0123],1,Dial(SIP/2755343/${EXTEN:1})
exten => _9X./_80[0123],2,Dial(SIP/2755344/${EXTEN:1})
exten => _9X./_80[0123],3,Congestion

И подключаем ее к секции [outcoming-sip]:

[outcoming-sip]
include => alm-local-phones
include => ast-local-phones
include => city-calls
include => handup-sip

Таким образом вызовы на астанинские номера (код 7172) у нас отправляются на сервер ast_asterisk и обрабатываются уже там.

Вызов на номера сотовых операторов с кодом 701, 702, 705, 707 и 708 (провайдеры KCELL, BEELINE и т.д.) дополняются цифрой +7 и отправляются на обработку. Вызовы на городские номера с кодом начинающимся с 2,3 или 9 (7 цифр) уходят сразу в город. Вызовы на другие направления идут через шаблон _X. с любым количеством цифр. Мы здесь сделали маленькую защиту, выполнять внешние вызовы могут только телефоны от 800 до 803, так как прописан шаблон через /_80[0123]. Также заметьте, все номера набираются через 9-ку. Такой набор может усложнит несанкционированные звонки с вашего номера, на случай взлома учетной записи.

В вызове команды Dial(${EXTEN:1}:

  • ${EXTEN} и ${EXTEN:1} — номер, который был набран. Полный синтаксис команды ${EXTEN:x:y}, где x — начальное положение и y — количество возвращаемых цифр.
  • При ${EXTEN:1} - убирается первая цифра набранного номера, в нашем случае это 9.

3.12. Настройка софтфона X-Lite

Настроим программный телефон, вводим:

  • Логин - 801
  • Пароль из шаблона
  • IP сервера Asterisk - 10.0.10.10
Blog post image

4. Дополнительные настройки

Здесь настроим сетевой брандмауэр, fail2ban, logrotate и добавим кодек g729 к Asterisk'у.

4.1. Настройка межсетевого экрана firewalld

Допустим, что сервер имеет всего один сетевой адаптер по имени eth0.

Устанавливаем firewalld:

# yum install firewalld -y

# systemctl enable firewalld && systemctl start firewalld

Смотрим активные зоны:

# firewall-cmd --get-active-zones

Здесь видим допустим имя eth0.

Открываем порт 5060:

# firewall-cmd --permanent --zone=public --add-port=5060/udp

Открываем порты 10000-20000:

# firewall-cmd --permanent --zone=public --add-port=10000-20000/udp

Удаляем DHCPv6 Client за ненадобностью, по умолчанию открыты порты для SSH и DHCP клиента v6:

# firewall-cmd --permanent --remove-service=dhcpv6-client

Сохраняем правила:

# firewall-cmd --complete-reload

Проверяем все текущие открытые порты:

# firewall-cmd --zone=public --list-ports

Напомню что SIP протокол нужен для установления сессии между двумя абонентами, при своей работе использует порт 5060. В свою очередь RTP протокол, непосредственно передает медиа данные, в нашем случае это голосовой аудио трафик, здесь уже задействован диапазон портов от 10000 до 20000.

4.2. Настройка fail2ban

Блокировка брутофорса с помощью fail2ban. Боты очень сильно любят Asterisk, перебирая пару логин/пароль, дабы потом сообщить своему хозяину, что открыта лазейка для халявных звонков. Поэтому системный администратор должен в обязательном порядке усложнять доступ к своей системе посредством fail2ban. Если fail2ban не устраивает, попробуйте OSSEC.

Устанавливаем fail2ban:

# yum install fail2ban fail2ban-systemd -y && systemctl enable fail2ban && systemctl start fail2ban

Редактируем файл /etc/asterisk/logger.conf и находим строчку с "messages", добавляем к ней "security" через запятую:

messages => notice,warning,error,security

Также раскомментируем строку:

full => notice,warning,error,debug,verbose,dtmf,fax

Перезапускаем Asterisk:

# asterisk -x "logger reload"

Скопируем jail.conf в jail.local:

# cp -pf /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Отредактируем файл /etc/fail2ban/jail.local и включаем уже имеющийся jail asterisk:

[asterisk]
enabled = true
bantime = 86400
maxretry = 5

Перезапускаем fail2ban:

# fail2ban-client reload

И проверяем статус:

# fail2ban-client status asterisk

Просмотр списка заблокированных IP:

# ipset list

Убрать IP из бана 192.168.0.33:

# fail2ban-client set asterisk unbanip 192.168.0.33

Примечание: Если попытаться 3 раз ввести неправильный пароль, fail2ban - вас забанит. Время бана указывается в секундах, поэтому время бана истекает после 24 часа.

На CentOS 6 убрать IP из унбана можно так:

# iptables -L f2b-asterisk-udp #Проверяем цепочку f2b-asterisk-udp

Chain f2b-asterisk-udp (1 references)
target prot opt source destination
REJECT all -- 192.168.9.20 anywhere reject-with icmp-port-unreachable

Убираем IP 192.168.9.20 из черного списка (первое правило из цепочки):

# iptables -D f2b-asterisk-udp 1

4.3. Настройка logrotate

Уборщик логов logrotate, следить за лог файлами Asterisk. В процессе работы телефонной системы создается очень много отладочной информации. Я лично видел на одном сервере лог файл размером в 1Гбайт. Это был очень большой файл, в нем хранились логи за прошлый 2015 год и текущий период. Поиск информации в таком файле был очень утомительным. Поэтому желательно настраивать logrotate, который будет хранить, сжимать и удалять старые логи.

Создаем файл /etc/logrotate.d/asterisk со следующим содержимым:

/var/log/asterisk/*log {
missingok
rotate 5
weekly
create 0640 asterisk asterisk
postrotate
/usr/sbin/asterisk -rx 'logger reload' > /dev/null 2> /dev/null
endscript
}
/var/log/asterisk/full {
missingok
rotate 5
yearly
create 0640 asterisk asterisk
postrotate
/usr/sbin/asterisk -rx 'logger reload' > /dev/null 2> /dev/null
endscript
}
/var/log/asterisk/messages {
missingok
rotate 10
weekly
create 0640 asterisk asterisk
postrotate
/usr/sbin/asterisk -rx 'logger reload' > /dev/null 2> /dev/null
endscript
}
/var/log/asterisk/cdr-csv/*csv {
missingok
rotate 5
monthly
create 0640 asterisk asterisk
}
/var/log/atftp.log {
missingok
rotate 5
monthly
create 0640 nobody nobody
}

4.4. Включение кодека g729

Заходим в каталог с модулями Asterisk:

# cd /usr/lib64/asterisk/modules/

Качаем туда кодек g729:

# wget http://asterisk.hosting.lv/bin/codec_g729-ast130-gcc4-glibc-x86_64-pentium4.so

Переименуем файл в codec_g729.so

# mv codec_g729-ast130-gcc4-glibc-x86_64-pentium4.so codec_g729.so

Сделаем его исполняемым:

# chmod +x codec_g729.so

И загружаем его в Asterisk:

# asterisk -r

*CLI> module load codec_g729.so

4.5. Включение маркировки пакетов TOS

Откройте файл /etc/asterisk/sip.conf и в секцию [general] добавьте строчки:

tos_sip=cs3
tos_audio=ef
tos_video=af41

Это поможет немного повысить качество голоса.

5. Конфигурационные файлы провайдерского сервера

Чтобы сделать имитацию провайдерского сервера, создайте еще одну ВМ со следующими настройками Asterisk:

Файл /etc/asterisk/sip.conf

[client-phones](!)
type=friend
context=outcoming-sip
secret=password
host=dynamic
nat=no
qualify=yes
canreinvite=no
callgroup=1
pickupgroup=1
dtmfmode=auto
disallow=all
allow=g722
[2755343](client-phones)
callerid="Almaty 1" <2755343>
[2755344](client-phones)
callerid="Almaty 2" <2755344>
[3755222](client-phones)
callerid="Astana 1" <3755222>
[3755333](client-phones)
callerid="Astana 2" <3755333>

Файл /etc/asterisk/extensions.conf

[client-local-phones]
exten => 2755343,1,Log(NOTICE,"2755343 ACCOUNT")
exten => 2755343,2,Dial(SIP/2755343,120,Tt)
exten => 2755344,1,Log(NOTICE,"2755344 ACCOUNT")
exten => 2755344,2,Dial(SIP/2755344,120,Tt)
; Astana phones
exten => 3755222,1,Log(NOTICE,"3755222 ACCOUNT")
exten => 3755222,2,Dial(SIP/3755222,120,Tt)
exten => 3755333,1,Log(NOTICE,"3755333 ACCOUNT")
exten => 3755333,2,Dial(SIP/3755333,120,Tt)
[handup-sip]
exten => _X!,1,HangUp()
[outcoming-sip]
include => client-local-phones
include => handup-sip

В конфигурационных файлах определены 4-ре городских номера для сервера Алматы и сервера Астаны.

Пример простой, но его можно усложнить.

6. Заключение

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

7. Источники и ссылки

Настройка сервера на Calculate Linux

Настройка Asterisk сервера на Calculate Linux

Возможности Asterisk на примере выполняемых работ

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

Установка Asterisk: пошаговая инструкция

X-Lite 2.0

PhonerLite

Установка Asterisk под ID Phone

3CXPhone

5 популярных софтфонов

Сравнение софтофонов

Частный опыт установки и настройки Asterisk с нуля

IP-телефония Wikipedia

Создание и настройка очереди через консоль Asterisk

Папки, используемые Asterisk

Грабли, или 5 типичных ошибок настройки Asterisk

SIP ответы и их значения

Установка VoiP сервера Asterisk IP PBX

Установка Asterisk

Asterisk и Linux: миссия IP-телефония

Будущее телефонии - Asterisk IP АТС

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

Asterisk. Начало

Макросы в Asterisk

Приложения Background(), WaitExten() и Goto()

Команда Goto()

Команда GotoIf()

Команда GotoIfTime()

Команда Dial()

Использование приложения Dial()

Коды Asterisk - features.conf

Журнал Хакер. VOIP ОСОБОГО НАЗНАЧЕНИЯ

Журнал Хакер. СБЕРЕЧЬ ТЕЛЕФОННЫЙ БАЛАНС: ПОДНИМАЕМ СИСТЕМУ ОБРАТНОГО ДОЗВОНА CALLBACK

Журнал Хакер. КАК СЭКОНОМИТЬ И ЗАРАБОТАТЬ С ПОМОЩЬЮ ASTERISK

Журнал Хакер. ЗВЕЗДНОЕ ПОПУРРИ. ФОКУСНИЧАЕМ С IP-PBX ASTERISK

IT-Center. Настройка asterisk с нуля

Простая установка и настройка Asterisk 12 на Ubuntu 14.04

Базовая настройка Asterisk

Полезные фичи Asterisk

Asterisk How To Video

Использование переменных в плане набора Asterisk (Set)

Asterisk Dialplan - extensions.conf

Файл extensions.conf - Ваш план набора (Dialplan)

H extension

Файл конфигурации sip.conf - определяет каналы SIP.

Перевод звонка (transfer call) на Asterisk

Корпоративный VoIP сервер на базе Asterisk в Ubuntu Server 8.04.2

CDR описание и Asterisk cdr.conf - Call Detail Records - Детализированный отчет о звонках

Команда ResetCDR()

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

Использование контекстов в зависимости от времени суток

Elastix для начинающих

Asterisk — SIP АТС для офиса, пошаговая инструкция по настройке с нуля

Развертывание ip-телефонии для небольшой компании

2
11383
3