DevSecOps

8 abr, 2014

Faça ligações telefônicas via VoIP com Linux

Publicidade

O VoIP oferece inúmeros benefícios, dos quais a economia não é o menor de todos. Ligações feitas do PC costumam ser grátis, descontados os custos de sua conexão à Internet.

O VoIP também oferece recursos ausentes na maioria das linhas telefônicas convencionais. Por exemplo, os clientes VoIP (também conhecidos como softphones) suportam vídeo e voz, o que significa que o interlocutor consegue ver com quem está falando. E o VoIP é portátil. Se você registrar seu IP atual em sua operadora, ela poderá encaminhar suas ligações onde quer que você se encontre na Internet.

Entretanto, é claro que o VoIP também tem suas desvantagens: para manter uma boa conversa pela Internet, é necessária uma conexão relativamente veloz e com baixa latência. E para receber ligações a qualquer hora, é necessário deixar o computador ligado ininterruptamente. O VoIP talvez não seja para todos, mas a telefonia pela Internet vem ganhando popularidade como alternativa aos serviços convencionais de telefonia. Por isso mesmo, vamos explorar essa tecnologia no Linux.

Dispositivos de áudio são fáceis de configurar no Ekiga.
Dispositivos de áudio são fáceis de configurar no Ekiga.

De A para B

Os pacotes de dados de uma ligação pela Internet precisam de um destino definido, exatamente como os pacotes para navegação na Web. Como alternativa ao gerenciamento local do endereço IP de seus contatos, os atuais provedores de serviços oferecem a possibilidade de entrar seus detalhes num tipo de catálogo de endereços virtual.

Para isso, é necessário registrar-se com o responsável, também conhecido como sua operadora de VoIP, informando-a o IP no qual você pode ser contactado. Se seu endereço for alterado devido a uma mudança sua ou devido ao fato de seu provedor ADSL interromper sua conexão a cada 24 horas e atribuir-lhe um novo IP, não há necessidade de informar todos os seus contatos sobre seu novo endereço.

No Ekiga, pode-se configurar um dispositivo de toque separado.
No Ekiga, pode-se configurar um dispositivo de toque separado.

Se você se encontrar atrás de um gateway NAT, talvez nem saiba seu IP público. Nesse caso, será necessário oSTUN (travessia simples de UDP através de NATs, na tradução do inglês), que oferece a clientes atrás de um gateway NAT a possibilidade de descobrirem seu IP público. Uma requisição feita a um servidor STUN informa seu endereço público na Internet, que em seguida pode ser passado para sua operadora VoIP.

Para fazer uma ligação, os assinantes precisam de uma ID única, como um endereço SIP. Esse endereço age como uma espécie de número de telefone VoIP, mas é mais semelhante a um endereço de email: sip:assinante@domínio

O assinante A pode usar um endereço SIP como AssinanteB@OperadoraB para se comunicar com um contato, o assinante B. A seção posterior ao arroba informa ao cliente A a operadora do cliente B.

Uma vez que os dois assinantes, A e B, tenham se encontrado, eles já podem trocar diretamente dados de voz e até mesmo de imagem, normalmente com RTP (o Real-time Transport Protocol, protocolo de transporte em tempo real). Para desconectar a ligação, ambos os assinantes mais uma vez usam o SIP para contactar suas operadoras.

Um servidor STUN descobre o endereço IP de uma rede.
Um servidor STUN descobre o endereço IP de uma rede.

Configuração — passo a passo

A configuração do VoIP funciona melhor quando feita passo a passo; senão, pequenos problemas podem se tornar barreiras intransponíveis. A tabela 1 mostra uma seqüência recomendada para a configuração.

Para oferecer um gostinho da configuração, no resto deste artigo vamos descrever como configurar o cliente de telefonia Ekiga (antes conhecido como GnomeMeeting) para usar a operadora gratuita Ekiga.net[2]. Para facilitar a aplicação dessa configuração a outros clientes, não usaremos o assistente do Ekiga, seguindo, em vez disso, as etapas descritas na tabela 1. Para isso, é necessário cancelar o diálogo ao se iniciar o Ekiga.

A máquina em nosso laboratório roda uma versão recente do Gentoo Linux; os arquivos de dispositivos podem ter nomes ligeiramente diferentes em outras distribuições. Após completar a configuração, o sistema usará os alto-falantes externos, que são conectados a um chip de som na placa-mãe para sinalizar chamadas recebidas. Para a entrada e saída de voz, usaremos um headset USB. Minha conexão à Internet é um DSL com 6 Mbps de download e 580 Kbps de upload. O tipo de rede é insignificante, contanto que forneça largura de banda suficiente (aproximadamente 150 Kbps em ambas as direções para uma ligação com voz e vídeo).

Som ligado

A maioria das distribuições Linux atuais usam o subsistema ALSA[3]. A maioria dos distribuidores embutem o suporte a som dentro do kernel, ou ao menos usam módulos do kernel. Se seu desktop gera sinais acústicos enquanto você trabalha, ou se você consegue executar um reprodutor de áudio para ouvir música, o ALSA ou algum outro sistema de som já está configurado em seu sistema.

Além do suporte genérico do ALSA, também são necessários drivers para chips de áudio. Para suportar um headset USB, é necessário o módulo do kernel snd_usb_audio, que freqüentemente vem ativado. Para uma lista de dispositivos reconhecidos pelo subsistema ALSA, verifique o sistema de arquivos proc. A saída deve ser semelhante à do exemplo 1.

Configuração de uma conta de usuário com o Ekiga como operadora.
Configuração de uma conta de usuário com o Ekiga como operadora.

Se seu sistema não conseguir detectar todos os dispositivos de som conectados, pode ser útil recompilar o kernel ou instalar o driver de som referente ao dispositivo específico que não foi detectado.

Se houver suporte ao áudio de sua placa-mãe ou de sua placa de som, a saída do comando lspci deve dar maiores detalhes. A seguinte linha foi gerada em nossa máquina de testes: 00:04.0 Multimedia audio controller: nVidia Corporation CK804 AC’97 Audio Controller (rev a2).

A saída de dmesg ao se plugar o headset USB informa se o sistema operacional detectou com sucesso o dispositivo (exemplo 2).

Se seu sistema de arquivos /proc detalhar as fontes de áudio esperadas, deve ser possível reproduzir arquivos de áudio com um programa como Rhythmbox ou Amarok. Dependendo da sua distribuição, talvez seja necessário acrescentar o usuário VoIP a um grupo específico — em nosso caso, foi o grupo áudio# ls -l /dev/sound … crw-rw–- 1 root audio 14, 3 May 15 16:30 dsp crw-rw–- 1 root audio 14, 19 May 16 23:05 dsp1 …

Depois de adicionar um usuário a um grupo, é preciso reiniciar os aplicativos, acessando os dispositivos de áudio em uma nova shell para aplicar as mudanças. O comando groups relata os grupos aos quais o usuário atual pertence.

Se não for emitido qualquer som dos alto-falantes, pode-se usar um programa de mixagem como o Alsamixer,Gamix ou Kmix para determinar se os canais de saída estão mudos ou o volume está baixo demais.

Um headset ou microfone interno de uma webcam são boas opções para a entrada de voz. Um microfone de webcam deve aparecer na lista de dispositivos do sistema de arquivos /proc. Novamente, se o objetivo for comunicar-se com um dispositivo como um microfone de webcam, use um programa de mixagem para se certificar de que o microfone não está mudo.

Áudio no cliente

Para ordenar que o cliente VoIP envie a saída de som para o headset e não para os alto-falantes, selecioneEditar | Preferências | Dispositivos | Dispositivos de áudio (figura 1) no Ekiga e especifique os dispositivos para entrada e saída de voz. Se o dispositivo adequado não constar na lista, clique em Detectar dispositivos.

É importante não confundir o dispositivo de saída de voz com o dispositivo de toque. Se for usado um headset, o objetivo é que só seja necessário usá-lo nas ligações, e não para ouvir o “telefone” tocar. Se o headset for usado como dispositivo de toque, o usuário provavelmente não saberá que está recebendo uma ligação. Por isso, faz muito mais sentido utilizar os alto-falantes como dispositivos de toque.

No Ekiga, as configurações para definir o dispositivo de toque localizam-se em Geral | Eventos de Som (figura 2). Selecione o dispositivo de toque a partir da lista em Dispositivo de saída alternativo. Se nenhum som for emitido ao se clicar no botão Reproduzir, pode-se tentar os dispositivos Default ou Standard.

Quem sou eu?

Se sua máquina estiver escondida atrás de um roteador ou um firewall que faça NAT, seu cliente precisará contactar um servidor STUN para descobrir seu endereço IP público antes de conseguir trocar enviar ou receber dados. Para que isso aconteça, é necessário fornecer o nome do servidor STUN de sua operadora em seu cliente VoIP. No Ekiga, essa configuração se encontra em Protocolos | Configurações de Rede (figura 3). Independentemente de quantas contas existirem no cliente VoIP, apenas um servidor STUN já é suficiente.

Para clientes VoIP que suportam um servidor STUN para cada conta (como o Twinke[4], por exemplo), é suficiente fornecer o servidor STUN recomendado pela operadora. Se sua máquina possuir múltiplos endereços IP, será necessário especificar a porta requerida como Porta monitorada. Em caso de dúvidas, é recomendável tentar a interface selecionada por padrão.

Configuração de uma câmera no Ekiga.
Configuração de uma câmera no Ekiga.

Contas

Agora é hora de configurar uma conexão a uma operadora. A tabela 2 mostra uma lista de detalhes comuns de uma conta. A operadora deve fornecer a maioria deles ao se configurar a conta. Embora seja possível selecionar seu próprio nome de usuário e uma senha, algumas operadoras não permitem isso, obrigando os clientes a manter os dados fornecidos.

figura 4 mostra as configurações para uma conta no Ekiga.net. No cliente VoIP Ekiga, pode-se selecionarEditar | Contas para acessar esses detalhes, e depois pressionar Adicionar para fornecê-los.

Se houver múltiplas contas no mesmo cliente, é bom especificar a mais usada como conta padrão. Note que é preciso marcar a caixa na coluna Á na tabela para registrar o cliente na operadora, informando-a para onde encaminhar as ligações. Se a coluna Estado exibir Falha ao registrar em vez de Registrado, algo está errado na configuração.

A seguir, é hora de testar a conta do Ekiga. Para isso, digite o endereço SIP de um contato na janela do programa e clique no botão para realizar a chamada. Deve-se ouvir um tom de discagem e a conexão deve ser estabelecida, contanto que o contato aceite a ligação.

Na falta de um contato para chamar, pode-se tentar uma conta automática de resposta como sip:500@ekiga.net. Ligando para ela, ouve-se o que for falado, com um pequeno intervalo.

Problemas?

Há várias fontes de erro potenciais na configuração de um cliente VoIP. Algumas causas mais comuns de erro, além das respectivas soluções possíveis.

Ativar o log é uma opção útil se o cliente não conseguir se registrar, ou se não for possível conectar-se. No Ekiga, o item de menu Ferramentas | Histórico de Chamadas mostra todas as mensagens emitidas pelo programa, incluindo as de erro que são emitidas quando não se consegue estabelecer conexão com algum contato.

Se nem a tabela nem as mensagens de erro do histórico conseguirem resolver o problema, os inúmeros fóruns online, listas de email e grupos de discussão disponíveis mediante uma busca na Web certamente conseguirão. Softwares como Tcpdump[5] e Wireshark[6] também podem ajudar em casos difíceis de solucionar, permitindo uma análise do tráfego STUN e SIP.

Fronteiras

Algumas tentativas de conexão falham porque a operadora se recusa a encaminhar chamadas provenientes de outras operadoras. O uso de proxies SIP freqüentemente recomendados pelas operadoras também pode impedir que suas próprias chamadas alcancem outras operadoras.

A solução mais fácil para lidar com esse contra-senso é ambos os assinantes mudaram-se para uma operadora gratuita, e usarem-na sempre que desejarem se comunicar. A opção Padrão da janela de contas do Ekiga é necessária, nesse caso, para quem fizer a ligação.

Se a operadora restringir apenas ligações de ou para outras redes em casos excepcionais, talvez seja melhor ligar para o telefone comum do usuário, e não para seu número SIP. Dependendo da operadora mudam os preços desse tipo de procedimento, mas é de se imaginar que a travessia entre os dois mundos seja mais cara que uma simples ligação por SIP — nesse caso, talvez uma ligação entre dois telefones comuns seja mais barata que uma de um SIP para um comum.

O Ekiga suporta conversas de texto além de voz e vídeo.
O Ekiga suporta conversas de texto além de voz e vídeo.

Largura de banda

Se a qualidade da voz ficar surpreendentemente baixa, ou se a conexão cair totalmente, as duas pontas da mesma devem verificar se outros aplicativos estão fazendo uso intenso da rede. Exemplos típicos são o download de grandes arquivos e o envio de anexos de email.

Cineasta

Para configurar uma webcam em seu cliente VoIP no Linux, certamente será necessário empregar o subsistemaVideo4Linux[7]. Dependendo da distribuição, esse subsistema pode estar compilado dentro do kernel ou disponível como um conjunto de módulos.

Será necessário um driver para o modelo da câmera. É fácil descobrir se um kernel possui suporte a esse subsistema: se existir o arquivo video ou video0 no diretório /dev/v4l/, então sua câmera foi detectada pelo kernel, que obrigatoriamente tem suporte ao Video4Linux. É importante lembrar-se de incluir no grupo dono do dispositivo video ou video0 todos os usuários que devem ter permissão para utilizar a câmera. O exemplo 3mostra o que deve ser mostrado pelo comando dmesg quando uma câmera for conectada e corretamente detectada pelo kernel.

Programas como o Xawtv[8] podem ser usados para se certificar de que a câmera está funcionando antes de integrá-la ao cliente VoIP.

No Ekiga, isso é feito em Preferências | Dispositivos | Dispositivos de Vídeo (figura 5), selecionando-se V4L2 ouV4L como plugin de vídeo.

Paciência

Uma última recomendação: ao se fechar o cliente VoIP, é necessária certa dose de pacincia, pois ele leva alguns segundos para informar à operadora que o seu usuário SIP está se desconectando. Matar o processo antes de terminada essa fase pode impedir o registro do usuário na operadora na próxima inicialização do cliente VoIP.

Mais informações

  • [1] Cliente VoIP Ekiga: http://www.ekiga.org/
  • [2] Conta VoIP gratuita: http:/www.ekiga.net/user/reg/
  • [3] Projeto ALSA: http://www.alsa-project.org/
  • [4] Twinkle: http://www.twinklephone.com/
  • [5] Tcpdump: http://www.tcpdump.org/
  • [6] Wireshark: http://www.wireshark.org/
  • [7] Video4Linux: http://linux.bytesex.org/
  • [8] Xawtv: http://linux.bytesex.org/xawt

Quadro 1: Resolução de problemas

  • Não sai som nos alto-falantes nem no headset (mensagem de erro);
  • Verifique a configuração do ALSA (kernel, módulos e drivers, /proc/asound/cards)
  • Verifique os direitos de acesso a /dev/sound e os grupos dos usuários
  • Sem som nem mensagem de erro
  • Ligue os alto-falantes
  • Conecte os alto-falantes ou o headset corretamente
  • Certifique-se de que alto-falantes de headset não estão configurados como mudos
  • Aumente o volume dos canais Master e PCM
  • O registro falha
  • Ative os logs para localizar o erro
  • Verifique as configurações de servidor STUN
  • Verifique novamente os dados da conta SIP
  • Configure um proxy SIP
  • Sem conexão para o contato
  • Ative os logs
  • Procure erros de digitação no endereço SIP da operadora
  • Selecione outra operadora em seu cliente
  • Apague as configurações de proxy SIP
  • Ligue para um telefone comum (não-SIP)
  • Verifique se estão marcadas opções de rejeitar ou encaminhar ligações automaticamente
  • Somente um assinante ouve sons
  • Use STUN
  • Verifique as configurações do roteador e do firewall
  • Má qualidade de voz ou queda nas ligações
  • Use menos banda com outros programas
  • Sem imagem de vídeo
  • Verifique a configuração do Video4Linux (kernel, módulos e driver, /dev/v4l)
  • Verifique direitos de acesso em /dev/v4l
  • Verifique se o usuário está no grupo correto
  • Conecte a câmera adequadamente
  • Ajuste brilho e contraste da imagem da câmera
  • Sem imagem de vídeo no cliente VoIP
  • Ative a transmissão de vídeo no cliente VoIP
  • Selecione o dispositivo de vídeo correto
  • Use um cliente VoIP diferente para comparação
  • Cores erradas na imagem
  • Especifique o padrão correto de imagem (PAL, SECAM, NTSC)
  • Desative a câmera, desconecte-a, reconecte-a e configure-a novamente

Exemplo 1: Lista de dispositivos do ALSA

01 # cat /proc/asound/cards
02 0 [CK804 ]: NFORCE - NVidia CK804
03 NVidia CK804 with ALC655 at irq 17
04 1 [Headset ]: USB-Audio - Logitech USB Headset
05 Logitech Logitech USB Headset at usb-0000:00:02.0-8, full speed

Exemplo 2: Conexão do headset

01 # dmesg | tail
02 ...
03 usb 2-8: new full speed USB device using ohci_hcd and address 7
04 usb 2-8: configuration #1 chosen from 1 choice
05 input: Logitech Logitech USB Headset as /class/input/input5
06 input: USB HID v1.00 Device [Logitech Logitech USB Headset] on usb-0000:00:02.0-8

Exemplo 3: Conexão de uma webcam

01 # dmesg | tail
02 ...
03 usb 1-1.1.4: new full speed USB device using ehci_hcd and address 48
04 usb 1-1.1.4: configuration #1 chosen from 1 choice
05 ... USB SPCA5XX camera found.(ZC3XX)
06 ...

***

Artigo publicado originalmente na Linux Magazine: http://www.linuxnewmedia.com.br/lm/article_online/conecte_se