Configurando wifi com wpa_supplicant
Publicado em: Jul 30, 2020 | Última modificação: Oct 11, 2020

No GNU/Linux, o suporte aos padrões WPA e WPA2 é feito pelo programa wpa_supplicant. Independente do gerenciador de redes que você usa, é ele que faz o trabalho pesado por debaixo dos panos.

Para configurá-lo, precisamos primeiramente descobrir qual a interface de rede sem fio. Para isso usamos o comando ip1. Então o daemon do wpa_supplicant pode ser inicializado. Finalmente, utilizando um cliente como wpa_cli2 ou wpa_gui podemos enviar comandos ao daemon e configurar a interface.

Descobrindo a interface de rede

Para conectar a uma rede, precisamos descobrir qual a interface de rede a ser utilizada. Para isso usamos o comando:

ip addr

Geralmente as interfaces cabeadas começam com e (Ethernet), enquanto as interfaces de rede sem fio começam com w (Wireless). Assim, a interface de rede sem fio dessa máquina é wlp2s0. Caso você não veja uma entrada correspondente à rede sem fio, cheque se o driver da sua placa de rede está instalado.

Usando o wpa_supplicant

O wpa_supplicant é feito para ser executado como um daemon, para o qual os comandos do cliente são enviados e executados. A configuração básica é geralmente encontrada no arquivo /etc/wpa_supplicant/wpa_supplicant.conf (caso esse arquivo não exista, é possível que exista um arquivo exemplo em /usr/share/doc/wpa_supplicant/). Uma configuração básica pode ser a seguinte:

cat /etc/wpa_supplicant/wpa_supplicant.conf

Na primeira linha, GROUP=wheel permite que o cliente (por exemplo, o wpa_cli) seja utilizado por todos os usuários do grupo wheel, e a segunda permite que o daemon faça alterações no arquivo.

Uma vez que o arquivo seja criado, podemos executar o seguinte comando (como root):

wpa_supplicant -B -i wlp2s0 -c /etc/wpa_supplicant/wpa_supplicant.conf

A opção -B diz para o daemon ser executado em background, -c direciona para o arquivo de configuração e -i especifica a interface de rede sem fio: a interface encontrada através do comando ip.

Interagindo com o wpa_supplicant

Para interagir com o wpa_supplicant vamos usar a ferramenta wpa_cli. Ele pode ser usado para verificar o estado da rede, modificar a configuração e conectar a uma rede. Como habilitamos a opção GROUP=wheel na configuração, o cliente pode ser invocado por um usuário normal, sem a necessidade de logar como root ou usar o sudo:

wpa_cli
wpa_cli v2.9
Copyright (c) 2004-2019, Jouni Malinen <j@w1.fi> and contributors

This software may be distributed under the terms of the BSD license.
See README for more details.


Selected interface 'wlp2s0'

Interactive mode

>

Ao invocar o comando, vamos nos deparar com o modo interativo, onde o cliente espera o comando ser inserido pelo usuário.

Escaneando redes

Para descobrir as redes sem fio disponíveis, use o comando scan no prompt interativo:

> scan
OK
<3>CTRL-EVENT-SCAN-STARTED
<3>CTRL-EVENT-REGDOM-CHANGE init=BEACON_HINT type=UNKNOWN
<3>CTRL-EVENT-REGDOM-CHANGE init=BEACON_HINT type=UNKNOWN
<3>CTRL-EVENT-SCAN-RESULTS

A ocorrência do evento CTRL-EVENT-SCAN-RESULTS indica que podemos usar o comando scan_results para ver o resultado:

> scan_results
bssid / frequency / signal level / flags / ssid
54:a6:5c:8c:75:2b       2452    -58     [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      Rede1
18:d6:c7:9f:67:f7       2412    -64     [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS]    Rede2
80:29:94:e7:07:18       2417    -89     [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS]    Rede3
54:a6:5c:8c:75:2c       5180    -87     [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      Rede4

O comando nos mostra cinco colunas, onde podemos ver o nome da rede (ssid), o esquema de segurança utilizado (flags) e a intensidade do sinal (signal level).

Conectando a uma rede

Para conectar a uma rede (por exemplo, rede "Rede1" com senha "senhadarede"), primeiro usamos o comando add_network para adicionar uma nova rede,

> add_network
0

o que nos dará um índice associado a rede (no caso 0), e então definimos o ssid e a senha com o comando set_network:

> set_network 0 ssid "Rede1"
> set_network 0 psk "senhadarede"

Agora, podemos habilitar (conectar) à rede usando o comando enable_network:

> enable_network 0
0K
<3>CTRL-EVENT-SCAN-STARTED
<3>CTRL-EVENT-SCAN-RESULTS
<3>WPS-AP-AVAILABLE
<3>SME: Trying to authenticate with 54:a6:5c:8c:75:2b (SSID='Rede1' freq=2452 MHz)
<3>Trying to associate with 54:a6:5c:8c:75:2b (SSID='Rede1' freq=2452 MHz)
<3>Associated with 54:a6:5c:8c:75:2b
<3>WPA: Key negotiation completed with 54:a6:5c:8c:75:2b [PTK=CCMP GTK=TKIP]
<3>CTRL-EVENT-CONNECTED - Connection to 54:a6:5c:8c:75:2b completed [id=0 id_str=]

E agora podemos checar que a interface de rede está ativa:

ip a | grep wlp2s0

E usar o comando ping para checar a conectividade:

ping -c 2 www.google.com

Salvando configuração

A configuração anterior vale para a sessão atual apenas; se desejarmos conectar à mesma rede em sessões posteriores, precisamos salvar a configuração. Para isso usamos o comando save config para salvar a informação sobre a rede no arquivo de configuração do wpa_supplicant:

> save config
OK

Victor Santos

Físico, Universidade Federal do Ceará. Buracos negros, relatividade geral, computação e tudo mais.