|
[01/12]
:. Lançado FreeBSD 6.4, último da série 6.x (legacy) [01/12] :. Resumo do dia [01/12] :. MySQL 5.1.30 GA é publicado, mas ainda contém alguns bugs [01/12] :. Novas telas prometem autonomia de até 40 horas em notebooks [01/12] :. Hackers rodam Linux em um iPhone [01/12] :. Mais detalhes sobre a nova nomenclatura das placas GeForce [30/11] :. Windows 7 rodará DX10 na CPU, sem exigir aceleradora gráfica [28/11] :. Resumo do dia [28/11] :. Intel afirma: netbooks são bons só para uma horinha de uso [28/11] :. VIA inicia corte de custos, desligando divisão de SoCs [28/11] :. AMD demonstra 'Maui', plataforma home theater [27/11] :. KDE 4.2 beta 1 traz recursos antes removidos do KDE 4 [27/11] :. Resumo do dia [27/11] :. Inserindo facilmente fotos e vídeos em filmes [27/11] :. Nokia desenvolve sistema de automação residencial :. Mais noticias » |
Hoje em dia, quase todas as distribuições incluem utilitários para configurar a rede wireless. O Ubuntu, por exemplo, inclui o network-manager, o Kubuntu inclui o knetworkmanager (uma variação dele), o OpenSuSE inclui opções dentro do Yast e assim por diante. Isso faz com que, na maioria dos casos, configurar a rede wireless seja bastante simples. Apesar disso, existem sempre casos em que os utilitários de configuração não funcionam como deveriam, casos onde você está usando alguma distribuição onde eles não estão disponíveis ou simplesmente casos em que você resolveu colocar a mão na massa e fazer as coisas manualmente. Nesta dica vamos ver como criar um script de conexão, para acesso a redes wireless com encriptação via WPA, que inclui funções para detectar erros comuns e pode ser executado durante o boot, automatizando a ativação da rede. Ela inclui também dicas diversas sobre shell script. Para usá-lo é necessário que a placa wireless tenha sido detectada pelo sistema e o pacote "wpasupplicant" (necessário para conectar a redes com encriptação WPA) esteja instalado. O primeiro passo é criar o arquivo de configuração do wpa_supplicant (note que o comando é diferente do nome do pacote), que contém o ESSID e a chave de autenticação da rede onde ele deve se conectar. Para isso, use o comando:
# wpa_passphrase minharede passphrase > /etc/wpa_supplicant.conf
Como em:
# wpa_passphrase casa 12345678 > /etc/wpa_supplicant.conf
O (criado automaticamente) arquivo ficará assim:
network={
ssid="casa" #psk="12345678" psk=bedc07580f71c85d6e0029f3663bab5cbe0720cc84bf94eb7c20722208b7f004 } Como você pode ver, a terceira linha contém a passphrase da rede em modo texto, o que não é nada bom do ponto de vista da segurança. Apesar disso, ele não é necessária (tanto que está comentada) pois a linha seguinte contém um hash, que é suficiente para que a conexão seja efetuada. É sempre recomendável que você edite o arquivo e apague a terceira linha, deixando apenas o hash. Com isso, precisamos apenas ativar o wpa_supplicant, usando o comando:
# wpa_supplicant -i eth1 -c /etc/wpa_supplicant.conf -d -D wext
O "eth1" no comando indica a interface de rede, e naturalmente deve ser alterado conforme necessário. O "wext" é o driver (interno do wpa_supplicant) que será usado. Atualmente, o wext é usado em quase todos os casos, inclusive no caso de placas configuradas através do ndiswrapper. A única exceção fica por conta das placas com chipset Atheros, onde você deve substituir o "wext" por "madwifi". Se a conexão for bem-sucedida, você terá (depois de uma rápida sucessão de mensagens), algo como:
State: GROUP_HANDSHAKE -> COMPLETED
CTRL-EVENT-CONNECTED - Connection to 00:50:50:81:81:01 completed (auth) EAPOL: External notification - portValid=1 EAPOL: External notification - EAP success=1 EAPOL: SUPP_PAE entering state AUTHENTICATING EAPOL: SUPP_BE entering state SUCCESS EAP: EAP entering state DISABLED EAPOL: SUPP_PAE entering state AUTHENTICATED EAPOL: SUPP_BE entering state IDLE EAPOL: startWhen --> 0 Estas mensagens indicam que ele se conectou ao ponto de acesso com o endereço MAC "00:50:50:81:81:01" e que a conexão está disponível para transmitir dados. Para confirmar, rode o comando "iwconfig" que mostrará algo como:
# iwconfig
Isso significa que ele se conectou com sucesso ao ponto de acesso. Falta agora apenas fazer a configuração manual da rede, o que pode ser feito usando os comandos "ifconfig" e "route". Note que estou usando os comandos manuais, pois a idéia é justamente que possamos transformá-los em um script mais tarde. # ifconfig eth1 192.168.1.65 netmask 255.255.255.0 up
# route del default # route add default gw 192.168.1.1 dev eth1 # echo 'nameserver 208.67.222.222' > /etc/resolv.conf Nesses 4 comandos eu configurei a rede, especificando o endereço IP e a máscara, removi a rota padrão (só para garantir, já que em um micro com duas placas de rede é normal que a primeira fique como rota padrão e você não consiga navegar através da segunda), configurei o gateway padrão da rede, colocando a rota padrão na interface wireless (eth1) e aproveitei para colocar o endereço do DNS no arquivo /etc/resolv.conf. Com isso, a rede estaria configurada. Vamos então à criação do script. Como a idéia é que ele seja executado durante o boot, vamos colocá-lo na pasta /etc/init.d", onde ficam os scripts de configuração do sistema. Vou chamá-lo de "/etc/init.d/wireless". Vamos começar "limpando a casa", para ter certeza de que o script encontrará um ambiente previsível. Estes passos são opcionais e você pode incluir outros comandos que achar necessários: # Desativa o network-manager do Ubuntu/Kubuntu
/etc/dbus-1/event.d/??NetworkManagerDispatcher stop /etc/dbus-1/event.d/??NetworkManager stop # Fecha outras instâncias ativas do wpa_supplicant killall wpa_supplicant # Desativa a interface de rede cabeada ifconfig eth0 down Desativa o cliente dhcp killall dhclient3 O network-manager, usado no Ubuntu "sabota" a configuração manual, por isso é necessário desativá-lo usando os dois comandos. No caso do Kubuntu, é necessário também desativar o knetworkmanager dentro do ambiente gráfico, desmarcando o início automático nas configurações do programa. Um problema comum em scripts de configuração da rede é que pode acontecer da interface de rede mudar ao reiniciar o sistema ou ao instalar uma nova placa de rede. Se o script espera que a placa wireless seja a "eth1" e a muda para "eth2", o script deixa de funcionar. Podemos tornar o script mais inteligente, detectando sozinho qual é a interface da rede wireless. Isso é simples, pois o sistema guarda a informação no arquivo "/proc/net/wireless". Veja só:
# cat /proc/net/wireless
Inter-| sta-| Quality | Discarded packets | Missed | WE
face | tus | link level noise | nwid crypt frag retry misc | beacon | 21 eth1: 0000 65 202 160 0 0 0 0 0 0 Podemos filtrar a informação, ficando apenas com o device da placa de rede e atribuí-lo a uma variável que poderemos usar mais adiante no script, usando o pipe, o tail e o cut, veja só:
# Descobre qual é o device da placa wireless
placa=`cat /proc/net/wireless | tail -n 1 | cut -f 1 -d ":" | cut -c 3-` A variável "placa" passa a conter o "eth1", que é o device atual da placa de rede. Com isso, o script se adapta automaticamente a mudanças. Falta agora adicionar as linhas que configuram a rede. Note que fiz uma pequena mudança no comando do wpa_supplicant, substituindo o "-d" por "-B". Isso faz com que ele rode em modo daemon, sem travar o terminal. Sem isso o script não funcionaria, pois o comando do wpa_supplicant pararia a execução do script, não deixando que os comandos seguintes fossem executados.
# Configura a rede
wpa_supplicant -i $placa -c /etc/wpa_supplicant.conf -B -D wext ifconfig $placa 192.168.1.65 netmask 255.255.255.0 up route del default route add default gw 192.168.1.1 dev $placa echo "nameserver 208.67.222.222" > /etc/resolv.conf O script completo ficaria: #!/bin/sh
# script para configurar a rede wireless # Desativa o network-manager do Ubuntu/Kubuntu /etc/dbus-1/event.d/??NetworkManagerDispatcher stop /etc/dbus-1/event.d/??NetworkManager stop # Fecha outras instâncias ativas do wpa_supplicant killall wpa_supplicant # Desativa a interface de rede cabeada ifconfig eth0 down # Desativa o cliente dhcp killall dhclient3 # Descobre qual é o device da placa wireless placa=`cat /proc/net/wireless | tail -n 1 | cut -f 1 -d ":" | cut -c 3-` # Configura a rede wpa_supplicant -i $placa -c /etc/wpa_supplicant.conf -B -D wext ifconfig $placa 192.168.1.65 netmask 255.255.255.0 up route del default route add default gw 192.168.1.1 dev $placa echo "nameserver 208.67.222.222" > /etc/resolv.conf Você poderia também torná-lo mais elegante, declarando os parâmetros da rede no início do script: #!/bin/sh
# script para configurar a rede wireless endip="192.168.1.65" masc="255.255.255.0" gtw="192.168.1.1" enddns="208.67.222.222" # Desativa o network-manager do Ubuntu/Kubuntu /etc/dbus-1/event.d/??NetworkManagerDispatcher stop /etc/dbus-1/event.d/??NetworkManager stop # Fecha outras instâncias ativas do wpa_supplicant killall wpa_supplicant # Desativa a interface de rede cabeada ifconfig eth0 down # Desativa o cliente dhcp killall dhclient3 # Descobre qual é o device da placa wireless placa=`cat /proc/net/wireless | tail -n 1 | cut -f 1 -d ":" | cut -c 3-` # Configura a rede wpa_supplicant -i $placa -c /etc/wpa_supplicant.conf -B -D wext ifconfig $placa $endip netmask $masc up route del default route add default gw $gtw dev $placa echo "nameserver $enddns" > /etc/resolv.conf Ao terminar, transforme o arquivo em executável e crie um link para ele dentro da pasta "/etc/rc5.d", de forma que ele seja executado durante o boot:
# chmod +x /etc/init.d/wireless
# cd /etc/rc5.d # ln -s ../init.d/wireless S99wireless Se preferir, você pode também adicionar o comando "/etc/init.d/wireless" em algum dos arquivos de inicialização, como o "/etc/rc.local", de forma que ele seja executado diretamente. Vai do que achar mais prático de acordo com a situação. Terminado, é só reiniciar o micro e testar. :) Este script "base" pode ser adaptado de acordo com a necessidade, incluindo outros comandos que você precise executar para ativar a placa de rede (ou ativar o transmissor ou para resolver problemas diversos). Por exemplo, em um Acer 5043, preciso rodar os dois comandos abaixo para ativar o transmissor da placa wireless, caso contrário a placa simplesmente não transmite dados:
# modprobe acer_acpi
# echo "enabled : 1" > /proc/acpi/acer/wireless Em outro (com uma placa Atheros) notei um problema estranho onde a placa é detectada apenas às vezes ao ativar o módulo. Às vezes é necessário carregar e descarregar o módulo várias vezes antes da rede ser detectada. Resolvi o problema na base da "força bruta" usando esse função, que continua carregando e descarregando os módulos até que a placa seja ativada e o device apareça no arquivo /proc/net/wireless:
atheros=`cat /proc/net/wireless | grep ath0`
while [ -z "$atheros" ]; do /sbin/modprobe -r ath_pci /sbin/modprobe -r ath_hal sleep 3 /sbin/modprobe ath_hal /sbin/modprobe ath_pci atheros=`cat /proc/net/wireless | grep ath0` done Em ambos os casos, os comandos poderiam ser adicionados no início do script, de forma que a rede fosse ativada antes dos demais comandos, como em: #!/bin/sh
# script para configurar a rede wireless endip="192.168.1.65" masc="255.255.255.0" gtw="192.168.1.1" enddns="208.67.222.222" atheros=`cat /proc/net/wireless | grep ath0` while [ -z "$atheros" ]; do /sbin/modprobe -r ath_pci /sbin/modprobe -r ath_hal sleep 3 /sbin/modprobe ath_hal /sbin/modprobe ath_pci atheros=`cat /proc/net/wireless | grep ath0` done # Desativa o network-manager do Ubuntu/Kubuntu /etc/dbus-1/event.d/??NetworkManagerDispatcher stop /etc/dbus-1/event.d/??NetworkManager stop # Fecha outras instâncias ativas do wpa_supplicant killall wpa_supplicant # Desativa a interface de rede cabeada ifconfig eth0 down # Desativa o cliente dhcp killall dhclient3 # Descobre qual é o device da placa wireless placa=`cat /proc/net/wireless | tail -n 1 | cut -f 1 -d ":" | cut -c 3-` # Configura a rede wpa_supplicant -i $placa -c /etc/wpa_supplicant.conf -B -D wext ifconfig $placa $endip netmask $masc up route del default route add default gw $gtw dev $placa echo "nameserver $enddns" > /etc/resolv.conf Naturalmente, escrever o script do zero pode ser bem mais complicado do que simplesmente configurar a rede usando as ferramentas disponíveis, mas agora que você tem um modelo pronto, pode usá-lo de forma bastante prática, simplesmente substituindo as informações que forem diferentes em cada situação. Esta é a beleza dos scripts de configuração: eles podem ser escritos uma vez e depois usados indefinidamente, com pequenas alterações.
|
|||||