Ndiswrapper: Broadcom BCM4306 802.11b/g WLAN amb Linux i WPA supplicant (EAP/TLS)

Reading time: 4 – 6 minutes

wifi.gif

Aquesta és la targeta mini-PCI que va integrada al meu DELL X300, de fet fins ara no havia pogut configurar-la de cap manera. Però ahir les coses per fi van canviar. Així que per si algú té la targeta que sapigue que amb les noves versions de kernel i del ndiswrapper es pot fer funcionar amb el driver de Win sota Linux.

Finalment la cosa no ha estat gaire difícil, tot i que en els interiors intents vaig suar lo meu. El primer de tot que us recomano és assegurar-vos que no teniu un kernel amb la opicó “CONFIG_4KSTACKS” marcada i si sou usuaris de Gentoo que la variable USE no té el flag “4kstacks”. També cal que el codi font del kernel compilat estigui a /usr/src ja que és necessari per poder fer l’emerge de l’ndiswrapper sense problemes.

Suposem que ja em fet l’emerge de net-wireless/ndiswrapper, concretament jo m’he instal·lat el paquet ndiswrapper-1.0_rc4. Després he posat el driver de windows al directori /etc/ndiswrapper, concretament els fintxers bcmwl5.inf i bcmwl5.sys. Aquest dos fitxers els tindreu al Windows si he configurat la targeta wi-fi allà. Si no és així us adjunto un paquet que conté el driver de Windows: SP23107A.tar.gz podeu descomprimir-lo i copiar els fitxers que us comento a /etc/ndiswrapper.

Ara podeu fer un: ndiswrapper -l i vuere si teniu el driver carregat:

# ndiswrapper -l
Installed ndis drivers:
bcmwl5  driver present, hardware present

si no és així podeu carregar-lo amb:

ndiswrapper -i /etc/ndiswrapper/bcmwl5.inf

Ara cal carregar el mòdul del kernel per tal de que la targeta es carregui al linux:

modprobe ndiswrapper

Si mireu al /var/log/messages o feu un dmesg podreu veure algo semblant a això:

ndiswrapper version 1.0rc4 loaded (preempt=yes,smp=no)
ndiswrapper: driver bcmwl5 (Broadcom,10/28/2003, 3.40.25.3) added
ACPI: PCI Interrupt Link [LNKE] enabled at IRQ 5
PCI: setting IRQ 5 as level-triggered
ACPI: PCI interrupt 0000:02:04.0[A] -> GSI 5 (level, low) -> IRQ 5
ndiswrapper: using irq 5
wlan0: ndiswrapper ethernet device 00:90:96:a3:65:ec using driver bcmwl5
wlan0: encryption modes supported: WEP, WPA with TKIP, WPA with AES/CCMP
mtrr: base(0xe8020000) is not aligned on a size(0x300000) boundary

Com ens indica el log ja tenim la interficie wlan0 creada:

# iwconfig
lo        no wireless extensions.
eth0      no wireless extensions.
wlan0     IEEE 802.11g  ESSID:off/any
          Mode:Managed  Frequency:2.462 GHz  Access Point: 00:00:00:00:00:00
          Bit Rate:54 Mb/s   Tx-Power:25 dBm
          RTS thr:2347 B   Fragment thr:2346 B
          Encryption key:off
          Power Management:off
          Link Quality:99/100  Signal level:-66 dBm  Noise level:-256 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:1956  Invalid misc:47992   Missed beacon:0

Cal recordar però que heu de fer un ifconfig wlan0 up perquè sinó al llistat d’interficies del kernel no veureu la interficie, ja que per defecte esta baixada. Ara només queda configurar la interfice wifi amb el iwconfig, per exemple:

iwconfig wlan0 essid nomxarxa

Amb això si la xarxa no té WEP ni cap sistema de seguretat ja en tindrem prou perquè la resta de coses, com el canal es configurin sols. Si voleu veure quines xarxes tenim disponibles podem usar la comanda:

iwlist wlan0 scan

Aquesta comanda la podeu trobar dins el paquet net-wireless/wireless-tools.

Per configurar la nostre targeta de xarxa com a client de WPA podeu instal·lar el paquet: net-wireless/wpa_supplicant, concretament jo he instal·lat la versió 0.3.6. La configuració la comenta el pof en un comentari de l’article: Xarxa Wifi Segura: freeRadius + WRT54G = 802.1x (WPA-radius EAP/TLS). Però us ho resumeixo aquí. Després d’instal·lar el paquet comentat només cal configurar el fitxer /etc/wpa_supplicant.conf, per exemple seguint la configuració del post comentat quedaria així:

network={
ssid="druvs"
proto=WPA
key_mgmt=WPA-EAP
pairwise=TKIP
group=TKIP
eap=TLS
identity="exemple@exemple.com"
ca_cert="/etc/cert/root.pem"
client_cert="/etc/cert/root.pem"
private_key="/etc/cert/root.p12"
private_key_passwd="whatever"
}

Per llençar el client només cal posar:

wpa_supplicant -B -iwlan0 -c/etc/wpa_supplicant.conf -Dndiswrapper

Si voleu llençar-lo en mode depuració d’errors:

wpa_supplicant -dd -iwlan0 -c/etc/wpa_supplicant.conf -Dndiswrapper

No us oblideu que si heu d’obtenir la direcció IP de l’AP heu de llençar el client de DHCP o si useu IPs estàtiques heu de configurar la interficie wlan0 amb el ifconfig.