Você está na página 1de 11

ASTERISK 

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 mysql­server­5.0 mysql­ client
php5­mysql libapache2­mod­php5  

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 libmysqlclient15­dev  
# aptitude install libedit­dev libedit2 libssl­dev zlib­bin
zlib1g­dev mpg123 libnewt0.52 newt­tcl libnewt­dev 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:  

asterisk­1.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/asterisk­1.4.26.2.tar.gz
(http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk­1.4.26.2.tar.gz) 

asterisk­addons­1.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/asterisk­addons­1.4.9.tar.gz
(http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk­addons­1.4.9.tar.gz) 

Descompactar os pacotes:  

# tar ­xvvf asterisk­1.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 Asterisk­1.4.26.2, acesse
esse diretório com o comando cd e siga os passos seguintes. 

# cd asterisk­1.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 asterisk­addons­1.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 '0000­00­00 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 deve­se 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 deve­se 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, deve­se 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, nota­se 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 deve­se 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 deve­se 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. 

Nota­se 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)

Você também pode gostar