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

Asterisk Realtime SIP

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

Asterisk Realtime

Введение

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

Теперь создадим таблицу sipfriends в базе данных 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;
Таблица взята с официального документации в директории с исходниками асткриска в моем случае /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 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

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

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