Você está na página 1de 6

Capa

Asterisk

VoIP
em casa

Monte um sistema VoIP domstico com o Asterisk

Basta um computador antigo e o Asterisk para montar


um servidor telefnico VoIP em uma rede caseira.

Por Martin Loschwitz

istemas VoIP possibilitam estabelecer ligaes de udio bastante rpidas pela Internet, alm
de outras vantagens. Por exemplo, a
qualidade da voz costuma ser melhor
que a de linhas convencionais (apesar
de boatos que armam o contrrio) e
ligaes internacionais no tm custo
adicional. S esses motivos j seriam
sucientes para justicar pelo menos
uma olhada nessa tecnologia.
Obviamente, para usar a Internet
como uma plataforma telefnica, no
basta simplesmente puxar o gancho e
comear a falar. preciso primeiro se
registrar em um provedor de servios
VoIP. Uma lista de provedores pode ser
encontrada em [1]. Ao assinar um plano
VoIP, possvel usar o login fornecido
para usar a conexo com a Internet
para se logar no respectivo servidor
SIP (Session Initiation Protocol). SIP
hoje um dos principais protocolos VoIP,
junto com o H.323. Aps completar essa
etapa, voc tambm vai precisar de um
aparelho de telefone VoIP ou de um softphone (telefone via software) instalado
em um computador com placa de som
e microfone (ou um headset).
Atualmente, um dos sistemas VoIP mais
conhecidos e usados por prossionais da

24

maro 2006

rea est disponvel gratuitamente na


Internet. Trata-se do Asterisk [2], hoje um
sinnimo de software de telefonia. O Asterisk tem muitas opes teis, incluindo a
habilidade de funcionar como um sistema
telefnico domstico completo.
Neste tutorial, vamos imaginar um
sistema que tenha de lidar com muitas
ligaes por dia. A linha telefnica e
tambm a conexo ADSL com a Internet baseada no antigo sistema
analgico POTS (Plain Old Telephone
Service ou o bom e velho sistema de
telefonia xa). Por motivos diversos,
um upgrade para o sistema mais moderno RDSI (Rede Digital de Servios
Integrados ou ISDN, na sigla em ingls), estaria fora de questo.
Nesse caso, a tecnologia VoIP uma
boa opo, j que ela pode trabalhar
numa boa com o sistema POTS e, dependendo do plano no provedor VoIP,
permite mais de uma ligao simultnea
com uma nica conta, alm da opo de
se obter um nmero de telefone como se
fosse uma linha convencional.

Mo na massa
A diculdade para se congurar esse sistema varia. Quanto mais complicada for
a aplicao, obviamente mais difcil ser

edio 18
www.linuxmagazine.com.br

a tarefa. O Asterisk no uma exceo a


essa regra. Alm de instalar, congurar
e adicionar alguns extras ao aplicativo, o
programa tambm deve funcionar como
uma secretria eletrnica virtual. Esse
artigo no vai mostrar como usar o Asterisk como um servidor VoIP comercial.
Ento, no espere poder competir com
servios do tipo ao m da leitura.
Para congurar o Asterisk como um
servidor domstico, voc vai precisar
de uma conta VoIP em um provedor
do tipo. A vantagem dessa soluo
que qualquer PC (ou telefone IP) nessa
rede poder ter acesso VoIP atravs do
servidor Asterisk.
Essa congurao do Asterisk til
para uma rede local. Nesse tipo de cenrio, o acesso Internet geralmente
passa por um router com rewall e NAT
(Network Address Translation). Aqui comea o problema. O protocolo SIP no
conversa muito bem com o NAT, ento
ser preciso fazer alguns buracos no rewall para habilitar o SIP na rede. Qual
porta precisa ser aberta uma questo
que depende de seu provedor. Vamos
assumir que essa porta a 5060/tcp, j
que ela o padro do SIP. Com essa
porta liberada, o Asterisk vai cuidar das
questes envolvendo NAT.

Asterisk

Capa

Instalao

O Asterisk funciona como um servidor


register => nome:senha@servidor SIP/U
extension
Instalar o Asterisk no complicado, j proxy. Ele redireciona conexes locais
que a congurao s ser feita depois. para a Internet e conexes exteriores
A maioria das distribuies incluem um para o respectivo telefone. Ao congurar
Se voc tem contas em vrios provepacote do programa. Como o Asterisk se o arquivo sip.conf, tenha os dados do dores, ser preciso uma linha para cada
integra bem ao Debian, usaremos essa seu provedor VoIP.
um. Por enquanto vamos deixar de lado
distribuio como exemplo desse artia parte extension. Mais tarde, isso o
go. Mas os arquivos de congurao e
que vai informar ao Asterisk quais telefoseus parmetros so os mesmos, inde- Os arquivos de congurao so organiza- nes/PCs vo se conectar a determinados
pendente da distribuio Linux usada. dos em sees. A primeira seo do sip.conf servidores SIP (dos provedores VoIP). Por
Para o caso da compilao do Asterisk chamada [general], como nos outros ar- enquanto, digite apenas o seu nome de
a partir do cdigo fonte, leia o quadro 1 quivos dos outros mdulos. Por padro, ela usurio no lugar de extension.
(Compilando o Asterisk).
j vem preenchida. Mas teremos que fazer
Aps a instalao do Asterisk no De- algumas mudanas. Em seu editor preferibian, haver alguns arquivos .conf em do, abra o sip.conf e localize a linha con- O prximo passo modicar o sip.conf
/etc/asterisk. O Asterisk um aplica- tendo a expresso disallow=all. Remova o
para permitir que o provedor VoIP envie
tivo minimalista: contm apenas uma ponto-e-vrgula (;) no incio dessa linha comandos ao Asterisk. Ele tambm possidzia de pequenos mdulos, que so (ele serve para comentar a linha, para bilita entradas do tipo peer (ponto/ramal)
carregados on the y quando neces- que ela no seja lida pelo sistema). Repita para organizar chamadas. Uma entrada
srios. O compacto kernel do Asterisk isso para as prximas duas linhas, que desse tipo se parece com a seguinte:
contm as funes centrais que contro- comeam com language e adicione uma
lam esses mdulos. H um arquivo de linha com a expresso allow=alaw.
[Provedor VoIP]
congurao para cada um deles. Isso
Se o servidor Asterisk usa um router
type=peer
evita a necessidade de um arquivo de NAT para acessar a Internet, ser preciso
secret=Senha
congurao global e gigantesco, em- descomentar (tirar o ponto-e-vrgula) a
username=nome
bora isso embole um pouco o diretrio linha nat=no e mudar no para yes. Isso
host=servidor VoIP
/etc/asterisk.
especica que o Asterisk deve manipular
fromuser=nome
A maioria desses arquivos no nos conexes para dentro e para fora da rede.
fromdomain=Servidor VoIP
interessa pelo menos para este tuinsecure=very
torial. Eles se referem a partes do Asterisk que no se costuma usar. Mas O Asterisk se loga no servidor SIP do
preciso uma entrada como essa,
h duas excees: o sip.conf e o provedor VoIP como se fosse um telefone. mas com nomes diferentes para cada
extensions.conf.
A congurao referente a esse login linha do tipo register em sip.conf, no
tambm ca no sip.conf. Cada linha nal desse arquivo. Certique-se de
referente a um provedor VoIP comea que os valores batem com os das linhas
A maioria dos provedores VoIP usam o com register e segue a sintaxe:
register no sip.conf.

protocolo SIP. Mas existem outros, como


Quadro1: Compilando o Asterisk
o IAX2 e SCCP. Nosso artigo ter como
foco o SIP. Para isso, o mdulo necessPara compilar a partir do cdigo fonte, use o seguinte procedimento (independente da distribuio
rio o chan.sic. O arquivo de conguutilizada). Baixe o cdigo fonte e descompacte o pacote com o comando tar cvfz nomedoarquivo
. Use o comando cd para entrar no diretrio com o cdigo e inicie o processo com o comanrao correspondente o sip.conf.
do make. Finalmente, digite make install (como root) para nalmente instalar o Asterisk no
Os parmetros em sip.conf permilugar adequado do seu sistema de arquivos.
tem que o Asterisk se logue no serviCuidado: os arquivos no cam no diretrio /usr; em vez disso, so colocados na raiz (/). Para mudor VoIP como se fosse um telefone. De
dar esse (mal) comportamento, abra o arquivo Makefile em um editor e modique a linha que
modo semelhante, os usurios da rede
comea com INSTALL_PREFIX=, digitando /usr/local logo aps o sinal de igual. Isso evita que
local vo se logar no servidor Asterisk
arquivos do sistema sejam prejudicados sem aviso e permite uma remoo mais fcil do Asterisk.
como se fossem telefones.

Seo geral

Acesso para o provedor

Identique-se

sip.conf

maro 2006
www.linuxmagazine.com.br

edio 18

25

Capa

Asterisk

Acrescentando telefones

mentando progressivamente. O mesmo


A prxima e ltima etapa acrescentar vale para o nmero da mailbox (por
linhas para permitir que telefones SIP exemplo: 2001, 2002... e 101, 102...).
Aps congurar a seo [general]
da rede local possam se registrar no
servidor. Eles podem ser tanto apare- e criar contas para o servidor VoIP e,
lhos VoIP (figura 1) quanto softphones pelo menos, um cliente local, salve o
(figura 2). No nal do arquivo, escreva arquivo sip.conf. A listagem 1 mostra
primeiro um nome para o PC/apare- um exemplo didtico desse arquivo.
lho da rede local: [Nome]. Voc pode
escolher qualquer nome, com letras
e nmeros. Uma entrada completa O dialplan (plano de discagem) seu
ca mais ou menos assim (2000 painel de conexes para ligaes via
Asterisk. Ele especica como direcionar
o nome do PC/aparelho):
chamadas externas e locais. Um plano
de discagem complexo por natureza,
[2000]
mas nada que a maioria dos usurios
type=friend
no consiga administrar.
secret=senha
O plano ca em /etc/asterisk/exmailbox=100
tensions.conf. O arquivo padro no
canreinvite=yes
Debian possui muitos exemplos inteis.
context=default
Talvez seja melhor renomear o arquivo
insecure=very
para extensions.conf.old e criar um
host=dynamic
do zero. Esse arquivo comea, novaA maneira para se congurar pontos mente, com uma seo [general], que
adicionais similar. Voc s precisa es- sempre inicia assim:
pecicar um nome de usurio e senha
[general]
para cada entrada e mudar o nmero
static=yes
no campo mailbox. Uma maneira fcil
usar nomes numricos e apenas ir au- writeprotect=no

Criando um dialplan

O comando padro no extensions.


conf exten. Ele chamado tanto para

ligaes externas, quanto locais; e direciona a ligao para a rede local ou para
a Internet. A sintaxe :
exten => numero_chamado,prioridade,ao

A opo prioridade no usada para


determinar a importncia da ligao,
mas para denir a ordem em que os
comandos em ao sero executados,
quando houver diferentes opes em
vrias linhas do tipo exten.

Default
A primeira coisa que temos a fazer
criar uma seo [default]. Ela ser
usada para manipular ligaes no denidas. Teoricamente, voc pode dividir
o extensions.conf em quantas sees
quiser, mas limitaremos isso para manter o arquivo simples.
A primeira parte da seo [default]
genrica e obrigatria. Ela contm o chamado echo test, necessrio para se checar
a conexo entre o Asterisk e o telefone:
[default]
exten => 600,1,Playback(demo-echotest)
exten => 600,2,Echo
exten => 600,3,Playback(demo-echodone)
exten => 600,4,Goto(s,6)

A seo [default] tambm onde


se especica o que fazer com ligaes
para fora. Uma opo til exigir que
um nmero seja discado para obter a
linha externa. Isso permite que voc use
o Asterisk para ligaes entre os ramais
internos. A linha a seguir determina
que o Asterisk direcione chamadas para
fora que comeam com 0 para o provedor ProvedorVoIP:
Figura 1: Os aparelhos VoIP de hoje tm recursos bastante convenientes um deles o visual,
idntico ao de um aparelho comum, alm de display com vrias linhas e teclas programveis.

exten => _0.,1,Dial(SIP/U


${EXTEN:1}@ProvedorVoIP)

26

maro 2006

edio 18
www.linuxmagazine.com.br

Asterisk

Capa

Esse comando menos complicado que o 0 foi usado para se obter linha.
do que parece. _0. signica que isso A expresso @ProvedorVoIP especica
ser feito com todas as ligaes que co- o provedor VoIP para onde a chamada
meam com 0. 1 indica a prioridade ser direcionada.
(1 nesse caso, j que h pouco o que
Voc pode repetir isso para quanse fazer com uma ligao para fora, a tos provedores desejar. Mas use nno ser direcion-la para fora).
meros diferentes para se obter linha
Dial(SIP/${EXTEN:1}@ProvedorVoIP) externa, de acordo com cada proespecica que o comando de discagem vedor. E insira o nome do provedor,
interno do Asterisk deve ser usado. SIP de acordo com o nome especicado
informa que o protocolo SIP deve ser para ele em sip.conf.
utilizado para fazer a chamada. A barra
(/) separa o protocolo do nmero a ser
discado. Nesse caso, ele est na varivel Se voc iniciar o Asterisk agora, vai
${EXTEN}. O :1 remove o primeiro dgito
poder fazer ligaes, mas no receber.
do conjunto de nmeros a ser discado, j Esse o obstculo nal. Nas linhas do

Telefonemas de fora

Listagem 1: sip.conf (provedor Exemplo)


01
02
03
04
05
06
07
08
09
10
11
12
13
14
15

nonumber
[general]
port = 5060
bindaddr = 0.0.0.0
disallow=all
allow=ulaw
allow=alaw
maxexpirey=3600
defaultexpirey=120
context=default
language=pt (br)

16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

type=peer
secret=SENHA
username=5552XXX
host=provedorexemplo.com.br
fromuser=5552XXX
fromdomain=provedorexemplo.com.br
insecure=very

Figura 2: Uma alternativa ao aparelho VoIP


o uso de um softphone, ou telefone via
software (como o Linphone), desde que o
computador tenha placa de som e um headset.
tipo register em sip.conf, o ltimo
valor de cada linha o nome que o
Asterisk usa para gerenciar chamadas
de fora para esse servidor. Naquele
exemplo, esse valor o seu nome de
usurio no provedor VoIP.
Se voc usou 2000 como nome de
usurio do primeiro telefone (como em
nosso exemplo), voc pode usar as linhas a seguir. Apenas substitua Nome
pelo nome de usurio no provedor VoIP
(o ltimo valor da linha register):

register => 5552XXX:senha@provedorexemplo.com.br/5552XXX


[provedorexemplo]

exten => Nome,1,Dial(SIP/2000,15,tTr)


exten => Nome,2,VoiceMail,u2000
exten => Nome,102,VoiceMail,b2000
exten => Nome,103,Hangup

[2000]
type=friend
secret=Senha
mailbox=100
canreinvite=yes
context=default
insecure=very
host=dynamic

A primeira linha direciona chamadas


de fora para o usurio/telefone de nome
2000. As linhas 2 e 3 iniciam a secretria
eletrnica virtual do Asterisk, caso o
telefone 2000 esteja ocupado ou no
disponvel. A linha 4 desliga o telefonema
ao m das trs etapas anteriores.

maro 2006
www.linuxmagazine.com.br

edio 18

27

Capa

Repita essa ltima etapa para todas


as linhas do tipo register em seu sip.
conf. Se precisar direcionar ligaes
para outros telefones alm do 2000,
apenas mude os nmeros aps SIP/.
A listagem 2 exemplica um arquivo
extensions.conf.

Iniciando o Asterisk
Como estamos nos baseando na distribuio Debian, ainda h uma etapa aqui.
O pacote .deb do Asterisk no permite
que voc rode o programa logo aps a
instalao. Para mudar esse comportamento, preciso abrir o arquivo /etc/
default/asterisk e mudar o valor no
de RUNASTERISK= para yes. A sim ser
possvel iniciar o Asterisk com o comando /etc/init.d/asterisk start.

Asterisk

Listagem 2: extensions.conf
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20

nonumber
[general]
static=yes
writeprotect=no
[default]
exten => 600,1,Playback(demo-echotest)
exten => 600,2,Echo
exten => 600,3,Playback(demo-echodone)
exten => 600,4,Goto(s,6)
exten => 2999,1,Ringing
exten => 2999,2,VoicemailMain,s2000
exten => _0.,1,Dial(SIP/${EXTEN:1}<\@>provedorexemplo)
exten
exten
exten
exten

=>
=>
=>
=>

5552XXX,1,Dial(SIP/2000,15,tTr)
5552XXX,2,VoiceMail,u2000
5552XXX,102,VoiceMail,b2000
5552XXX,103,Hangup

Convenincia
O Asterisk tem uma secretria eletrnica
virtual 100% funcional, que precisa ser
habilitada para cada telefone/usurio. O
programa adicional addmailbox ajuda muito nessa tarefa. Apenas guarde o nome de
usurio para quem voc quer adicionar a
secretria (em nosso exemplo, 2000).
Em nosso sip.conf, associamos a caixa de mensagens (mailbox) 100 para o
usurio 2000. Como root, digite addmailbox no terminal. Se o programa perguntar sobre o contexto (context), digite
default. Quando for solicitado o nmero
da mailbox, digite 100. Esse script se
encarrega do resto, congurando todos
os arquivos necessrios.

Esto disponveis mensagens da secretria eletrnica em algumas lnguas.


No Debian, possvel usar apt-get
install para instalar um pacote do tipo
asterisk-prompt-xx (xx o cdigo
do idioma) para mensagens prontas
em outras lnguas. Por enquanto, no
h um em portugus brasileiro. Mas
possvel gravar respostas personalizadas no formato .wav e convert-las
para .gsm com o aplicativo SoX [3]. O
formato .gsm um arquivo de udio
bem compactado, ideal para udio que
ser transmitido por telefone.

Caixa postal

Figura 3: O softphone SJphone localizou o servidor Asterisk e


os dois sistemas esto conectados.

28

maro 2006

Finalmente, preciso fazer com que


o Asterisk toque
as mensagens gravadas. Para isso,
preciso novamente
modicar o arquivo
extensions.conf.
Acrescente as seguintes linhas:

edio 18
www.linuxmagazine.com.br

exten => 2999,1,Ringing


exten => 2999,2,VoicemailMain,s2000

Agora, quando voc discar 2999 de


um telefone interno, ser automaticamente conectado caixa postal do usurio 2000. Na primeira vez que voc
se logar, ser preciso especicar uma
senha de acesso. Mais tarde isso no
ser necessrio.
Se a rede estiver congurada como
VPN (Virtual Private Network), possvel usar um softphone em conjunto
com o OpenVPN para acesso remoto ao
servidor Asterisk. Um site que pode ser
bastante til para quem estiver iniciando
o Asterisk Brasil [4].

Informaes
[1] Lista de provedores:
www.teleco.com.br/voip.asp
[2] Asterisk: www.asterisk.org
[3] SoX: sox.sourceforge.net
[4] Comunidade Asterisk Brasil:
www.asteriskbrasil.org

Você também pode gostar