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

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

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

realtime для PJSIP

В рамках данной статьи будет  рассмотрена пошаговая настройка 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 завершена.

Подписаться
Уведомить о
guest
4 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Роман
Роман
29.04.2020 21:20

А что насчёт настроек транков? где и как описать секцию type=registration

Evhenii
Evhenii
10.09.2021 21:59

Вместо python2 поставил python3, команда alembic не работает. Кто-то может подсказать, какую использовать вместо этого?

Jesus
Jesus
23.09.2021 12:49

Присоединяюсь к вопросу, почему не разобрана настройка транка для realtime pjsip?
И где можно найти разбор?

Дмитрий
Дмитрий
14.03.2022 07:43
auth=config,pjsip.conf,criteria=type=aor

а тут не опечатка случайно? в начале auth а в конце aor

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

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

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


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

10 доводов в пользу Asterisk

Распространяется бесплатно.

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

Безопасен в использовании.

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

Надежен в эксплуатации.

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

Гибкий в настройке.

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

Имеет огромный функционал.

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

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

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

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

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

Снижает расходы на связь.

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