четверг, 29 ноября 2012 г.

Asterisk Realtime sip.conf

Создание базы данных


заходим в базу данных mysql

  mysql -u root -p
 
создаем базу данных с именем 'asteriskrealtime'

 create database if not exists `asteriskrealtime`;
 
изменяем базу данных asteriskrealtime :

 use asteriskrealtime;
 
создадим таблицу sip_buddies в которой будем хранить записи наших пользователей:



 CREATE TABLE `sip_buddies` (
   `id` int(11) NOT NULL auto_increment,
   `name` varchar(80) NOT NULL,
   `callerid` varchar(80) default NULL,
   `defaultuser` varchar(80) NOT NULL,
   `regexten` varchar(80) NOT NULL,
   `secret` varchar(80) default NULL,
   `accountcode` varchar(20) default NULL,
   `context` varchar(80) default NULL,
   `amaflags` varchar(7) default NULL,
   `callgroup` varchar(10) default NULL,
   `canreinvite` char(3) default 'yes',
   `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,
   `host` varchar(31) NOT NULL,
   `insecure` varchar(4) default NULL,
   `language` char(2) default NULL,
   `mailbox` varchar(50) default NULL,
   `md5secret` varchar(80) default NULL,
   `nat` varchar(5) NOT NULL default 'no',
   `deny` varchar(95) default NULL,
   `permit` varchar(95) default NULL,
   `mask` varchar(95) default NULL,
   `pickupgroup` varchar(10) default NULL,
   `port` varchar(5) NOT NULL,
   `qualify` char(3) default NULL,
   `restrictcid` char(1) default NULL,
   `rtptimeout` char(3) default NULL,
   `rtpholdtimeout` char(3) default NULL,
   `type` varchar(6) NOT NULL default 'friend',
   `disallow` varchar(100) default 'all',
   `allow` varchar(100) default 'g729;ilbc;gsm;ulaw;alaw',
   `musiconhold` varchar(100) default NULL,
   `regseconds` int(11) NOT NULL default '0',
   `ipaddr` varchar(15) NOT NULL,
   `cancallforward` char(3) default 'yes',
   `lastms` int(11) NOT NULL,
   `useragent` char(255) default NULL,
   `regserver` varchar(100) default NULL,
   PRIMARY KEY  (`id`),
   UNIQUE KEY `name` (`name`),
   KEY `name_2` (`name`)
 ) ENGINE=MyISAM AUTO_INCREMENT=890 DEFAULT CHARSET=latin1;
 

Перейдем к конфигурированию asterisk 

 создадим в файле /etc/asterisk/res_mysql.conf следующую запись:
 [general]
 dbhost = 127.0.0.1
 dbname = asteriskrealtime
 dbuser = root
 dbpass = password
 dbport = 3306

в файле extconfig.conf, создадим запись приведенную ниже:
 [settings]
 sippeers => mysql,general,sip_buddies

проверяем подключился ли asterisk к базе данных mysql
 
 asterisk -r
asterisk*CLI> realtime mysql status 

должно появиться примерно такое сообщение

general connected to asteriskrealtime@127.0.0.1, port 3306 with username root for 2 days, 17 hours.

Создание sip пользователей в базе данных

создадим первые два пира в базе данных подключаемся к базе и вводим пароль

 mysql -u root -p
 password 
 use asteriskrealtime;

заведем peer с номерами 100, 200 и паролем paSsWoRDmysql в таблицу sip_buddies table:


 INSERT INTO asteriskrealtime.sip_buddies (
 NAME, defaultuser, secret, context, HOST, nat, qualify, TYPE)
 VALUES  (
 '100', '100', 'paSsWoRDmysql', 'from-sip', 'dynamic', 'yes', 'no', 'friend');
 
 
INSERT INTO asteriskrealtime.sip_buddies (
 NAME, defaultuser, secret, context, HOST, nat, qualify, TYPE)
 VALUES (
 '200', '200', 'paSsWoRDmysql', 'from-sip', 'dynamic', 'yes', 'no', 'friend'); 



Снова перейдем к конфигурированию asterisk. Создадим контекст "from-sip" открываем /etc/asterisk/extensions.conf

[from-sip]
exten => 100,1,Dial(SIP/100)
exten => 200,1,Dial(SIP/200)
exten => 100,n,Hangup()
exten => 200,n,Hangup()

перезагружаем dialplan
 
 asterisk -r
asterisk*CLI> dialplan reload
 
 
Настраиваем два пира в X-lite и пробуем совершить звонки

P.S недавно понадобилось подключить еще один asterisk  к этой базе данных и при подключении на удаленном астреиске получал ошибку
[2013-06-25 00:28:38] ERROR[2426]: res_config_mysql.c:1598 mysql_reconnect: MySQL RealTime: Failed to connect database server asteriskrealtime on 192.168.1.34 (err 2003). Check debug for more info.

для решения этой проблемы нужно на сервере с установленным mysql в файле  /etc/mysql/my.cnf
прописать реальный ip
port = 3306
#skip-networking
bind-address = 127.0.0.1
bind-address = 192.168.1.34 

теперь нам нужно будет разрешить каким пользователям и с каких ip адресов можно подключаться к базе mysql
заходим
mysql -p
 для подключения локального asterisk

GRANT ALL PRIVILEGES ON asteriskrealtime.sip_buddies TO root@192.168.1.34 IDENTIFIED BY 'password';

для подключения удаленного asterisk

GRANT ALL PRIVILEGES ON asteriskrealtime.sip_buddies TO root@192.168.1.94 IDENTIFIED BY 'password';

так же в /etc/asterisk/res_config_mysql.conf меняем ip c 127.0.0.1 на 192.168.1.34

1 комментарий:

  1. Спасибо! Отличная статья, но есть пара неточностей.
    В этой строке есть ошибка, написано
    "создадим в файле /etc/asterisk/res_mysql.conf следующую запись: "
    а должно быть
    " создадим в файле /etc/asterisk/res_config_mysql.conf следующую запись: "

    При том что я делал все по туториалу у меня вот эта ошибка возникала даже с одной локальной базой
    [2013-06-25 00:28:38] ERROR[2426]: res_config_mysql.c:1598 mysql_reconnect: MySQL RealTime: Failed to connect database server asteriskrealtime on 192.168.1.34 (err 2003). Check debug for more info.
    но решение указанное тут (прописать реальный ай пи) мне помогло. И мне самой интересно почему.

    ОтветитьУдалить