Дмитрий Рашевский
20.02.2019
1652

Asterisk Realtime SIP

Введение              В данной статье будет рассказано как настроить механизм астериска Realtime, заводить Realtime SIP пользователей, а также Realtime SIP транки с регистрацией и без регистрации. Настройка Asterisk Realtime Необходимо создать файл /etc/asterisk/extconfig.conf и добавить несколько параметров Создадим файл Внесем изменения, предварительно нажав клавишу «i» Рассмотрим подробнее данные значения sippeers — общее имя (family) для […]

Введение

             В данной статье будет рассказано как настроить механизм астериска Realtime, заводить Realtime SIP пользователей, а также Realtime SIP транки с регистрацией и без регистрации.

Все настройки проводятся в системе FreePBX 13.0.192.19, Asterisk 13.21.0 Centos 6.9,mysql  Ver 15.1 Distrib 10.1.33-MariaDB

Настройка Asterisk Realtime

Необходимо создать файл /etc/asterisk/extconfig.conf и добавить несколько параметров

Создадим файл

    vim /etc/asterisk/extconfig.conf   

Внесем изменения, предварительно нажав клавишу «i»

   [settings]   sippeers   => odbc,asteriskcdrdb,sipfriends  
Если вы читали статью Asterisk_queue_log то вам нужно будет добавить строку sippeers => odbc,asteriskcdrdb,sipfriends
Чтобы выйти из режима редактирования в редакторе vim используется клавиша «Esc» Сохраним конфигурацию и закроем файл комбинацией Shift+ZZ или :wq+Enter

Рассмотрим подробнее данные значения

sippeers — общее имя (family) для понимания для чего используется конфигурация

odbc — коннектор, через который астериск будет связан БД

asteriskcdrdb — db конфиг в /etc/asterisk/res_odbc_additional.conf

sipfriends – таблица с конфигурация

Таблица для SIP пиров и регистраций

Теперь создадим таблицу queue_log в базе данных asteriskcdrdb

CREATE TABLE IF NOT EXISTS `sipfriends` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(40) NOT NULL,
  `ipaddr` varchar(45) DEFAULT NULL,
  `port` int(11) DEFAULT NULL,
  `regseconds` int(11) DEFAULT NULL,
  `defaultuser` varchar(40) DEFAULT NULL,
  `fullcontact` varchar(80) DEFAULT NULL,
  `regserver` varchar(20) DEFAULT NULL,
  `useragent` varchar(20) DEFAULT NULL,
  `lastms` int(11) DEFAULT NULL,
  `host` varchar(40) DEFAULT NULL,
  `type` enum('friend','user','peer') DEFAULT NULL,
  `context` varchar(40) DEFAULT NULL,
  `permit` varchar(95) DEFAULT NULL,
  `deny` varchar(95) DEFAULT NULL,
  `secret` varchar(40) DEFAULT NULL,
  `md5secret` varchar(40) DEFAULT NULL,
  `remotesecret` varchar(40) DEFAULT NULL,
  `transport` enum('udp','tcp','tls','ws','wss','udp,tcp','tcp,udp') DEFAULT NULL,
  `dtmfmode` enum('rfc2833','info','shortinfo','inband','auto') DEFAULT NULL,
  `directmedia` enum('yes','no','nonat','update') DEFAULT NULL,
  `nat` varchar(29) DEFAULT NULL,
  `callgroup` varchar(40) DEFAULT NULL,
  `pickupgroup` varchar(40) DEFAULT NULL,
  `language` varchar(40) DEFAULT NULL,
  `disallow` varchar(200) DEFAULT NULL,
  `allow` varchar(200) DEFAULT NULL,
  `insecure` varchar(40) DEFAULT NULL,
  `trustrpid` enum('yes','no') DEFAULT NULL,
  `progressinband` enum('yes','no','never') DEFAULT NULL,
  `promiscredir` enum('yes','no') DEFAULT NULL,
  `useclientcode` enum('yes','no') DEFAULT NULL,
  `accountcode` varchar(40) DEFAULT NULL,
  `setvar` varchar(200) DEFAULT NULL,
  `callerid` varchar(40) DEFAULT NULL,
  `amaflags` varchar(40) DEFAULT NULL,
  `callcounter` enum('yes','no') DEFAULT NULL,
  `busylevel` int(11) DEFAULT NULL,
  `allowoverlap` enum('yes','no') DEFAULT NULL,
  `allowsubscribe` enum('yes','no') DEFAULT NULL,
  `videosupport` enum('yes','no') DEFAULT NULL,
  `maxcallbitrate` int(11) DEFAULT NULL,
  `rfc2833compensate` enum('yes','no') DEFAULT NULL,
  `mailbox` varchar(40) DEFAULT NULL,
  `session-timers` enum('accept','refuse','originate') DEFAULT NULL,
  `session-expires` int(11) DEFAULT NULL,
  `session-minse` int(11) DEFAULT NULL,
  `session-refresher` enum('uac','uas') DEFAULT NULL,
  `t38pt_usertpsource` varchar(40) DEFAULT NULL,
  `regexten` varchar(40) DEFAULT NULL,
  `fromdomain` varchar(40) DEFAULT NULL,
  `fromuser` varchar(40) DEFAULT NULL,
  `qualify` varchar(40) DEFAULT NULL,
  `defaultip` varchar(45) DEFAULT NULL,
  `rtptimeout` int(11) DEFAULT NULL,
  `rtpholdtimeout` int(11) DEFAULT NULL,
  `sendrpid` enum('yes','no') DEFAULT NULL,
  `outboundproxy` varchar(40) DEFAULT NULL,
  `callbackextension` varchar(40) DEFAULT NULL,
  `timert1` int(11) DEFAULT NULL,
  `timerb` int(11) DEFAULT NULL,
  `qualifyfreq` int(11) DEFAULT NULL,
  `constantssrc` enum('yes','no') DEFAULT NULL,
  `contactpermit` varchar(95) DEFAULT NULL,
  `contactdeny` varchar(95) DEFAULT NULL,
  `usereqphone` enum('yes','no') DEFAULT NULL,
  `textsupport` enum('yes','no') DEFAULT NULL,
  `faxdetect` enum('yes','no') DEFAULT NULL,
  `buggymwi` enum('yes','no') DEFAULT NULL,
  `auth` varchar(40) DEFAULT NULL,
  `fullname` varchar(40) DEFAULT NULL,
  `trunkname` varchar(40) DEFAULT NULL,
  `cid_number` varchar(40) DEFAULT NULL,
  `callingpres` enum('allowed_not_screened','allowed_passed_screen','allowed_failed_screen','allowed','prohib_not_screened','prohib_passed_screen','prohib_failed_screen','prohib') DEFAULT NULL,
  `mohinterpret` varchar(40) DEFAULT NULL,
  `mohsuggest` varchar(40) DEFAULT NULL,
  `parkinglot` varchar(40) DEFAULT NULL,
  `hasvoicemail` enum('yes','no') DEFAULT NULL,
  `subscribemwi` enum('yes','no') DEFAULT NULL,
  `vmexten` varchar(40) DEFAULT NULL,
  `autoframing` enum('yes','no') DEFAULT NULL,
  `rtpkeepalive` int(11) DEFAULT NULL,
  `call-limit` int(11) DEFAULT NULL,
  `g726nonstandard` enum('yes','no') DEFAULT NULL,
  `ignoresdpversion` enum('yes','no') DEFAULT NULL,
  `allowtransfer` enum('yes','no') DEFAULT NULL,
  `dynamic` enum('yes','no') DEFAULT NULL,
  `path` varchar(256) DEFAULT NULL,
  `supportpath` enum('yes','no') DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=cp1251 ROW_FORMAT=DYNAMIC; 
CREATE TABLE IF NOT EXISTS `sipfriends` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(40) NOT NULL,
  `ipaddr` varchar(45) DEFAULT NULL,
  `port` int(11) DEFAULT NULL,
  `regseconds` int(11) DEFAULT NULL,
  `defaultuser` varchar(40) DEFAULT NULL,
  `fullcontact` varchar(80) DEFAULT NULL,
  `regserver` varchar(20) DEFAULT NULL,
  `useragent` varchar(20) DEFAULT NULL,
  `lastms` int(11) DEFAULT NULL,
  `host` varchar(40) DEFAULT NULL,
  `type` enum('friend','user','peer') DEFAULT NULL,
  `context` varchar(40) DEFAULT NULL,
  `permit` varchar(95) DEFAULT NULL,
  `deny` varchar(95) DEFAULT NULL,
  `secret` varchar(40) DEFAULT NULL,
  `md5secret` varchar(40) DEFAULT NULL,
  `remotesecret` varchar(40) DEFAULT NULL,
  `transport` enum('udp','tcp','tls','ws','wss','udp,tcp','tcp,udp') DEFAULT NULL,
  `dtmfmode` enum('rfc2833','info','shortinfo','inband','auto') DEFAULT NULL,
  `directmedia` enum('yes','no','nonat','update') DEFAULT NULL,
  `nat` varchar(29) DEFAULT NULL,
  `callgroup` varchar(40) DEFAULT NULL,
  `pickupgroup` varchar(40) DEFAULT NULL,
  `language` varchar(40) DEFAULT NULL,
  `disallow` varchar(200) DEFAULT NULL,
  `allow` varchar(200) DEFAULT NULL,
  `insecure` varchar(40) DEFAULT NULL,
  `trustrpid` enum('yes','no') DEFAULT NULL,
  `progressinband` enum('yes','no','never') DEFAULT NULL,
  `promiscredir` enum('yes','no') DEFAULT NULL,
  `useclientcode` enum('yes','no') DEFAULT NULL,
  `accountcode` varchar(40) DEFAULT NULL,
  `setvar` varchar(200) DEFAULT NULL,
  `callerid` varchar(40) DEFAULT NULL,
  `amaflags` varchar(40) DEFAULT NULL,
  `callcounter` enum('yes','no') DEFAULT NULL,
  `busylevel` int(11) DEFAULT NULL,
  `allowoverlap` enum('yes','no') DEFAULT NULL,
  `allowsubscribe` enum('yes','no') DEFAULT NULL,
  `videosupport` enum('yes','no') DEFAULT NULL,
  `maxcallbitrate` int(11) DEFAULT NULL,
  `rfc2833compensate` enum('yes','no') DEFAULT NULL,
  `mailbox` varchar(40) DEFAULT NULL,
  `session-timers` enum('accept','refuse','originate') DEFAULT NULL,
  `session-expires` int(11) DEFAULT NULL,
  `session-minse` int(11) DEFAULT NULL,
  `session-refresher` enum('uac','uas') DEFAULT NULL,
  `t38pt_usertpsource` varchar(40) DEFAULT NULL,
  `regexten` varchar(40) DEFAULT NULL,
  `fromdomain` varchar(40) DEFAULT NULL,
  `fromuser` varchar(40) DEFAULT NULL,
  `qualify` varchar(40) DEFAULT NULL,
  `defaultip` varchar(45) DEFAULT NULL,
  `rtptimeout` int(11) DEFAULT NULL,
  `rtpholdtimeout` int(11) DEFAULT NULL,
  `sendrpid` enum('yes','no') DEFAULT NULL,
  `outboundproxy` varchar(40) DEFAULT NULL,
  `callbackextension` varchar(40) DEFAULT NULL,
  `timert1` int(11) DEFAULT NULL,
  `timerb` int(11) DEFAULT NULL,
  `qualifyfreq` int(11) DEFAULT NULL,
  `constantssrc` enum('yes','no') DEFAULT NULL,
  `contactpermit` varchar(95) DEFAULT NULL,
  `contactdeny` varchar(95) DEFAULT NULL,
  `usereqphone` enum('yes','no') DEFAULT NULL,
  `textsupport` enum('yes','no') DEFAULT NULL,
  `faxdetect` enum('yes','no') DEFAULT NULL,
  `buggymwi` enum('yes','no') DEFAULT NULL,
  `auth` varchar(40) DEFAULT NULL,
  `fullname` varchar(40) DEFAULT NULL,
  `trunkname` varchar(40) DEFAULT NULL,
  `cid_number` varchar(40) DEFAULT NULL,
  `callingpres` enum('allowed_not_screened','allowed_passed_screen','allowed_failed_screen','allowed','prohib_not_screened','prohib_passed_screen','prohib_failed_screen','prohib') DEFAULT NULL,
  `mohinterpret` varchar(40) DEFAULT NULL,
  `mohsuggest` varchar(40) DEFAULT NULL,
  `parkinglot` varchar(40) DEFAULT NULL,
  `hasvoicemail` enum('yes','no') DEFAULT NULL,
  `subscribemwi` enum('yes','no') DEFAULT NULL,
  `vmexten` varchar(40) DEFAULT NULL,
  `autoframing` enum('yes','no') DEFAULT NULL,
  `rtpkeepalive` int(11) DEFAULT NULL,
  `call-limit` int(11) DEFAULT NULL,
  `g726nonstandard` enum('yes','no') DEFAULT NULL,
  `ignoresdpversion` enum('yes','no') DEFAULT NULL,
  `allowtransfer` enum('yes','no') DEFAULT NULL,
  `dynamic` enum('yes','no') DEFAULT NULL,
  `path` varchar(256) DEFAULT NULL,
  `supportpath` enum('yes','no') DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=cp1251 ROW_FORMAT=DYNAMIC; 
Таблица взята с официального документации в директории с исходниками асткриска в моем случае /usr/src/asterisk-13.21.0/contrib/realtime/mysql/mysql_config.sql

Заведение Пользователей и Транков

Для заведения пользователей на астериске необходимо в консоле mysql ввести следующее

   insert into sipfriends   (`deny`, `permit`, `name`, `port`, `regseconds`, `defaultuser`, `host`,   `type`, `context`, `secret`, `transport`, `dtmfmode`, `directmedia`, `nat`,   `allow`, `disallow`, `qualify`, `qualifyfreq`, `call-limit`, `dynamic`)   VALUES('0.0.0.0/0.0.0.0', '0.0.0.0/0.0.0.0', '106', '5060', 1800, '106',   'dynamic', 'friend', 'from-internal', '106', 'udp', 'rfc2833', 'yes', 'yes',   'alaw;ulaw', 'all', 'yes', 60, 5, 'yes');   

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

name – имя пользователя

defaultuser – указываются аутентификационные данные для регистрации

regexten – указывается extension при регистрации.

port – порт для регистрации этого пользователя

host – указываем dynamic. Т.к. данный пир может регистрироваться с разных источников

type – указывается тип экстеншена (только для входщих, только для исходящих, ито и другое), для указываем friend

context – указывается контекст, в котором будут обрабатываться звонки с этого номера

deny – указываются сети, которые будут запрещены.

По стандарту указывается „0.0.0.0/0.0.0.0“

permit – Указываеются сети, с которых разрешено подключаться

Если сотрудник удаленный и у него динамический IP адрес указываете „0.0.0.0/0.0.0.0“. Для безопасности воспользуйтесь нашей статьей (https://voxlink.ru/kb/asterisk-configuration/connect_sipclients_in_Asterisk/)

secret – указывается пароль экстеншена для регистрации

allow – указываются разрешенные кодеки

disallow – указываем кодеки, которые запрещены

По стандарту в параметре disallow указывается значение all

Также необходимо указать параметр dynamic – указывается, если пользователь динамический. Выставляем в значение yes“.

Для заведения Транка, также в консоле mysql вводим следующее:

   insert into sipfriends   (`name`, `ipaddr`, `port`, `regseconds`, `defaultuser`, `regserver`, `host`,   `type`, `context`, `secret`, `transport`, `dtmfmode`, `directmedia`, `nat`,   `allow`, `disallow`, `insecure`, `fromdomain`, `fromuser`, `qualify`,   `callbackextension`, `qualifyfreq`, `auth`, `trunkname`, `call-limit`)   VALUES('YOUR_PROVIDERS_LOGIN',   '1PROVIDERS_HOST',   '5060', 1800, 'YOUR_PROVIDERS_LOGIN',   'PROVIDERS_HOST', 'PROVIDERS_HOST', 'peer',   'from-trunk', 'PROVIDERS_SECRET',   'udp', 'rfc2833', 'yes', 'yes', 'alaw;ulaw', 'all', 'port,invite', 'PROVIDERS_HOST',   '74954781025', 'yes', 'EXTENSION_FOR   INBOUND_CALLS', 60, 'YOUR_PROVIDERS_LOGIN:PROVIDERS_SECRET@PROVIDERS_HOST', 'TRUNK_NAME', 5);   

Для настроек транка необходимо указать следующие параметры

name – имя экстеншена

port – порт для приема SIP сообщений

regserver – хост регистрации у оператора (IP адрес или доменное имя)

host – хост оператора (IP адрес или доменное имя)

type – указывается тип экстеншена (только для входщих, только для исходящих, ито и другое), для указываем peer

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

secret – указываем, пароль, который вам прислал оператор связи

insecure – разрешаем проверку пира по соответствию ip адреса и порта (занчение port,invite)

allow — указываются разрешенные кодеки

disallow — указываем кодеки, которые запрещены

fromdomain – указывается хост провайдера. Значение подставляется в поле From

fromuser – указывается логин который предоставляет оператор связи

callbackextension – указывается экстеншн, на который будет приходить вызов.

trunkname – указываем имя транка

auth – указывается регистрационная строка в формате <user>:<secret>@<realm>

dynamic — указывается, если пользователь динамический. Выставляем в значение „no“.

Проверим заведенных пользователей. Для этого нам помогут команды sip show peers и sip show registry.

При выводе подключенных пиров для пользователей Realtime появляется дополнительная секция Realtime. Для заведенных пользователей через RT добавляется запись Cached RT

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

  • realtime load <family> <col_name> <peer>

Отображает не нулевую информацию по заведенному realtime пиру.

Аналогично Mysql команде select * from sipfriends where &lt;col_name> = &lt;peer>
  • realtime destroy <family> <col_name> <peer>

Удаляет заведенный ранее realtime пир

Аналогично Mysql команде delete from sipfriends where &lt;col_name> = &lt;peer>
  • realtime store <family> <col_name1> <data1> [<col_name2> <data2> [… <col_name5> <data5>]]

Заведение нового realtime пира в указанной ранее таблице.

При заведении пира необходимо указать необходимы поля для заполнения. В созданной nаблице они показаны NOT NULL. Чтобы посмотреть какие это поля в консоле mysql выберите базу, где у вас хранится ваша таблица с пирами и введите команду show create table sipfriends.
После заведения пользователя можно добавить информацию по нему через команду <strong>realtime update</strong>
Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments

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

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

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

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

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

ONLINE

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