DevSecOps

11 abr, 2014

Como configurar seu servidor de VoIP com Asterisk

Publicidade

Quantas chamadas telefônicas já fizemos até hoje, ou somente nesta semana? Se pararmos para pensar no quanto usamos o telefone para manter contato com amigos, geograficamente próximos ou distantes, essa estimativa ainda se complica. Na verdade, até 1956, para ligar para meus pais do outro lado do oceano envolveria indiretamente uma transmissão de rádio de longa distância nada confiável, e ainda a taxa de US$ 6 por minuto.

Temos muita sorte por possuirmos as atuais tecnologias de telecomunicações, belos iPhones e dispositivos semelhantes na ponta de nossos dedos. Tanto que tomamos como certo que, ao pegarmos o telefone, conseguiremos ligar para centenas de países ao redor do mundo. Todo o mundo moderno é incrivelmente dependente dessa tecnologia para evitar sua parada. Apesar disso, ainda estamos muitas vezes sujeitos ao humor das operadoras de telecomunicações, que nos dizem quanto temos que pagar e nos forçam caros contratos.

As operadoras de telefonia costumavam exercer um controle bastante semelhante a um monopólio, exatamente porque detinham as redes pelas quais as chamadas deviam passar. Agora, a tecnologia de voz sobre IP (VoIP) vem soprando nova vida a uma indústria estagnada. Novas operadoras de serviços VoIP oferecem todos os tipos de chamadas baratas (ou até gratuitas) por pequenas taxas mensais, usando sua conexão à Internet como meio de transmissão para as chamadas. Elas se encarregam de conectar as chamadas entre os usuários de VoIP e os do velho serviço tradicional de telefonia.

Muitas dessas operadoras oferecem serviços atraentes que valem a pena ser considerados, principalmente se quisermos apenas começar a usar VoIP rapidamente. Mas é possível ir um passo adiante: pode-se realizar toda a operação do telefone sozinho, de forma barata e relativamente fácil, graças ao poder do software de código aberto Asterisk.

O que é o Asterisk?

O Asterisk é um servidor PBX completo de código aberto. Ele foi desenvolvido pela Digium — fabricante de hardwares para soluções de VoIP. Pense nas caras caixas beges que ficam numa sala em algum lugar de seu escritório, emitindo seus zumbidos e gerenciando todos os telefones sobre as mesas. O Asterisk pode fazer a mesma coisa usando PCs comuns e uma rede TCP/IP, e muitas vezes a solução com Asterisk custa muito menos que a instalação de um complexo sistema de telefonia para o escritório. O Asterisk é utilizado por muitas empresas conhecidas, como uma ferramenta de telefonia de nível corporativo, e muitos usuários domésticos também a usam como um gateway de chamadas de baixo custo para ligar para seus amigos. O servidor Asterisk é suficientemente flexível para uma ampla variedade de usos.

Neste artigo, descreveremos como configurar um serviço de VoIP barato com o Asterisk para um escritório doméstico ou uma pequena empresa. Nesse ambiente, uma variedade de extensões do Asterisk (tais como handsets físicos ou softphones VoIP rodando em computadores e PDAs) conectam-se a um servidor Asterisk que se responsabiliza por fazer a ponte das ligações para outras extensões, além de oferecer uma caixa postal de voz e repassar chamadas em caso de telefones ou funcionários não disponíveis. Usaremos um serviço comercial de gateway VoIP para mantermos um número normal de telefone e recebermos ligações de telefones comuns, mas também é possível instalar seu próprio hardware para lidar com a mesma tarefa.

Instalação do Asterisk

Fundamentalmente, o Asterisk é apenas um pacote de software, como qualquer outro aplicativo de um sistema Linux. Então, é possível instalá-lo em qualquer sistema Linux (e também em outros sistemas operacionais) através de um pacote ou compilando seu código-fonte.

A compilação do Asterisk não é trivial, mas talvez seja necessário utilizá-la no caso de se decidir usar alguns dos recursos mais avançados. Um aspecto desejável é um computador com suficientes recursos de hardware: algo com quantidades satisfatórias de memória para não se gastar o dia inteiro fazendo swap para o disco e estragando a qualidade da ligação com ruídos e cliques.

O sistema de exemplo descrito neste artigo inclui:

    • Duas máquinas virtuais (Xen) oferecidas por empresas especializadas em máquinas virtuais, cada uma com 128 MB de memória, rodando Ubuntu Linux.
    • Asterisk versão 1.2 ou mais recente (a 1.4 é a mais recente na escrita deste artigo).
    • Duas operadoras de gateways telefônicos — uma no Reino Unido e outra nos EUA —, interligando chamadas feitas para telefones comuns nos dois países.
    • Vários telefones físicos, conectados a ATAs (Adaptadores de Telefones Analógicos).
    • Vários softphones rodando no Linux em laptops, desktops, PDAs etc.

Para evitar a obrigação de hospedar qualquer equipamento envolvido na execução do serviço, pode-se usar máquinas virtuais Xen — elas simplesmente existem numa máquina em algum local e são gerenciadas remotamente —, mas também é possível pular essa etapa e instalar o Asterisk num servidor Linux doméstico.

A instalação do Asterisk costuma ser uma simples questão de digitar um comando como apt-get install asterisk ou outro, dependendo da distribuição usada no servidor. Se for interessante instalar também vozes e mensagens diferentes para reproduzir, pode-se instalar alguns dos pacotes de sons do Asterisk.

Figura 1 Operadoras de gateways SIP como a Sipgate oferecem acesso à rede de telefonia convencional.
Figura 1 Operadoras de gateways SIP como a Sipgate oferecem acesso à rede de telefonia convencional.

 

Configuração

Assim como qualquer outro software servidor no Linux, o Asterisk guarda seus arquivos de configuração num diretório sob /etc/, normalmente em /etc/asterisk/. Uma instalação típica inclui vários arquivos de configuração padrão, sendo os seguintes os mais importantes para se começar:

    • asterisk.conf
    • extensions.conf
    • sip.conf
    • voicemail.conf

O arquivo asterisk.conf simplesmente define uma gama de outros arquivos de configuração, e geralmente pode ser deixado com as entradas que vêm por padrão. Provavelmente será necessário personalizar o arquivo sip.conf primeiro, para definir os telefones físicos e softphones disponíveis em sua rede. O arquivo é dividido em duas partes: a primeira é uma seção de configurações gerais, que pode ser deixada com quase todas as entradas nos valores padrão, e a segunda é composta por entradas de telefones individuais para cada aparelho. O exemplo 1 mostra uma seção de definição de telefone.

As entradas do exemplo 1 definem dois telefones, chamados fulano e sicrano, que usam a senha SENHA (obviamente seria melhor usar uma senha de verdade no lugar dessa) para se conectar ao servidor Asterisk. A entrada host informa ao Asterisk que o telefone pode estar se conectando a partir de vários endereços diferentes em vez de um único endereço IP específico. A entrada context informa que esse telefone é interno (internal) — um contexto padrão definido no arquivo extensions.conf. Marcar o telefone como amigo permite que ele origine e receba ligações, o que geralmente significa que o Asterisk tentará acreditar que ele não enlouquecerá.

Antes de se fazer ligações para algum dos dois telefones, é necessário acrescentar extensões no arquivo extensions.conf. Dentro da seção internal do arquivo, pode-se acrescentar linhas como:

[internal] ... exten => 1001,1,Dial(SIP/fulano) exten => 1002,1,Dial(SIP/sicrano) ...

Essas regras dizem ao Asterisk que a primeira ação a tomar ao se discar 1001 ou 1002 é chamar o aparelho apropriado, definido no arquivo sip.conf. É possível especificar conjuntos de regras muito mais complexos, mas agora o que queremos é configurar dois softphones, telefones IP, ATAs ou outros dispositivos SIP distintos para conectá-los ao servidor Asterisk e conseguir ligar para cada telefone a partir da outra extensão.

Uso de um gateway SIP

Depois de se criar uma configuração básica do Asterisk, será interessante configurar um gateway para falar com usuários das velhas redes telefônicas de antigamente. Para isso, pode-se instalar outras linhas de telefone e acrescentar placas adaptadoras especializadas à sua máquina. Porém, nesse ponto, provavelmente será mais fácil assinar alguma das várias operadoras de gateways SIP de baixo custo já disponíveis no Brasil.

A operadora fornecerá um número de telefone que as ligações de fora usarão para chegar até seu servidor. Esse serviço também permite que se faça ligações para o sistema de telefonia convencional.

Para utilizar um gateway SIP externo, é necessário registrar nele quando seu servidor Asterisk for iniciado. Algumas operadoras já informam as melhores configurações para se usar especificamente com servidores Asterisk — já que ele está se tornando muito mais difundido —, mas a configuração da seção [general] do arquivo sip.conf será parecida com:

[general] register =>meuusuario: minhasenha@sip.operadora.com.br/ 551140821300

Isso informa o Asterisk que ele deve tentar se registrar com a operadora SIP com a extensão 551140821300, que será o número de recebimento e o telefone mostrado como ID para quem receber ligações do seu servidor. Além de registrar com a operadora, é necessário acrescentar uma entrada normal para a operadora SIP no arquivo sip.conf:

[operadora1] type=friend username=meuusuario secret=minhasenha host=sip.operadora1.com.br fromdomain=operadora1.com.br nat=yes context=recebidas1 insecure=very

Note que o contexto (context) desse “dispositivo” está configurado para recebidas1. Essa configuração corresponde a uma seção especial no arquivo extensions.conf que lida com chamadas recebidas, como mostra o exemplo 2.

Note também que esse conjunto de regras é um pouco mais complexo, com mais comandos para primeiro tentar discar para uma extensão, depois cair em VoiceMail() se isso não funcionar.

Correio de voz

O correio de voz é uma funcionalidade bem fácil de configurar no Asterisk. É necessário apenas adicionar uma entrada ao arquivo voicemail.conf, como mostram as linhas a seguir:

1001 => 1234,Pinguim Tux,tux@linuxmagazine.com.br

Isso configura o correio de voz para a extensão 1001 (lembre-se de que isso foi passado nas regras anteriores com o comando VoiceMail() no exemplo 2), com senha 1234, pertencendo ao usuário Pinguim Tux no e-mail fornecido. Por padrão, quando um endereço de e-mail é informado, o Asterisk automaticamente converte a mensagem de voz e a envia para esse e-mail — junto com uma mensagem que informa quem originou a chamada, a duração da mesma e várias outras informaçõees configuráveis.

Para permitir o acesso fácil ao correio de voz, pode-se acrescentar uma extensão que permite que se ligue para ele. No arquivo extensions.conf, basta acrescentar as seguintes informações à seção [internal]:

[internal]

exten => 121,1,VoiceMailMain(1001) exten => 121,2,HangUP()

Agora, quem ligar de um dos telefones configurados no Asterisk para a extensão 121 será levado ao menu pessoal do correio de voz, assim que a senha for informada — caso tenha sido especificada uma senha para essa caixa de correio de voz específica.

Se o servidor Asterisk for compartilhado com outros usuários, pode-se eliminar o número da extensão da entrada VoiceMailMain(), e então o Asterisk pedirá o número da extensão no momento da verificação do correio de voz.

Conclusão

Neste artigo, foram descritas algumas etapas simples e rápidas para se familiarizar com a configuração e o uso do servidor de chamadas telefônicas Asterisk. Como um PBX completo, o Asterisk possui vários recursos e é capaz de oferecer várias funções muito mais avançadas, não cobertas neste artigo. Felizmente, há diversos bons livros disponíveis sobre o assunto, assim como tutoriais de Asterisk e comunidades online dispostas a auxiliar novos usuários a ir além do básico.

Quadro 1: VoIP e SIP

VoIP é uma família de diferentes padrões de telecomunicações para codificação e roteamento de chamadas de voz através da Internet, em vez de roteá-las por uma rede de telefonia convencional. Vários esforços históricos de padronização hoje foram substituídos pelo Protocolo de Início de Sessão (SIP). O SIP não é um padrão de condificação para converter a voz humana para datagramas IP. Em vez disso, ele é um protocolo de sessão que lida com roteamento, conexão, transferência e encaminhamento de chamadas. O SIP, que é usado por softwares como o Asterisk, assim como por várias outras operadoras e gateways de VoIP, está se tornando rapidamente um padrão de facto para a comunicação por VoIP.

Quadro 2: ATAs, softphones e uma nova nomenclatura

Um aspecto que se descobre rapidamente a respeito de serviços de VoIP é que eles vêm com uma nova nomenclatura a ser aprendida. Há termos que, assim como outros que encontramos na vida, parecem feitos para os não-iniciados parecerem idiotas até que aprendam a usá-los em conversas cotidianas. O termo ATA, por exemplo, é muito usado. Um adaptador de telefone analógico geralmente é uma pequena caixa com um par de conectores atrás. O ATA se conecta à sua rede e permite que qualquer telefone convencional seja ligado ao servidor Asterisk.

Obter um ATA de baixo custo (até R$250), como o PAP-2NA da Linksys, por exemplo, é altamente recomendado. Note que várias dessas unidades são vendidas pré-configuradas para usar serviços comerciais, e é por isso mesmo que se deve comprar as unidades não configuradas — que talvez custem um pouco mais —, como a versão NA do Linksys PAP-2.

Também se pode usar um softphone, como o Linux Sparkle, o Linphone ou o proprietário, porém gratuito, X-Lite. Este último possui alguns recursos ainda não implementados nos clientes Linux livres — por exemplo, chamadas em conferência e múltiplas “linhas”, permitindo diversas chamadas simultâneas.

A preferência por usar um softphone ou investir em um ATA geralmente depende da frequência de uso do serviço. Se o objetivo for substituir seu telefone principal por uma extensão do Asterisk, fique com o ATA.

Exemplo 1: Definições de telefone em sip.conf

01 [fulano]
02 type=friend
03 secret=SENHA
04 host=dynamic
05 context=internal
06 auth=md5
07 nat=yes
08 reinvite=no
09 canreinvite=no
10 ;qualify=yes
11
12 [sicrano]
13 type=friend
14 secret=SENHA
15 host=dynamic
16 context=internal
17 auth=md5
18 nat=yes
19 reinvite=no
20 canreinvite=no
21 ;qualify=yes

Exemplo 2: Recebimento de chamadas

01 [operadora1]
02
03 exten => _551140821300,1,Answer()
04 exten => _551140821300,2,Dial(fulano)
05 exten => _551140821300,3,VoiceMail(u1001)
06 exten => _551140821300,4,HangUp()