Índice - Tutoriais

Configurando redes wireless no Linux, parte 1

Criado 21/fev/2008 às 16h50 por Carlos E. Morimoto

12

Usando o wpa_supplicant

Embora as versões mais recentes do WEP usadas nos pontos de acesso e placas atuais sejam mais seguras que as primeiras versões, elas ainda podem ser facilmente quebradas. Embora não seja infalível, o WPA é um padrão mais seguro, por isso é o preferido em redes onde a segurança é um fator importante.

No Linux, o suporte ao WPA e ao WAP2 é fornecido pelo wpa_supplicant. Não importa se você está configurando a rede wireless usando o networkmanager, através módulo de configuração de rede no Mandriva Control Center, ou através de qualquer outra ferramenta de configuração. Por baixo dos panos é o wpa_supplicant que está fazendo o trabalho pesado.

Como de praxe, é possível também configurá-lo manualmente, o que é útil em casos em que os utilitários de configuração não funcionam como deveriam, quando você está usando alguma distribuição onde eles não estão disponíveis ou se você simplesmente resolveu colocar a mão na massa e fazer as coisas manualmente.

Para usá-lo é necessário que a placa wireless tenha sido detectada pelo sistema e o pacote "wpa_supplicant" esteja instalado. As versões recentes de todas as principais distribuições trazem o wap_supplicant instalado por padrão, mas você pode precisar instalá-lo manualmente ao usar versões antigas.

Nas distribuições derivadas do Debian, você pode instalá-lo via apt-get:

# apt-get install wpasupplicant

Uma dica é que, ao usar o Ubuntu, você deve primeiro abrir o arquivo "/etc/apt/sources.list" e descomentar a linha referente ao repositório Universe, como em:

deb http://br.archive.ubuntu.com/ubuntu dapper universe

Depois de salvar o arquivo, rode o "apt-get update" e você poderá instalar o wpa_supplicant via apt-get, usando o mesmo comando do Debian. A partir do Ubuntu 6.6 ele já vem instalado por padrão, dispensando a instalação manual.

No Fedora, instale-o usando o yum:

# yum install wpa_supplicant

No Mandriva use o urpmi:

# urpmi wpa_supplicant

Com tudo instalado, o primeiro passo é criar o arquivo de configuração do wpa_supplicant, contendo o SSID e a passphrase da sua rede. É possível também criar uma configuração que permita conectar em várias redes diferentes, como veremos a seguir.

Rode o comando "wpa_passphrase" seguido do SSID da rede e a passphrase (a senha), como em:

$ wpa_passphrase minharede minhapassphrase

Ele retorna a configuração que deve ser incluída no arquivo, como em:

network={
ssid="minharede"
#psk="minhapassphrase"
psk=24b0d83ee1506019e87fcf1705525ca60abbd9b24ac5bedf183620d0a22ab924
}

Note que ele inclui duas linhas "psk", onde vai a passphrase. A linha que está comentada contém sua passphrase real, enquanto a segunda contém um "hash" (verificador), que funciona da mesma forma, mas evita que você precise deixá-la disponível dentro do arquivo para qualquer um ver. Apague a linha comentada, deixando apenas a segunda linha, com o hash.

Agora edite (ou crie) o arquivo "/etc/wpa_supplicant.conf", de forma que ele contenha apenas as linhas retornadas pelo comando. Se preferir, você pode usar também o comando abaixo (como root), que já modifica automaticamente o arquivo, matando os dois coelhos com uma cajadada só:

# wpa_passphrase minharede minhapassphrase > /etc/wpa_supplicant.conf

Agora vem o comando que ativa o wpa_supplicant, especificando a placa de rede que será usada, o arquivo de configuração que acabamos de criar e o driver que será usado:

# wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -d -D wext

O "wlan0" 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 driver wext é usado em quase todos os casos, inclusive no caso de placas configuradas através do ndiswrapper (usando o driver do Windows) e no caso das placas com chipset Intel. A única exceção fica por conta das placas com chipset Atheros, onde você deve substituir o "wext" por "madwifi".

De qualquer forma, aqui vai a lista de todos os drivers disponíveis, que você pode testar em casos de problemas. Tenha em mente que os drivers "ndiswrapper" e "ipw" contém versões obsoletas de funções já incluídas no driver "wext".

ndiswrapper: Driver antigo para placas ativadas através do ndiswrapper, que são atualmente suportadas de forma mais completa através do wext. Note que muitas placas funcionam perfeitamente no Ndiswrapper em redes sem encriptação ou WEP, mas ficam instáveis ao usar o WPA, justamente porque ele utiliza mais camadas e por isso tem uma possibilidade maior de apresentar problemas diversos.

ipw: Driver antigo para as placas com os chipsets Intel IPW2100 e IPW2200, usadas nos notebooks Intel Centrino. Assim como no caso do ndiswrapper, o driver foi incorporado ao wext nas versões recentes do wpa_supplicant. De qualquer forma, o ipw continua disponível e você pode experimentar ambos caso esteja tendo problemas para ativar a placa.

madwifi: Este é o driver para placas com chipset Atheros que citei a pouco. Estas placas estão entre as poucas que não funcionam em conjunto com o driver wext. Elas são detectadas pelo sistema como "ath0", de forma que o comando ficaria:
wpa_supplicant -i ath0 -c /etc/wpa_supplicant.conf -d -D madwifi.

broadcom: Este é o driver nativo para as placas com chipset Broadcom, desenvolvido via engenharia reversa. Estas placas podem ser configuradas também através do Ndiswrapper (nesse caso você usaria o driver "wext"). Cheque a forma como a placa está configurada no seu micro.

prism54, hermes e atmel: Estes três drivers são os mais incomuns, usados (respectivamente) pelas placas com chipset Prism (em suas várias versões), Hermes, Hermes II e Atmel.

Por causa da opção "-d" que incluímos no comando anterior, o wpa_supplicant é executado em modo verbose, onde são mostrados detalhes sobre a conexão com o ponto de acesso. Este modo é interessante para descobrir problemas. 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

lo no wireless extensions.
eth0 no wireless extensions.
eth1 IEEE 802.11g ESSID:"casa" Mode:Managed Frequency:2.447 GHz Access Point: 00:50:50:81:81:01
Bit Rate=54 Mb/s Tx-Power:32 dBm
RTS thr=2347 B Fragment thr=2346 B
Encryption key:
Security mode:restricted
Power Management:off
Link Quality:65/100 Signal level:-54 dBm Noise level:-96 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0

Isso significa que ele se conectou com sucesso ao ponto de acesso. A partir daí, você precisa apenas configurar os parâmetros da rede (IP, máscara, gateway e DNS) usando a ferramenta apropriada para que a conexão fique disponível.

Se, por outro lado, você receber mensagens como:

Scan results: 0
Selecting BSS from priority group 0
No suitable AP found.
Setting scan request: 5 sec 0 usec
Starting AP scan (broadcast SSID)
Wireless event: cmd=0x8b1a len=8

ou:

Setting scan request: 1 sec 0 usec
Starting AP scan (broadcast SSID)
Wireless event: cmd=0x8b19 len=8
ioctl[SIOCGIWSCAN]: Resource temporarily unavailable
Scan results: -1
Failed to get scan results
Failed to get scan results - try scanning again

... significa que a conexão não foi estabelecida. Pode ser que o seu notebook está muito longe do ponto de acesso, fora da área de alcance ou mesmo que o transmissor da placa wireless do notebook está desativado.

Caso o ponto de acesso tenha sido configurado para não divulgar o SSID, experimente encerrar o wpa_supplicant, definir o SSID da rede manualmente usando o iwconfig e em seguida iniciá-lo novamente, como em:

# killall wpa_supplicant
# iwconfig wlan0 essid casa
# wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -d -D wext

Se a conexão passa a ser bem sucedida, lembre-se de adicionar o comando do iwconfig no script de conexão, de forma que ele passe a ser executado automaticamente antes do wpa_supplicant (mais detalhes a seguir).

Existem ainda casos de drivers com bugs diversos que realmente impedem a conexão, como é o caso de diversas versões antigas do driver madwifi (para placas com chipset Atheros). Nesses casos, o melhor é simplesmente ativar a divulgação do SSID na configuração do ponto de acesso.


index_html_m6e5dfc17

Esconder o SSID oferece um pequeno ganho de segurança, mas basta esperar que qualquer cliente transmita dados para capturar o SSID, junto com o endereço MAC do cliente e do ponto de acesso usando o Kismet ou o Airmon, de forma que não vale à pena sacrificar a funcionalidade para manter o SSID escondido.

Continuando, no caso da segunda mensagem, é provável que o driver indicado na linha de comando esteja incorreto ou que não suporte o WPA. Este é o caso de muitas placas configuradas através do Ndiswrapper (por exemplo) ou casos em que você tenta usar o driver "wext" em uma placa que possui um driver específico, como as placas Atheros (madwifi).

Depois de testar e ver que a conexão está funcionando corretamente, você pode passar a usar o comando abaixo, trocando o "-d" por "-B". Isso faz com que o wpa_supplicant rode em modo daemon, sem bloquear o terminal nem mostrar mensagens na tela:

# wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -B -D wext


Ativando o wpa_supplicant no boot


Falta agora automatizar as coisas, fazendo com que o comando seja executado automaticamente durante o boot. Existem várias formas de fazer isso. Você poderia desde criar um ícone no desktop até adicionar o comando no final do arquivo "/etc/init.d/rc.local". Mas, a solução mais correta é fazer com que o sistema estabeleça a conexão ao ativar as interfaces de rede.

Se você usa o Ubuntu, Kubuntu ou qualquer outra distribuição derivada do Debian, abra o arquivo "/etc/network/interfaces". Adicione as duas linhas abaixo, contendo os parâmetros do wpa_supplicant, no final do arquivo. Note que agora adicionamos também a opção "w", específica para uso em scripts de inicialização:

pre-up wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -wB -D wext
post-down killall -q wpa_supplicant

Lembre-se de substituir o "wlan0" e "wext" pelos parâmetros corretos no seu caso. Para que fique tudo certo, o arquivo deve conter também uma seção com os endereços usados pela placa. Veja um exemplo de arquivo completo:

# /etc/network/interfaces
auto lo wlan0
iface lo inet loopback
iface wlan0 inet static
address 192.168.1.56
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.254
pre-up wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -wB -D wext
post-down killall -q wpa_supplicant

Como de praxe, ao usar esse exemplo como modelo, preste atenção para substituir todos os "wlan0" pela interface correta no seu caso e ajustar os endereços de acordo com a configuração da sua rede.

Como pode ver, a primeira linha indica a localização do arquivo de configuração do wpa_supplicant. Se você ainda não o criou, aproveite para fazê-lo usando o comando que vimos a pouco: wpa_passphrase minharede minhapassphrase > /etc/wpa_supplicant.conf.

Se o ponto de acesso foi configurado para esconder o SSID e você só consegue se conectar à rede usando o comando manual do iwconfig, adicione a linha "wireless-essid casa" (onde o "casa" é o SSID desejado) na seção com a configuração da interface de rede, como em:

iface wlan0 inet static
address 192.168.1.56
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.254
wireless-essid casa
pre-up wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -wB -D wext
post-down killall -q wpa_supplicant

No Fedora, o wpa_supplicant roda como um serviço de rede, que é configurado através do arquivo "/etc/sysconfig/wpa_supplicant". Ele é criado automaticamente quando o pacote é instalado, com o seguinte conteúdo:

# wlan0 and wifi0
# INTERFACES="-iwlan0 -iwifi0"
INTERFACES="-iwlan0"
# ndiswrapper and prism
# DRIVERS="-Dndiswrapper -Dprism"
DRIVERS="-Dndiswrapper"

Como pode ver, o arquivo contém a interface que deve ser monitorada e o driver que deve ser usado. Você precisa apenas editá-lo, de forma a incluir as informações corretas. Os comentários são apenas para informação e podem ser removidos, como em:

# /etc/sysconfig/wpa_supplicant<<br /> INTERFACES="-iwlan0"
DRIVERS="-Dwext"

Falta agora editar o arquivo "/etc/wpa_supplicant/wpa_supplicant.conf" que é usado pelo serviço para armazenar a configuração. Ele é também criado ao instalar o pacote, inicialmente com o seguinte conteúdo:

ctrl_inter>ctrl_interface_group=wheel
network={
ssid="any"
key_mgmt=NONE
}

Use o comando "wpa_passphrase minharede minhapassphrase" para gerar a configuração apropriada para a sua rede e insira as linhas no arquivo, sem apagar as duas primeiras, como em:

# /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_inter>ctrl_interface_group=wheel
network={
ssid="minharede"
psk=24b0d83ee1506019e87fcf1705525ca60abbd9b24ac5bedf183620d0a22ab924
}

Depois de feita a configuração, use o comando "service wpa_supplicant restart" para reiniciar o serviço, de forma que as alterações sejam aplicadas. Aproveite também para certificar-se de que ele será carregado durante o boot, usando o comando chkconfig:

# service wpa_supplicant restart
# chkconfig wpa_supplicant on

Concluindo, falta apenas editar o arquivo com a configuração da placa de rede, dentro da pasta "/etc/sysconfig/network-scripts". Se a interface wireless é a "wlan0", o arquivo será o "/etc/sysconfig/network-scripts/ifcfg-wlan0".

Ele deve conter as linhas "ONBOOT=yes", "Type=Wireless" e "MODE=Managed", como em:

#/etc/sysconfig/network/network-scripts/ifcfg-wlan0
DEVICE=wlan0
IPADDR=192.168.1.21
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
BOOTPROTO=static
ONBOOT=yes
Type=Wireless
MODE=Managed
ou:

#/etc/sysconfig/network/network-scripts/ifcfg-wlan0
DEVICE=wlan0
BOOTPROTO=dhcp
ONBOOT=yes
Type=Wireless
MODE=Managed
Se você precisar indicar manualmente o SSID da rede, evitando o bug do wpa_supplicant ao se conectar em pontos de acesso que não divulgam o SSID, adicione também a linha "ESSID=xxxx", como em:

#/etc/sysconfig/network/network-scripts/ifcfg-wlan0
DEVICE=wlan0
BOOTPROTO=dhcp
ONBOOT=yes
Type=Wireless
MODE=Managed
ESSID=minharede
Ao editar o arquivo, não se esqueça de reiniciar o serviço responsável pela configuração das interfaces para que a nova configuração seja carregada:

# /etc/rc.d/init.d/network restart

Uma observação importante é que, ao ser configurado para rodar em background, o wpa_supplicant ficará o tempo todo tentando se conectar às redes wireless configuradas. Se você quiser se conectar a uma rede cabeada, deverá (além de configurar a rede), desativar o wpa_supplicant, usando o comando:

# service wpa_supplicant stop


Opções avançadas


Um dos recursos mais interessantes do wpa_supplicant é a possibilidade de definir várias redes diferentes no arquivo de configuração. O wpa_supplicant passa, então, a testar cada uma delas periodicamente, conectando-se a que estiver disponível. Daí que surgiu o nome: supplicant significa, literalmente, "pedinte".

Neste caso, você deve especificar cada uma das redes no arquivo "/etc/wpa_supplicant.conf" (ou /etc/wpa_supplicant/wpa_supplicant.conf), juntamente com um "peso" ou prioridade para cada uma. O arquivo poderia conter uma entrada para a rede da sua casa, que usa WPA, a rede do escritório, que usa WEP, e uma entrada para redes públicas, sem encriptação. O restante da configuração continua igual ao que já vimos.

A rede de casa pode ter peso 5, a do escritório ter peso 3 e as redes públicas terem peso 1, de forma que ele dá prioridade às duas redes e tenta se conectar a qualquer rede pública disponível caso nenhuma das duas seja encontrada.

Neste caso o arquivo ficaria:

# Rede de casa, com WPA (esta é a entrada gerada pelo wpa_passphrase)
network={
ssid="casa"
psk=2ceaa0388fa863213f5f527055846101dc449c9a569c1e43ea535a3344d3dc32
priority=5
} # Rede do escritório, com WEP:
network={
ssid="escritorio"
key_mgmt=NONE
wep_key0=ADADA54321
wep_tx_keyidx=0
priority=3
} # Redes públicas, sem encriptação
network={
ssid=""
key_mgmt=NONE
priority=1
}

Note que incluí a linha "priority", dentro de cada uma das entradas, especificando a prioridade de cada uma. As redes com prioridade mais alta são testadas primeiro, deixando a entrada para redes públicas como último recurso.

No caso da entrada para redes WEP, você substituiria apenas o SSID e a chave de encriptação pelos valores corretos, mantendo as linhas "key_mgmt=NOME" e "wep_tx_keyidx=0", que fazem parte da configuração.

Concluindo, o wpa_supplicant oferece também suporte ao WPA Enterprise, com o uso de um servidor de autenticação e certificados. Este é um exemplo de configuração que você usaria no arquivo "/etc/wpa_supplicant.conf":

network={
ssid="RedeSegura"
scan_ssid=1
key_mgmt=WPA-EAP
pairwise=CCMP TKIP
group=CCMP TKIP
eap=TLS
identity="seunome@empresa.com"
ca_cert="/etc/cert/ca.pem"
cl7ient_cert="/etc/cert/user.pem"
private_key="/etc/cert/user.prv"
private_key_passwd="suasenha"
}

Note que nesse caso é necessário indicar a localização dos certificados, que devem ser previamente instalados no HD (do cliente), além de fornecer o login e senha.

12 comentáriosPor Carlos E. Morimoto. Revisado 21/fev/2008 às 16h50

Comentários

Muito bom
Criado 22/abr/2012 às 22h26 por Otávio Vitor Brito
O melhor conteudo sobre wpa_supplicant que eu achei.
wpa_passphrase sem senha
Criado 12/jan/2012 às 16h49 por Rafael (anônimo)
Oi Pessoal, estou querendo configurar o wpa_passphrase, mas sem informar a senha. Nesse caso, trata-se de uma rede escolar, e ela foi configurada sem uma senha de acesso.
Como eu poderia resolver essa questão?
2 horas em vão
Criado 24/nov/2011 às 19h27 por geovana (anônimo)
Eu não consegui configurar essa droga, estou p da vida.
100% funcional
Criado 20/set/2011 às 11h46 por renan (anônimo)
Muito legal essa explicaçao, fiquei algum tempo tentando conectar pelo iwconfig na rede com encryptacao wpa2 hehehehe. abraço
Ubuntu não reconhece rede Wireless
Criado 13/ago/2011 às 15h03 por Natalia Opazo (anônimo)
Toda vez que eu tento conectar a conexão Wireless o Ubuntu não reconhece, aparece como se não tivesse nenhuma, e eu sou obrigada a usar a conexão com fio... tem como ajudar?
porcaria
Criado 9/ago/2011 às 23h08 por jossefina (anônimo)
essa merda nao funciona
Mandriva não reconhece reve wireless
Criado 22/jul/2011 às 16h10 por Jean Carlos (anônimo)
O meu not não reconhece as redes wireless...Eu uso mandriva, aparece Wlan mas sem nenhuma rede e não consigo ter acesso, Só com fio(cabo). o que tenho que fazer?
Obteve sucesso? por frotafernanda
dell inspiron 1428
Criado 10/fev/2011 às 11h20 por cicero(ciceropereira1984@oi.com.br (anônimo)
pessoal tou precisando de ajuda, o fedora 14 não teve jeito de reconhecer a placa de rede wriless, baxei pacotes tentei no gerenciador e nada, fiz esse passo a passo, + diz que o NetworkManagerDispatcher não foi encontrado, tentei baixar e nada. se alguem souber de algum metodo pra ativar me ajude por favor, grato desde de ja
wifi,ubuntu e ipod touch
Criado 18/dez/2010 às 23h48 por alexandre (anônimo)
Criei uma rede sem fio com o networkmanager e instalei os drives proprietários em Sistema->Administração->Drives de Hardware,o IPod Touch reconheceu a rede,porém não consegui acesso a internet pelo pelo mesmo.Alguém sabe como solucionar o problema?
Problemas Solucionados!
Criado 21/out/2010 às 21h47 por Renan Santos Pantoja (anônimo)
Muito show resolveu meu problema!