Sommaire |
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.
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 :
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.
Voici les connaissances ou le matériel que je considère comme requis :
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.
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 :
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 :
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 :
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.
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 :
Soit :
Soit carrément un bon vieux 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
Vous devriez voir ça :
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 :
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 :)
É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 » :)
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
Je ne pense pas surprendre la foule en disant qu'il faut simplement lancer la commande : Simple, efficace, propre. Vous pouvez passer au chapitre suivant :)
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 ) :
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
Et un téléchargement de hostAPd dans le répertoire /usr/src/, classique pour toute compilation standard. Il faut maintenant extraire les fichiers :
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 :
Et éditez ce fichier .config. Voilà à quoi ressemble le mien :
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 :
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 :
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 :)
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 :
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 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 :
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 :
Chez moi, c'est la douzième. Remplacez la par :
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) :
Et la touche finale. Éditez le fichier /etc/default/hostapd et décommentez la ligne suivante :
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 !
Premier test. Normalement, la commande suivante :
devrait donner un résultat positif. Faites ensuite
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.
La dernière étape, c'est de configurer son client.
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ù...
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 :
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 : 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)
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
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.
Tout d'abord, on va un peu épurer le fichier de configuration automatique des interfaces.
Maintenant que vous êtes un baroudeur de ce fichier vous avez dû remarquer les choses suivantes :
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 :
Ensuite, on va éditez son fichier de configuration pour qu'il convienne à notre réseau. Ce fichier s'appelle /etc/wpa_supplicant.conf :
Et on redémarre le réseau à l'aide de la commande :
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 :
La carte wlan0 avec l'état UP et une adresse IP (inet adr).
Puis relancez le client. Le journal qui s'affiche peut aider grandement le diagnostic.
Si ça ne se finit pas par l'attribution d'une adresse IP, il y a un problème.
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 :)
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).
@ Retour à la rubrique Réseau et sécurité
© Avril 2006 Glandos
| 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. Pour plus d'informations consulter le site de l'APRIL. |