Курсы по использованию Asterisk

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

Работайте с Asterisk профессионально!

Многоуровневая защита IP-АТС Asterisk

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

Не оставьте хакерам шансов. Защитите свой Asterisk от атак.

Используйте Веб-Интерфейс для удобства настройки

Панель управление FreePBX позволяет легко и удобно управлять всей системой. Научитесь эффективно использовать FreePBX для решения своих задач.

Управление станцией и статистика в окне браузера.

Научитесь работать с Asterisk из консоли

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

Научитесь «тонкой» настройке Asterisk

Цель курсов - максимум практики.

Обучение нацелено на практическую работу с IP-оборудованием: платы потоков E1, VoIP-телефонные аппараты, голосовые шлюзы FXS и прочее.

Обучение на реальном оборудовании — залог успеха.

Передача device state между серверами Asterisk с помощью XMPP PubSub

База знаний Настройка Asterisk

Рассмотрим пример — имеется три офиса в разных городах (например в Санкт-Петербурге, Москве и Волгограде), в каждом офисе есть сервер Asterisk со своим диапазоном внутренних номеров (Санкт-Петербург — 1XX, Москва — 2XX, Волгоград — 3XX), между серверами настроены IAX2-транки. Также в каждом из офисов есть несколько телефонов с панелями расширения, панели расширения поддерживают BLF, но Asterisk, пока что, не может передавать состояние устройства (device state) через транк, следовательно ни в одном из офисов не получится отслеживать состояние телефонов в других офисах. О решении этой проблемы и пойдет речь.

 

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

  1. res_ais.so — модуль для интеграции Asterisk и OpenAIS, в том числе позволяет реализовать передачу состояний устройств его средствами (работает только в сетях с низкой задержкой, для работы через интернет не годится следовательно, в данном случае, не подходит).
  2. res_jabber.so — модуль интеграции Asterisk и Jabber, позволяет реализовать передачу состояний устройств с помощью PubSub.

 

PubSub — расширение протокола XMPP, описанное в дополнении XEP-0060. Позволяет пользователям подписываться на узлы PubSub и получать уведомления, при их обновлении. Разработчик модуля рекомендует jabber-сервер Tigase для использования PubSub, но Openfire проще в настройке, поэтому я использовал его.

 

Установка и настройка OpenFire

Скачиваем с сайта разработчика (http://www.igniterealtime.org/downloads/index.jsp) последнюю версию RPM-пакета и устанавливаем (openfire будет установлени в /opt/openfire, RPM-пакет включает в себя и Java JRE).

wget http://www.igniterealtime.org/downloadServlet?filename=openfire/openfire-3.7.1-1.i386.rpm
rpm -ivh openfire-3.7.1-1.i386.rpm

 Создаем базу данных MySQL для OpenFire.

mysql -u root -p
CREATE DATABASE openfire;
GRANT ALL ON openfire.* TO 'openfire'@'localhost' IDENTIFIED BY 'password';
use openfire;
source /opt/openfire/resources/database/openfire_mysql.sql;
exit

Запускаем openfire.

service openfire start

Заходим в админку openfire по адресу http://IP-адрес_хоста_openfire:9090. При первом входе задаем пароль для входа, имя домена, параметры подключения к базе данных. Параметры подключения к базе данных потом можно изменить в файле /opt/openfire/conf/openfire.xml, имя домена — в адменике Server > Server Manager > System Properties, параметр xmpp.domain. Если поменяли имя домена, нужно пересоздать X.509-сертификаты сервера, заходим в Server > Server Settings > Server Certificates, удаляем сертификаты, после этого в верхней части страницы появляется ссылка для создания новых сертификатов (можно создать сертификаты вручную с помощью keytool). В нашем примере домен будет company.local, а jabber.company.local — имя хоста Openfire.

Переходим на вкладку Users/Groups и создаем пользователя для каждой АТС (в нашем примере будут пользователи of-spb — для АТС в Санкт-Петербурге, of-msk — для АТС в Москве и of-vg — для АТС в Волгограде). Снова идем в настройки сервера Server > Server Manager > System Properties и создаем там свойство «xmpp.pubsub.sysadmin.jid» со значением «of-spb@company.local/astvoip1,of-msk@company.local/astvoip2,of-vg@company.local/astvoip3» (astvoip1, astvoip2 и astvoip3 — имена Jabber-ресурсов и могут быть любыми, но должны оставаться одними и теми же на всех этапах установки). Это даст всем трем пользователям права администратора PubSub и возможность создавать свои PubSub-узлы.

  

Установка и настройка Asterisk

Asterisk устанавливается как обычно, с тем исключением, что в menuselect нужно включить сборку модуля res_jabber в разделе Resource Modules. На каждом хосте Asterisk создаем в директории /etc/asterisk файл jabber.conf следующего содержания (здесь приведен конфиг для АТС в Санкт-Петербурге):

<code>
[general]
debug=no                        ;Если включить, все сообщения протокола Jabber будут отображаться в консоли Asterisk (полезно при первоначальном поиске проблем, потом нужно выключить)
autoregister=yes              ;Автоматически добавлять собеседников, указанных в конфиге ниже
collection_nodes=yes        ;Включить поддержку режима XEP-0248 для передачи состояний устройств
pubsub_autocreate=yes      ;Поддерживает ли Jabber-сервер автоматическое создание PubSub-узлов (Openfire поддерживает)

далее настройки Jabber-подключения

[asterisk]
type=client
serverhost=jabber.company.local                     ;IP-адрес или DNS-имя Jabber-сервера
pubsub_node=pubsub.jabber.company.local
username=of-spb@company.local/astvoip1                  ;Имя пользователя в формате логин@домен/ресурс
secret=pass_spb                                           ;Пароль
distribute_events=yes
status=available
usetls=no
usesasl=yes

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

buddy=of-msk@company.local/astvoip2
buddy=of-vg@company.local/astvoip3
</code>

Для включения модуля res_jabber.so перезагружаем Asterisk, либо выполняем в консоли Asterisk

<code>
module load res_jabber.so
</code>

Конфиги для остальных АТС:

(для Москвы)

<code>
[general]
debug=no
autoregister=yes
collection_nodes=yes
pubsub_autocreate=yes
[asterisk]
type=client
serverhost=jabber.company.local
pubsub_node=pubsub.jabber.company.local
username=of-msk@company.local/astvoip2
secret=pass_msk
distribute_events=yes
status=available
usetls=no
usesasl=yes
buddy=of-spb@company.local/astvoip1
buddy=of-vg@company.local/astvoip3
</code>

(для Волгограда)

<code>
[general]
debug=no
autoregister=yes
collection_nodes=yes
pubsub_autocreate=yes
[asterisk]
type=client
serverhost=jabber.company.local
pubsub_node=pubsub.jabber.company.local
username=of-vg@company.local/astvoip3
secret=pass_vg
distribute_events=yes
status=available
usetls=no
usesasl=yes
buddy=of-spb@company.local/astvoip1
buddy=of-msk@company.local/astvoip2
</code>

Проверяем правильность настройки. Выполняем в консоли Asterisk

<code>
jabber show connections

Jabber Users and their status:

[asterisk] of-spb@armed.local/astvoip1     — Connected

 

----

Number of users: 1

</code>
если статус соединения — Disconnected, значит соединение настроено неверно, включение debug в jabber.conf может помочь найти проблему.

<code>
jabber show buddies
Jabber buddy lists
Client: of-spb@armed.local/astvoip1
Buddy:        of-msk@company.local
Resource: astvoip2
node: http://www.asterisk.org/xmpp/client/caps
version: asterisk-xmpp
Jingle capable: yes
Status: 1
Priority: 0
Buddy:        of-vg@company.local
Resource: astvoip3
node: http://www.asterisk.org/xmpp/client/caps
version: asterisk-xmpp
Jingle capable: yes
Status: 1
Priority: 0
Buddy:        of-vg@company.local/astvoip3
Resource: None
Buddy:        of-msk@company.local/astvoip2
Resource: None
</code>

Примечание: каждый раз, при изменении DEVICE_STATE какого-либо номера, модуль res_jabber.so выдает в консоль Asterisk ошибку '409'. Эта ошибка безопасна и работе системы не мешает.

Модуль res_jabber.so настроен, осталось добавить хинты в диалплан Asterisk. Если установлен FreePBX, хинты следует добавлять в файл /etc/asterisk/extensions_custom.conf в контекст [ext-local-custom]. В нашем случае, на АТС в Санкт-Петербурге добавляем следующие хинты для слежения за состоянием номеров 201, 202, 308 и 321 на других АТС:

<code>
[ext-local-custom]
exten ≥ 201,hint,SIP/201
exten ≥ 202,hint,SIP/202
exten ≥ 308,hint,SIP/308
exten ≥ 321,hint,SIP/321
</code>

После применения диалплана, хинты можно проверить командой в консоли Asterisk:

<code>
core show hints
...
201@ext-local-custom   : SIP/201              State:InUse          Watchers 0
202@ext-local-custom   : SIP/202              State:Idle           Watchers 0
308@ext-local-custom   : SIP/308              State:Ringing           Watchers 0
321@ext-local-custom   : SIP/321              State:Idle           Watchers 0
...
</code>

 

FreePBX, настройка, установка, sip, asterisk, сервер