Usando o smartphone como modem Bluetooth, no Linux

Usando o smartphone como modem Bluetooth, no Linux

Apesar de ser mais associado com o uso de headsets e transferência de pequenos arquivos, o Bluetooth possui dois perfis que permitem que o smartphone compartilhe sua conexão de dados com outros aparelhos, incluindo, naturalmente, os PCs e notebooks.

O sistema mais tradicional e mais usado é o DUN (dial-up network), onde o celular simula o comportamento de um modem, permitindo que o desktop “disque” e acesse a rede da operadora através dele. Na verdade, a conexão é estabelecida pelo próprio celular, apenas os pacotes são repassados ao desktop, usando o Bluetooth como uma porta serial.

Atualmente, os aparelhos da Nokia com o S60 são (de uma forma geral) as melhores opções para conectar usando o notebook, já que eles suportam DUN nativamente e o recurso fica disponível por padrão depois de fazer o pairing e autorizar as conexões proveniente do PC, sem que você precise de nenhuma configuração em especial.

O suporte ao DUN é tão maduro que você pode até mesmo usar a conexão simultaneamente no PC e no próprio aparelho (o que permite que você “empreste” a conexão para algum amigo necessitado, sem precisar deixar o smartphone parado enquanto ele a está usando). Você também não terá grandes dificuldades em usar a conexão em outros dispositivos, como navegadores GPS, ou mesmo em Pocket PCs ou outros smartphones que ofereçam suporte ao DUN.

Obviamente, tudo isso é válido apenas para quem tem um plano de dados ilimitado, já que é inviável usar a conexão no notebook se você paga por megabyte transferido.

A configuração básica inclui o número de discagem, a porta em que o modem está conectado (que no caso da conexão via Bluetooth no Linux é a “/dev/rfcomm0”) e a APN da operadora). Aqui vão os parâmetros de configuração para as principais operadoras (no final de 2008). As configurações mudam conforme as operadoras atualizam suas redes, por isso não deixe de checar em caso de erro:

Vivo:
Usuário e senha: vivo/vivo
Telefone: *99#
APN: zap.vivo.com.br

Claro:
Usuário e senha: claro/claro
Telefone: *99***1#
APN: claro.com.br ou bandalarga.claro.com.br

TIM:
Usuário e senha: tim/tim
Telefone: *99# (para as conexões 3G) ou *99***1# (para os planos antigos, com EDGE)
APN: tim.br

Se por acaso você ainda estiver usando um dos planos CDMA da Vivo, o número de discagem é “#777” e o login é o número do telefone (incluindo o código de área), seguido de um “@vivozap.com.br” como em “1199998888@vivozap.com.br”, com a senha “vivo”.

Conectar via Bluetooth pode ser um pouco mais complicado do que simplesmente usar um modem USB, mas oferece a vantagem de ser uma solução 100% wireless. Você pode deixar o celular com o DUN ativado e efetuar a conexão a partir do notebook sempre que precisar, sem nem tirar o celular do bolso. Muitos notebooks já vem com transmissores Bluetooth integrados, nos demais você pode usar um dos transmissores bluetooth em miniatura que hoje são relativamente fáceis de encontrar em lojas online. O tamanho compacto permite que você deixe o transmissor instalado continuamente, como se fosse um transmissor interno:

Para conectar no Linux, o primeiro passo é descobrir qual é o endereço do transmissor Bluetooth do smartphone, usando o comando “hcitool scan”:

$ hcitool scan

Scanning …
00:21:FE:CF:A2:E1 E71

Precisamos também descobrir qual é o canal que é usado pelo smartphone para o acesso ao DUN. Para isso, usamos o comando “sdptool search DUN”:

$ sdptool search DUN

Inquiring …
Searching for DUN on 00:1B:AF:E4:AA:5B …
Service Name: Dial-Up Networking
Service RecHandle: 0x10003
Service Class ID List:
“Dialup Networking” (0x1103)
Protocol Descriptor List:
“L2CAP” (0x0100)
“RFCOMM” (0x0003)
Channel: 2

Language Base Attr List:
code_ISO639: 0x454e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
“Dialup Networking” (0x1103)
Version: 0x0100

Como pode ver, ele vomita uma grande quantidade de informações, mas o que nos interessa é a linha “Channel”, que no meu caso é 2. O canal 2 é usado pela maioria dos aparelhos da Nokia, enquanto aparelhos de outros fabricantes usam normalmente o canal 1 mas, de qualquer forma, não custa verificar.

O passo seguinte é ativar o rfcomm, que cria um link serial entre o desktop e o smartphone, permitindo o uso do DUN. Para isso, edite o arquivo “/etc/bluetooth/rfcomm.conf“, deixando-o com o seguinte conteúdo:

rfcomm0 {
bind yes;
device 00:21:FE:CF:A2:E1;
channel 2;
comment “E71“;
}

Note que o “00:21:FE:CF:A2:E1” e o “E71” correspondem ao ID e ao nome do aparelho, que você obtém ao rodar o comando “hcitool scan”. É importante indicar corretamente o canal, já que sem ele o PC não consegue se conectar ao smartphone.

Continuando, dê uma olhada também no arquivo “/etc/bluetooth/hcid.conf“, onde vão as configurações gerais do Bluetooth. Este é um exemplo de arquivo de configuração, que você pode usar como modelo:

options {
autoinit yes;
security auto;
pairing multi;
passkey “1234”;
}

device {
name “Semprao”;
class 0x3e0100;
iscan enable; pscan enable;
lm accept;
lp rswitch,hold,sniff,park;
}

As opções importantes aqui são as linhas “passkey” e “name”. As demais já vêm configuradas por padrão, permitindo a conexão de qualquer dispositivo.

A opção “name” determina o nome com o qual seu PC aparecerá na piconet (a rede Bluetooth). A passkey (também chamada de PIN) é um código de segurança, que você precisa fornecer na hora de conectar seu celular ou qualquer outro dispositivo ao seu PC. A passkey default é “1234”, depois de testar, não deixe de mudar para algo mais seguro.

Depois de terminar, reinicie o serviço do Bluetooth para que a configuração entre em vigor:

# /etc/init.d/bluetooth restart

Nesse ponto, o comando “rfcomm” deve mostrar algo como:

# rfcomm
rfcomm0: 00:21:FE:CF:A2:E1 channel 2 clean

Isso indica que o link entre o PC e o celular foi criado com sucesso. Verifique também se o arquivo “/dev/rfcomm0” foi criado. Em alguns casos, pode ser necessário desligar e ligar o celular para que ele seja criado corretamente.

O próximo passo é (se já não fez anteriormente) fazer o pairing entre o PC e o smartphone. A principal dica é que você deve definir seu notebook como dispositivo autorizado dentro da configuração do Bluetooth (que nos Nokia vai no Configurações > Conectiv. > Bluetooth) depois de fazer a conexão inicial, de forma que você possa ativar a conexão quando quiser, sem precisar ficar respondendo a conexões adicionais. Com isso, você pode ativar a conexão no notebook sem precisar tirar o smartphone do bolso.

Neste ponto, o suporte a Bluetooth já está configurado e testado, falta apenas estabelecer a conexão usando o kppp, gnome-ppp ou outro discador.

A forma mais rápida de gerar a conexão é usar o wvdial, que é um discador de modo texto, onde você pode simplesmente colocar as configurações de discagem dentro de um arquivo de texto e chamá-lo sempre que quiser ativar a conexão. Para usá-lo, edite o arquivo “/etc/wvdial.conf“, deixando-o com o seguinte conteúdo:

# Modelo do /etc/wvdial.conf para conexões via DUN
# Ao copiar e colar, verifique as aspas e o aparecimento de caracteres estranhos (cortesia do UTF-8)

[Dialer 3g] Modem = /dev/rfcomm0
Baud = 921600
DialCommand = ATDT
FlowControl = Hardware(CRTSCTS)
Username = vivo
Password = vivo
Phone = *99#
Check Def Route = on

Stupid mode = 1
Auto Reconnect = on
Auto DNS = on
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init5 = AT+CGDCONT=1,”IP”,”zap.vivo.com.br“,””,0,0
ISDN = 0
Modem Type = Analog Modem

As linhas “Modem”, Username”, “Password” e “Phone” especificam a porta e as configurações da operadora, enquanto as linhas “Init1”, “Init2” e “Init5” especificam as strings de discagem. Estas do exemplo são as strings para conexões via Bluetooth, mas outros tipos de conexões podem utilizar strings diferentes. Veja que a antepenúltima linha especifica a APN da operadora, não se esqueça de alterá-la caso necessário.

Depois de salva a configuração, você precisa apenas usar o comando “wvdial 3g” (como root) quando quiser conectar:

# wvdial 3g

–> WvDial: Internet dialer version 1.56
–> Initializing modem.
–> Sending: ATZ
ATZ
OK
–> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
–> Sending: AT+CGDCONT=1,”IP”,”zap.vivo.com.br”,””,0,0
AT+CGDCONT=1,”IP”,”zap.vivo.com.br”,””,0,0
OK
–> Modem initialized.
–> Sending: ATDT*99#
–> Waiting for carrier.
ATDT*99#
CONNECT

Como pode ver, o wvdial mostra todos os detalhes da conexão, o que acaba sendo útil para solucionar problemas inesperados, já que você pode ver as mensagens de erro e pesquisar sobre elas. Para encerrar a conexão pressione Ctrl+C (apenas uma vez) e deixe que ele faça o processo normal de desconexão e restaure a rota padrão.

Se algo der errado durante a discagem (mesmo que a configuração esteja correta), experimente reiniciar o smartphone e tentar de novo. Nos Nokia, é muito comum que o subsistema bluetooth fique travado, impedindo que você se conecte, o que é rapidamente resolvido ao desligar e ligar novamente.

Algumas operadoras, com destaque para a Claro e a Embratel (com o Giro), tem implementado um sistema de timeout nas conexões 3G, que faz com que as conexões sejam encerradas depois de alguns segundos de inatividade e restabelecidas automaticamente assim que é necessário transmitir dados. O problema é que em áreas com muitos assinantes o processo pode demorar alguns segundos, ou mesmo travar a conexão, obrigando-o a desconectar e reconectar novamente, fazendo com que na prática a conexão fique bastante instável.

Uma solução simples para isso no Linux é usar o ping para enviar um pacote de dados a cada dois segundos, evitando que a conexão seja encerrada. Basta abrir um terminal e deixar o comando correndo indevidamente enquanto estiver conectado:

$ ping -i 2 google.com

Se por acaso você tiver problemas de estabilidade, com a conexão caindo a cada dois minutos, abra o arquivo “/etc/ppp/options” e comente (ou remova) as linhas:

lcp-echo-interval 30
lcp-echo-failure 4

O “lcp-echo” é um pacote de controle, usado para verificar se a conexão ainda está ativa. Quando o servidor do provedor de acesso deixa de responder, o discador presume que a conexão foi perdida e desconecta automaticamente. O problema é que estes pacotes não são suportados em muitos aparelhos (como no Treo 650), fazendo com que a conexão sempre caia depois de dois minutos.

Se estiver preocupado com a segurança, você pode ativar o firewall simples para bloquear tentativas de conexão vindas da Internet adicionando os comandos:

iptables -A INPUT -p tcp -i ppp0 –syn -j DROP
iptables -A INPUT -p udp -i ppp0 –dport 1:1024 -j DROP

… no final do arquivo “/etc/ppp/ip-up“.

Se quiser compartilhar a conexão com outros micros ligados em rede com o primeiro (você pode criar uma rede ad-hoc usando a placa wireless e assim compartilhar a conexão rapidamente com os amigos, por exemplo), adicione as três linhas abaixo no mesmo arquivo:

modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

O arquivo “/etc/ppp/ip-up” é executado automaticamente pelo sistema quando a conexão é ativada, de forma que ao colocá-los no final do arquivo o firewall e/ou o compartilhamentos passam a ser ativados automaticamente sempre que você ativa a conexão. Você pode também executá-los de forma avulsa diretamente no terminal.

Outra dica é que muitas distribuições antigas (anteriores a 2008) usam uma versão bugada do wvdial que não altera a rota padrão depois de conectado, o que faz com que o sistema continue tentando acessar através da placa de rede ou outra conexão já existente em vez de acessar usando a conexão 3G, o que causa o famoso “conecta mas não navega”. Nesses casos, é necessário rodar o comando “route del default” antes de estabelecer a conexão, como em:

# route de default
# wvdial 3g

Para reconectar à rede local depois de fechar a conexão (se for o caso), use:

# /etc/init.d/networking restart

ou:
# /etc/init.d/NetworkManager restart

(no Ubuntu ou outras distribuição que usam o NetworkManager)

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X