De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


A última de bluetooth - rede entre dois GNU/Linux

Colaboração: Bruno Buys

Data de Publicação: 25 de Maio de 2009

No trabalho você tem um pc ligado a internet via wifi, ethernet, ou similares. Você leva seu notebook que gostaria que estivesse conectado também, como fica? Você está no aeroporto com mais uma pessoa, os dois de notebook, só um modem 3G, como fica? E se vocês tiverem só um login da Vex, prestadora de acesso wifi, como fica?

Você faz uma rede bluetooth entre os dois e compartilha a conexão, ora. (com exceção do primeiro, todos os comandos abaixo são como root)

Em ambos os computadores, verifique se o módulo bnep está carregado:

  lsmod | grep ^bnep

Se não estiver:

  modprobe bnep

1. A parte bluetooth

No cliente (o que vai chupinhar a conexão):

  pand --listen --role PANU

No servidor (que vai compartilhar)

  pand --listen --role NAP
  pand --connect MAC-DO-CLIENTE

No cliente

  pand --connect MAC-DO-SERVIDOR

OBS - Estes endereços MAC-DO-SERVIDOR e MAC-DO-CLIENTE são da interface bluetooth. Use "hcitool dev" para saber estes mac's.

2. A parte de rede

No servidor

  ifconfig bnep0 192.168.0.1
  ifconfig bnep0 netmask 255.255.255.0
  ifconfig bnep0 up

E no cliente

  ifconfig bnep0 192.168.0.2
  ifconfig bnep0 netmask 255.255.255.0
  ifconfig bnep0 up
  route add default gw 192.168.0.1

E, para finalizar, temos que criar o /etc/resolv.conf do cliente, para que ele possa resolver ip's. O mais simples e direto é usar o OpenDNS, assim:

  echo "nameserver 208.67.222.222
  nameserver 208.67.220.220" > /etc/resolv.conf

OBS - Tem que ficar um "nameserver 1.2.3.4" por linha, nesse arquivo.

Isso vai funcionar, tanto quanto podemos confiar no OpenDNS. Mas dá para fazer coisas mais requintadas, também, como primeiro ver o resolv.conf do servidor já conectado, e copiá-lo no cliente. Assim o cliente usa os mesmos nameservers da rede.

Se você vai usar essa dica em lugares como o trabalho, onde você já saiba quais são os nameservers, pode deixar um /etc/resolv.conf.trabalho, com esses ip's anotados. Na hora de usar, é só fazer:

  cp /etc/resolv.conf.trabalho /etc/resolv.conf

OBS - Estamos definindo as interfaces estaticamente aqui. Como o problema a ser resolvido é temporário, achei essa solução melhor. Outra alternativa seria instalar um daemon dhcp na máquina servidora. Mas isso não é coberto aqui.

2.1. COMPARTILHANDO A CONEXÃO

Até aqui criamos a interface bluetooth de emulação ethernet, conectamos os dois. Se tudo correu bem, os dois pc's estão em rede. Você deve conseguir pingá-los, e dar um ssh, por exemplo.

Os comandos abaixo explicam pro servidor que é pra dar forward de ip entre a interface bnep0 (bluetooth) e a interface externa, para a internet. Pode ser a eth0, no caso de rede ethernet, ou ppp0, por modem, wlan0 de wireless, etc.

No servidor, criando o ip forward:

  modprobe ipt_MASQUERADE
  iptables -F; iptables -t nat -F; iptables -t mangle -F
  iptables -t nat -A POSTROUTING -o DEV-INTF-EXTERNA -j SNAT --to  IP-INTF-EXTERNA
  echo 1 > /proc/sys/net/ipv4/ip_forward

Se tudo correu bem até aqui, você deve estar com a conexão compartilhada.

Melhorando a segurança do compartilhamento:

  iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  iptables -A INPUT -m state --state NEW -i ! IP-INTF-EXTERNA -j ACCEPT
  iptables -P INPUT DROP
  iptables -A FORWARD -i DEV-INTF-EXTERNA -o DEV-INTF-EXTERNA -j REJECT

OBS - DEV-INTF-EXTERNA: O dispositivo da interface externa (wlan0 pra wireless, etc...). IP-INTF-EXTERNA: o ip da interface externa. Veja com "ifconfig wlan0".

Observações finais

Os ip's internos 192.168.x.x para as interfaces bnep não podem colidir com os que já estão definidos nas suas outras interfaces. Se a interface para a internet já usar esses ip's, mude os bluetooth, por exemplo, para 10.1.1.x.

Para todos os efeitos, a conexão do cliente à internet é um nat. Ou seja, o seu provedor 3G ou Vex enxergarão somente um computador conectado, o servidor.

Bluetooth já é comum em notebooks hoje em dia. Se o seu não tiver um, compre uma interfacezinha bluetooth usb. É boa e barata. E serve pra desktops também. Aviso: evite as mais baratinhas. Tive problemas de instabilidade com uma interface baratinha. Atualmente uso uma multilaser.

A receita acima foi pensada como uma solução rápida e simples para um compartilhamento temporário de internet. Se você pretende usar para outros fins, ou automatizar para uma rede caseira, por exemplo, estude melhor a parte de segurança. Como mexemos com regras do iptables aqui, é sempre bom ter cautela.

Em meus testes, o acesso a internet via bluetooth configurado como está aqui chegou a 75Kbps no computador cliente. Não é fantástico, mas dá para transformar aquelas duas horinhas de conexão em aeroporto em um tempo produtivo.

Este tutorial funcionou bem com debian sid cliente de debian sid, debian sid cliente de ubuntu 8.1, e ubuntu 8.1 cliente de debian sid. Os kernels eram 2.6.26, 2.6.27 e 2.6.28.

Em debian é possível automatizar muitos dos passos e comandos expostos aqui pelo uso do arquivo /etc/network/interfaces. Dá para inserir até scripts que rodam após levantar a interface e antes de derrubá-la, e que podem montar o resolv.conf, apagá-lo depois, fica bem bacana. Não sei bem como isso funciona em outras distros, então não desenvolvi muito. Quem quiser saber mais, um bom ponto de partida está aqui: http://www.debian.org/doc/manuals/reference/ch-gateway.en.html. É uma página de manual bem extensa. A parte mais relevante começa no item 10.6.1.1, se você já tem noções de rede dá para começar daí.

Feliz hacking!

Referências

Criado com adaptações a partir de:

Dicas anteriores de bluetooth:

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Bruno Buys