Basta um computador antigo e o Asterisk para montar um servidor telefônico VoIP em uma rede caseira.
Por Martin Loschwitz
Sistemas VoIP possibilitam estabelecer ligações de áudio bastante rápidas pela Internet, além de outras vantagens. Por exemplo, a qualidade da voz costuma ser melhor que a de linhas convencionais (apesar de boatos que afirmam o contrário) e ligações internacionais não têm custo adicional. Só esses motivos já seriam suficientes para justificar pelo menos “uma olhada” nessa tecnologia.
Obviamente, para usar a Internet como uma plataforma telefônica, não basta simplesmente puxar o gancho e começar a falar. É preciso primeiro se registrar em um provedor de serviços VoIP. Uma lista de provedores pode ser encontrada em [1]. Ao assinar um plano VoIP, é possível usar o login fornecido para usar a conexão 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. Após completar essa etapa, você também 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 profissionais da área está disponível gratuitamente na Internet. Trata-se do Asterisk [2], hoje um sinônimo de software de telefonia. O Asterisk tem muitas opções úteis, incluindo a habilidade de funcionar como um sistema telefônico doméstico completo.
Neste tutorial, vamos imaginar um sistema que tenha de lidar com muitas ligações por dia. A linha telefônica – e também a conexão ADSL com a Internet – é baseada no antigo sistema analógico POTS (Plain Old Telephone Service ou “o bom e velho sistema de telefonia fixa”). Por motivos diversos, um upgrade para o sistema mais moderno RDSI (Rede Digital de Serviços Integrados – ou ISDN, na sigla em inglês), estaria fora de questão.
Nesse caso, a tecnologia VoIP é uma boa opção, já que ela pode trabalhar numa boa com o sistema POTS e, dependendo do plano no provedor VoIP, permite mais de uma ligação simultânea com uma única conta, além da opção de se obter um número de telefone como se fosse uma linha convencional.
Mão na massa
A dificuldade para se configurar esse sistema varia. Quanto mais complicada for a aplicação, obviamente mais difícil será a tarefa. O Asterisk não é uma exceção a essa regra. Além de instalar, configurar e adicionar alguns extras ao aplicativo, o programa também deve funcionar como uma secretária eletrônica virtual. Esse artigo não vai mostrar como usar o Asterisk como um servidor VoIP comercial. Então, não espere poder competir com serviços do tipo ao fim da leitura.
Para configurar o Asterisk como um servidor doméstico, você vai precisar de uma conta VoIP em um provedor do tipo. A vantagem dessa solução é que qualquer PC (ou telefone IP) nessa rede poderá ter acesso VoIP através do servidor Asterisk.
Essa configuração do Asterisk é útil para uma rede local. Nesse tipo de cenário, o acesso à Internet geralmente passa por um router com firewall e NAT (Network Address Translation). Aqui começa o problema. O protocolo SIP não conversa muito bem com o NAT, então será preciso fazer alguns “buracos” no firewall para habilitar o SIP na rede. Qual porta precisa ser aberta é uma questão que depende de seu provedor. Vamos assumir que essa porta é a 5060/tcp, já
que ela é o padrão do SIP. Com essa porta liberada, o Asterisk vai cuidar das questões envolvendo NAT.
que ela é o padrão do SIP. Com essa porta liberada, o Asterisk vai cuidar das questões envolvendo NAT.
Instalação
Instalar o Asterisk não é complicado, já que a configuração só será feita depois. A maioria das distribuições incluem um pacote do programa. Como o Asterisk se
integra bem ao Debian, usaremos essa distribuição como exemplo desse artigo. Mas os arquivos de configuração e seus parâmetros são os mesmos, independente da distribuição Linux usada. Para o caso da compilação do Asterisk a partir do código fonte, leia o quadro 1 (“Compilando o Asterisk”).
integra bem ao Debian, usaremos essa distribuição como exemplo desse artigo. Mas os arquivos de configuração e seus parâmetros são os mesmos, independente da distribuição Linux usada. Para o caso da compilação do Asterisk a partir do código fonte, leia o quadro 1 (“Compilando o Asterisk”).
Após a instalação do Asterisk no Debian, haverá alguns arquivos .conf em /etc/asterisk. O Asterisk é um aplicativo minimalista: contém apenas uma dúzia de pequenos módulos, que são carregados “on the fly” quando necessários. O compacto “kernel” do Asterisk contém as funções centrais que controlam esses módulos. Há um arquivo de configuração para cada um deles. Isso evita a necessidade de um arquivo de configuração global e gigantesco, embora isso embole um pouco o diretório /etc/asterisk.
A maioria desses arquivos não nos interessa – pelo menos para este tutorial. Eles se referem a partes do Asterisk que não se costuma usar. Mas há duas exceções: o sip.conf e o extensions.conf.
sip.conf
A maioria dos provedores VoIP usam o protocolo SIP. Mas existem outros, como o IAX2 e SCCP. Nosso artigo terá como foco o SIP. Para isso, o módulo necessário é o chan.sic. O arquivo de configuração correspondente é o sip.conf.
Os parâmetros em sip.conf permitem que o Asterisk se logue no servidor VoIP como se fosse um telefone. De modo semelhante, os usuários da rede local vão se logar no servidor Asterisk como se fossem telefones.
O Asterisk funciona como um servidor proxy. Ele redireciona conexões locais para a Internet e conexões exteriores para o respectivo telefone. Ao configurar o arquivo sip.conf, tenha os dados do seu provedor VoIP.
Seção geral
Os arquivos de configuração são organizados em seções. A primeira seção do sip.conf é chamada[general], como nos outros arquivos dos outros módulos. Por padrão, ela já vem preenchida. Mas teremos que fazer algumas mudanças. Em seu editor preferido, abra o sip.conf e localize a linha contendo a expressão disallow=all. Remova o ponto-e-vírgula (“;”) no início dessa linha (ele serve para “comentar” a linha, para que ela não seja lida pelo sistema). Repita isso para as próximas duas linhas, que começam com language e adicione uma linha com a expressão allow=alaw.
Se o servidor Asterisk usa um router NAT para acessar a Internet, será preciso “descomentar” (tirar o ponto-e-vírgula) a linha nat=no e mudar “no” para “yes”. Isso especifica que o Asterisk deve manipular conexões para dentro e para fora da rede.
Identifique-se
O Asterisk se loga no servidor SIP do provedor VoIP como se fosse um telefone. A configuração referente a esse login também fica no sip.conf. Cada linha referente a um provedor VoIP começa com “register” e segue a sintaxe:
register => nome:senha@servidor SIP/U
extension
Se você tem contas em vários provedores, será preciso uma linha para cada um. Por enquanto vamos deixar de lado a parte extension. Mais tarde, isso é o que vai informar ao Asterisk quais telefones/ PCs vão se conectar a determinados servidores SIP (dos provedores VoIP). Por enquanto, digite apenas o seu nome de
usuário no lugar de “extension”.
usuário no lugar de “extension”.
Acesso para o provedor
O próximo passo é modificar o sip.conf para permitir que o provedor VoIP envie comandos ao Asterisk. Ele também possibilita entradas do tipo peer (ponto/ramal) para organizar chamadas. Uma entrada desse tipo se parece com a seguinte:
[Provedor VoIP]
type=peer
secret=Senha
username=nome
host=servidor VoIP
fromuser=nome
fromdomain=Servidor VoIP
insecure=very
É preciso uma entrada como essa, mas com nomes diferentes para cada linha do tipo register em sip.conf, no final desse arquivo. Certifique-se de que os valores batem com os das linhas register no sip.conf.
Quadro1: Compilando o Asterisk
Para compilar a partir do código fonte, use o seguinte procedimento (independente da distribuição utilizada). Baixe o código fonte e descompacte o pacote com o comando tar cvfz nomedoarquivo. Use o comando cd para entrar no diretório com o código e inicie o processo com o comando make. Finalmente, digite make install (como root) para finalmente instalar o Asterisk no lugar adequado do seu sistema de arquivos. Cuidado: os arquivos não ficam no diretório /usr; em vez disso, são colocados na raiz (/). Para mudar esse (mal) comportamento, abra o arquivo Makefile em um editor e modifique a linha que começa com INSTALL_PREFIX=, digitando “/usr/local” logo após o sinal de igual. Isso evita que arquivos do sistema sejam prejudicados sem aviso e permite uma remoção mais fácil do Asterisk. www.linuxmagazine.com.br março 2006 edição 18 25
Acrescentando telefones
A próxima e última etapa é acrescentar linhas para permitir que telefones SIP da rede local possam se registrar no servidor. Eles podem ser tanto aparelhos VoIP (figura 1) quanto softphones (figura 2). No final do arquivo, escreva primeiro um nome para o PC/aparelho da rede local: [Nome]. Você pode escolher qualquer nome, com letras e números. Uma entrada completa fica mais ou menos assim (“2000” é o nome do PC/aparelho):
[2000]
type=friend
secret=senha
mailbox=100
canreinvite=yes
context=default
insecure=very
host=dynamic
A maneira para se configurar pontos adicionais é similar. Você só precisa especificar um nome de usuário e senha para cada entrada e mudar o número no campo mailbox. Uma maneira fácil é usar nomes numéricos e apenas ir aumentando progressivamente. O mesmo vale para o número da mailbox (por
exemplo: 2001, 2002… e 101, 102…).
exemplo: 2001, 2002… e 101, 102…).
Após configurar a seção [general] e criar contas para o servidor VoIP e, pelo menos, um cliente local, salve o arquivo sip.conf. A listagem 1 mostra um exemplo didático desse arquivo.
Criando um dialplan
O dialplan (plano de discagem) é seu painel de conexões para ligações via Asterisk. Ele especifica como direcionar chamadas externas e locais. Um plano de discagem é complexo por natureza, mas nada que a maioria dos usuários não consiga administrar.
O plano fica em /etc/asterisk/extensions. conf. O arquivo padrão no Debian possui muitos exemplos inúteis. Talvez seja melhor renomear o arquivo para extensions.conf.old e criar um do zero. Esse arquivo começa, novamente, com uma seção [general], que sempre inicia assim:
[general]
static=yes
writeprotect=no
O comando padrão no extensions. conf é exten. Ele é chamado tanto para ligações externas, quanto locais; e direciona a ligação para a rede local ou para a Internet. A sintaxe é:
exten => numero_chamado,prioridade,ação
A opção prioridade não é usada para determinar a importância da ligação, mas para definir a ordem em que os comandos em ação serão executados, quando houver diferentes opções em várias linhas do tipo exten.
Default
A primeira coisa que temos a fazer é criar uma seção [default]. Ela será usada para manipular ligações não definidas. Teoricamente, você pode dividir o extensions.conf em quantas seções quiser, mas limitaremos isso para manter o arquivo simples.
A primeira parte da seção [default] é genérica e obrigatória. Ela contém o chamado echo test, necessário para se checar a conexão 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 seção [default] também é onde se especifica o que fazer com ligações para fora. Uma opção útil é exigir que um número seja discado para obter a linha externa. Isso permite que você use o Asterisk para ligações entre os ramais internos. A linha a seguir determina que o Asterisk direcione chamadas para
fora que começam com “0” para o provedor “ProvedorVoIP”:
fora que começam com “0” para o provedor “ProvedorVoIP”:
exten => _0.,1,Dial(SIP/${EXTEN:1}@ProvedorVoIP)
Esse comando é menos complicado do que parece. _0. significa que isso será feito com todas as ligações que começam com “0”. 1 indica a prioridade (“1” nesse caso, já que há pouco o que se fazer com uma ligação para fora, a não ser direcioná-la para fora).
Dial(SIP/${EXTEN:1}@ProvedorVoIP) especifica que o comando de discagem interno do Asterisk deve ser usado. SIP informa que o protocolo SIP deve ser
utilizado para fazer a chamada. A barra (“/”) separa o protocolo do número a ser discado. Nesse caso, ele está na variável ${EXTEN}. O :1 remove o primeiro dígito do conjunto de números a ser discado, já que o “0” foi usado para se obter linha. A expressão @ProvedorVoIP especifica o provedor VoIP para onde a chamada será direcionada.
utilizado para fazer a chamada. A barra (“/”) separa o protocolo do número a ser discado. Nesse caso, ele está na variável ${EXTEN}. O :1 remove o primeiro dígito do conjunto de números a ser discado, já que o “0” foi usado para se obter linha. A expressão @ProvedorVoIP especifica o provedor VoIP para onde a chamada será direcionada.
Você pode repetir isso para quantos provedores desejar. Mas use números diferentes para se obter linha externa, de acordo com cada provedor. E insira o nome do provedor, de acordo com o nome especificado para ele em sip.conf.
Telefonemas de fora
Se você iniciar o Asterisk agora, vai poder fazer ligações, mas não receber. Esse é o obstáculo final. Nas linhas do 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 usuário no provedor VoIP.
sip.conf (provedor Exemplo)
01 nonumber
02 [general]
03 port = 5060
04 bindaddr = 0.0.0.0
05 disallow=all
06 allow=ulaw
07 allow=alaw
08 maxexpirey=3600
09 defaultexpirey=120
10 context=default
11 language=pt (br)
12
13 register => 5552XXX:senha@provedorexemplo.com.br/5552XXX
14
15 [provedorexemplo]
16 type=peer
17 secret=SENHA
18 username=5552XXX
19 host=provedorexemplo.com.br
20 fromuser=5552XXX
21 fromdomain=provedorexemplo.com.br
22 insecure=very
23
24 [2000]
25 type=friend
26 secret=Senha
27 mailbox=100
28 canreinvite=yes
29 context=default
30 insecure=very
31 host=dynamic
Se você usou “2000” como nome de usuário do primeiro telefone (como em nosso exemplo), você pode usar as linhas a seguir. Apenas substitua “Nome” pelo nome de usuário no provedor VoIP (o último valor da linha register):
exten => Nome,1,Dial(SIP/2000,15,tTr)
exten => Nome,2,VoiceMail,u2000
exten => Nome,102,VoiceMail,b2000
exten => Nome,103,Hangup
A primeira linha direciona chamadas de fora para o usuário/telefone de nome “2000”. As linhas 2 e 3 iniciam a secretária eletrônica virtual do Asterisk, caso o telefone “2000” esteja ocupado ou não disponível. A linha 4 desliga o telefonema ao fim das três etapas anteriores.
Repita essa última etapa para todas as linhas do tipo register em seu sip. conf. Se precisar direcionar ligações para outros telefones além do “2000”, apenas mude os números após SIP/. A listagem 2 exemplifica um arquivo extensions.conf.
extensions.conf
01 nonumber
02 [general]
03 static=yes
04 writeprotect=no
05
06 [default]
07 exten => 600,1,Playback(demo-echotest)
08 exten => 600,2,Echo
09 exten => 600,3,Playback(demo-echodone)
10 exten => 600,4,Goto(s,6)
11
12 exten => 2999,1,Ringing
13 exten => 2999,2,VoicemailMain,s2000
14
15 exten => _0.,1,Dial(SIP/${EXTEN:1}<\@>provedorexemplo)
16
17 exten => 5552XXX,1,Dial(SIP/2000,15,tTr)
18 exten => 5552XXX,2,VoiceMail,u2000
19 exten => 5552XXX,102,VoiceMail,b2000
20 exten => 5552XXX,103,Hangup
Iniciando o Asterisk
Como estamos nos baseando na distribuição Debian, ainda há uma etapa aqui. O pacote .deb do Asterisk não permite que você rode o programa logo após a instalação. Para mudar esse comportamento, é preciso abrir o arquivo /etc/default/asterisk e mudar o valor “no” de RUNASTERISK= para “yes”. Aí sim será
possível iniciar o Asterisk com o comando /etc/init.d/asterisk start.
possível iniciar o Asterisk com o comando /etc/init.d/asterisk start.
Conveniência
O Asterisk tem uma secretária eletrônica virtual 100% funcional, que precisa ser habilitada para cada telefone/usuário. O programa adicional addmailbox ajuda muito nessa tarefa. Apenas guarde o nome de usuário para quem você quer adicionar a secretária (em nosso exemplo, “2000”).
Em nosso sip.conf, associamos a caixa de mensagens (mailbox) “100” para o usuário “2000”. Como root, digite addmailbox no terminal. Se o programa perguntar sobre o contexto (context), digite “default”. Quando for solicitado o número da mailbox, digite “100”. Esse script se encarrega do resto, configurando todos os arquivos necessários.
Estão disponíveis mensagens da secretária eletrônica em algumas línguas. No Debian, é possível usar apt-get install para instalar um pacote do tipo asterisk-prompt-xx (“xx” é o código do idioma) para mensagens prontas em outras línguas. Por enquanto, não há um em português brasileiro. Mas é possível 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
Finalmente, é preciso fazer com que o Asterisk toque as mensagens gravadas. Para isso, é preciso novamente modificar o arquivo extensions.conf. Acrescente as seguintes linhas:
exten => 2999,1,Ringing
exten => 2999,2,VoicemailMain,s2000
Agora, quando você discar 2999 de um telefone interno, será automaticamente conectado à caixa postal do usuário 2000. Na primeira vez que você se logar, será preciso especificar uma senha de acesso. Mais tarde isso não será necessário.
Se a rede estiver configurada como VPN (Virtual Private Network), é possível 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].
Nenhum comentário:
Postar um comentário
Observação: somente um membro deste blog pode postar um comentário.