Developpez.com - Linux
X

Choisissez d'abord la catégorieensuite la rubrique :


Broadcom PCI 802.11g Wifi et FreeBSD

Date de mise à jour : 20/09/2007

Par Olivier Regnier (Autres articles)

1. Présentation du schéma de l'installation
2. Comment puis-je obtenir les informations de ma carte réseau et récupérer son pilote ?
3. Que dois-je faire avec le pilote Microsoft ?
4. Comment dois-je installer le module sous FreeBSD ?
5. Quelle est l'utilité d'avoir chargé le module ?
6. Comment dois-je configurer mon routeur ?
7. Dois-je configurer mon interface réseau ?
8. Quelles algorithmes de cryptage dois-je choisir ?
9. Comment savoir si je suis connecté à internet ?
10. Remerciements


1. Présentation du schéma de l'installation


    +----------+         +---------+    +--------------------------+             +---------------------+
    | INTERNET |  )) ((  | FREEBOX |----| ROUTEUR/FIREWALL NETGEAR |--| )) (( |--| FreeBSD 6.1-RELEASE |
    +----------+         +---------+    +--------------------------+             +---------------------+
                                              IP: 192.168.1.1                        IP: 192.168.1.3
   
Mon réseau personnel se compose de deux ordinateurs, une station de travail, un portable Acer Aspire 3000 avec une carte réseau Broadcom 802.11g Wifi Certified sous FreeBSD, appelée ROMEO, à l'adresse IP 192.168.1.3 et un PC (non représenté sur le schéma) sous Windows XP Professionnel, appelé HECTOR, à l'adresse IP 192.168.1.2.

Ainsi qu'un routeur/pare-feu Netgear WPNT834, ADSL2+ sans fil RangeMax MiMO 108Mbp/s qui supporte les cryptages, WEP, WPA-PSK (TKIP), WPA2-PSK (AES) et WPA-PSK (TKIP) + WPA2-PSK (AES), à l'adresse IP 192.168.1.1 et une Freebox.


2. Comment puis-je obtenir les informations de ma carte réseau et récupérer son pilote ?

Je vais procéder en trois étapes, la première consiste à savoir si le noyau a détecté la carte réseau:
# dmesg | more
Pour faire défiler les informations, j'utilise les touches fléchées et après un court instant, j'obtiens ceci:
pci0: <network> at device 11.0 (no driver attached)
Est-ce la bonne carte ? Pour le savoir, étape n°2, j'utilise la commande:
# pciconf -lv | more
Après une petite recherche, j'obtiens ceci:
none2@pci0:11:0:    class=0x028000 card=0x03121468 chip=0x431814e4 rev=0x02 hdr=0x00
     vendor    = 'Broadcom Corporation'
     class     = network
pci0 correspond effectivement à ma carte Broadcom, je vais donc pouvoir, en troisième étape, me procurer mon pilote. FreeBSD ne propose pas de pilotes mais il existe une solution, utiliser les pilotes Microsoft qui utilise le protocole NDIS disponibles sur le CD-ROM Aspire 3000/5000 Series System CD Rev 1.0 - Disk 1, dans le répertoire Drivers/802BG et je récupère les fichiers bcmwl5.inf et bcmwl5.sys.


3. Que dois-je faire avec le pilote Microsoft ?

A ce stade, mon pilote ne peut pas fonctionner sous FreeBSD sans avoir au préalable subit une petite transformation. Effectivement, je dois le convertir sous la forme d'un module.

Je vais créer un répertoire appelé ndis et y copier les fichiers situés, sur ma clé USB:
# mkdir /root/ndis && cp /mnt/usb/inf* sys* /root/ndis
Pour convertir mon fichier .inf, je vais utiliser un script, ndisgen afin de le transformer en un fichier ASCII car par défaut, il est au format unicode. La conversion requiert le programme iconv ainsi que, perl-5.8.8 et libiconv-1.9.2_2 que je vais maintenant récupérer et installer:
# pkg_add iconv-2.0_3.tbz
Je vais convertir mon pilote avec ndisgen:
# ndisgen
et suivre les étapes ci-dessous:

Fin des opérations, j'obtiens les messages suivants:
Generating Makefile... done.
Building kernel module... done.
Cleaning up... done.

The file bcmwl5_sys.ko has been successfully generated.
Je vais appuyer une nouvelle fois sur la touche Entrée pour revenir au menu général et quitter le script ndisgen en choisissant le choix n°4, Exit.


4. Comment dois-je installer le module sous FreeBSD ?

Il existe deux possibilités, utiliser la commande kldload pour le charger immédiatement, par exemple:
# kldload ndis/bcmwl5_sys.ko
et vérifier que le module est chargé:
# kldstat
Je dois théoriquement obtenir cet affichage:
Id  Refs  Address     Size    Name
 1    11  0xc0400000  691928  kernel
 2     1  0xc0a92000  58554   acpi.ko
 3     1  0xc3411000  62000   bcmwl5_sys.ko
 4     1  0xc3473000  b000    if_ndis.ko
 5     2  0xc347e000  13000   ndis.ko
soit, automatiser le démarrage du module à l'aide du fichier loader.conf avec les lignes suivantes:
ndis_load="YES"
if_ndis_load="YES"
bcmwl5_sys_load="YES"
bcmwl5_sys_name="/root/ndis/bcmwl5_sys.ko"
Il faut bien entendu, redémarrer FreeBSD, après quelques secondes, je me loggue et j'exécute la commande kldstat et j'obtiens un affichage identique à celui cité ci-dessus.


5. Quelle est l'utilité d'avoir chargé le module ?

Le module permet de charger l'interface réseau que l'on peut visualiser et/ou modifier ses paramètres avec la commande:
% ifconfig
J'obtiens l'affichage suivant:
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
        inet 127.0.0.1 netmask 0xff000000
ndis0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
		ether 00:0e:9b:d3:b5:7e
		media: IEEE 802.11 Wireless Ethernet autoselect
		status: no carrier
		ssid "" channel 1
		authmode OPEN privacy OFF txpowmax 100 protmode CTS
L'interface lo0 appelé loopback et ndis0, mon interface.


6. Comment dois-je configurer mon routeur ?

Je configure mon routeur avec le navigateur web en saisissant dans la barre d'adresse son adresse IP en l'occurrence, 192.168.1.1. Je m'identifie en indiquant mon login et mot de passe qui par défaut sont, admin et password. Par mesure de précaution, je vais modifier mon login et mot de passe en cherchant l'option adéquate.

Je vais définir le nom de mon réseau, SSID acronyme de (Service Set IDentifier) en choisissant l'option prévue à cet effet. Le nom du SSID sera VX-DG8E-ZLOA et je valide. Par la même occasion, je vais désactiver ([ ] Enable SSID Broadcast) la diffusion du nom SSID pour éviter d'éveiller la curiosité de mes voisins et je valide.

Je dois maintenant activer le cryptage de mon réseau afin d'assurer la confidentialité de mes données avec un algorithme de chiffrage. A ce jour, il existe, le WEP, acronyme de (Wired Equivalent Privacy) et WPA, acronyme de (Wi-Fi Protected Access). Si votre matériel le permet, utilisez de préférence, le WPA et en dernier recours, le WEP, pour des raisons de sécurité évidentes. Pour le moment, je vais laisser cette option sur none et je valide.

Une option intéressante, le filtrage des adresses MAC. Saisir une à une les adresses IP de vos ordinateurs. Ainsi seuls les appareils (reconnus sur le réseau par leur adresse MAC) pourront accéder au réseau. Malheureusement, le filtrage ne fonctionne pas avec la version actuelle du firmware, 1.0.41. Je vais désactiver cette option en attendant une nouvelle mise à jour.

Je vais maintenant configurer le poste client, mon portable pour qu'il puisse se connecter à Internet.


7. Dois-je configurer mon interface réseau ?

Oui et pour cela, il faut télécharger le programme, wpa_supplicant. Il permet de s'authentifier à un accès sécurisé par WPA et WEP.

Je vais récupérer wpa_supplicant-0.3.8_2, libdnet-1.10_1 et procéder à l'installation:
# pkg_add wpa_supplicant-0.3.8_2.tbz
Je dois charger quelques modules via le fichier loader.conf en y insérant les lignes suivantes:
wlan_wep_load="YES"
wlan_tkip_load="YES"
wlan_ccmp_load="YES"
wlan_xauth_load="YES"
wlan_acl_load="YES"
Je vais redémarrer FreeBSD avec la commande reboot, me logguer de nouveau et vérifier avec la commande kldstat que tous les modules sont chargés.
# kldstat
J'obtiens ceci:
Id  Refs  Address     Size    Name
 1    21  0xc0400000  696c30  kernel
 2     2  0xc0a97000  ca80    if_ndis.ko
 3     3  0xc0aa4000  1753c   ndis.ko
 4     1  0xc0abc000  64330   bcmwl5_sys.ko
 5     1  0xc0b21000  2d48    wlan_wep.ko
 6     1  0xc0b24000  6da4    wlan_ccmp.ko
 7     1  0xc0b2b000  4040    wlan_tkip.ko
 8     1  0xc0b30000  1b88    wlan_xauth.ko
 9     1  0xc0b32000  2cf4    wlan_acl.ko
 10    1  0xc0b35000  58554   acpi.ko
Une fois wpa_supplicant installé, je vais créer son fichier de configuration:
# touch /etc/wpa_supplicant.conf
et je vais ajouter la ligne suivante au fichier rc.conf:
ifconfig_ndis0="WPA DHCP"
Maintenant, je vais tester les différentes méthodes de cryptage.


8. Quelles algorithmes de cryptage dois-je choisir ?

WEP

Arrivé sur l'interface de configuration de mon routeur, je choisis la page qui permet de modifier la méthode de cryptage WEP.

* Configuration à clé WEP (coté routeur):

Je saisis ma passphrase, dl0r8q9p7r et je clique sur le bouton [Generate].

warningAttention sous Mozilla Firefox version 1.5.0.7, le bouton [Generate] ne fonctionne pas. Il faut donc utiliser Internet Explorer.
Security Options
(*) WEP

Security Encryption (WEP)
Authentication Type:   [Automatic]

Security Encryption (WEP) Key
Passphrase: dl0r8q9p7r  [Generate]
Key1: (*) E313B5E7FA
Key2: ( ) FAC2C1B14D
Key3: ( ) A2D49B641F
Key4: ( ) 57673F0968

* Configuration à clé WEP (coté client):

Fichier à modifier: /etc/wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel

eapol_version=1

ap_scan=2

network={
         ssid="VX-DG8E-ZLOA"
         key_mgmt=NONE
         wep_key0=E313B5E7FA
         wep_tx_keydx=0
}
Je sauvegarde mon fichier et je teste la configuration:
/etc/rc.d/netif start
WEP

* Configuration à clé WEP partagée (coté routeur):


Security Options
(*) WEP

Security Encryption (WEP)
Authentication Type:   [Shared Key]

Security Encryption (WEP) Key
Passphrase: dl0r8q9p7r  [Generate]
Key1: (*) E313B5E7FA
Key2: ( ) FAC2C1B14D
Key3: ( ) A2D49B641F
Key4: ( ) 57673F0968

* Configuration à clé WEP partagée (coté client):

Fichier à modifier: /etc/wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel

eapol_version=1

ap_scan=2

network={
         ssid="VX-DG8E-ZLOA"
         key_mgmt=NONE
         auth_alg=SHARED
         wep_key0=E313B5E7FA
         wep_key1=FAC2C1B14D
         wep_key2=A2D49B641F
         wep_key3=57673F0968
         wep_tx_keydx=0
}
Je sauvegarde mon fichier et je teste la configuration:
/etc/rc.d/netif restart
WPA

De retour sur l'interface de configuration de mon routeur, je choisis la page qui permet de modifier la méthode de cryptage WPA. Je saisis ma passphrase et je valide.

* Configuration à clé WPA-PSK (TKIP), (coté routeur):

Security Options
(*) WPA-PSK (TKIP)

Security Encryption (WPA-PSK)
Passphrase:                   [**********    ] (8 ~ 63 characters)

* Configuration à clé WPA-PSK (TKIP), (coté client):

Je vais arrêter le programme wpa_supplicant et supprimer son fichier de configuration:
/etc/rc.d/netif stop && rm /etc/wpa_supplicant.conf
Je vais générer le fichier wpa_supplicant.conf automatiquement avec le SSID et la clé psk :
wpa_passphrase "VX-DG8E-ZLOA" "E313B5E7FA" > /etc/wpa_supplicant.conf
Voici le contenu du fichier:
network={
         ssid="VX-DG8E-ZLOA"
         #psk="E313B5E7FA"
         psk=7bce519ec5f8f783ec989e7c431509fd292e4f9680c510b44745a7fbbe737f4f
}
Je vais le modifier comme suit:
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel

eapol_version=1

ap_scan=2

network={
         ssid="VX-DG8E-ZLOA"
         proto=WPA
         key_mgmt=WPA-PSK
         auth_alg=OPEN
         pairwise=TKIP
         group=TKIP
         psk=7bce519ec5f8f783ec989e7c431509fd292e4f9680c510b44745a7fbbe737f4f
}
Je sauvegarde le fichier et je teste la configuration:
/etc/rc.d/netif start
WPA2

A nouveau sur l'interface de configuration de mon routeur, je choisis la page qui permet de modifier la méthode de cryptage WPA. Je saisis ma passphrase et je valide.

* Configuration à clé WPA2-PSK (AES), (coté routeur):

Security Options
(*) WPA2-PSK (AES)

Security Encryption (WPA-PSK)
Passphrase:                   [**********    ] (8 ~ 63 characters)

* Configuration à clé WPA2-PSK (AES), (coté client):

Fichier à modifier: /etc/wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel

eapol_version=1

ap_scan=2

network={
         ssid="VX-DG8E-ZLOA"
         proto=RSN
         key_mgmt=WPA-PSK
         auth_alg=OPEN
         pairwise=CCMP
         group=CCMP
         psk=7bce519ec5f8f783ec989e7c431509fd292e4f9680c510b44745a7fbbe737f4f
}
Je sauvegarde le fichier et je teste la configuration:
/etc/rc.d/netif restart
WPA + WPA2

De retour sur l'interface de configuration de mon routeur, je choisis la page qui permet de modifier la méthode de cryptage WPA. Je saisis ma passphrase et je valide.

* Configuration à clé WPA-PSK (TKIP) + WPA2-PSK (AES), (coté routeur):

Security Options
(*) WPA-PSK (TKIP) + WPA2-PSK (AES)

Security Encryption (WPA-PSK)
Passphrase:                   [**********    ] (8 ~ 63 characters)

* Configuration à clé WPA-PSK (TKIP) + WPA2-PSK (AES), (coté client):

Fichier à modifier: /etc/wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel

eapol_version=1

ap_scan=2

network={
         ssid="VX-DG8E-ZLOA"
         proto=WPA RSN
         key_mgmt=WPA-PSK
         auth_alg=OPEN
         pairwise=TKIP CCMP
         group=TKIP CCMP
         psk=7bce519ec5f8f783ec989e7c431509fd292e4f9680c510b44745a7fbbe737f4f
}
Je sauvegarde le fichier et je teste la configuration:
/etc/rc.d/netif restart

9. Comment savoir si je suis connecté à internet ?

Au moment de tester la configuration, j'utilise toujours les mêmes commandes:
/etc/rc.d/netif start|stop|restart
Suivant la méthode de cryptage utilisée, j'obtiens un affichage similaire à celui-ci:
Starting wpa_supplicant.
DHCPREQUEST on ndis0 to 255.255.255.255 port 67
DHCPREQUEST on ndis0 to 255.255.255.255 port 67
DHCPACK from 192.168.1.1
bound to 192.168.1.3 -- renewal in 43200 seconds.
ndis0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
       inet6 fe80::20e:9bff:fed3:b57e%ndis0 prefixlen 64 scopeid 0x2
       inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
       ether 00:0e:9b:d3:b5:7e
       media: IEEE 802.11 Wireless Ethernet autoselect (OFDM/54Mbps)
       status: associated
       ssid VX-DG8E-ZLOA channel 7 bssid 00:14:6c:f1:4c:8a
       authmode WPA2/802.11i privacy ON deftxkey UNDEF txpowmax 100 protmode CTS
Je suis bien connecté au réseau avec le SSID VX-DG8E-ZLOA et comme adresse IP 192.168.1.3 attribuée par le routeur. Puis-je sortir vers l'extérieur ? Pour cela, je vais pinguer par exemple le site de FreeBSD:
# ping freebsd.org
J'obtiens ceci:

PING google.com (64.233.167.99): 56 data bytes
64 bytes from 64.233.167.99: icmp_seq=0 ttl=242 time=137.575 ms
64 bytes from 64.233.167.99: icmp_seq=1 ttl=242 time=140.393 ms
64 bytes from 64.233.167.99: icmp_seq=2 ttl=242 time=139.910 ms
64 bytes from 64.233.167.99: icmp_seq=3 ttl=242 time=140.665 ms 
J'en conclus que je suis bien connecté à Internet.


10. Remerciements

Je tiens à remercier Julp et Ovh pour la relecture attentive de cet article.

Valid XHTML 1.1!Valid CSS!

Copyright © 2007 Olivier Regnier. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Contacter le responsable de la rubrique Linux