Иван Санников
19.02.2019
766

Настройка realtime для PJSIP на Centos 7

В рамках данной статьи будет  рассмотрена пошаговая настройка realtime хранилища для канального драйвера PJSIP. Данный механизм позволяет хранить в базе данных большинство конфигураций объектов PJSIP, таких как endpoints, aors, auth, transports, без использования конфигурационного файла pjsip.conf. Используемое программное обеспечение:– Centos 7– Asterisk 16 с PJSIP– Mariadb 5.5 Для соединения Asterisk с базой данных будет использоваться […]

В рамках данной статьи будет  рассмотрена пошаговая настройка realtime хранилища для канального драйвера PJSIP. Данный механизм позволяет хранить в базе данных большинство конфигураций объектов PJSIP, таких как endpoints, aors, auth, transports, без использования конфигурационного файла pjsip.conf.

Используемое программное обеспечение:
– Centos 7
– Asterisk 16 с PJSIP
– Mariadb 5.5

Для соединения Asterisk с базой данных будет использоваться механизм ODBC. Следовательно необходимо установить следующие зависимости:

yum install python-pip unixODBC unixODBC-devel mysql-connector-odbc pyodbc python-devel mysql-connector-python

Далее необходимо пересобрать Asterisk с поддержкой ODBC. Для этого в пункте menuselect при пересборке Asterisk необходимо выбрать для установки в разделе Resource Modules подпункты res_config_odbc, res_odbc.

Активация odbc при пересборке Asterisk

Также необходимо отметить для установки в PBX Modules, подпункт pbx_realtime

Установка pbx_realtime

Далее необходимо создать базу и пользователя для реалтайм, для этого необходимо залогиниться в mysql командой: mysql -u root -p

База данных создается командой: create database asterisk;

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

 GRANT ALL PRIVILEGES ON asterisk.* TO ast_user@localhost IDENTIFIED BY 'ast_password';
 FLUSH PRIVILEGES;

Начиная с 12 версии Asterisk использует Alembic — инструмент для удобного управления базами данных при использовании realtime схемы. Alembic — многофункциональный инструмент, который позволяет управлять миграцией схем существующих баз, управления схемами, созданием новых баз данных и таблиц.

Сначала необходимо установить Alembic с помощью утилиты pip:
pip install alembic

Установка Alembic

Далее необходимо перейти в директории с исходным кодом Asterisk, в поддиректорию contrib/ast-db-manage, примерный вид команды выглядит следующим образом:

cd /usr/src/asterisk-16.1.1/contrib/ast-db-manage

В данной директории находится образец конфигурационного файла config.ini.sample, для использования Alembic в этот файл необходимо внести данные подключения к базе, но сначала необходимо сделать копию файла командой cp config.ini.sample config.ini и далее все правки будут вноситься в файл config.ini

В файле необходимо найти параметр sqlalchemy.url, отвечающий за подключение к базе данных, и внести в него тип используемой СУБД, параметры учетной записи mysql и имя базы данных:
sqlalchemy.url = mysql://ast_user:ast_password@localhost/asterisk

Настройка конфигурационного файла утилиты Alembic

Теперь можно запустить Alembic для создания необходимых таблиц:
alembic -c config.ini upgrade head

Пример удачно выполненного заполнения таблиц

При выдаче ошибки:

File "/usr/lib64/python2.7/site-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 104, in dbapi
  return __import__("MySQLdb")
ImportError: No module named MySQLdb

необходимо установить mysql-python, командой: pip install  mysql-python

Ошибка Alembic и установка необходимого модуля

После отработки Alembic необходимо проверить наличие таблиц в базе asterisk:

mysql -u root -p
use asterisk;
show tables;

таблицы для realtime

Следующим шагом необходимо сконфигурировать ODBC. Сначала настраивается способ подключения ODBC к MySQL, для этого необходимо в файле /etc/odbcinst.ini прописать параметры драйвера MySQL (по-молчанию они могут быть уже прописаны)
pic9 (параметры ODBCinst)

Параметры ODBCinst

Далее необходимо указать ODBC какую базу данных использовать, для этого необходимо описать в файле /etc/odbc.ini секцию asterisk, внеся параметры:

[asterisk]
Driver = MySQL
Description = MySQL connection to ‘asterisk’ database
Server = localhost
Port = 3306
Database = asterisk
UserName = ast_user
Password = ast_password
Socket = /var/lib/mysql/mysql.sock
Параметры odbc.ini

Далее необходимо указать модулю res_odbc Asterisk, параметры подключения к базе через ODBC, для этого используется файл /etc/asterisk/res_odbc.conf

[asterisk]
enabled => yes
dsn => asterisk
max_connections => 1
username=>ast_user
password=>ast_password
database=>asterisk
Настройки res_odbc.conf

Далее необходимо запустить odbc в Asterisk, командой asterisk -rx „module reload res_odbc.so“

Просмотреть подключение ODBC в Asterisk можно командой odbc show all

Загрузка модуля ODBC в Asterisk

Для использования Астериском, базы данных для настройки PJSIP через реалтайм, необходимо прописать конструкцию вида {object_type} = {sorcery_wizard_name},{wizard_arguments},в файле /etc/asterisk/sorcery.conf для каждого типа объектов PJSIP.
Необходимо описать пять объектов:
– endpoint
– auth
– aor
– domain
– identify

Подробнее о PJSIP и объектах можно почитать в статье.

Возможно использовать оба механизма хранения параметров PJSIP (реалтайм и файл конфигурации), для этого в sorcery.conf прописываются два типа конфигурации в порядке их использования.

Пример наполнения файла sorcery.conf для использования realtime:
[res_pjsip] ; Realtime PJSIP configuration wizard

endpoint=realtime,ps_endpoints
auth=realtime,ps_auths
aor=realtime,ps_aors
domain_alias=realtime,ps_domain_aliases
contact=realtime,ps_contacts
[res_pjsip_endpoint_identifier_ip]
identify=realtime,ps_endpoint_id_ips

Пример использования двух параметров с приоритетом realtime:

 auth=realtime,ps_auths
 auth=config,pjsip.conf,criteria=type=aor

После того как связали объекты PJSIP с базой данных, необходимо указать Asterisk использовать базу данных вместо конфигурационного файла. Для этого необходимо модифицировать файл /etc/asterisk/extconfig.conf, добавив в него строки:
[settings]

ps_endpoints => odbc,asterisk
ps_auths => odbc,asterisk
ps_aors => odbc,asterisk
ps_domain_aliases => odbc,asterisk
ps_endpoint_id_ips => odbc,asterisk
ps_contacts => odbc,asterisk
/etc/asterisk/extconfig.conf
Обратите внимание что в рамках данной статьи не все объекты PJSIP описаны через реалтайм, например transport необходимо будет описать в стандартном виде через pjsip.conf

Описание объекта transport-udp в файле pjsip.conf (если используется чистая установка Asterisk, данную секцию можно найти в файле и раскоментировать)

 [transport-udp]
type=transport
protocol=udp
bind=0.0.0.0

В следующем примере показано как завести два внутренних номера через realtime.

Для этого необходимо звнести в базу asterisk следующие параметры:
– в таблицу ps_aors: id — внутренний номер и max_connects — колличество одновременных подключений;

– в таблицу ps_auth: id — внутренний номер, auth_type — тип авторизации, password — пароль и username — внутренний номер;

– в таблицу ps_endpoints:   id — внутренний номер, transport — в данном случае секция описанная в файле pjsip.conf, aors — соответсвующий id из таблицы ps_aors, auth — соответсвующий id из таблицы ps_auth, context — используемый контекст, например, from-internal, disallow — запрещаемые кодеки (обычно all), allow — разрешаемые кодеки, direct_media — разрешить/запретить прямую передачу голоса.

Пример заведения двух внутренних номеров 7001 и 7002 через realtime.
Залогиниться в базу и выполнить следующие команды:

INSERT INTO ps_aors (id, max_contacts) VALUES (7001, 1);
INSERT INTO ps_aors (id, max_contacts) VALUES (7002, 1);
INSERT INTO ps_auths (id, auth_type, password, username) VALUES (7001, 'userpass', 'Qwerty123', 7001);
INSERT INTO ps_auths (id, auth_type, password, username) VALUES (7002, 'userpass', 'Qwerty123', 7002);
INSERT INTO ps_endpoints (id, transport, aors, auth, context, disallow, allow, direct_media) VALUES (7001, 'transport-udp', '7002', '7002', 'from-internal', 'all', 'alaw', 'no');
INSERT INTO ps_endpoints (id, transport, aors, auth, context, disallow, allow, direct_media) VALUES (7002, 'transport-udp', '7002', '7002', 'from-internal', 'all', 'alaw', 'no');
В данном примере указаны минимально необходимые параемтры, если посмотреть на количество полей каждой таблицы — то видно что там их гораздо больше.

Обратите внимание, что при использовании realtime нет необходимости перезапускать Asterisk, для применения настроек при заведении новых номеров — все изменения автоматически будут приняты Asterisk`ом.

Для просмотра зарегистрировавшихся внутренних номеров можно воспользоваться командой: pjsip show endpoints, в примере приведенном на скриншоте ниже видно что номер 7001 прошел регистрацию успешно.

pjsip show endpoints

На этом минимальная настройка PJSIP через механизм realtime завершена.

 
avatar
  Подписаться  
Уведомление о

Остались вопросы?

Я - Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

Why Choose HUGE?

Unlimited pre-designed elements

Each and every design element is designed for retina ready display on all kind of devices

User friendly interface and design

Each and every design element is designed for retina ready display on all kind of devices

100% editable layered PSD files

Each and every design element is designed for retina ready display on all kind of devices

Created using shape layers

Each and every design element is designed for retina ready display on all kind of devices