Настройка 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.
Также необходимо отметить для установки в PBX Modules, подпункт 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
Далее необходимо перейти в директории с исходным кодом 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 -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 необходимо проверить наличие таблиц в базе asterisk:
mysql -u root -p
use asterisk;
show tables;
Следующим шагом необходимо
сконфигурировать ODBC. Сначала настраивается способ подключения ODBC к MySQL,
для этого необходимо в файле /etc/odbcinst.ini прописать
параметры драйвера MySQL (по-молчанию они могут быть уже прописаны)
pic9 (параметры 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
Далее необходимо указать модулю 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
Далее необходимо запустить odbc в Asterisk, командой asterisk -rx „module reload res_odbc.so“
Просмотреть подключение ODBC в Asterisk можно командой odbc show all
Для использования Астериском, базы данных для настройки PJSIP через реалтайм, необходимо прописать конструкцию вида {object_type} =
{sorcery_wizard_name},{wizard_arguments},в файле
/etc/asterisk/sorcery.conf для каждого типа объектов PJSIP.
Необходимо описать пять объектов:
— endpoint
— auth
— aor
— domain
— identify
Подробнее о PJSIP и объектах можно почитать в статье.
Пример наполнения файла 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
Описание объекта 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 через механизм realtime завершена.
Остались вопросы?
Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.
А что насчёт настроек транков? где и как описать секцию type=registration
Вместо python2 поставил python3, команда alembic не работает. Кто-то может подсказать, какую использовать вместо этого?
Присоединяюсь к вопросу, почему не разобрана настройка транка для realtime pjsip?
И где можно найти разбор?
а тут не опечатка случайно? в начале auth а в конце aor