« Point d'accès sécurisé par hostAPd » : différence entre les versions

De Lea Linux
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
(balises code)
Ligne 2 : Ligne 2 :
[[Catégorie:Réseau local]]
[[Catégorie:Réseau local]]


= Introduction =
= Modification de Point d'accès sécurisé par hostAPd =
 
par Glandos
 
== Introduction ==
Ce n'est pas vraiment un tutoriel, mais plutôt un retour d'expérience. Mais finalement c'est ce que sont tous les tutoriels. Je tiens simplement à vous prévenir qu'avant ce week-end, je n'avais jamais installé de matériels Wi-fi. Je ne suis donc pas un expert, mais j'ai appris un certain nombre de choses qui pourront être utiles.
Ce n'est pas vraiment un tutoriel, mais plutôt un retour d'expérience. Mais finalement c'est ce que sont tous les tutoriels. Je tiens simplement à vous prévenir qu'avant ce week-end, je n'avais jamais installé de matériels Wi-fi. Je ne suis donc pas un expert, mais j'ai appris un certain nombre de choses qui pourront être utiles.


= Présentation =
== Présentation ==
== But recherché ==
=== But recherché ===
Tout d'abord, il convient de préciser ce que je voulais faire, en plus de « installer le wifi chez moi ». Pour ne pas verser dans l'étalage de vie privée, voici ce dont je disposais :
Tout d'abord, il convient de préciser ce que je voulais faire, en plus de « installer le wifi chez moi ». Pour ne pas verser dans l'étalage de vie privée, voici ce dont je disposais :
* Une freebox basique (sans fonctions routeur ni wifi).
* Une freebox basique (sans fonctions routeur ni wifi).
Ligne 18 : Ligne 22 :
Le but est donc pour moi de faire que le portable puisse se brancher en Wi-fi sur le réseau local, exactement comme les autres clients. Je ne voulais pas me taper des règles firewall en plus, alors j'ai opté pour le bridge.
Le but est donc pour moi de faire que le portable puisse se brancher en Wi-fi sur le réseau local, exactement comme les autres clients. Je ne voulais pas me taper des règles firewall en plus, alors j'ai opté pour le bridge.


== Prérequis ==
=== Prérequis ===
Voici les connaissances ou le matériel que je considère comme requis :
Voici les connaissances ou le matériel que je considère comme requis :
* La passerelle tourne sous Debian.
* La passerelle tourne sous Debian.
Ligne 27 : Ligne 31 :
* Un pot de rillettes et du bon pain. Les musulmans sont bien évidemment invités à choisir une mousse de canard ou des tranches de dinde.
* Un pot de rillettes et du bon pain. Les musulmans sont bien évidemment invités à choisir une mousse de canard ou des tranches de dinde.


= Le bridge, invention magique =
== Le bridge, invention magique ==
== Présentation du bridge ==
=== Présentation du bridge ===
Le bridge (pont en anglais) permet de faire une chose miraculeuse : réunir de manière transparente plusieurs cartes réseaux, en une seule virtuelle. Il y a quelques inconvénients, notamment sur le fait que le démarrage est un peu plus lent, le temps que le bridge se fasse, et que c'est un peu compliqué pour la tête. Mais je voulais vraiment que le portable se connecte en Wi-fi en changeant le minimum de choses sur la passerelle.
Le bridge (pont en anglais) permet de faire une chose miraculeuse : réunir de manière transparente plusieurs cartes réseaux, en une seule virtuelle. Il y a quelques inconvénients, notamment sur le fait que le démarrage est un peu plus lent, le temps que le bridge se fasse, et que c'est un peu compliqué pour la tête. Mais je voulais vraiment que le portable se connecte en Wi-fi en changeant le minimum de choses sur la passerelle.


== Installation ==
=== Installation ===
Pour cela, il est donc nécessaire d'avoir un noyau compilé avec les bonnes options. Pour l'utilisateur normal qui n'a pas recompilé son noyau, ne cherchez pas, c'est bon, ça ira :) Pour les autres, trouvez comment activer le bridging dans le noyau, je ne sais pas comment on fait :p
Pour cela, il est donc nécessaire d'avoir un noyau compilé avec les bonnes options. Pour l'utilisateur normal qui n'a pas recompilé son noyau, ne cherchez pas, c'est bon, ça ira :) Pour les autres, trouvez comment activer le bridging dans le noyau, je ne sais pas comment on fait :p
Ensuite, il faut installer les utilitaires nécessaires :
Ensuite, il faut installer les utilitaires nécessaires :


<code>apt-get install bridge-utils
<div class="code">apt-get install bridge-utils
</code>
</div>


Pour les autres systèmes ça doit être dans le même style.
Pour les autres systèmes ça doit être dans le même style.
Ligne 42 : Ligne 46 :
Chez Debian, tout se passe dans /etc/network/interfaces ce qui est plutôt pratique. Voici donc le fichier AVANT l'installation du bridge :
Chez Debian, tout se passe dans /etc/network/interfaces ce qui est plutôt pratique. Voici donc le fichier AVANT l'installation du bridge :


<code># This file describes the network interfaces available on your system
<div class="code">
# This file describes the network interfaces available on your system


# and how to activate them. For more information, see interfaces(5).
# and how to activate them. For more information, see interfaces(5).


# The loopback network interface
# The loopback network interface
auto lo
auto lo
iface lo inet loopback
iface lo inet loopback


# The primary network interface
# The primary network interface
auto eth_adsl
auto eth_adsl
iface eth_adsl inet dhcp
iface eth_adsl inet dhcp


auto eth_local
auto eth_local
iface eth_local inet static
iface eth_local inet static
       address 192.168.0.254
       address 192.168.0.254
       netmask 255.255.255.0
       netmask 255.255.255.0
       broadcast 192.168.0.255
       broadcast 192.168.0.255
</code>
</div>


La carte eth_adsl est donc initialisée au démarrage (ligne auto eth_adsl), a une adresse IPv4 (inet) et ses paramètres réseaux lui sont attribués automatiquement (dhcp), en l'occurence par la Freebox.
La carte eth_adsl est donc initialisée au démarrage (ligne auto eth_adsl), a une adresse IPv4 (inet) et ses paramètres réseaux lui sont attribués automatiquement (dhcp), en l'occurence par la Freebox.
Ligne 66 : Ligne 71 :
Après l'installation du bridge, voici ce que j'ai :
Après l'installation du bridge, voici ce que j'ai :


<code># This file describes the network interfaces available on your system
<div class="code">
# and how to activate them. For more information, see interfaces(5).
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).


# The loopback network interface
# The loopback network interface
auto lo
auto lo
iface lo inet loopback
iface lo inet loopback


# The primary network interface
# The primary network interface
auto eth_adsl
auto eth_adsl
iface eth_adsl inet dhcp
iface eth_adsl inet dhcp


iface ath0 inet static
iface ath0 inet static
        wireless-mode master
        wireless-mode master
        wireless-channel 9
        wireless-channel 9




auto bridge_local
auto bridge_local
iface bridge_local inet static
iface bridge_local inet static
         address 192.168.0.254
         address 192.168.0.254
         netmask 255.255.255.0
         netmask 255.255.255.0
         broadcast 192.168.0.255
         broadcast 192.168.0.255
         bridge_ports eth_local ath0
         bridge_ports eth_local ath0
</code>
</div>


La partie eth_adsl n'a pas changé : c'est normal :) Par contre, on voit que bridge_local a les même paramètres que mon ex-carte eth_local. Sauf que en plus, on lui dit que c'est un bridge qui contient les cartes eth_local et ath0. Ainsi, dès que j'envoie des paquets depuis la passerelle sur l'adresse 192.168.0.254, ceux-ci seront transmis automatiquement aux deux cartes, et réciproquement, lorsqu'une carte reçoit un paquet pour 192.168.0.254, elle le transmet au bridge. Moi, je trouve ça magique :)
La partie eth_adsl n'a pas changé : c'est normal :) Par contre, on voit que bridge_local a les même paramètres que mon ex-carte eth_local. Sauf que en plus, on lui dit que c'est un bridge qui contient les cartes eth_local et ath0. Ainsi, dès que j'envoie des paquets depuis la passerelle sur l'adresse 192.168.0.254, ceux-ci seront transmis automatiquement aux deux cartes, et réciproquement, lorsqu'une carte reçoit un paquet pour 192.168.0.254, elle le transmet au bridge. Moi, je trouve ça magique :)
Ligne 96 : Ligne 102 :
Ceci étant fait, il y a plusieurs méthodes pour activer ce bridge. Sachez que dans la plupart des cas, ceci va foutre en l'air la connexion ! C'est ce qui m'est arrivé, ça fait un peu tout drôle. Normalement, l'ADSL reste en place, mais ce n'est pas le cas de la connexion sur eth_local.
Ceci étant fait, il y a plusieurs méthodes pour activer ce bridge. Sachez que dans la plupart des cas, ceci va foutre en l'air la connexion ! C'est ce qui m'est arrivé, ça fait un peu tout drôle. Normalement, l'ADSL reste en place, mais ce n'est pas le cas de la connexion sur eth_local.


Soit vous faites :<code>/etc/init.d/networking force-reload
Soit vous faites :<div class="code">/etc/init.d/networking force-reload
</code>
</div>


Soit :<code>/etc/init.d/networking stop && /etc/init.d/networking start
Soit :<div class="code">/etc/init.d/networking stop && /etc/init.d/networking start
</code>
</div>


Soit carrément un bon vieux reboot :<code>reboot
Soit carrément un bon vieux reboot :<div class="code">reboot
</code>
</div>


Je sais pas pourquoi je mets la commande... On sait jamais :p
Je sais pas pourquoi je mets la commande... On sait jamais :p
Enfin, après l'une de ses trois méthodes (voire les trois), en tapant
Enfin, après l'une de ses trois méthodes (voire les trois), en tapant


<code>ifconfig
<div class="code">ifconfig
</code>
</div>


Vous devriez voir ça :
Vous devriez voir ça :
<code>ath0      Lien encap:Ethernet  HWaddr 00:15:E9:3F:AA:90   
<div class="code">
          adr inet6: fe80::215:e9ff:fe3f:aa90/64 Scope:Lien
  ath0      Lien encap:Ethernet  HWaddr 00:15:E9:3F:AA:90   
          UP BROADCAST RUNNING MULTICAST  MTU:2290  Metric:1
  adr inet6: fe80::215:e9ff:fe3f:aa90/64 Scope:Lien
          RX packets:163080 errors:955516 dropped:0 overruns:0 frame:955509
  UP BROADCAST RUNNING MULTICAST  MTU:2290  Metric:1
          TX packets:315546 errors:613 dropped:0 overruns:0 carrier:0
  RX packets:163080 errors:955516 dropped:0 overruns:0 frame:955509
          collisions:0 lg file transmission:200  
  TX packets:315546 errors:613 dropped:0 overruns:0 carrier:0
          RX bytes:13726343 (13.0 MiB)  TX bytes:462013643 (440.6 MiB)
  collisions:0 lg file transmission:200  
          Interruption:185 Mémoire:e08e0000-e08f0000  
  RX bytes:13726343 (13.0 MiB)  TX bytes:462013643 (440.6 MiB)
  Interruption:185 Mémoire:e08e0000-e08f0000  


bridge_lo Lien encap:Ethernet  HWaddr 00:11:95:C5:44:61   
bridge_lo Lien encap:Ethernet  HWaddr 00:11:95:C5:44:61   
          inet adr:192.168.0.254  Bcast:192.168.0.255  Masque:255.255.255.0
          inet adr:192.168.0.254  Bcast:192.168.0.255  Masque:255.255.255.0
          adr inet6: fe80::211:95ff:fec5:4461/64 Scope:Lien
          adr inet6: fe80::211:95ff:fec5:4461/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:294178 errors:0 dropped:0 overruns:0 frame:0
          RX packets:294178 errors:0 dropped:0 overruns:0 frame:0
          TX packets:454533 errors:0 dropped:0 overruns:0 carrier:0
          TX packets:454533 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0  
          collisions:0 lg file transmission:0  
          RX bytes:458148569 (436.9 MiB)  TX bytes:541885943 (516.7 MiB)
          RX bytes:458148569 (436.9 MiB)  TX bytes:541885943 (516.7 MiB)


eth_adsl  Lien encap:Ethernet  HWaddr 00:11:D8:09:6D:31   
eth_adsl  Lien encap:Ethernet  HWaddr 00:11:D8:09:6D:31   
          inet adr:xx.xx.xx.xx  Bcast:xx.xx.xx.xx  Masque:255.255.255.0
          inet adr:xx.xx.xx.xx  Bcast:xx.xx.xx.xx  Masque:255.255.255.0
          adr inet6: fe80::211:d8ff:fe09:6d31/64 Scope:Lien
          adr inet6: fe80::211:d8ff:fe09:6d31/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:279243 errors:0 dropped:0 overruns:0 frame:0
          RX packets:279243 errors:0 dropped:0 overruns:0 frame:0
          TX packets:264750 errors:0 dropped:0 overruns:0 carrier:0
          TX packets:264750 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000  
          collisions:0 lg file transmission:1000  
          RX bytes:189704796 (180.9 MiB)  TX bytes:66643253 (63.5 MiB)
          RX bytes:189704796 (180.9 MiB)  TX bytes:66643253 (63.5 MiB)
          Interruption:177 Adresse de base:0xb000  
          Interruption:177 Adresse de base:0xb000  


eth_local Lien encap:Ethernet  HWaddr 00:11:95:C5:44:61   
eth_local Lien encap:Ethernet  HWaddr 00:11:95:C5:44:61   
          adr inet6: fe80::211:95ff:fec5:4461/64 Scope:Lien
          adr inet6: fe80::211:95ff:fec5:4461/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:403023 errors:0 dropped:0 overruns:0 frame:0
          RX packets:403023 errors:0 dropped:0 overruns:0 frame:0
          TX packets:142751 errors:0 dropped:0 overruns:0 carrier:0
          TX packets:142751 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000  
          collisions:0 lg file transmission:1000  
          RX bytes:460239899 (438.9 MiB)  TX bytes:80409812 (76.6 MiB)
          RX bytes:460239899 (438.9 MiB)  TX bytes:80409812 (76.6 MiB)
          Interruption:169 Adresse de base:0xd800  
          Interruption:169 Adresse de base:0xd800  


lo        Lien encap:Boucle locale   
lo        Lien encap:Boucle locale   
          inet adr:127.0.0.1  Masque:255.0.0.0
          inet adr:127.0.0.1  Masque:255.0.0.0
          adr inet6: ::1/128 Scope:Hôte
          adr inet6: ::1/128 Scope:Hôte
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:38438 errors:0 dropped:0 overruns:0 frame:0
          RX packets:38438 errors:0 dropped:0 overruns:0 frame:0
          TX packets:38438 errors:0 dropped:0 overruns:0 carrier:0
          TX packets:38438 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0  
          collisions:0 lg file transmission:0  
          RX bytes:3297781 (3.1 MiB)  TX bytes:3297781 (3.1 MiB)
          RX bytes:3297781 (3.1 MiB)  TX bytes:3297781 (3.1 MiB)
</code>
</div>


On constate donc que eth_local et ath0 n'ont aucune adresse IPv4 (inet adr) et que bridge_local a bien l'adresse 192.168.0.254. Quant à eth_adsl, pour les xx, c'est moi qui les ai mis : j'ai une IP fixe, je tiens à garder ma vie privée :)
On constate donc que eth_local et ath0 n'ont aucune adresse IPv4 (inet adr) et que bridge_local a bien l'adresse 192.168.0.254. Quant à eth_adsl, pour les xx, c'est moi qui les ai mis : j'ai une IP fixe, je tiens à garder ma vie privée :)
Ligne 167 : Ligne 174 :
Cela permet, en plus de reposer vos mains meurtries par ces infâmes périphériques de saisie, de soulager les cris blafards de votre estomac. Vous pourrez alors apprécier à leur juste valeur les hormones de bien-être sécrétées par une digestion bien méritée :)
Cela permet, en plus de reposer vos mains meurtries par ces infâmes périphériques de saisie, de soulager les cris blafards de votre estomac. Vous pourrez alors apprécier à leur juste valeur les hormones de bien-être sécrétées par une digestion bien méritée :)


= Créer le point d'accès =
== Créer le point d'accès ==
== Présentation de hostAPd ==
=== Présentation de hostAPd ===
Étape suivante : transformer une simple carte Wi-fi en puissant point d'accès (accesss point en anglais soit AP). Pour cela, après avoir parcouru rapidement le web, une solution s'est imposée : hostAPd disponible sur [http://hostap.epitest.fi/hostapd/ cette page]
Étape suivante : transformer une simple carte Wi-fi en puissant point d'accès (accesss point en anglais soit AP). Pour cela, après avoir parcouru rapidement le web, une solution s'est imposée : hostAPd disponible sur [http://hostap.epitest.fi/hostapd/ cette page]
Attention, il faut différencier les 3 projets du site : hostAP driver, hostAPd et wpa_supplicant. hostAP driver ne m'intéressait pas : c'est l'implémentation libre d'un driver pour carte Wi-fi. Wpa_supplicant est un client WPA, comme on va le voir par la suite. Et hostAPd est le logiciel capable de faire tourner votre carte Wi-fi « de base » en point d'accès genre « Enterprise » :)
Attention, il faut différencier les 3 projets du site : hostAP driver, hostAPd et wpa_supplicant. hostAP driver ne m'intéressait pas : c'est l'implémentation libre d'un driver pour carte Wi-fi. Wpa_supplicant est un client WPA, comme on va le voir par la suite. Et hostAPd est le logiciel capable de faire tourner votre carte Wi-fi « de base » en point d'accès genre « Enterprise » :)


== Installation ==
=== Installation ===
Lors de la première version de ce tutoriel, il fallait recompiler hostAPd soit même pour que ça marche. Aujourd'hui, plus la peine de se fatiguer, du moins pour les cartes avec chipset Atheros. Je laisse cependant le passage sur la compilation, pour les gens dans le besoin
Lors de la première version de ce tutoriel, il fallait recompiler hostAPd soit même pour que ça marche. Aujourd'hui, plus la peine de se fatiguer, du moins pour les cartes avec chipset Atheros. Je laisse cependant le passage sur la compilation, pour les gens dans le besoin


=== Avec les paquets Debian ===
==== Avec les paquets Debian ====
Je ne pense pas surprendre la foule en disant qu'il faut simplement lancer la commande :<code>apt-get install hostapd
Je ne pense pas surprendre la foule en disant qu'il faut simplement lancer la commande :<div class="code">apt-get install hostapd
</code>
</div>
Simple, efficace, propre. Vous pouvez passer au chapitre suivant :)
Simple, efficace, propre. Vous pouvez passer au chapitre suivant :)


=== Compilation ===
==== Compilation ====
La première fois, j'ai été confronté à l'instabilité de Debian/testing... En effet, les binaires hostAPd étaient présents mais pas compilés avec les bonnes options pour madwifi, et les sources étaient celles de la version 0.5.0 pleines de bugs corrigés depuis. J'ai perdu un temps monstre sur ça, que je vais vous épargner ici :) Mais du coup le moment est bien choisi pour aborder la compilation « à la mimine ».
La première fois, j'ai été confronté à l'instabilité de Debian/testing... En effet, les binaires hostAPd étaient présents mais pas compilés avec les bonnes options pour madwifi, et les sources étaient celles de la version 0.5.0 pleines de bugs corrigés depuis. J'ai perdu un temps monstre sur ça, que je vais vous épargner ici :) Mais du coup le moment est bien choisi pour aborder la compilation « à la mimine ».


Pour cela, il faut d'abord installer quelques outils, dont le fameux gcc. Sous Debian (et là ça marche bien :p ) :
Pour cela, il faut d'abord installer quelques outils, dont le fameux gcc. Sous Debian (et là ça marche bien :p ) :


<code>apt-get install build-essential gcc
<div class="code">apt-get install build-essential gcc
</code>
</div>


Je pense que seul gcc est nécessaire dans notre cas, mais bon on sait jamais, ça pourra servir :). Ensuite, on va avoir besoin des sources de hostAPd (normal). Ce qui m'intéressait étant aussi de faire fonctionner hostAPd avec madwifi, il me fallait également les sources de madwifi. On fait donc un petit
Je pense que seul gcc est nécessaire dans notre cas, mais bon on sait jamais, ça pourra servir :). Ensuite, on va avoir besoin des sources de hostAPd (normal). Ce qui m'intéressait étant aussi de faire fonctionner hostAPd avec madwifi, il me fallait également les sources de madwifi. On fait donc un petit


<code>apt-get install madwifi-source
<div class="code">apt-get install madwifi-source
</code>
</div>


Et un téléchargement de hostAPd dans le répertoire /usr/src/, classique pour toute compilation standard. Il faut maintenant extraire les fichiers :
Et un téléchargement de hostAPd dans le répertoire /usr/src/, classique pour toute compilation standard. Il faut maintenant extraire les fichiers :


<code>tar xvfj madwifi.tar.bz2
<div class="code">
tar xvfz hostapd-0.5.2.tar.gz</code>
tar xvfj madwifi.tar.bz2
tar xvfz hostapd-0.5.2.tar.gz</div>


Vous avez donc remarqué qu'à cette heure, la version en cours de hostAPd est la 0.5.2 ;) Rendez-vous dans le répertoire hostapd-0.5.2/ créé lors de l'extraction. Vous pouvez lire le README, c'est en anglais, mais ça peut faire du bien de temps à autre. L'essentiel à comprendre est qu'il faut créer un fichier .config lui disant quoi mettre lors de la compilation. Heureusement, un listing des options est présent. Faites donc :
Vous avez donc remarqué qu'à cette heure, la version en cours de hostAPd est la 0.5.2 ;) Rendez-vous dans le répertoire hostapd-0.5.2/ créé lors de l'extraction. Vous pouvez lire le README, c'est en anglais, mais ça peut faire du bien de temps à autre. L'essentiel à comprendre est qu'il faut créer un fichier .config lui disant quoi mettre lors de la compilation. Heureusement, un listing des options est présent. Faites donc :


<code>cp defconfig .config
<div class="code">cp defconfig .config
</code>
</div>
Et éditez ce fichier .config. Voilà à quoi ressemble le mien :
Et éditez ce fichier .config. Voilà à quoi ressemble le mien :


<code># Driver interface for Host AP driver
<div class="code">
#CONFIG_DRIVER_HOSTAP=y
# Driver interface for Host AP driver
#CONFIG_DRIVER_HOSTAP=y


# Driver interface for wired authenticator
# Driver interface for wired authenticator
#CONFIG_DRIVER_WIRED=y
#CONFIG_DRIVER_WIRED=y


# Driver interface for madwifi driver
# Driver interface for madwifi driver
CONFIG_DRIVER_MADWIFI=y
CONFIG_DRIVER_MADWIFI=y
CFLAGS += -I../modules/madwifi/ # change to reflect local setup; directory for madwifi src
CFLAGS += -I../modules/madwifi/ # change to reflect local setup; directory for madwifi src


# Driver interface for Prism54 driver
# Driver interface for Prism54 driver
#CONFIG_DRIVER_PRISM54=y
#CONFIG_DRIVER_PRISM54=y


# Driver interface for drivers using Devicescape IEEE 802.11 stack
# Driver interface for drivers using Devicescape IEEE 802.11 stack
#CONFIG_DRIVER_DEVICESCAPE=y
#CONFIG_DRIVER_DEVICESCAPE=y


# Driver interface for FreeBSD net80211 layer (e.g., Atheros driver)
# Driver interface for FreeBSD net80211 layer (e.g., Atheros driver)
#CONFIG_DRIVER_BSD=y
#CONFIG_DRIVER_BSD=y
#CFLAGS += -I/usr/local/include
#CFLAGS += -I/usr/local/include
#LIBS += -L/usr/local/lib
#LIBS += -L/usr/local/lib


# IEEE 802.11F/IAPP
# IEEE 802.11F/IAPP
#CONFIG_IAPP=y
#CONFIG_IAPP=y


# WPA2/IEEE 802.11i RSN pre-authentication
# WPA2/IEEE 802.11i RSN pre-authentication
#CONFIG_RSN_PREAUTH=y
#CONFIG_RSN_PREAUTH=y


# IEEE 802.11i/IEEE 802.11e STAKey negotiation for direct link connection
# IEEE 802.11i/IEEE 802.11e STAKey negotiation for direct link connection
#CONFIG_STAKEY=y
#CONFIG_STAKEY=y


# Integrated EAP server
# Integrated EAP server
CONFIG_EAP=y
CONFIG_EAP=y


# EAP-MD5 for the integrated EAP server
# EAP-MD5 for the integrated EAP server
#CONFIG_EAP_MD5=y
#CONFIG_EAP_MD5=y


# EAP-TLS for the integrated EAP server
# EAP-TLS for the integrated EAP server
CONFIG_EAP_TLS=y
CONFIG_EAP_TLS=y
</code>
</div>


Tout le reste est commenté, j'en ai rien à faire, je n'ai besoin que du WPA avec un driver madwifi. Pour les plus curieux, j'ai dû laisser CONFIG_EAP et CONFIG_EAP_TLS, parce que sinon ça plantait, ce sera visiblement corrigé dans la version 0.5.3. Remarquez aussi la ligne pour madwifi : CFLAGS contient le chemin vers les sources de madwifi, fraîchement décompressé dans le répertoire /usr/src/modules/madwifi/. Sauvegardez et quittez.
Tout le reste est commenté, j'en ai rien à faire, je n'ai besoin que du WPA avec un driver madwifi. Pour les plus curieux, j'ai dû laisser CONFIG_EAP et CONFIG_EAP_TLS, parce que sinon ça plantait, ce sera visiblement corrigé dans la version 0.5.3. Remarquez aussi la ligne pour madwifi : CFLAGS contient le chemin vers les sources de madwifi, fraîchement décompressé dans le répertoire /usr/src/modules/madwifi/. Sauvegardez et quittez.
C'est parti pour l'instant geek crucial :
C'est parti pour l'instant geek crucial :


<code>make
<div class="code">make
</code>
</div>


Simple non ? Moi ça me déroute parfois tout ce qu'il peut écrire avec aussi peu de lettres tapées :) Si tout se passe bien, il n'affiche aucune ligne trop inquiétante remplie d'étoiles et de mot ERROR. Sinon, ben euh, posez vos questions après le bip.
Simple non ? Moi ça me déroute parfois tout ce qu'il peut écrire avec aussi peu de lettres tapées :) Si tout se passe bien, il n'affiche aucune ligne trop inquiétante remplie d'étoiles et de mot ERROR. Sinon, ben euh, posez vos questions après le bip.
Ligne 254 : Ligne 263 :
Maintenant que c'est compilé, faut l'installer. En gros, la plupart du temps, ça consiste en un simple copier/coller des fichiers compilés. Rassurez-vous la procédure standard est on ne peut plus explicite :
Maintenant que c'est compilé, faut l'installer. En gros, la plupart du temps, ça consiste en un simple copier/coller des fichiers compilés. Rassurez-vous la procédure standard est on ne peut plus explicite :


<code>make install
<div class="code">make install
</code>
</div>


Et pouf. Comme c'est indiqué, les exécutables sont installés dans /usr/local/bin par défaut. C'est très bien là où c'est :)
Et pouf. Comme c'est indiqué, les exécutables sont installés dans /usr/local/bin par défaut. C'est très bien là où c'est :)


== Configuration de hostAPd ==
=== Configuration de hostAPd ===
Prochaine étape : la configuration de hostAPd. C'est pas trop dur, à la base, il y a trois fichiers, placés comme d'habitude dans /etc. À savoir :
Prochaine étape : la configuration de hostAPd. C'est pas trop dur, à la base, il y a trois fichiers, placés comme d'habitude dans /etc. À savoir :
* ''/etc/default/hostapd'' - Permet d'activer ou de désactiver le lancement automatique de hostAPd
* ''/etc/default/hostapd'' - Permet d'activer ou de désactiver le lancement automatique de hostAPd
Ligne 265 : Ligne 274 :
* ''/etc/init.d/hostapd'' - Script shell gérant l'exécution et l'arrêt de hostAPd en tant que démon.
* ''/etc/init.d/hostapd'' - Script shell gérant l'exécution et l'arrêt de hostAPd en tant que démon.


=== Après une compilation manuelle ===
==== Après une compilation manuelle ====
Si vous avez compilé vous même hostapd, je vous propose une astuce pour pas trop se casser la tête : installer le paquet Debian de hostAPd, qui, même s'il est défectueux, installe les fichiers par défaut au bon endroit pour vous. Il n'y aura plus qu'à faire quelques retouches. C'est parti :
Si vous avez compilé vous même hostapd, je vous propose une astuce pour pas trop se casser la tête : installer le paquet Debian de hostAPd, qui, même s'il est défectueux, installe les fichiers par défaut au bon endroit pour vous. Il n'y aura plus qu'à faire quelques retouches. C'est parti :


<code>apt-get install hostapd
<div class="code">apt-get install hostapd
</code>
</div>
Si jamais vous voulez retirer les exécutables (présent dans /sbin ou /usr/sbin pour le paquet Debian) pour éviter de s'emmêler les pinceaux :
Si jamais vous voulez retirer les exécutables (présent dans /sbin ou /usr/sbin pour le paquet Debian) pour éviter de s'emmêler les pinceaux :


<code>apt-get remove hostapd
<div class="code">apt-get remove hostapd
</code>
</div>
Et normalement les fichier de configuration sont restés là :)
Et normalement les fichier de configuration sont restés là :)


On va d'abord éditer le script afin de lancer le bon programme. Dans votre éditeur de texte chercher la ligne suivante :
On va d'abord éditer le script afin de lancer le bon programme. Dans votre éditeur de texte chercher la ligne suivante :


<code>DAEMON=/usr/sbin/hostapd
<div class="code">DAEMON=/usr/sbin/hostapd
</code>
</div>
Chez moi, c'est la douzième. Remplacez la par :
Chez moi, c'est la douzième. Remplacez la par :


<code>DAEMON=/usr/local/bin/hostapd
<div class="code">DAEMON=/usr/local/bin/hostapd
</code>
</div>


=== Pour tout le monde ===
==== Pour tout le monde ====
Maintenant, on va aller configurer hostAPd. Le plus dur est de lire tous les commentaires en fait :) Mais pour aller un peu plus vite, voici les lignes qui servent dans MON cas (simple WPA-PSK) :
Maintenant, on va aller configurer hostAPd. Le plus dur est de lire tous les commentaires en fait :) Mais pour aller un peu plus vite, voici les lignes qui servent dans MON cas (simple WPA-PSK) :
<code>#La carte Wifi, forcément indispensable :)
<div class="code">
interface=ath0
#La carte Wifi, forcément indispensable :)
interface=ath0


#Si la carte est bridgée et utilise madwifi, il faut préciser le nom du bridge
#Si la carte est bridgée et utilise madwifi, il faut préciser le nom du bridge
bridge=bridge_local
bridge=bridge_local


# Le driver nécessité par la carte
# Le driver nécessité par la carte
driver=madwifi
driver=madwifi


#Options de log par défaut, elles sont très bien :)
#Options de log par défaut, elles sont très bien :)
logger_syslog=-1
logger_syslog=-1
logger_syslog_level=1
logger_syslog_level=1
logger_stdout=-1
logger_stdout=-1
logger_stdout_level=2
logger_stdout_level=2


debug=2
debug=2


dump_file=/tmp/hostapd.dump
dump_file=/tmp/hostapd.dump


#Contrôle du programme, encore une fois, le réglage par défaut est nickel :)
#Contrôle du programme, encore une fois, le réglage par défaut est nickel :)
ctrl_interface=/var/run/hostapd
ctrl_interface=/var/run/hostapd


ctrl_interface_group=0
ctrl_interface_group=0


#Le nom de votre réseau. C'est important. Choisissez un nom à peu près reconnaissable et pas trop long.
#Le nom de votre réseau. C'est important. Choisissez un nom à peu près reconnaissable et pas trop long.
ssid=MADOUIFI
ssid=MADOUIFI


#Comment gérer les adresses MAC (adresse Hardware des cartes réseaux)
#Comment gérer les adresses MAC (adresse Hardware des cartes réseaux)
# C'est une sécurité qui peut facilement être contournée, mais est
# C'est une sécurité qui peut facilement être contournée, mais est
# néanmoins pratique, car elle est facile à mettre en place
# néanmoins pratique, car elle est facile à mettre en place
# En effet, hostAPd va vérifier l'adresse MAC de la carte Wifi qui fait une
# En effet, hostAPd va vérifier l'adresse MAC de la carte Wifi qui fait une
# demande d'accès et pourra alors, sur cette seule adresse, soit continuer le
# demande d'accès et pourra alors, sur cette seule adresse, soit continuer le
# processus d'identification, soit s'arrêter et refuser la carte.
# processus d'identification, soit s'arrêter et refuser la carte.
# Les paramètres possibles sont les suivants :
# Les paramètres possibles sont les suivants :
# 0 : Tout accepter à moins qu'elle ne soit dans la liste noire
# 0 : Tout accepter à moins qu'elle ne soit dans la liste noire
# 1 : Tout refuser, à moins qu'elle ne soit dans la liste blanche
# 1 : Tout refuser, à moins qu'elle ne soit dans la liste blanche
# 2 : Vérifier l'adresse auprès d'un serveur RADIUS (honnêtement, pour son réseau local, ça ne sert à rien)
# 2 : Vérifier l'adresse auprès d'un serveur RADIUS (honnêtement, pour son réseau local, ça ne sert à rien)
# Le meilleur paramètre pour commencer est 1. Ça réduit de beaucoup les risques de piratage.
# Le meilleur paramètre pour commencer est 1. Ça réduit de beaucoup les risques de piratage.
macaddr_acl=1
macaddr_acl=1


#Chemin des fichiers pour les listes noire et blanche
#Chemin des fichiers pour les listes noire et blanche
# Je vous conseille de les créer tout de suite, on verra plus tard pour les remplir correctement
# Je vous conseille de les créer tout de suite, on verra plus tard pour les remplir correctement
accept_mac_file=/etc/hostapd/hostapd.accept
accept_mac_file=/etc/hostapd/hostapd.accept
deny_mac_file=/etc/hostapd/hostapd.deny
deny_mac_file=/etc/hostapd/hostapd.deny


# La description anglaise pour les curieux :)
# La description anglaise pour les curieux :)
auth_algs=1
auth_algs=1


#Celui là, je sais pas trop... Je crois qu'on peut l'enlever, mais bon je suis pas sûr, j'ai pas testé :)
#Celui là, je sais pas trop... Je crois qu'on peut l'enlever, mais bon je suis pas sûr, j'ai pas testé :)
eap_server=0
eap_server=0


#Dis qu'on veut faire du WPA-PSK
#Dis qu'on veut faire du WPA-PSK
wpa=1
wpa=1


# Votre clé, le coeur de la sécurité du WPA-PSK :)
# Votre clé, le coeur de la sécurité du WPA-PSK :)
wpa_passphrase=SupèRecléDelAmor,Avecdetrucch3l0us;)
wpa_passphrase=SupèRecléDelAmor,Avecdetrucch3l0us;)


# Pour un petit peu plus de sécurité, vous pouvez attribuer une clé WPA par adresse MAC (donc par ordinateur).
# Pour un petit peu plus de sécurité, vous pouvez attribuer une clé WPA par adresse MAC (donc par ordinateur).
#C'est quand même un peu plus embêtant à maintenir...
#C'est quand même un peu plus embêtant à maintenir...
#wpa_psk_file=/etc/hostapd/wpa_psk
#wpa_psk_file=/etc/hostapd/wpa_psk


# On définit ce qu'on veut comme WPA
# On définit ce qu'on veut comme WPA
wpa_key_mgmt=WPA-PSK
wpa_key_mgmt=WPA-PSK


# Et l'algo de cryptage
# Et l'algo de cryptage
wpa_pairwise=TKIP
wpa_pairwise=TKIP


# Quelques options temporelles. Pas forcément nécessaire pour que ça marche :)
# Quelques options temporelles. Pas forcément nécessaire pour que ça marche :)
wpa_group_rekey=600
wpa_group_rekey=600


wpa_gmk_rekey=86400
wpa_gmk_rekey=86400
</code>
</div>


Et la touche finale. Éditez le fichier /etc/default/hostapd et décommentez la ligne suivante :
Et la touche finale. Éditez le fichier /etc/default/hostapd et décommentez la ligne suivante :


<code>RUN_DAEMON=yes
<div class="code">RUN_DAEMON=yes
</code>
</div>
Et voilà. C'est fini. Enfin, non, ce n'est pas tout à fait exact. La configuration du serveur est finie. Il reste à la tester et à configurer des clients :) En avant toute !
Et voilà. C'est fini. Enfin, non, ce n'est pas tout à fait exact. La configuration du serveur est finie. Il reste à la tester et à configurer des clients :) En avant toute !


== Première validation du point d'accès ==
=== Première validation du point d'accès ===
Premier test. Normalement, la commande suivante :
Premier test. Normalement, la commande suivante :


<code>/etc/init.d/hostapd start
<div class="code">/etc/init.d/hostapd start
</code>
</div>


devrait donner un résultat positif. Faites ensuite
devrait donner un résultat positif. Faites ensuite


<code>/etc/init.d/hostapd stop
<div class="code">
hostapd -dd /etc/hostapd/hostapd.conf</code>
/etc/init.d/hostapd stop
hostapd -dd /etc/hostapd/hostapd.conf</div>


Cela lance le programme en avant plan en mode débug, idéal pour vérifier que tout marche bien. Ne vous inquiétez pas trop de ce qu'il dit, tant qu'il ne vous redonne pas la main, c'est bon signe :) En général, il dit qu'il se met en attente. Pendant qu'il se lance, n'hésitez pas à attaquer encore le pot de rillettes ou de canard qui commence à se barrer en douce.
Cela lance le programme en avant plan en mode débug, idéal pour vérifier que tout marche bien. Ne vous inquiétez pas trop de ce qu'il dit, tant qu'il ne vous redonne pas la main, c'est bon signe :) En général, il dit qu'il se met en attente. Pendant qu'il se lance, n'hésitez pas à attaquer encore le pot de rillettes ou de canard qui commence à se barrer en douce.


= Configurer le client =
== Configurer le client ==
La dernière étape, c'est de configurer son client.
La dernière étape, c'est de configurer son client.
== Sous Ubuntu ... ==
=== Sous Ubuntu ... ===
La première version de ce tutorial a été fait lors du temps révolu d'Ubuntu 5.10 Breezy Badger. Aujourd'hui, avec Ubuntu 6.10 Edgy Eft, le NetworkManager a résolu mes soucis. Je laisse cependant l'ancienne version au cas où...
La première version de ce tutorial a été fait lors du temps révolu d'Ubuntu 5.10 Breezy Badger. Aujourd'hui, avec Ubuntu 6.10 Edgy Eft, le NetworkManager a résolu mes soucis. Je laisse cependant l'ancienne version au cas où...


=== Depuis Edgy Eft ===
==== Depuis Edgy Eft ====
Je vous conseille vivement d'installer l'application NetworkManager, c'est le meilleur choix. Ce n'est pas très mature, mais très prometteur.
Je vous conseille vivement d'installer l'application NetworkManager, c'est le meilleur choix. Ce n'est pas très mature, mais très prometteur.
Il faut installer le paquet network-manager : soit avec synaptic, soit avec la commande :<code>apt-get install network-manager
Il faut installer le paquet network-manager : soit avec synaptic, soit avec la commande :<div class="code">apt-get install network-manager
</code>
</div>


Cette application va s'occuper de configurer pour vous le réseau, de manière transparente. Seulement pour cela, il va falloir nettoyer le fichier ''/etc/network/interfaces'' afin de ne plus faire apparaitre les interfaces réseaux. NetworkManager ignorera toutes les interfaces déjà configurées par le biais de ce fichier. Chez moi, au final, il ne restait plus que l'interface ''lo''
Cette application va s'occuper de configurer pour vous le réseau, de manière transparente. Seulement pour cela, il va falloir nettoyer le fichier ''/etc/network/interfaces'' afin de ne plus faire apparaitre les interfaces réseaux. NetworkManager ignorera toutes les interfaces déjà configurées par le biais de ce fichier. Chez moi, au final, il ne restait plus que l'interface ''lo''


Ensuite, lancez la commande :<code>nm-applet
Ensuite, lancez la commande :<div class="code">nm-applet</div>
</code>
Dans votre emplacement système (les icônes en haut à droite), devrait apparaitre une icône sympa. Cliquez dessus, et il y a les réseaux Wifi détectés, ainsi que le réseau filaire si nécessaire. La suite est tellement triviale que je ne vous insulterai pas en la décrivant. Ceci étant dit, je reste disponible pour expliquer aux plus novices d'entre nous !
Dans votre emplacement système (les icônes en haut à droite), devrait apparaitre une icône sympa. Cliquez dessus, et il y a les réseaux Wifi détectés, ainsi que le réseau filaire si nécessaire. La suite est tellement triviale que je ne vous insulterai pas en la décrivant. Ceci étant dit, je reste disponible pour expliquer aux plus novices d'entre nous !


Cette application doit se lancer à chaque démarrage. Vous pouvez le vérifier dans la liste des applications lancées au démarrage (Menu Système > Préférences > Je sais plus trop quelle appli)
Cette application doit se lancer à chaque démarrage. Vous pouvez le vérifier dans la liste des applications lancées au démarrage (Menu Système > Préférences > Je sais plus trop quelle appli)


==== Limitations ====
===== Limitations =====
La version actuelle de NetworkManager marche, mais impose les limitations suivantes :
La version actuelle de NetworkManager marche, mais impose les limitations suivantes :
  - Une seule interface d'active à la fois
  - Une seule interface d'active à la fois
Ligne 406 : Ligne 416 :
Ceci sera résolu dans la prochaine version de NetworkManager (0.7), qui ne devrait pas être incluse avant la prochaine Ubuntu (7.04 Feisty Fawn). En attendant, c'est quand même fonctionnel et '''largement''' plus simple que la ''méthode geek''
Ceci sera résolu dans la prochaine version de NetworkManager (0.7), qui ne devrait pas être incluse avant la prochaine Ubuntu (7.04 Feisty Fawn). En attendant, c'est quand même fonctionnel et '''largement''' plus simple que la ''méthode geek''


=== Breezy Badger ===
==== Breezy Badger ====
Ceci s'applique à une Ubuntu Breezy Badger fraîchement installée. La carte Wifi doit déjà être détectée.
Ceci s'applique à une Ubuntu Breezy Badger fraîchement installée. La carte Wifi doit déjà être détectée.


Ligne 412 : Ligne 422 :


Je vais appeler la carte Wi-fi wlan0. La méthode suivante va donner beaucoup plus d'importance à la carte Wi-fi qu'à la carte Ethernet. Je dois avouer que je n'ai pas réussi à faire marcher le gestionnaire de réseau sous Gnome, donc j'y suis allé ''comme un geek''.
Je vais appeler la carte Wi-fi wlan0. La méthode suivante va donner beaucoup plus d'importance à la carte Wi-fi qu'à la carte Ethernet. Je dois avouer que je n'ai pas réussi à faire marcher le gestionnaire de réseau sous Gnome, donc j'y suis allé ''comme un geek''.
<cadre type=alert>Cette solution n'est donc pas optimale si vous utilisez aussi fréquemment la carte filaire que la carte sans-fil. Cependant, ceci risque de devenir obsolète dans la version suivante de Ubuntu qui devrait intégrer Network-Manager, qui fait du beau travail à en croire les captures d'écrans :)</cadre>
Attention ! Cette solution n'est donc pas optimale si vous utilisez aussi fréquemment la carte filaire que la carte sans-fil. Cependant, ceci risque de devenir obsolète dans la version suivante de Ubuntu qui devrait intégrer Network-Manager, qui fait du beau travail à en croire les captures d'écrans :)


==== Configuration des interfaces ====
==== Configuration des interfaces ====
Tout d'abord, on va un peu épurer le fichier de configuration automatique des interfaces.
Tout d'abord, on va un peu épurer le fichier de configuration automatique des interfaces.
<code># This file describes the network interfaces available on your system
<div class="code">
# and how to activate them. For more information, see interfaces(5).
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).


# The loopback network interface
# The loopback network interface
auto lo
auto lo
iface lo inet loopback
iface lo inet loopback


# The primary network interface
# The primary network interface
iface eth0 inet dhcp
iface eth0 inet dhcp


auto wlan0
auto wlan0
iface wlan0 inet dhcp
iface wlan0 inet dhcp
         pre-up /etc/init.d/wpasupplicant start
         pre-up /etc/init.d/wpasupplicant start
         wireless-mode Managed
         wireless-mode Managed
Ligne 433 : Ligne 444 :
         wireless-key "SupèRecléDelAmor,Avecdetrucch3l0us;)"
         wireless-key "SupèRecléDelAmor,Avecdetrucch3l0us;)"
         pre-down /etc/init.d/wpasupplicant stop
         pre-down /etc/init.d/wpasupplicant stop
</code>
</div>
Maintenant que vous êtes un baroudeur de ce fichier vous avez dû remarquer les choses suivantes :
Maintenant que vous êtes un baroudeur de ce fichier vous avez dû remarquer les choses suivantes :
* eth0 n'est plus confiée à hotplug : celui-ci à la facheuse tendance de lui faire prendre le dessus sur wlan0, ça m'énervait :)
* eth0 n'est plus confiée à hotplug : celui-ci à la facheuse tendance de lui faire prendre le dessus sur wlan0, ça m'énervait :)
Ligne 440 : Ligne 451 :
* Les lignes wireless- servent à configurer la carte Wi-fi. Je ne crois pas que ce soit utile, car wpasupplicant devrais s'en charger, mais bon. C'est là l'une des marques de mes lacunes ;)
* Les lignes wireless- servent à configurer la carte Wi-fi. Je ne crois pas que ce soit utile, car wpasupplicant devrais s'en charger, mais bon. C'est là l'une des marques de mes lacunes ;)


==== Installation et utilisation de wpasupplicant ====
===== Installation et utilisation de wpasupplicant =====
Si vous vous en souvenez, wpasupplicant est un des projets développés en même temps que hostAPd. Ça tombe plutôt bien :). Wpasupplicant est un client WPA permettant de faire marcher quasiment n'importe quelle carte Wi-fi sur un réseau protégé en WPA.
Si vous vous en souvenez, wpasupplicant est un des projets développés en même temps que hostAPd. Ça tombe plutôt bien :). Wpasupplicant est un client WPA permettant de faire marcher quasiment n'importe quelle carte Wi-fi sur un réseau protégé en WPA.


On commence donc par télécharger le paquet Ubuntu :
On commence donc par télécharger le paquet Ubuntu :


<code>sudo apt-get install wpasupplicant
<div class="code">sudo apt-get install wpasupplicant
</code>
</div>


Ensuite, on va éditez son fichier de configuration pour qu'il convienne à notre réseau. Ce fichier s'appelle /etc/wpa_supplicant.conf :
Ensuite, on va éditez son fichier de configuration pour qu'il convienne à notre réseau. Ce fichier s'appelle /etc/wpa_supplicant.conf :


<code># Faites zless /usr/share/doc/wpasupplicant/wpa_supplicant.conf.gz pour voir toutes les otptions disponibles
<div class="code">
# Faites zless /usr/share/doc/wpasupplicant/wpa_supplicant.conf.gz pour voir toutes les otptions disponibles


# Ne rien changer ici
# Ne rien changer ici
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
ctrl_interface_group=0


eapol_version=1
eapol_version=1
ap_scan=1
ap_scan=1
fast_reauth=1
fast_reauth=1


# Déclaration et paramétrage d'un réseau
# Déclaration et paramétrage d'un réseau
network={
network={
         # Le même SSID du point d'accès
         # Le même SSID du point d'accès
         ssid="MADOUIFI"
         ssid="MADOUIFI"
         key_mgmt=WPA-PSK
         key_mgmt=WPA-PSK
         psk="SupèRecléDelAmor,Avecdetrucch3l0us;)"
         psk="SupèRecléDelAmor,Avecdetrucch3l0us;)"
}
}
</code>
</div>


Et on redémarre le réseau à l'aide de la commande :
Et on redémarre le réseau à l'aide de la commande :


<code>sudo /etc/init.d/networking restart
<div class="code">sudo /etc/init.d/networking restart
</code>
</div>


Ensuite, il suffit d'attendre un certain moment, le temps que l'authentification se fasse et que le serveur DHCP réagisse. Normalement, en tapant /sbin/ifconfig vous devriez obtenir ceci :
Ensuite, il suffit d'attendre un certain moment, le temps que l'authentification se fasse et que le serveur DHCP réagisse. Normalement, en tapant /sbin/ifconfig vous devriez obtenir ceci :
<code>lo        Lien encap:Boucle locale
<div class="code">lo        Lien encap:Boucle locale
           inet adr:127.0.0.1  Masque:255.0.0.0
           inet adr:127.0.0.1  Masque:255.0.0.0
           adr inet6: ::1/128 Scope:Hôte
           adr inet6: ::1/128 Scope:Hôte
Ligne 493 : Ligne 505 :
           RX bytes:98143829 (93.5 MiB)  TX bytes:5812510 (5.5 MiB)
           RX bytes:98143829 (93.5 MiB)  TX bytes:5812510 (5.5 MiB)
           Mémoire:fe3fc000-fe3fdfff
           Mémoire:fe3fc000-fe3fdfff
</code>
</div>
La carte wlan0 avec l'état ''UP'' et une adresse IP (''inet adr'').
La carte wlan0 avec l'état ''UP'' et une adresse IP (''inet adr'').


==== Pistes en cas de problèmes ====
===== Pistes en cas de problèmes =====
* Lancer hostAPd à la main en mode debug avec la commande
* Lancer hostAPd à la main en mode debug avec la commande
<code>/usr/local/bin/hostapd -dd /etc/hostapd/hostapd.conf
<div class="code">/usr/local/bin/hostapd -dd /etc/hostapd/hostapd.conf
</code>Puis relancez le client. Le journal qui s'affiche peut aider grandement le diagnostic.
</div>Puis relancez le client. Le journal qui s'affiche peut aider grandement le diagnostic.
* Vérifier que votre serveur DHCP est bien actif. Sur le client, tapez :
* Vérifier que votre serveur DHCP est bien actif. Sur le client, tapez :
<code>sudo dhclient
<div class="code">sudo dhclient
</code>Si ça ne se finit pas par l'attribution d'une adresse IP, il y a un problème.
</div>Si ça ne se finit pas par l'attribution d'une adresse IP, il y a un problème.


== ... comme sous Windows ==
=== ... comme sous Windows ===
Il est également possible d'utiliser wpasupplicant sous Windows. Seulement, quitte à utiliser ce système d'exploitation, autant le faire à fond.
Il est également possible d'utiliser wpasupplicant sous Windows. Seulement, quitte à utiliser ce système d'exploitation, autant le faire à fond.
La plupart du temps, un utilitaire de connexion Wi-fi est fourni avec votre matériel. Je ne peux malheureusement pas vous aider là-dessus de façon globale :(
La plupart du temps, un utilitaire de connexion Wi-fi est fourni avec votre matériel. Je ne peux malheureusement pas vous aider là-dessus de façon globale :(
Ligne 510 : Ligne 522 :
Sinon, je vous rassure, avec Windows XP SP2, l'utilitaire de connexion sans fil Windows marche très bien. Cliquez sur la petite icône de votre carte réseau en bas à droite à côté de l'heure (souvent, c'est un petit écran depuis lequel partent des ondes stylisées). Il devrait vous afficher la liste des réseaux sans-fils. Choisissez le votre, cliquez sur "Connecter" et rentrez la clé. Bienvenue chez vous :)
Sinon, je vous rassure, avec Windows XP SP2, l'utilitaire de connexion sans fil Windows marche très bien. Cliquez sur la petite icône de votre carte réseau en bas à droite à côté de l'heure (souvent, c'est un petit écran depuis lequel partent des ondes stylisées). Il devrait vous afficher la liste des réseaux sans-fils. Choisissez le votre, cliquez sur "Connecter" et rentrez la clé. Bienvenue chez vous :)


= Conclusion =
== Conclusion ==


Le wifi sous Linux c'est possible et ça marche bien. Je n'ai jamais utilisé de solutions propriétaires, donc je ne peux pas comparer, mais j'ai pu monter mon réseau sécurisé à moindre coût (mais avec un peu de temps :p).
Le wifi sous Linux c'est possible et ça marche bien. Je n'ai jamais utilisé de solutions propriétaires, donc je ne peux pas comparer, mais j'ai pu monter mon réseau sécurisé à moindre coût (mais avec un peu de temps :p).

Version du 17 mai 2012 à 14:06


Modification de Point d'accès sécurisé par hostAPd

par Glandos

Introduction

Ce n'est pas vraiment un tutoriel, mais plutôt un retour d'expérience. Mais finalement c'est ce que sont tous les tutoriels. Je tiens simplement à vous prévenir qu'avant ce week-end, je n'avais jamais installé de matériels Wi-fi. Je ne suis donc pas un expert, mais j'ai appris un certain nombre de choses qui pourront être utiles.

Présentation

But recherché

Tout d'abord, il convient de préciser ce que je voulais faire, en plus de « installer le wifi chez moi ». Pour ne pas verser dans l'étalage de vie privée, voici ce dont je disposais :

  • Une freebox basique (sans fonctions routeur ni wifi).
  • Un PC (passerelle pour le reste du document) connecté directement à la freebox sous Debian/testing. Elle dispose de deux cartes réseau Ethernet RJ45 (filaire) qui sont identifiées par l'OS en tant que eth_adsl et eth_local. La freebox est reliée sur eth_adsl. Un firewall tourne entre eth_adsl et eth_local à l'aide d'iptables.
  • Un switch branché sur eth_local, et sur lequel sont reliés deux clients de manière on ne peut plus classique.
  • Une carte Wi-Fi D-Link DWL-G520 PCI avec chipset Atheros (le chipset importe beaucoup plus que la carte, croyez moi !!).
  • Un ordinateur portable Asus A7D, avec une carte Ethernet et une carte Wi-fi avec un chipset Broadcom 4318 (là encore, il a fallu le trouver...)

TODO : schéma

Le but est donc pour moi de faire que le portable puisse se brancher en Wi-fi sur le réseau local, exactement comme les autres clients. Je ne voulais pas me taper des règles firewall en plus, alors j'ai opté pour le bridge.

Prérequis

Voici les connaissances ou le matériel que je considère comme requis :

  • La passerelle tourne sous Debian.
  • La passerelle dispose d'un serveur DHCP fonctionnel pour le réseau local.
  • Les commandes tapées sur la passerelle sont à faire en tant que root. Vous devez donc avoir le mot de passe administrateur de cette machine.
  • Avoir quelques connaissances requises, au moins sur le vocabulaire d'un réseau local.
  • Pour le Wi-fi et son vocabulaire, vous pouvez aller voir par là
  • Un pot de rillettes et du bon pain. Les musulmans sont bien évidemment invités à choisir une mousse de canard ou des tranches de dinde.

Le bridge, invention magique

Présentation du bridge

Le bridge (pont en anglais) permet de faire une chose miraculeuse : réunir de manière transparente plusieurs cartes réseaux, en une seule virtuelle. Il y a quelques inconvénients, notamment sur le fait que le démarrage est un peu plus lent, le temps que le bridge se fasse, et que c'est un peu compliqué pour la tête. Mais je voulais vraiment que le portable se connecte en Wi-fi en changeant le minimum de choses sur la passerelle.

Installation

Pour cela, il est donc nécessaire d'avoir un noyau compilé avec les bonnes options. Pour l'utilisateur normal qui n'a pas recompilé son noyau, ne cherchez pas, c'est bon, ça ira :) Pour les autres, trouvez comment activer le bridging dans le noyau, je ne sais pas comment on fait :p Ensuite, il faut installer les utilitaires nécessaires :

apt-get install bridge-utils

Pour les autres systèmes ça doit être dans le même style. Il faut donc créer ce bridge. Sachez d'abord que tout sera géré par ce futur bridge. Cela veut donc dire que vous ne parlerez plus directement à vos interfaces (ici eth_local et ath0), mais directement à bridge_local (j'aime bien les noms explicites :) ). Cela implique donc que vous n'avez RIEN à configurer sur les cartes réseaux qui vont être incluses dans ce bridge, et même mieux : il faut enlever ce qui est propre à la configuration de ces cartes. Chez Debian, tout se passe dans /etc/network/interfaces ce qui est plutôt pratique. Voici donc le fichier AVANT l'installation du bridge :

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth_adsl
iface eth_adsl inet dhcp
auto eth_local
iface eth_local inet static
      address 192.168.0.254
      netmask 255.255.255.0
      broadcast 192.168.0.255

La carte eth_adsl est donc initialisée au démarrage (ligne auto eth_adsl), a une adresse IPv4 (inet) et ses paramètres réseaux lui sont attribués automatiquement (dhcp), en l'occurence par la Freebox. De même, la carte eth_local est initialisée au démarrage, mais ses paramètres réseaux sont fixés par moi (static), avec les paramètres spécifiés en dessous. Je pense que c'est assez clair.

Après l'installation du bridge, voici ce que j'ai :

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth_adsl
iface eth_adsl inet dhcp
iface ath0 inet static
        wireless-mode master
        wireless-channel 9


auto bridge_local
iface bridge_local inet static
       address 192.168.0.254
       netmask 255.255.255.0
       broadcast 192.168.0.255
       bridge_ports eth_local ath0

La partie eth_adsl n'a pas changé : c'est normal :) Par contre, on voit que bridge_local a les même paramètres que mon ex-carte eth_local. Sauf que en plus, on lui dit que c'est un bridge qui contient les cartes eth_local et ath0. Ainsi, dès que j'envoie des paquets depuis la passerelle sur l'adresse 192.168.0.254, ceux-ci seront transmis automatiquement aux deux cartes, et réciproquement, lorsqu'une carte reçoit un paquet pour 192.168.0.254, elle le transmet au bridge. Moi, je trouve ça magique :) Il y a également une partie sur ath0 me direz-vous. Oui d'accord, mais elle n'est là que pour régler certains paramètres propres au Wi-fi, rien de plus ! Vous remarquerez qu'il n'y a pas de ligne auto ath0, donc elle n'est pas initialisée au démarrage.

Activation

Ceci étant fait, il y a plusieurs méthodes pour activer ce bridge. Sachez que dans la plupart des cas, ceci va foutre en l'air la connexion ! C'est ce qui m'est arrivé, ça fait un peu tout drôle. Normalement, l'ADSL reste en place, mais ce n'est pas le cas de la connexion sur eth_local.

Soit vous faites :

/etc/init.d/networking force-reload

Soit :

/etc/init.d/networking stop && /etc/init.d/networking start

Soit carrément un bon vieux reboot :

reboot

Je sais pas pourquoi je mets la commande... On sait jamais :p Enfin, après l'une de ses trois méthodes (voire les trois), en tapant

ifconfig

Vous devriez voir ça :

ath0 Lien encap:Ethernet HWaddr 00:15:E9:3F:AA:90 adr inet6: fe80::215:e9ff:fe3f:aa90/64 Scope:Lien UP BROADCAST RUNNING MULTICAST MTU:2290 Metric:1 RX packets:163080 errors:955516 dropped:0 overruns:0 frame:955509 TX packets:315546 errors:613 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:200 RX bytes:13726343 (13.0 MiB) TX bytes:462013643 (440.6 MiB) Interruption:185 Mémoire:e08e0000-e08f0000

bridge_lo Lien encap:Ethernet  HWaddr 00:11:95:C5:44:61  
          inet adr:192.168.0.254  Bcast:192.168.0.255  Masque:255.255.255.0
          adr inet6: fe80::211:95ff:fec5:4461/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:294178 errors:0 dropped:0 overruns:0 frame:0
          TX packets:454533 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0 
          RX bytes:458148569 (436.9 MiB)  TX bytes:541885943 (516.7 MiB)
eth_adsl  Lien encap:Ethernet  HWaddr 00:11:D8:09:6D:31  
          inet adr:xx.xx.xx.xx  Bcast:xx.xx.xx.xx  Masque:255.255.255.0
          adr inet6: fe80::211:d8ff:fe09:6d31/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:279243 errors:0 dropped:0 overruns:0 frame:0
          TX packets:264750 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000 
          RX bytes:189704796 (180.9 MiB)  TX bytes:66643253 (63.5 MiB)
          Interruption:177 Adresse de base:0xb000 
eth_local Lien encap:Ethernet  HWaddr 00:11:95:C5:44:61  
          adr inet6: fe80::211:95ff:fec5:4461/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:403023 errors:0 dropped:0 overruns:0 frame:0
          TX packets:142751 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000 
          RX bytes:460239899 (438.9 MiB)  TX bytes:80409812 (76.6 MiB)
          Interruption:169 Adresse de base:0xd800 
lo        Lien encap:Boucle locale  
          inet adr:127.0.0.1  Masque:255.0.0.0
          adr inet6: ::1/128 Scope:Hôte
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:38438 errors:0 dropped:0 overruns:0 frame:0
          TX packets:38438 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0 
          RX bytes:3297781 (3.1 MiB)  TX bytes:3297781 (3.1 MiB)

On constate donc que eth_local et ath0 n'ont aucune adresse IPv4 (inet adr) et que bridge_local a bien l'adresse 192.168.0.254. Quant à eth_adsl, pour les xx, c'est moi qui les ai mis : j'ai une IP fixe, je tiens à garder ma vie privée :)

Avant de passer à la prochaine étape, je vous conseille de suivre la procédure suivante :

  • Découper une tranche de pain.
  • La tartiner abondamment de rillettes (ou de mousse de canard :) ).
  • La savourer délicatement.

Cela permet, en plus de reposer vos mains meurtries par ces infâmes périphériques de saisie, de soulager les cris blafards de votre estomac. Vous pourrez alors apprécier à leur juste valeur les hormones de bien-être sécrétées par une digestion bien méritée :)

Créer le point d'accès

Présentation de hostAPd

Étape suivante : transformer une simple carte Wi-fi en puissant point d'accès (accesss point en anglais soit AP). Pour cela, après avoir parcouru rapidement le web, une solution s'est imposée : hostAPd disponible sur cette page Attention, il faut différencier les 3 projets du site : hostAP driver, hostAPd et wpa_supplicant. hostAP driver ne m'intéressait pas : c'est l'implémentation libre d'un driver pour carte Wi-fi. Wpa_supplicant est un client WPA, comme on va le voir par la suite. Et hostAPd est le logiciel capable de faire tourner votre carte Wi-fi « de base » en point d'accès genre « Enterprise » :)

Installation

Lors de la première version de ce tutoriel, il fallait recompiler hostAPd soit même pour que ça marche. Aujourd'hui, plus la peine de se fatiguer, du moins pour les cartes avec chipset Atheros. Je laisse cependant le passage sur la compilation, pour les gens dans le besoin

Avec les paquets Debian

Je ne pense pas surprendre la foule en disant qu'il faut simplement lancer la commande :

apt-get install hostapd

Simple, efficace, propre. Vous pouvez passer au chapitre suivant :)

Compilation

La première fois, j'ai été confronté à l'instabilité de Debian/testing... En effet, les binaires hostAPd étaient présents mais pas compilés avec les bonnes options pour madwifi, et les sources étaient celles de la version 0.5.0 pleines de bugs corrigés depuis. J'ai perdu un temps monstre sur ça, que je vais vous épargner ici :) Mais du coup le moment est bien choisi pour aborder la compilation « à la mimine ».

Pour cela, il faut d'abord installer quelques outils, dont le fameux gcc. Sous Debian (et là ça marche bien :p ) :

apt-get install build-essential gcc

Je pense que seul gcc est nécessaire dans notre cas, mais bon on sait jamais, ça pourra servir :). Ensuite, on va avoir besoin des sources de hostAPd (normal). Ce qui m'intéressait étant aussi de faire fonctionner hostAPd avec madwifi, il me fallait également les sources de madwifi. On fait donc un petit

apt-get install madwifi-source

Et un téléchargement de hostAPd dans le répertoire /usr/src/, classique pour toute compilation standard. Il faut maintenant extraire les fichiers :

tar xvfj madwifi.tar.bz2

tar xvfz hostapd-0.5.2.tar.gz

Vous avez donc remarqué qu'à cette heure, la version en cours de hostAPd est la 0.5.2 ;) Rendez-vous dans le répertoire hostapd-0.5.2/ créé lors de l'extraction. Vous pouvez lire le README, c'est en anglais, mais ça peut faire du bien de temps à autre. L'essentiel à comprendre est qu'il faut créer un fichier .config lui disant quoi mettre lors de la compilation. Heureusement, un listing des options est présent. Faites donc :

cp defconfig .config

Et éditez ce fichier .config. Voilà à quoi ressemble le mien :

# Driver interface for Host AP driver
#CONFIG_DRIVER_HOSTAP=y
# Driver interface for wired authenticator
#CONFIG_DRIVER_WIRED=y
# Driver interface for madwifi driver
CONFIG_DRIVER_MADWIFI=y
CFLAGS += -I../modules/madwifi/ # change to reflect local setup; directory for madwifi src
# Driver interface for Prism54 driver
#CONFIG_DRIVER_PRISM54=y
# Driver interface for drivers using Devicescape IEEE 802.11 stack
#CONFIG_DRIVER_DEVICESCAPE=y
# Driver interface for FreeBSD net80211 layer (e.g., Atheros driver)
#CONFIG_DRIVER_BSD=y
#CFLAGS += -I/usr/local/include
#LIBS += -L/usr/local/lib
# IEEE 802.11F/IAPP
#CONFIG_IAPP=y
# WPA2/IEEE 802.11i RSN pre-authentication
#CONFIG_RSN_PREAUTH=y
# IEEE 802.11i/IEEE 802.11e STAKey negotiation for direct link connection
#CONFIG_STAKEY=y
# Integrated EAP server
CONFIG_EAP=y
# EAP-MD5 for the integrated EAP server
#CONFIG_EAP_MD5=y
# EAP-TLS for the integrated EAP server
CONFIG_EAP_TLS=y

Tout le reste est commenté, j'en ai rien à faire, je n'ai besoin que du WPA avec un driver madwifi. Pour les plus curieux, j'ai dû laisser CONFIG_EAP et CONFIG_EAP_TLS, parce que sinon ça plantait, ce sera visiblement corrigé dans la version 0.5.3. Remarquez aussi la ligne pour madwifi : CFLAGS contient le chemin vers les sources de madwifi, fraîchement décompressé dans le répertoire /usr/src/modules/madwifi/. Sauvegardez et quittez. C'est parti pour l'instant geek crucial :

make

Simple non ? Moi ça me déroute parfois tout ce qu'il peut écrire avec aussi peu de lettres tapées :) Si tout se passe bien, il n'affiche aucune ligne trop inquiétante remplie d'étoiles et de mot ERROR. Sinon, ben euh, posez vos questions après le bip.

Maintenant que c'est compilé, faut l'installer. En gros, la plupart du temps, ça consiste en un simple copier/coller des fichiers compilés. Rassurez-vous la procédure standard est on ne peut plus explicite :

make install

Et pouf. Comme c'est indiqué, les exécutables sont installés dans /usr/local/bin par défaut. C'est très bien là où c'est :)

Configuration de hostAPd

Prochaine étape : la configuration de hostAPd. C'est pas trop dur, à la base, il y a trois fichiers, placés comme d'habitude dans /etc. À savoir :

  • /etc/default/hostapd - Permet d'activer ou de désactiver le lancement automatique de hostAPd
  • /etc/hostapd/hostapd.conf - Fichier de configuration de hostAPd
  • /etc/init.d/hostapd - Script shell gérant l'exécution et l'arrêt de hostAPd en tant que démon.

Après une compilation manuelle

Si vous avez compilé vous même hostapd, je vous propose une astuce pour pas trop se casser la tête : installer le paquet Debian de hostAPd, qui, même s'il est défectueux, installe les fichiers par défaut au bon endroit pour vous. Il n'y aura plus qu'à faire quelques retouches. C'est parti :

apt-get install hostapd

Si jamais vous voulez retirer les exécutables (présent dans /sbin ou /usr/sbin pour le paquet Debian) pour éviter de s'emmêler les pinceaux :

apt-get remove hostapd

Et normalement les fichier de configuration sont restés là :)

On va d'abord éditer le script afin de lancer le bon programme. Dans votre éditeur de texte chercher la ligne suivante :

DAEMON=/usr/sbin/hostapd

Chez moi, c'est la douzième. Remplacez la par :

DAEMON=/usr/local/bin/hostapd

Pour tout le monde

Maintenant, on va aller configurer hostAPd. Le plus dur est de lire tous les commentaires en fait :) Mais pour aller un peu plus vite, voici les lignes qui servent dans MON cas (simple WPA-PSK) :

#La carte Wifi, forcément indispensable :)
interface=ath0
#Si la carte est bridgée et utilise madwifi, il faut préciser le nom du bridge
bridge=bridge_local
# Le driver nécessité par la carte
driver=madwifi
#Options de log par défaut, elles sont très bien :)
logger_syslog=-1
logger_syslog_level=1
logger_stdout=-1
logger_stdout_level=2
debug=2
dump_file=/tmp/hostapd.dump
#Contrôle du programme, encore une fois, le réglage par défaut est nickel :)
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
#Le nom de votre réseau. C'est important. Choisissez un nom à peu près reconnaissable et pas trop long.
ssid=MADOUIFI
#Comment gérer les adresses MAC (adresse Hardware des cartes réseaux)
# C'est une sécurité qui peut facilement être contournée, mais est
# néanmoins pratique, car elle est facile à mettre en place
# En effet, hostAPd va vérifier l'adresse MAC de la carte Wifi qui fait une
# demande d'accès et pourra alors, sur cette seule adresse, soit continuer le
# processus d'identification, soit s'arrêter et refuser la carte.
# Les paramètres possibles sont les suivants :
# 0 : Tout accepter à moins qu'elle ne soit dans la liste noire
# 1 : Tout refuser, à moins qu'elle ne soit dans la liste blanche
# 2 : Vérifier l'adresse auprès d'un serveur RADIUS (honnêtement, pour son réseau local, ça ne sert à rien)
# Le meilleur paramètre pour commencer est 1. Ça réduit de beaucoup les risques de piratage.
macaddr_acl=1
#Chemin des fichiers pour les listes noire et blanche
# Je vous conseille de les créer tout de suite, on verra plus tard pour les remplir correctement
accept_mac_file=/etc/hostapd/hostapd.accept
deny_mac_file=/etc/hostapd/hostapd.deny
# La description anglaise pour les curieux :)
auth_algs=1
#Celui là, je sais pas trop... Je crois qu'on peut l'enlever, mais bon je suis pas sûr, j'ai pas testé :)
eap_server=0
#Dis qu'on veut faire du WPA-PSK
wpa=1
# Votre clé, le coeur de la sécurité du WPA-PSK :)
wpa_passphrase=SupèRecléDelAmor,Avecdetrucch3l0us;)
# Pour un petit peu plus de sécurité, vous pouvez attribuer une clé WPA par adresse MAC (donc par ordinateur).
#C'est quand même un peu plus embêtant à maintenir...
#wpa_psk_file=/etc/hostapd/wpa_psk
# On définit ce qu'on veut comme WPA
wpa_key_mgmt=WPA-PSK
# Et l'algo de cryptage
wpa_pairwise=TKIP
# Quelques options temporelles. Pas forcément nécessaire pour que ça marche :)
wpa_group_rekey=600
wpa_gmk_rekey=86400

Et la touche finale. Éditez le fichier /etc/default/hostapd et décommentez la ligne suivante :

RUN_DAEMON=yes

Et voilà. C'est fini. Enfin, non, ce n'est pas tout à fait exact. La configuration du serveur est finie. Il reste à la tester et à configurer des clients :) En avant toute !

Première validation du point d'accès

Premier test. Normalement, la commande suivante :

/etc/init.d/hostapd start

devrait donner un résultat positif. Faites ensuite

/etc/init.d/hostapd stop
hostapd -dd /etc/hostapd/hostapd.conf

Cela lance le programme en avant plan en mode débug, idéal pour vérifier que tout marche bien. Ne vous inquiétez pas trop de ce qu'il dit, tant qu'il ne vous redonne pas la main, c'est bon signe :) En général, il dit qu'il se met en attente. Pendant qu'il se lance, n'hésitez pas à attaquer encore le pot de rillettes ou de canard qui commence à se barrer en douce.

Configurer le client

La dernière étape, c'est de configurer son client.

Sous Ubuntu ...

La première version de ce tutorial a été fait lors du temps révolu d'Ubuntu 5.10 Breezy Badger. Aujourd'hui, avec Ubuntu 6.10 Edgy Eft, le NetworkManager a résolu mes soucis. Je laisse cependant l'ancienne version au cas où...

Depuis Edgy Eft

Je vous conseille vivement d'installer l'application NetworkManager, c'est le meilleur choix. Ce n'est pas très mature, mais très prometteur.

Il faut installer le paquet network-manager : soit avec synaptic, soit avec la commande :

apt-get install network-manager

Cette application va s'occuper de configurer pour vous le réseau, de manière transparente. Seulement pour cela, il va falloir nettoyer le fichier /etc/network/interfaces afin de ne plus faire apparaitre les interfaces réseaux. NetworkManager ignorera toutes les interfaces déjà configurées par le biais de ce fichier. Chez moi, au final, il ne restait plus que l'interface lo

Ensuite, lancez la commande :

nm-applet

Dans votre emplacement système (les icônes en haut à droite), devrait apparaitre une icône sympa. Cliquez dessus, et il y a les réseaux Wifi détectés, ainsi que le réseau filaire si nécessaire. La suite est tellement triviale que je ne vous insulterai pas en la décrivant. Ceci étant dit, je reste disponible pour expliquer aux plus novices d'entre nous !

Cette application doit se lancer à chaque démarrage. Vous pouvez le vérifier dans la liste des applications lancées au démarrage (Menu Système > Préférences > Je sais plus trop quelle appli)

Limitations

La version actuelle de NetworkManager marche, mais impose les limitations suivantes :

- Une seule interface d'active à la fois
- La nécessité de taper le mot de passe du stockage des clés à chaque démarrage
- Pas de connexions tant que l'utilisateur ne s'est pas identifié de manière graphique
- Pas de préférences globales, pour tous les utilisateurs de la machine

Ceci sera résolu dans la prochaine version de NetworkManager (0.7), qui ne devrait pas être incluse avant la prochaine Ubuntu (7.04 Feisty Fawn). En attendant, c'est quand même fonctionnel et largement plus simple que la méthode geek

Breezy Badger

Ceci s'applique à une Ubuntu Breezy Badger fraîchement installée. La carte Wifi doit déjà être détectée.

TODO : lier vers une page d'install ou en faire une :)

Je vais appeler la carte Wi-fi wlan0. La méthode suivante va donner beaucoup plus d'importance à la carte Wi-fi qu'à la carte Ethernet. Je dois avouer que je n'ai pas réussi à faire marcher le gestionnaire de réseau sous Gnome, donc j'y suis allé comme un geek. Attention ! Cette solution n'est donc pas optimale si vous utilisez aussi fréquemment la carte filaire que la carte sans-fil. Cependant, ceci risque de devenir obsolète dans la version suivante de Ubuntu qui devrait intégrer Network-Manager, qui fait du beau travail à en croire les captures d'écrans :)

Configuration des interfaces

Tout d'abord, on va un peu épurer le fichier de configuration automatique des interfaces.

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
iface eth0 inet dhcp
auto wlan0
iface wlan0 inet dhcp
       pre-up /etc/init.d/wpasupplicant start
       wireless-mode Managed
       wireless-essid "MADOUIFI"
       wireless-key "SupèRecléDelAmor,Avecdetrucch3l0us;)"
       pre-down /etc/init.d/wpasupplicant stop

Maintenant que vous êtes un baroudeur de ce fichier vous avez dû remarquer les choses suivantes :

  • eth0 n'est plus confiée à hotplug : celui-ci à la facheuse tendance de lui faire prendre le dessus sur wlan0, ça m'énervait :)
  • On laisse tout de même eth0 en mode DHCP, mais plus en initialisation automatique (C'est là que je dis que ça favorise plutôt la carte Wi-fi).
  • Les lignes pre-up et pre-down vont démarrer quelque chose encore inconnu et sûrement non installé. Mais gardez patience, sinon on ne va pas y arriver :)
  • Les lignes wireless- servent à configurer la carte Wi-fi. Je ne crois pas que ce soit utile, car wpasupplicant devrais s'en charger, mais bon. C'est là l'une des marques de mes lacunes ;)
Installation et utilisation de wpasupplicant

Si vous vous en souvenez, wpasupplicant est un des projets développés en même temps que hostAPd. Ça tombe plutôt bien :). Wpasupplicant est un client WPA permettant de faire marcher quasiment n'importe quelle carte Wi-fi sur un réseau protégé en WPA.

On commence donc par télécharger le paquet Ubuntu :

sudo apt-get install wpasupplicant

Ensuite, on va éditez son fichier de configuration pour qu'il convienne à notre réseau. Ce fichier s'appelle /etc/wpa_supplicant.conf :

# Faites zless /usr/share/doc/wpasupplicant/wpa_supplicant.conf.gz pour voir toutes les otptions disponibles
# Ne rien changer ici
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
eapol_version=1
ap_scan=1
fast_reauth=1
# Déclaration et paramétrage d'un réseau
network={
       # Le même SSID du point d'accès
       ssid="MADOUIFI"
       key_mgmt=WPA-PSK
       psk="SupèRecléDelAmor,Avecdetrucch3l0us;)"
}

Et on redémarre le réseau à l'aide de la commande :

sudo /etc/init.d/networking restart

Ensuite, il suffit d'attendre un certain moment, le temps que l'authentification se fasse et que le serveur DHCP réagisse. Normalement, en tapant /sbin/ifconfig vous devriez obtenir ceci :

lo Lien encap:Boucle locale
         inet adr:127.0.0.1  Masque:255.0.0.0
         adr inet6: ::1/128 Scope:Hôte
         UP LOOPBACK RUNNING  MTU:16436  Metric:1
         RX packets:142349 errors:0 dropped:0 overruns:0 frame:0
         TX packets:142349 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 lg file transmission:0
         RX bytes:10530324 (10.0 MiB)  TX bytes:10530324 (10.0 MiB)

wlan0 Lien encap:Ethernet HWaddr 00:15:F2:CC:F4:39

         inet adr:192.168.0.3  Bcast:192.168.0.255  Masque:255.255.255.0
         adr inet6: fe80::215:f2ff:fecc:f439/64 Scope:Lien
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:90878 errors:0 dropped:0 overruns:0 frame:0
         TX packets:60354 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 lg file transmission:1000
         RX bytes:98143829 (93.5 MiB)  TX bytes:5812510 (5.5 MiB)
         Mémoire:fe3fc000-fe3fdfff

La carte wlan0 avec l'état UP et une adresse IP (inet adr).

Pistes en cas de problèmes
  • Lancer hostAPd à la main en mode debug avec la commande
/usr/local/bin/hostapd -dd /etc/hostapd/hostapd.conf

Puis relancez le client. Le journal qui s'affiche peut aider grandement le diagnostic.

  • Vérifier que votre serveur DHCP est bien actif. Sur le client, tapez :
sudo dhclient

Si ça ne se finit pas par l'attribution d'une adresse IP, il y a un problème.

... comme sous Windows

Il est également possible d'utiliser wpasupplicant sous Windows. Seulement, quitte à utiliser ce système d'exploitation, autant le faire à fond. La plupart du temps, un utilitaire de connexion Wi-fi est fourni avec votre matériel. Je ne peux malheureusement pas vous aider là-dessus de façon globale :(

Sinon, je vous rassure, avec Windows XP SP2, l'utilitaire de connexion sans fil Windows marche très bien. Cliquez sur la petite icône de votre carte réseau en bas à droite à côté de l'heure (souvent, c'est un petit écran depuis lequel partent des ondes stylisées). Il devrait vous afficher la liste des réseaux sans-fils. Choisissez le votre, cliquez sur "Connecter" et rentrez la clé. Bienvenue chez vous :)

Conclusion

Le wifi sous Linux c'est possible et ça marche bien. Je n'ai jamais utilisé de solutions propriétaires, donc je ne peux pas comparer, mais j'ai pu monter mon réseau sécurisé à moindre coût (mais avec un peu de temps :p).

<cadre type=alert>Je tiens à prévenir le public sensible qu'aucun pot de rillettes n'a été maltraité pendant la réalisation de ce tutorial, pour mon plus grand malheur </cadre>



@ Retour à la rubrique Réseau et sécurité

Copyright

© Avril 2006 Glandos

Tête de GNU Vous avez l'autorisation de copier, distribuer et/ou modifier ce document suivant les termes de la GNU Free Documentation License, Version 1.2 ou n'importe quelle version ultérieure publiée par la Free Software Foundation; sans section invariante, sans page de garde, sans entête et sans page finale.