Я понимаю, что SIP устарел в пользу PJSIP, но задача была именно SIP в реалтайме.
В Астериске должны присутствовать модули res_odbc.so и res_config_odbc, в системе должны быть unixODBC и mysql-connector-odbc ( или другой, если используется PG или еще что-то другое).
Итого - заходим в консоль MySQL, создаем базу для asterisk:
create database asterisk;
grant all privileges on asterisk.* to asterisk@localhost identified by 'PASSWORD';
Заливаем туда таблицу для SIP-
CREATE TABLE `sip_peers` (
`id` int(11) NOT NULL auto_increment,
`accountcode` varchar(20) default NULL,
`disallow` varchar(100) default 'all',
`allow` varchar(100) default 'g729;ilbc;gsm;ulaw;alaw',
`allowoverlap` enum('yes','no') default 'yes',
`allowsubscribe` enum('yes','no') default 'yes',
`allowtransfer` varchar(3) default NULL,
`amaflags` varchar(13) default NULL,
`autoframing` varchar(3) default NULL,
`auth` varchar(40) default NULL,
`buggymwi` enum('yes','no') default 'no',
`callgroup` varchar(10) default NULL,
`callerid` varchar(80) default NULL,
`cid_number` varchar(40) default NULL,
`fullname` varchar(40) default NULL,
`call-limit` int(8) default 0,
`callingpres` varchar(80) default NULL,
`canreinvite` char(6) default 'yes',
`context` varchar(80) default NULL,
`callbackextension` varchar(80) default NULL,
`defaultip` varchar(15) default NULL,
`dtmfmode` varchar(7) default NULL,
`fromuser` varchar(80) default NULL,
`fromdomain` varchar(80) default NULL,
`fullcontact` varchar(80) default NULL,
`g726nonstandard` enum('yes','no') default 'no',
`host` varchar(31) NOT NULL default '',
`insecure` varchar(20) default NULL,
`ipaddr` varchar(15) NOT NULL default '',
`language` char(2) default NULL,
`lastms` varchar(20) default NULL,
`mailbox` varchar(50) default NULL,
`maxcallbitrate` int(8) default 384,
`mohsuggest` varchar(80) default NULL,
`md5secret` varchar(80) default NULL,
`musiconhold` varchar(100) default NULL,
`name` varchar(80) NOT NULL default '',
`nat` varchar(5) NOT NULL default 'no',
`outboundproxy` varchar(80) default NULL,
`deny` varchar(95) default NULL,
`permit` varchar(95) default NULL,
`pickupgroup` varchar(10) default NULL,
`port` varchar(5) NOT NULL default '',
`progressinband` enum('yes','no','never') default 'no',
`promiscredir` enum('yes','no') default 'no',
`qualify` char(3) default NULL,
`regexten` varchar(80) NOT NULL default '',
`regseconds` int(11) NOT NULL default '0',
`rfc2833compensate` enum('yes','no') default 'no',
`rtptimeout` char(3) default NULL,
`rtpholdtimeout` char(3) default NULL,
`secret` varchar(80) default NULL,
`sendrpid` enum('yes','no') default 'yes',
`setvar` varchar(100) NOT NULL default '',
`subscribecontext` varchar(80) default NULL,
`subscribemwi` varchar(3) default NULL,
`t38pt_udptl` enum('yes','no') default 'no',
`trustrpid` enum('yes','no') default 'no',
`type` varchar(6) NOT NULL default 'friend',
`useclientcode` enum('yes','no') default 'no',
`username` varchar(80) NOT NULL default '',
`usereqphone` varchar(3) NOT NULL default 'no',
`videosupport` enum('yes','no') default 'yes',
`vmexten` varchar(80) default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `name_2` (`name`)
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
Выходим из консоли MySQL. Открываем /etc/odbcinst.ini и проверяем чтобы драйвер MySQL был включен. В моем случае в CentOS 7 это выглядит так-
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/libmyodbc5.so
Setup = /usr/lib/libodbcmyS.so
Driver64 = /usr/lib64/libmyodbc5.so
Setup64 = /usr/lib64/libodbcmyS.so
FileUsage = 1
Открываем /etc/odbc.ini и описываем в нем подключение к базе
[asterisk]
Driver=MySQL
SERVER=localhost
PORT=3306
DATABASE=asterisk
USER=asterisk
PASSWORD= PASSWORD
Далее, открываем /etc/asterisk/res_odbc.conf и опишем в нем подключение к ODBC ( в данном случае dsn- это название секции в odbc.ini, username и password прежние )
[sql]
enabled => yes
dsn => asterisk
username => asterisk
password => PASSWORD
pooling => no
pre-connect => yes
Следущим шагом настроим подключение конфигурации к ODBC. Открываем /etc/asterisk/extconfig.conf ( если у вас в системе валяется res_config_odbc.conf - удаляйте, он устарел).
[settings]
sipusers => odbc,sql,sip_peers
sippeers => odbc,sql,sip_peers
Здесь первое значение это драйвер ( mysql или odbc), второе- название подключения в res_odbc.conf, третье- название таблицы в базе.
Теперь осталось включить конфигурацию. Откроем /etc/asterisk.modules.conf. Ищем строчки ( если их нет - пишем )
preload = res_odbc.so
preload = res_config_odbc.so
Заходим в консоль Asterisk и передергиваем модули
module unload res_config_odbc.so
module unload res_odbc.so
module load res_odbc.so
module load res_config_odbc.so
Если не ругнулось - проверяем
CLI> odbc show all
ODBC DSN Settings
-----------------
Name: sql
DSN: asterisk
Last connection attempt: 1969-12-31 18:00:00
Pooled: No
Connected: Yes
Последняя строчка говорит что все нормально, есть подключение.
На всякий случай передергиваем SIP
sip reload
Если не ругнулось на неправильно настроенный realtime- значит все нормально.
После этого можно заводить SIP-учетки в базе, к примеру так ( в консоли MySQL)-
INSERT INTO asterisk.sip_peers ( NAME, username, secret, context, HOST, nat, qualify, TYPE) VALUES ('1001', '1001', 'USERPASSWORD', 'USERCONTEXT', 'dynamic', 'yes', 'no', 'friend');
Реалтайм-абоненты в sip show peers не отображаются. Единственный известный мне способ вытащить их на свет это внести в sip.conf в секцию general строчку
rtcachefriends=yes
После первого подключения телефона он появится в списке SIP-пиров.
В Астериске должны присутствовать модули res_odbc.so и res_config_odbc, в системе должны быть unixODBC и mysql-connector-odbc ( или другой, если используется PG или еще что-то другое).
Итого - заходим в консоль MySQL, создаем базу для asterisk:
create database asterisk;
grant all privileges on asterisk.* to asterisk@localhost identified by 'PASSWORD';
Заливаем туда таблицу для SIP-
CREATE TABLE `sip_peers` (
`id` int(11) NOT NULL auto_increment,
`accountcode` varchar(20) default NULL,
`disallow` varchar(100) default 'all',
`allow` varchar(100) default 'g729;ilbc;gsm;ulaw;alaw',
`allowoverlap` enum('yes','no') default 'yes',
`allowsubscribe` enum('yes','no') default 'yes',
`allowtransfer` varchar(3) default NULL,
`amaflags` varchar(13) default NULL,
`autoframing` varchar(3) default NULL,
`auth` varchar(40) default NULL,
`buggymwi` enum('yes','no') default 'no',
`callgroup` varchar(10) default NULL,
`callerid` varchar(80) default NULL,
`cid_number` varchar(40) default NULL,
`fullname` varchar(40) default NULL,
`call-limit` int(8) default 0,
`callingpres` varchar(80) default NULL,
`canreinvite` char(6) default 'yes',
`context` varchar(80) default NULL,
`callbackextension` varchar(80) default NULL,
`defaultip` varchar(15) default NULL,
`dtmfmode` varchar(7) default NULL,
`fromuser` varchar(80) default NULL,
`fromdomain` varchar(80) default NULL,
`fullcontact` varchar(80) default NULL,
`g726nonstandard` enum('yes','no') default 'no',
`host` varchar(31) NOT NULL default '',
`insecure` varchar(20) default NULL,
`ipaddr` varchar(15) NOT NULL default '',
`language` char(2) default NULL,
`lastms` varchar(20) default NULL,
`mailbox` varchar(50) default NULL,
`maxcallbitrate` int(8) default 384,
`mohsuggest` varchar(80) default NULL,
`md5secret` varchar(80) default NULL,
`musiconhold` varchar(100) default NULL,
`name` varchar(80) NOT NULL default '',
`nat` varchar(5) NOT NULL default 'no',
`outboundproxy` varchar(80) default NULL,
`deny` varchar(95) default NULL,
`permit` varchar(95) default NULL,
`pickupgroup` varchar(10) default NULL,
`port` varchar(5) NOT NULL default '',
`progressinband` enum('yes','no','never') default 'no',
`promiscredir` enum('yes','no') default 'no',
`qualify` char(3) default NULL,
`regexten` varchar(80) NOT NULL default '',
`regseconds` int(11) NOT NULL default '0',
`rfc2833compensate` enum('yes','no') default 'no',
`rtptimeout` char(3) default NULL,
`rtpholdtimeout` char(3) default NULL,
`secret` varchar(80) default NULL,
`sendrpid` enum('yes','no') default 'yes',
`setvar` varchar(100) NOT NULL default '',
`subscribecontext` varchar(80) default NULL,
`subscribemwi` varchar(3) default NULL,
`t38pt_udptl` enum('yes','no') default 'no',
`trustrpid` enum('yes','no') default 'no',
`type` varchar(6) NOT NULL default 'friend',
`useclientcode` enum('yes','no') default 'no',
`username` varchar(80) NOT NULL default '',
`usereqphone` varchar(3) NOT NULL default 'no',
`videosupport` enum('yes','no') default 'yes',
`vmexten` varchar(80) default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `name_2` (`name`)
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
Выходим из консоли MySQL. Открываем /etc/odbcinst.ini и проверяем чтобы драйвер MySQL был включен. В моем случае в CentOS 7 это выглядит так-
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/libmyodbc5.so
Setup = /usr/lib/libodbcmyS.so
Driver64 = /usr/lib64/libmyodbc5.so
Setup64 = /usr/lib64/libodbcmyS.so
FileUsage = 1
Открываем /etc/odbc.ini и описываем в нем подключение к базе
[asterisk]
Driver=MySQL
SERVER=localhost
PORT=3306
DATABASE=asterisk
USER=asterisk
PASSWORD= PASSWORD
Далее, открываем /etc/asterisk/res_odbc.conf и опишем в нем подключение к ODBC ( в данном случае dsn- это название секции в odbc.ini, username и password прежние )
[sql]
enabled => yes
dsn => asterisk
username => asterisk
password => PASSWORD
pooling => no
pre-connect => yes
Следущим шагом настроим подключение конфигурации к ODBC. Открываем /etc/asterisk/extconfig.conf ( если у вас в системе валяется res_config_odbc.conf - удаляйте, он устарел).
[settings]
sipusers => odbc,sql,sip_peers
sippeers => odbc,sql,sip_peers
Здесь первое значение это драйвер ( mysql или odbc), второе- название подключения в res_odbc.conf, третье- название таблицы в базе.
Теперь осталось включить конфигурацию. Откроем /etc/asterisk.modules.conf. Ищем строчки ( если их нет - пишем )
preload = res_odbc.so
preload = res_config_odbc.so
Заходим в консоль Asterisk и передергиваем модули
module unload res_config_odbc.so
module unload res_odbc.so
module load res_odbc.so
module load res_config_odbc.so
Если не ругнулось - проверяем
CLI> odbc show all
ODBC DSN Settings
-----------------
Name: sql
DSN: asterisk
Last connection attempt: 1969-12-31 18:00:00
Pooled: No
Connected: Yes
Последняя строчка говорит что все нормально, есть подключение.
На всякий случай передергиваем SIP
sip reload
Если не ругнулось на неправильно настроенный realtime- значит все нормально.
После этого можно заводить SIP-учетки в базе, к примеру так ( в консоли MySQL)-
INSERT INTO asterisk.sip_peers ( NAME, username, secret, context, HOST, nat, qualify, TYPE) VALUES ('1001', '1001', 'USERPASSWORD', 'USERCONTEXT', 'dynamic', 'yes', 'no', 'friend');
Реалтайм-абоненты в sip show peers не отображаются. Единственный известный мне способ вытащить их на свет это внести в sip.conf в секцию general строчку
rtcachefriends=yes
После первого подключения телефона он появится в списке SIP-пиров.
Пробовали вы таким образом iax транки настроить ?
ОтветитьУдалитьНе было нужды, но в сети куча подобных инструкций про IAX. Например - http://asterisk.ru/knowledgebase/Asterisk+Realtime+IAX ,
ОтветитьУдалитьК сожалению тупо не работает, в моем случае :(
УдалитьА что именно не работает? ODBC подключен, база создана, подключение конфига описано?
ОтветитьУдалитьТак вроде как все и настроено, и ошибок нет, но вот регистрация не проходит с другого астера. Вот тут я описал что сделал https://forum.asterisk.ru/viewtopic.php?f=5&t=7622&p=67730
УдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьFirm unload failed for res_odbc.so
ОтветитьУдалитькак быть ?