27 de dezembro de 2007

Aprenda a configurar redes Ad-Hoc parte 2

Continuando o post anterior sobre rede wireless caseiras, agora é a parte que fala sobre wireless no linux.

A maior parte dos utilitários de configuração de rede wireless no Linux suportam também o uso de redes ad-hoc. Ao usar o Ubuntu, Kubuntu ou outra distribuição que utilize o network-manager, por exemplo, a rede ad-hoc aparece na lista de redes disponível e você pode se conectar diretamente depois de fornecer a passphrase. Ele suporta inclusive o uso do WPA-None (do Windows XP), ou do WPA2 suportado no Vista. A dica é que você precisa indicar corretamente o tipo de chave usada (ele não detecta sozinho), caso contrário ele não consegue se conectar:

É possível também criar uma nova rede ad-hoc usando a opção "Criar nova rede sem fio" na janela de seleção de rede, indicando o SSID, o sistema de encriptação e a passphrase desejados:

Como pode ver no screenshot, é possível usar o WPA-Pessoal (WPA-PSK) como sistema de encriptação. Entretanto, ao usar essa opção, o PC passa a atuar de forma similar a um ponto de acesso, trocando a chave de encriptação periodicamente e distribuindo as novas chaves aos demais PCs. Com isso, a rede ad-hoc deixa de ser uma rede não hierárquica e deixa de funcionar caso o PC responsável seja desligado.

É possível também configurar a rede em modo ad-hoc via linha de comando. Comece logando-se como root e rode o comando "cat /proc/net/wireless" para verificar como o sistema detectou sua placa wireless (no exemplo ela é a "eth1"):

# cat /proc/net/wireless

Inter-| sta-| Quality | Discarded packets | Missed | WE
face | tus | link level noise | nwid crypt frag retry misc | beacon | 20
eth1: 0000 98. -25. -85. 0 104 0 0 75 0

Comece ativando a placa usando o comando "ifconfig $placa up", seguido do comando do iwconfig que coloca a placa em modo ad-hoc, como em:

# ifconfig eth1 up
# iwconfig eth1 mode Ad-Hoc

O próximo passo é definir o SSID da rede, dessa vez usando o parâmetro "essid" do iwconfig, como em:

# iwconfig eth1 essid gdh

Falta agora definir a chave de encriptação. Ao usar uma chave WEP contendo caracteres ASCII, use o parâmetro "key restricted s:", seguido pela chave, como em:

# iwconfig eth1 key restricted s:minhachave123

Se for usada uma chave contendo caracteres em hexa, remova o "s:", especificando a chave diretamente, como em:

# iwconfig eth1 key restricted 1234567890

Com isso a rede ad-hoc está configurada. Falta apenas ajustar os endereços. Para configurar a rede via DHCP, use:

# dhclient eth1

Para definir o endereço e a máscara manualmente, use:

# ifconfig eth1 10.0.0.1 netmask 255.0.0.0 up
(a faixa de endereços usada na rede ad-hoc deve ser diferente da usada na rede cabeada)

Aqui vai a lista dos comandos para referência, com os campos que devem ser alterados em negrito:

ifconfig eth1 up
iwconfig eth1 mode Ad-Hoc
iwconfig eth1 essid gdh
iwconfig eth1 key restricted s:minhachave123
ifconfig eth1 10.0.0.1 netmask 255.0.0.0 up

Estes mesmos comandos podem ser usados para criar uma nova rede ad-hoc, quanto para conectar a máquinas Linux a uma rede já existente. Como a rede ad-hoc usa um sistema ponto a ponto, você precisa apenas fazer a mesma configuração em todos os micros. Eles são comandos genéricos, funcionam em todas as placas, sem depender de nenhum utilitário adicional.

A exceção fica por conta das placas Atheros, que utilizam o driver madwifi (onde a placa de rede é vista pelo sistema como "ath0"). Nelas (apenas nelas), antes de executar os comandos acima, você deve rodar os três comandos abaixo para colocar a rede em modo ad-hoc. Sem eles, a placa continua funcionando em modo infra-estrutura, e a rede ad-hoc não funciona:

# ifconfig ath0 down
# wlanconfig ath0 destroy
# wlanconfig ath0 create wlandev wifi0 wlanmode adhoc
A lista completa dos comandos ao usar uma placa Atheros seria:

ifconfig ath0 down
wlanconfig ath0 destroy
wlanconfig ath0 create wlandev wifi0 wlanmode adhoc
ifconfig ath0 up
iwconfig ath0 mode Ad-Hoc
iwconfig ath0 essid gdh
iwconfig ath0 key restricted s:minhachave123
ifconfig ath0 10.0.0.1 netmask 255.0.0.0 up

Continuando, caso o micro Linux tenha duas interfaces de rede, você pode compartilhar a conexão com os micros da rede ad-hoc usando os três comandos abaixo. Note que o "eth0" é a interface da rede cabeada (ou a interface onde está a conexão) e não a placa wireless:

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

O terceiro comando diz que quando um dos PCs da rede ad-hoc tentar acessar a web, os pacotes devem ser encaminhados para a placa eth0, que no exemplo é a interface da rede local. Como no exemplo não instalamos um servidor DHCP, é necessário configurar manualmente os endereços dos PCs da rede ad-hoc, configurando-os para usar o micro Linux como gateway e os endereços DNS do provedor.

É possível também configurar o PC Linux para atuar como um bridge entre a rede ad-hoc e a rede local, assim como fizemos no Windows no tópico anterior. Nesse caso, precisaremos do pacote "bridge-utils", que pode ser instalado usando o gerenciador de pacotes, como em:

# apt-get install bridge-utils

O pacote contém o utilitário "brctl", que é usado para ativar o bridge, criando uma nova interface que agrupa a interface da rede local e a da rede ad-hoc. A configuração não é tão simples quanto poderia ser, mas também está longe de ser difícil.

Comece limpando os endereços das duas placas (wireless e local). No exemplo, a eth0 é a interface da rede local e a eth1 (uma Intel ipw2200) é a placa wireless. As duas devem ficar ativadas, mas usarão o endereço "0.0.0.0":

# ifconfig eth0 0.0.0.0 up
# ifconfig eth1 0.0.0.0 up

Em seguida, crie a interface bridge usando o comando "brctl addbr". O segundo comando soluciona um problema comum com o uso do DHCP através do bridge:

# brctl addbr br0
# brctl setfd br0 0

Com a interface br0 criada, use o comando "brctl addif" para adicionar as duas interfaces no bridge. A lógica é a mesma de quando você seleciona as duas interfaces e ativa a opção "Conexões de ponte" no Windows:

# brctl addif br0 eth0
# brctl addif br0 eth1

Com isso a configuração está pronta. Falta apenas ativar a interface br0 para ativar o bridge. É normal que ele demore alguns minutos antes de começar a transmitir os pacotes, pois é necessário que ele construa a tabela com os endereços MAC dos micros conectados a cada uma das interfaces, necessária para que ele possa fazer seu trabalho. Note que no comando especifico também o endereço IP e máscara que será usado pela interface. É a partir dele que o PC Linux passará a ser acessado em ambas as redes:

# ifconfig br0 192.168.1.23 netmask 255.255.255.0 broadcast 192.168.1.255 up

Para que você possa navegar e acessar a rede no PC Linux, é necessário definir o gateway da rede. Se o endereço do gateway for "192.168.1.1", o comando seria:

# route add default gw 192.168.1.1 dev br0

Revisando, a lista completa dos comandos necessários para criar o bridge, já configurando a interface para que o PC possa continuar acessando a rede, seria:

ifconfig eth0 0.0.0.0 up
ifconfig eth1 0.0.0.0 up
brctl addbr br0
brctl setfd br0 0
brctl addif br0 eth0
brctl addif br0 eth1
ifconfig br0 192.168.1.23 netmask 255.255.255.0 broadcast 192.168.1.255 up
route add default gw 192.168.1.1 dev br0

... como de praxe, lembre-se de substituir os parâmetros em negrito pelas interfaces e os endereços que se aplicam ao seu caso. No último comando, o "192.168.1.1" é o endereço do gateway da rede. A interface do bridge pode receber outro nome, o "br0" é apenas um exemplo.

Se quiser desativar o bridge mais tarde, use os comandos:

# ifconfig br0 down
# brctl delbr br0

É necessário também reconfigurar as duas interfaces de rede, já que ao ativar o bridge deixamo-as com o endereço 0.0.0.0.

Infelizmente, muitos dos drivers para placas wireless atualmente (início de 2008) disponíveis no Linux não oferecem suporte ao modo promíscuo (onde a placa escuta todas as transmissões da rede, inclusive as destinadas a outros endereços MAC), o que faz com que o bridge não funcione. O PC Linux com as duas placas de rede consegue enxergar simultaneamente os PCs dos dois segmentos de rede, mas os PCs de um segmento não conseguem enxergar os outros, já que os frames não são encaminhados.

Nesses casos, não existe muito o que fazer, mas você ainda pode utilizar a dica anterior, usando os comandos para compartilhar a conexão, permitindo assim que os micros da rede ad-hoc tenha acesso à web.

Nenhum comentário: