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.
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
No cliente (o que vai chupinhar a conexão):
pand --listen --role PANU
pand --listen --role NAP pand --connect MAC-DO-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.
ifconfig bnep0 192.168.0.1 ifconfig bnep0 netmask 255.255.255.0 ifconfig bnep0 up
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.
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".
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!
Criado com adaptações a partir de:
Dicas anteriores de bluetooth:
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários