Escolar Documentos
Profissional Documentos
Cultura Documentos
REALTIME E TRUNK
Autor: Ulisses Cantanhede dos Santos <ulisses.santos at gmail.com>
Data: 19/07/2010
ASTERISK REALTIME E TRUNK
Passo 1 Instalar Apache, PHP e MySQL (sintaxe para Debian):
# aptitude install apache2 php5 mysqlserver5.0 mysql client
php5mysql libapache2modphp5
Passo 2 Instalar as bibliotecas de programação e desenvolvimento para o Debian, como GCC
(compilador C e C++) e a biblioteca MySQL.
Instalação do GCC (GNU Compiler Collection chamado usualmente por GCC, é um conjunto de
compiladores de linguagens de programação produzido pelo projeto GNU), se dá pelo seguinte
comando:
# aptitude install gcc g++ g++4.1 libmysqlclient15dev
# aptitude install libeditdev libedit2 libssldev zlibbin
zlib1gdev mpg123 libnewt0.52 newttcl libnewtdev build
essential perl
Passo 3 Instalar o Asterisk e seus pacotes, sendo esta a ferramenta principal escolhida para o
funcionamento do projeto em VoIP. Criar o diretório Asterisk para armazenamento dos pacotes
necessário do Asterisk:
# mkdir p /usr/src/asterisk
Baixando os pacotes no diretório /usr/src/asterisk. Antes utilizaremos o comando cd para acessar o
diretório:
# cd /usr/src/asterisk/
Baixando os pacotes:
asterisk1.4.26.2.tar.gz contém aplicações, funções, canais de comunicação e todas as
funcionalidades que formam o Asterisk.
# wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk1.4.26.2.tar.gz
(http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk1.4.26.2.tar.gz)
asteriskaddons1.4.9.tar.gz são os módulos adicionais, todas as aplicações e funcionalidades que
não seguem a licença GPL, como funções de conectividade com os bancos de dados, formato de
áudio MP3 e canal de comunicação H.323.
# wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asteriskaddons1.4.9.tar.gz
(http://downloads.asterisk.org/pub/telephony/asterisk/releases/asteriskaddons1.4.9.tar.gz)
Descompactar os pacotes:
# tar xvvf asterisk1.4.26.2.tar.gz
LibPri Biblioteca responsável pela sinalização ISDN/PRI, só precisa ser compilado e instalado em
caso de uso de placa E1/T1.
DAHDI (antigo Zaptel) Contém drivers para placas de comunicação da Digium ou seus clones. Em
2008, o DAHDI substituiu por problema com patente pelo nome Zaptel.
Passo 4 Instalar o Asterisk
Após o processo de descompactação do Asterisk será criado o diretório Asterisk1.4.26.2, acesse
esse diretório com o comando cd e siga os passos seguintes.
# cd asterisk1.4.26.2
# ./configure
# make
# make install
# make samples
Instalar módulos adicionais com funções que não seguem a licença GPL, como exemplo: MySQL,
protocolo H323 e MP3 para áudio.
Antes precisaremos descompactar os módulos:
# cd /usr/src/asterisk/
# tar xvvf asteriskaddons1.4.9.tar.gz
Instalando os módulos:
# ./configure
# make
# make install
# make samples
Passo 5 Instalar o aplicativo PhPMyAdmin para gerenciamento do MySQL e criação do banco de
ramais para controle de bilhetes. O PhPMyAdmin é um aplicativo que será utilizado via web.
# aptitude install phpmyadmin
Acessando o browser para configurar o Phpmyadmin para gerenciamento do Asterisk.
Abra uma nova pagina web entre com endereço IP conforme abaixo:
http://10.1.1.4/phpmyadmin/
Entre com o usuário root e senha predefinida na instalação do MySQL (senha: Asterisk).
Após criar o banco de dados asterisk com a senha de root "asterisk", criar as tabelas no MySQL.
Criar a tabela CDR (Call Detail Record), execute os comandos abaixo na janela do SQL: CDRs são
arquivos para controle de tarifação e bilhetagem.
Estrutura da tabela cdr:
CREATE TABLE IF NOT EXISTS `cdr` (
`id` int(5) NOT NULL auto_increment,
`calldate` datetime NOT NULL default '00000000 00:00:00',
`clid` varchar(80) NOT NULL default '',
`src` varchar(80) NOT NULL default '',
`dst` varchar(80) NOT NULL default '',
`dcontext` varchar(80) NOT NULL default '',
`channel` varchar(80) NOT NULL default '',
`dstchannel` varchar(80) NOT NULL default '',
`lastapp` varchar(80) NOT NULL default '',
`lastdata` varchar(80) NOT NULL default '',
`duration` int(11) NOT NULL default '0',
`billsec` int(11) NOT NULL default '0',
`disposition` varchar(45) NOT NULL default '',
`amaflags` int(11) NOT NULL default '0',
`accountcode` varchar(20) NOT NULL default '',
`uniqueid` varchar(32) NOT NULL default '',
`userfield` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=27950;
Criar a tabela Config_SIP para o funcionamento do SIP com controle do tempo de chamadas.
Estrutura da tabela "config_sip":
CREATE TABLE IF NOT EXISTS `config_sip` (
`id` int(11) NOT NULL auto_increment,
`cat_metric` int(11) NOT NULL default '0',
`var_metric` int(11) NOT NULL default '0',
`commented` int(11) NOT NULL default '0',
`filename` varchar(128) NOT NULL default '',
`category` varchar(128) NOT NULL default 'default',
`var_name` varchar(128) NOT NULL default '',
`var_val` varchar(128) NOT NULL default '',
PRIMARY KEY (`id`),
KEY `filename_comment` (`filename`,`commented`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=148;
Adicionar valores aos campos da tabela config_sip para o funcionamento do SIP:
INSERT INTO `config_sip` (`id`, `cat_metric`, `var_metric`, `commented`, `filename`, `category`,
`var_name`, `var_val`) VALUES (126, 0, 0, 0, 'sip.conf', 'general', 'port', '5060'), (127, 0, 1, 0,
'sip.conf', 'general', 'bindaddr', '0.0.0.0'), (128, 0, 2, 0, 'sip.conf', 'general', 'context', 'default'),
(129, 0, 3, 0, 'sip.conf', 'general', 'disallow', 'all'), (130, 0, 4, 0, 'sip.conf', 'general', 'allowgest',
'no'), (131, 0, 5, 0, 'sip.conf', 'general', 'videosupport', 'yes'), (132, 0, 6, 0, 'sip.conf', 'general',
'nat', 'yes'), (133, 0, 7, 0, 'sip.conf', 'general', 'externip', '0.0.0.0'), (134, 0, 8, 0, 'sip.conf',
'general', 'LOCALNET', '0.0.0.0/0.0.0.0'), (135, 0, 9, 0, 'sip.conf', 'general', 'pedantic', 'no'), (136,
0, 10, 0, 'sip.conf', 'general', 'rtcachefriends', 'no'), (137, 0, 11, 0, 'sip.conf', 'general',
'echocancel', 'yes'), (138, 0, 12, 0, 'sip.conf', 'general', 'language', 'br');
Criar tabela de ramais sip_buddies, para cadastro e gerenciamento de ramais.
Estrutura da tabela "sip_buddies":
CREATE TABLE IF NOT EXISTS `sip_buddies` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(80) NOT NULL default '',
`accountcode` varchar(20) default NULL,
`amaflags` varchar(7) default NULL,
`callgroup` varchar(10) default '1',
`callerid` varchar(80) default NULL,
`canreinvite` char(3) default 'no',
`context` varchar(80) default 'default',
`defaultip` varchar(15) default NULL,
`dtmfmode` varchar(7) default 'rfc2833',
`fromuser` varchar(80) default NULL,
`fromdomain` varchar(80) default NULL,
`fullcontact` varchar(80) default NULL,
`host` varchar(31) default 'dynamic',
`insecure` varchar(4) default NULL,
`language` char(2) default NULL,
`mailbox` varchar(50) default NULL,
`md5secret` varchar(80) default NULL,
`nat` varchar(5) default 'yes',
`deny` varchar(95) default NULL,
`permit` varchar(95) default NULL,
`mask` varchar(95) default NULL,
`pickupgroup` varchar(10) default '1',
`port` varchar(5) NOT NULL default '',
`qualify` char(3) default NULL,
`restrictcid` char(1) default NULL,
`rtptimeout` char(3) default NULL,
`rtpholdtimeout` char(3) default NULL,
`secret` varchar(80) default NULL,
`type` varchar(6) NOT NULL default 'friend',
`username` varchar(80) NOT NULL default '',
`disallow` varchar(100) default 'all',
`allow` varchar(100) default 'gsm;ulaw;alaw',
`musiconhold` varchar(100) default NULL,
`regseconds` int(11) NOT NULL default '0',
`ipaddr` varchar(15) default NULL,
`regexten` varchar(80) default NULL,
`cancallforward` char(3) default 'yes',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `name_2` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=FIXED
AUTO_INCREMENT=96;
Passo 6 Configurar o arquivo cdr_mysql.conf
Este arquivo é responsável por conectar a tabela CDR do Asterisk ao banco de dados MySQL para
arquivamentos de todos as chamadas com seu tempo de duração, ramal de origem e ramal de
destino, quantidade de tentativas, chamadas executadas, entre outros.
Acessar o diretório /etc/asterisk (este diretório foi criando automaticamente na instalação do Asterisk)
e entrar com os comandos abaixo:
# cd /etc/asterisk/
Note que agora utilizaremos o aplicativo VIM instalado no início do processo de instalação do
Asterisk com o comando abaixo:
# vi cdr_mysql.conf
Será aberta uma janela de edição no modo vim, onde será necessário alterálo para que fique da
seguinte forma:
[global]
hostname=localhost
dbname=asterisk
table=cdr
password=asterisk
user=root
port=3306
sock=/var/run/mysqld/mysqld.sock
userfield=1
Passo 7 Configurar o arquivo extconfig.conf
Este arquivo faz um link dinâmico ao banco MySQL. Editar o arquivo extconfig.conf:
# vi extconfig.conf
A janela de modo de edição vim abrirá para edição do arquivo extconfig.conf. Adicione as linhas
abaixo no final do arquivo.
sipusers => mysql,Asterisk,sip_buddies
sippeers => mysql,Asterisk,sip_buddies
sip.conf => mysql,Asterisk,config_sip
Passo 8 Configurar o arquivo extension.conf
Este arquivo é responsável pelo plano de discagem do Asterisk.
Deletar arquivo atual extesions.conf:
# rm f extesions.conf
Crie o arquivo extesions.conf:
# vi extensions.conf
Adicione todo o conteúdo abaixo no novo arquivo extensions.conf:
[general]
static=yes
writeprotect=no
priorityjumping=no
autofallthrough=yes
clearglobalvars=no
[globals]
[default]
exten => _3XX,1,Dial(SIP/${EXTEN},20,tT)
exten => _3XX,n,Hangup()
Passo 9 Editar o arquivo res_mysql.conf
Arquivo responsável por conectar o Asterisk ao banco MySQL. Edite o arquivo com o comando "vi" e
adicione as linhas abaixo:
Editar o arquivo res_mysql.conf:
# vi res_mysql.conf
Editando o arquivo res_mysql.conf, adicionado as linhas para conexão com o banco de dados:
[general]
dbhost = localhost
dbname = asterisk
dbuser = root
dbpass = asterisk
dbport = 3306
dbsock = /var/run/mysqld/mysqld.sock
Passo 10 Criar ramais no banco MySQL utilizando a aplicação phpmayadmin.
Na página http://10.1.1.4/phpmyadmin, selecionar o banco Asterisk.
Selecione a tabela sip_buddies.
Preencher os campos Name, Context, Secret, Type e Username.
Name = Número do ramal.
Context = Contexto do plano de discagem. Preencher com default.
Secret = Senha que permite o usuário efetuar chamadas, esta senha pode ser configurada
conforme requisitos impostos pelo administrador. Para criação de senha automática é
necessário criar um script que permita alteração pelo usuário.
Type = Tipo de permissões que o usuário tem para efetuar ou receber chamadas, existem
três tipos disponíveis:
Friend Permite receber e efetuar chamadas
Peer Somente efetua chamadas
User Permissão só para recebimento de chamadas
Passo 11 Executando o Asterisk
Esta parte tem como propósito verificar se todos os processos do Asterisk estão funcionais.
Verificar se os pacotes do Asterisk estão completos:
# asterisk vvvvvv
Ativar o Asterisk:
# asterisk g
Visualizar via console chamadas em tráfego no servidor:
# asterisk rvvv
CONFIGURANDO A COMUNICAÇÃO ASTERISK ENTRE DOIS SERVIDORES
(TRUNK)
Para a comunicação entre dois servidores Asterisk devese configurar os ramais entre os servidores
primário (MATRIZ) e secundário (FILIAL) no arquivo iax.conf e no arquivo extensions.conf
configuramos a rota do ramal juntamente com o registro no servidor no qual ocorrerá a comunicação.
Configuração do servidor primário matriz:
No arquivo iax.conf do servidor da matriz devese configurar como mostrado abaixo, sendo o ramal
2000 do servidor da filial e o 1000 da matriz, da seguinte forma:
iax.conf:
[general]
bindport=4569
bindaddr=0.0.0.0
disallow=all
allow=ulaw
allow=gsm
[2000]
username=2000
secret=2000
host=dynamic
type=friend
auth=md5
trunk=yes
callerid="2000"
[1000]
username=100
secret=1000
host=dynamic
type=friend
context=cluster
auth=md5
trunk=yes
callerid="1000"
No arquivo extensions.conf, ainda do servidor matriz, devese colocar o seguinte plano de discagem,
sendo um caminho para todos os ramais IAX iniciado com o dígito 1 e seguidos de 3 quaisquer
dígitos que ligando entre eles mesmo, e o outro com o dígito 2 seguido de quaisquer dígitos que
ligaram para o servidor da filial, notase que no plano para filial tem a declaração do ramal seguido de
dois pontos, a senha do ramal e após o IP do servidor filial, para autenticação entre os 2 servidores.
extensions.conf:
[general]
static=yes
writeprotect=no
priorityjumping=no
autofallthrough=yes
clearglobalvars=no
[globals]
[cluster]
exten => _1xxx,1,Dial(IAX2/${EXTEN},20,tT)
exten => _1xxx,n,Hangup()
exten => _2xxx,1,Dial(IAX2/2000:2000@10.1.1.5/${EXTEN})
exten => _2xxx,n,hangup()
Configuração do servidor secundário filial:
Agora no arquivo iax.conf do servidor filial devese colocar os ramais de uma forma parecida, mas
invertendo os ramais, declarando o 2000 como do servidor da filial e 1000 da matriz, da seguinte
forma:
iax.conf:
[general]
bindport=4569
bindaddr=0.0.0.0
disallow=all
allow=ulaw
allow=gsm
[1000]
username=1000
secret=1000
host=dynamic
type=friend
auth=md5
trunk=yes
callerid="1000"
[2000]
username=2000
secret=2000
host=dynamic
type=friend
context=cluster
auth=md5
trunk=yes
callerid="2000"
No arquivo extensions.conf do servidor filial devese colocar o seguinte plano de discagem, sendo um
caminho para todos os ramais IAX iniciado com o dígito 2 e seguidos de 3 quaisquer dígitos ligando
entre eles mesmo, e o outro com o dígito 1 seguido de quaisquer dígitos que ligaram para o servidor
da matriz.
Notase que no plano para os ramais da matriz tem a declaração do ramal seguido de dois pontos, a
senha do ramal e após o IP do servidor matriz, para autenticação entre os 2 servidores.
extensions.conf:
[general]
static=yes
writeprotect=no
priorityjumping=no
autofallthrough=yes
clearglobalvars=no
[globals]
[cluster]
exten => _25x,1,Dial(SIP/${EXTEN},20,tT) ;Ramais SIP
exten => _25x,n,Hangup()
exten => _2xxx,1,Dial(IAX2/${EXTEN},20,tT)
exten => _2xxx,n,Hangup()
exten => _1xxx,1,Dial(IAX2/1000:1000@10.1.1.4/${EXTEN})
exten => _1xxx,n,hangup()
Voltar (verArtigo.php?codigo=11773)