Daniel Caraça
Atualmente, a telefonia é um meio de comunicação indispensável. Apesar de existirem muitos outros meios de comunicação, é ainda vencedora a simplicidade e eficácia da telefonia na transmissão de informações. Infelizmente, seu custo pode ser alto, principalmente levando em consideração ligações de longa distância. Uma solução que tem sido a cada dia mais usada é a de unir a telefonia com a internet, criando o VoIP
[1], ou "Voz por IP", que pode fazer ligações de longa distância a preços de ligações locais. Utilizando Softwares Livres
[2], a implementação do VoIP se torna muito barata e ainda conta com a vantagem de fácil instalação e manutenção.
Uma conexão de baixa qualidade com a Internet pode trazer problemas para uma ligação VoIP. Quando se faz uma ligação normal, tem-se a sensação de estar falando com uma pessoa logo ao lado, pois a transmissão da voz é instantânea. Mas quando por algum motivo ocorre algum atraso, o usuário sente um certo desconforto e fica falando
"Alô, alô?" até que a outra pessoa responda, ou seja, até que o sinal da resposta chegue. Assim para se ter uma comunicação eficaz por VoIP, deve-se dar muita importância a parâmetros como latência (ou a demora em responder)
[3] e
jitter (ou a irregularidade desse tempo)
[4], importantes para se garantir a qualidade de serviço da ligação
[5].
Em cidades digitais implementadas com redes
mesh [6] há a possibilidade dos dados passarem por mais de um nó antes de chegar ao destino final -- cada nó intermediário é chamado de
hop. Se o número de
hops for muito grande, isto aumentará a latência da comunicação.
A latência da comunicação faz uma comunicação VoIP ser um ótimo teste para uma rede. Pois apesar de números obtidos por
benchmarks [7] darem bastante informação, nada melhor do que sentir
"na pele", intuitivamente, a qualidade da rede.
Este tutorial, aparentemente, mais um de tantos outros, tem como objetivo mostrar como pode ser simples fazer uma conexão VoIP entre dois computadores, o que é base até mesmo de sistemas VoIP de grande tamanho, conectando muitos computadores. A abordagem aqui têm ênfase na simplicidade, e apenas o mínimo necessário será explicado. Uma outra diferença importante deste texto é que aqui se ensina como a associar nomes aos ramais, o que não é o tipo de coisa mostrada em qualquer tutorial.
São usados 3 computadores, sendo 1 deles o servidor e os outros 2 os clientes. Nos clientes será usado um
softphone; ou seja: um software que simula um telefone. Neste tutorial está sendo usado o Ekiga
[8], que já vem instalado no Ubuntu
[9], hoje a distribuição Linux mais popular
[10]. Contudo, em qualquer outra distribuição o Ekiga funcionará da mesma forma. No servidor será usado o
asterisk
[11], um servidor VoIP que é Software Livre
[2]. Para instalá-lo nas distribuições Debian
[12], Ubuntu
[9] e outras que possuam
apt-get
[13], basta digitar o seguinte comando:
# sudo apt-get install asterisk |
Caso a distribuição em uso não possua o comando
apt-get
, há vários tutoriais na internet sobre como instalar o
asterisk
em outras distribuições através dos comandos correspondentes a elas, como por exemplo, o comando
yum
[14] do Fedora
[15] e o
yaST
[16] do openSUSE
[17]O
asterisk
funciona da seguinte forma: quando um usuário se loga no servidor com um programa cliente, o
asterisk
cria uma rota para se comunicar com o computador dele. Isso significa que o
asterisk
saberá para onde deve redirecionar a ligação caso alguém ligue para o ramal do usuário. Isso quer dizer também que, caso o usuário não se logue, o
asterisk
não saberá como chegar a seu computador. As configurações dele são feitas através de arquivos de configuração, onde se adicionam ramais, estabelecem-se as ações para as chamadas etc. Dois arquivos muito usados são o
sip.conf
e o
extensions.conf
, os quais serão modificados a seguir:
sip.conf:
- Nesse arquivo estão informações sobre os ramal que utilizarão o protocolo SIP
[18] para se comunicar.
1) Há uma linha no arquivo que inicia-se com:
Caso se use
0.0.0.0
, o
asterisk
escutará em todas as interfaces, mas parece aconselhável colocar apenas o IP da interface principal do servidor, pois assim não serão bloqueadas portas para VoIP de outras interfaces, como pode ver visto na descrição da chamada de sistema
bind
[19]2) Adicione as seguintes linhas no final do arquivo:
[2000] type=friend secret=1234 host=dynamic context=teste
[2001] type=friend secret=4321 host=dynamic context=teste
|
3)Explicando:
-
[]
o nome entre as chaves será seu login e o seu ramal para o protocolo SIP
-
type
é o tipo de usuário. Existem 3 tipos:
friend,
peer e
user. Respectivamente eles podem receber e fazer ligações, apenas receber ligações e apenas fazer ligações
-
secret
é a senha se logar no servidor
-
host
é o IP do computador do cliente, ou
dynamic
caso o IP seja dinâmico
-
context
é o contexto, ou grupo, que o usuário estará no arquivo
extensions.conf
. Caso ele pertença a um contexto, não poderá ligar para outro ramal pertencente a outro contexto, pelo menos sem redirecionamento de chamada.
Isto cria dois usuários SIP com o mínimo de informações possível.
extensions.conf
-- Aqui estarão descritas as ações para os números discados
1) As seguintes linhas devem ser adicionada ao final do arquivo:
[ntsf] exten => 2000,1,Dial(SIP/2000,20) exten => 2000,2,Hangup exten => joao,1,Dial(SIP/2000,20) exten => joao,2,Hangup
exten => 2001,1,Dial(SIP/2001,20) exten => 2001,2,Hangup exten => maria,1,Dial(SIP/2001,20) exten => maria,2,Hangup
|
2) Explicando:
-
[]
o nome entre as chaves será o nome do contexto, ou grupo, que pertencem essas extensões.
-
exten => 2000,x,.....
significa que quando ligarem para o ramal 2000, serão executados os comandos iniciados por 2000, começando pela prioridade 1, depois 2 e assim por diante...
-
....,Dial(SIP/2000,20)
significa que o
asterisk
irá chamar durante 20 segundos o computador que se logou como
2000
(ramal definido no arquivo
sip.conf
).
-
Hangup
significa que irá finalizar a ligação, caso não completada.
- os nomes
joao e
maria
não foram definidos em nenhum outro lugar, mas podemos utilizá-los. Esse é o interessante do arquivo
extensions
: ele diz ao
asterisk
o que fazer quando alguém liga para algum ramal. Assim ligar para um numero não significa que só se poderá falar com uma pessoa que usa ramal, pois é possível criar ramais de redirecionamento, ramais de secretária eletrônica, ramais de atendimento etc. Fazendo dois ramais diferentes executarem a mesma ação, é um método fácil de dar aos usuários a escolha entre utilizar números ou nomes.
Com isso já se tem o suficiente para fazer uma ligação utilizando o
asterisk. A última coisa que é necessário fazer é carregar esses arquivos no
asterisk
. Para isso, basta digitar:
Assim a CLI
[20] do
asterisk
será aberta. Deve-se agora digitar os dois comandos seguintes:
# sip reload |
# dialplan reload |
Assim os arquivos
sip.conf
e
extensions.conf
serão carregados e o
asterisk
está pronto para gerenciar as ligações.
Nos clientes, abre-se o Ekiga, clica-se na aba
Edit
e depois em
Accounts
. Na tela aberta, clica-se em
Accounts
e depois em
Add a Sip account
. Na outra tela que se abrirá, informa-se no
registrar
o IP da maquina onde esta o
asterisk
, no
user
e
authentication user
coloque o ramal, como por exemplo 2000, e como
password
a respectiva senha. Como
nome
, coloque qualquer um, pois é um parâmetro para o Ekiga, e no
timeout
algum valor de tempo em segundos, como por exemplo 60. Agora pressione
Ok
e de
close
na outra tela. Faça isso para o outro computador e com isso as configurações estão terminadas.
Para fazer a ligação digite, em algum dos clientes, ramal@ip.do.servidor no local onde está sip:. Aperte
enter
ou clique no
botão verde
e a ligação será feita.
Essas configurações apenas possibilitam fazer ligações entre 2 computadores, mas o asterisk tem um potencial muito maior, permitindo secretária eletrônica, sons, espera, salas de conferencias, etc. Caso se interesse por mais informação, há muitos tutoriais na internet que se aprofundam mais, como o VoIP Wiki
[21]Referências
[1] VoIP
https://secure.wikimedia.org/wikipedia/pt/wiki/VoIPVisitado em 23/03/2010
[2] Software Livre
https://secure.wikimedia.org/wikipedia/pt/wiki/Software_livreVisitado em 23/03/2010
[3] Latência
https://secure.wikimedia.org/wikipedia/en/wiki/Latency_(engineering)Visitado em 23/03/2010
[4] Jitter
https://secure.wikimedia.org/wikipedia/pt/wiki/JitterVisitado em 23/03/2010
[5] O que é Traffic shaping, afinal?
http://tecnologiassemfio.wordpress.com/2010/02/26/o-que-e-traffic-shaping-afinal/Visitado em 23/03/2010
[6] Redes mesh e grafos
http://tecnologiassemfio.wordpress.com/2010/01/22/redes-mesh-e-grafos/Visitado em 23/03/2010
[7] Benchmark
http://tecnologiassemfio.wordpress.com/2010/01/29/benchmark-distribuidos-para-redes-mesh/Visitado em 23/03/2010
[8] Ekiga
https://secure.wikimedia.org/wikipedia/pt/wiki/EkigaVisitado em 23/03/2010
[9] Ubuntu
https://secure.wikimedia.org/wikipedia/pt/wiki/UbuntuVisitado em 23/03/2010
[10] DistroWatch.com
http://distrowatch.com/index.phpVisitado em 23/03/2010
[11] asterisk
https://secure.wikimedia.org/wikipedia/pt/wiki/Asterisk
Visitado em 23/03/2010
[12] Debian
https://secure.wikimedia.org/wikipedia/pt/wiki/DebianVisitado em 23/03/2010
[13] Advanced Packaging Tool
https://secure.wikimedia.org/wikipedia/pt/wiki/Advanced_Packaging_ToolVisitado em 23/03/2010
[14] Yum
http://fedoraproject.org/wiki/Tools/yumVisitado em 23/03/2010
[15] Fedora
http://en.wikipedia.org/wiki/Fedora_(operating_system)Visitado em 23/03/2010
[16] YaST
http://en.opensuse.org/YaSTVisitado em 23/03/2010
[17] openSUSE
http://en.wikipedia.org/wiki/OpenSUSEVisitado em 23/03/2010
[18] Session Initiation Protocol
http://en.wikipedia.org/wiki/Session_Initiation_ProtocolVisitado em 23/03/2010
[19] Bind
http://publib.boulder.ibm.com/infocenter/tpfhelp/current/index.jsp?topic=/com.ibm.ztpf-ztpfdf.doc_put.cur/gtpc2/cpp_bind.htmlVisitado em 23/03/2010
[20] Command Line Interface
http://en.wikipedia.org/wiki/Command-line_interfaceVisitado em 23/03/2010
[21] VoIP Wiki
http://www.voip-info.org/wiki/view/AsteriskVisitado em 23/03/2010