Logo na visita ao NOC da Itália, tive a agradável surpresa que o método de acesso à rede cabeada, leia-se switches fast/giga/ethernet, tinha mudado para usar autenticação via 802.1X.

Como já tinha trabalhado anteriormente com a mesma solução durante meus tempos de D-Link, achei que ia ser fácil.

Primeiramente tentei o seguinte comando:


musashi# wpa_supplicant -i bge0 -c ~helio/IEEE8021X/wpa_supplicant.conf 
ioctl[SIOCG80211, op 16]: Invalid argument Failed to initialize driver interface

Qual não foi minha surpresa... Não tinha funcionado. Tentei verificar o erro mais de perto com a opção "-dd" (extra debug):


Initializing interface (2) 'bge0' 
EAPOL: SUPP_PAE entering state 
DISCONNECTED EAPOL: KEY_RX 
entering state NO_KEY_RECEIVE 
EAPOL: SUPP_BE 
entering state INITIALIZE EAP: EAP 
entering state DISABLED EAPOL: External notification - portEnabled=0 
EAPOL: External notification - portValid=0 
ioctl[SIOCG80211, op 16]: Invalid argument 
wpa_driver_bsd_init: failed to get roaming state: Invalid argument 
Failed to initialize driver interface 
Failed to add interface bge0 
Cancelling scan request

A mensagem ioctl[SIOCG80211, op 16] me fez pensar sobre driver. Verifiquei a versão no ports, e realmente era muito mais antiga que a versão atual. Baixei manualmente e compilei. Consegui fazer rodar, mas dessa vez utilizando o comando:


musashi# wpa_supplicant -i bge0 -D wired -c ~helio/IEEE8021X/wpa_supplicant.conf

Com a opção -D wired consegui forçar o uso da interface de rede. Só restava verificar se meu arquivo de configuração estava correto ou não.


musashi# ./wpa_supplicant -i bge0 -D wired -c /tmp/wpa.conf -dd 
Initializing interface 'bge0' conf '/tmp/wpa.conf' driver 'wired' 
   ctrl_interface 'N/A' bridge 'N/A' 
Configuration file '/tmp/wpa.conf' -> '/tmp/wpa.conf' 
Reading configuration file '/tmp/wpa.conf' 
ctrl_interface='/var/run/wpa_supplicant' 
ctrl_interface_group='0' (DEPRECATED) 
eapol_version=1 
ap_scan=0 
fast_reauth=1 
Line: 12 - start of a new network block ssid - hexdump_ascii(len=0): key_mgmt: 0x8 
eap methods - hexdump(len=16): 00 00 00 00 19 00 00 00 00 00 00 00 00 00 00 00 
phase2 - hexdump_ascii(len=13): 61 75 74 68 3d 4d 53 43 48 41 50 56 32 
auth=MSCHAPV2 identity - hexdump_ascii(len=4): 75 73 65 72 
user password - hexdump_ascii(len=4): [REMOVED] 
Priority group 0 id=0 ssid='' 
Initializing interface (2) 'bge0' 
EAPOL: SUPP_PAE entering state DISCONNECTED 
EAPOL: KEY_RX entering state NO_KEY_RECEIVE 
EAPOL: SUPP_BE entering state INITIALIZE 
EAP: EAP entering state DISABLED 
EAPOL: External notification - portEnabled=0 
EAPOL: External notification - portValid=0 
wpa_driver_wired_init: Added multicast membership with SIOCADDMULTI 
Own MAC address: 00:14:c2:e7:d2:55 
Setting scan request: 0 sec 100000 usec 
Using existing control interface directory. 
ctrl_interface_group=0 
ctrl_iface bind(PF_UNIX) failed: Address already in use 
ctrl_iface exists, but does not allow connections - assuming it was leftover from 
   forced program term ination 
Successfully replaced leftover ctrl_iface socket '/var/run/wpa_supplicant/bge0' 
Added interface bge0 
EAPOL: External notification - portControl=Auto 
Already associated with a configured network - generating associated event 
Association info event State: DISCONNECTED -> ASSOCIATED 
Associated to a new BSS: BSSID=01:80:c2:00:00:03 
No keys have been configured - skip key clearing 
Network configuration found for the current AP 
EAPOL: External notification - portControl=Auto 
Associated with 01:80:c2:00:00:03 
EAPOL: External notification - portEnabled=0 
EAPOL: External notification - portValid=0 
EAPOL: External notification - portEnabled=1 
EAPOL: SUPP_PAE entering state CONNECTING 
EAPOL: SUPP_BE entering state IDLE 
EAP: EAP entering state INITIALIZE 
EAP: EAP entering state IDLE Cancelling scan request 
EAPOL: startWhen --> 0 
EAPOL: SUPP_PAE entering state CONNECTING 
EAPOL: txStart TX EAPOL - hexdump(len=4): 01 01 00 00 
EAPOL: startWhen --> 0 
EAPOL: SUPP_PAE entering state CONNECTING 
EAPOL: txStart TX EAPOL - hexdump(len=4): 01 01 00 00 
EAPOL: idleWhile --> 0 
EAP: EAP entering state FAILURE CTRL-EVENT-EAP-FAILURE EAP authentication failed 
EAPOL: SUPP_PAE entering state AUTHENTICATING 
EAPOL: SUPP_BE entering state FAIL 
EAPOL: SUPP_PAE entering state HELD 
EAPOL: SUPP_BE entering state IDLE 
EAPOL: startWhen --> 0 

Apesar da interface ter sido inicializada corretamente e enviando o primeiro frame, o switch respondia com a solicitação de "identity" que nunca ocorria, ficando a interface sempre em "startWhen --> 0". Busquei vários sites e não encontrei nenhuma resposta satisfatória. Aparentemente o driver de ethernet do FreeBSD não é capaz de utilizar uma chamada ioctl para detectar que um frame foi recebido pela interface.

A única solução que encontrei, não muito elegante, foi inicialiar um linux via quemu com uma interface tap0 em bridge. O wpa_supplicant do Linux funcionou corretamente e pude auntenticar na rede. O método de autenticação foi bem simples, onde segue o arquivo de configuração:


eapol_version=1 
ap_scan=0
fast_reauth=1
network={
key_mgmt=IEEE8021X
eap=PEAP
identity="DOMAIN\login"
phase2="auth=MSCHAPV2"
password="password"
}
We use cookies

We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.