Une fois que vous avez le matériel nécessaire et que vous aurez compilé tout ce dont vous avez besoin, vous devrez effectuer les étapes fondamentales de configuration d'un réseau sans-fil :
Configuration bas-niveau du noyau de Linux. Cela lui permettra de voir votre carte sans-fil (à un bas-niveau, soit par exemple : ports E/S, interruptions, dma…) : vous devrez voir apparaître un message quelconque qui vous prévienne que la carte sans-fil a bien été trouvée et configurée.
Configuration au niveau liaison de données. Pour chaque carte sans fil, il existe un utilitaire qui permet de paramétrer les valeurs classiques du niveau liaison de données pour le sans-fil. Par exemple, pour la Proxim Symphony, l'utilitaire s'appelle proxcfg alors que les paramètres des cartes PCMCIA se trouve dans les fichiers de configuration PCMCIA. Vous devrez configurer toutes vos cartes sans-fil de manière cohérente si vous voulez qu'elle puissent fonctionner ensemble.
Configuration IP. Arrivé à cette étape, vous devriez pouvoir utiliser les commandes ifconfig et route pour modifier les paramètres IP.
Utiliser quelques astuces améliorer les performances et éviter les conflits. Les éléments de base de votre réseau fonctionnent désormais correctement : en complément, vous devrez ajuster quelques paramètres spécifiques, tels que le mandataire ARM (proxy arp, la redirection de l'écho ICMP, le pontage, le changement de canal, et cætera, pour optimiser votre réseau et éviter des conflits bizarres et mangeurs de bande passante.
N.B. : les étapes 1, 2 et 3 correspondent au niveaux correspondant du modèle OSI, alors que l'étape 4 est un complément destiné à résoudre les situations générées par les masques de réseau 255.255.255.255. En fait un masque de sous-réseau dont les 32 bits sont à 1 viole le standard OSI car cela force le réseau à utiliser la même adresse pour les messages de diffusion et les messages destinés à l'IP de la machine. De plus, l'adresse du réseau n'existe pas.
On pourrait critiquer ce point de vue, mais l'utilisation du modèle OSI pour configurer un réseau sans-fil entraînerait une perte importante lors de la configuration des sous-réseaux ; en effet, chaque sous-réseau gaspille 2 adresses IP (adresse réseau et adresse de diffusion) et cette structure fait perdre en souplesse pour l'affectation des adresses IP (de manière géographique). Vous en trouverez plus à ce sujet en annexe (cf. Annexe A. Le masque 255.255.255.255, le mandataire ARP et la fonction de pont ).
Vous noterez que l'étape 2 n'est pas nécessaire dans un réseau filaire, car il n'y a pas de paramètres particuliers à configurer à ce niveau.
Il s'agit d'un problème récurrent dans l'administration d'un PC : faire que votre noyau (ou vos logiciels d'une manière générale) reconnaisse votre matériel.
Les cartes sans-fil sont encore plus complexes car beaucoup d'entre-elles se branchent sur un port PCMCIA. Donc, vous devrez d'abord permettre à votre noyau de voir l'adaptateur PCMCIA, ensuite vous pourrez essayer d'installer le pilote matériel spécifique à votre carte sans-fil.
Dans les configurations PCMCIA, vous devrez :
Installer les sources du noyau Linux, de http://www.kernel.org dans /usr/src/linux (cf. les utilitaires tar et gzip)
Installer les sources des pilotes pcmcia, se trouvant sur http://pcmcia-cs.sourceforge.net/ dans /usr/src/pcmcia (voir les utilitaires tar et gzip)
Configurer et recompiler votre noyau : lisez le fichier README inclus dans /usr/src/linux
Configurez et recompilez les sources du pilote pcmcia : dans /usr/src/pcmcia utilisez configure et make. Assurez vous que votre pilote est présent, sinon vous devrez l'installer en suivant les instruction du pilote (normalement, un tar xvzf driver.tgz dans le répertoire pcmcia devrait suffire). Ensuite, entrez make all pour compiler. Enfin, entrez make install.
Après l'installation, vous trouverez des fichiers de configuration utiles dans /etc/pcmcia.
Dans les autres cas :
Si votre pilote est présent dans les sources du noyau Linux (ce qui est souvent le cas des cartes récentes), vous devrez l'installer dans un répertoire puis le compiler.
Une fois que vous connaîtrez le nom du module, vous devrez le charger : dans une configuration PCMCIA vous aurez seulement besoin de lancer le démon pcmcia (/etc/rc.d/init.d/pcmcia start sous RedHat). Pour les autres configurations, il suffira d'utiliser modprobe nom_du_module options . Dans les options, vous donnerez les ports d'E/S, ainsi que les paramètres d'IRQ et de la liaison données (voir la Section 5.3) au pilote sans-fil.
Dans tous les cas, voici les outils pouvant être utilisés pour vérifier si votre matériel est correctement reconnu par le pilote :
tail /var/log/messages qui affiche les dernières entrées du journal système (syslog) ;
dmesg qui affiche les messages du noyau ;
le répertoire /proc : les fichiers ioports (informations sur les ports d'E/S), devices (périphériques reconnus), interrupts (IRQ) et les sous-répertoires de driver, contenant des informations spécifiques à certains pilotes.
Qu'est-ce que c'est ?
Les réseaux filaires ont seulement besoin d'être connectés et l'on peut immédiatement définir les paramètres TCP/IP.
En revanche, pour les réseaux sans-fil il est nécessaire de paramétrer la liaison données, afin de définir par exemple :
De quelle type de réseau sans-fil est-ce que je dépends (Ad-hoc ou Infrastructure) ?
Quel canal dois-je utiliser ?
À quel sous-réseau (BSSID) est-ce que j'appartiens, quel est mon identifiant (ESSID) ?
Ma communication est-elle protégée par un algorithme de chiffrement ? Quelle est la longueur de la clé ?
Comme vous le voyez, il y a beaucoup de paramètres à définir. Ceci tient à l'architecture des réseaux sans-fil : une personne se trouvant dans un périmètre proche n'aurait qu'à diriger une antenne dans la bonne direction et à entrer les bons paramètres TCP/IP pour intercepter vos paquets et utiliser vos services.
De plus, la présence d'un grand nombre de sous-réseaux sans-fil pourrait générer des interférences entre ceux-ci.
Il existe donc :
des options à définir lors du chargement du module : modprobe ray_cs essid='LINUX' par exemple, ou
des utilitaires permettant de paramétrer le pilote en cours de fonctionnement : proxcfg eth1 master par exemple.
Il s'agit du troisième problème auquel vous allez faire face. À cette étape, la situation ne devient problématique que lorsque votre réseau évolue pour devenir plus grand.
Souvenez-vous : le réseau IP sans-fil ne vous stressera pas si vous ne le stressez pas !
Chaque hôte voit tous les autres A - - - - - C \ / | \ / | /\ | / \ | / \ B - - - - - D |
Une configuration comme celle-ci ne requiert rien de particulier (à un niveau IP) : vous devez seulement attribuer une adresse IP à chaque hôte et un masque de sous-réseau global cohérent.
A ne voit pas B directement A <- - - - Pas \ | de \ C communication \ | B <- - - - |
Dans ce cas, A et B ne peuvent communiquer qu'en passant par C
Si le réseau est en mode Infrastructure et que C est le point d'accès, il n'y a pas de problème. En mode Ad-hoc, vous pouvez aussi donner à un hôte le rôle de maître (Je sais que ce terme n'est pas si cérémonieux !). Celui-ci pourra créer un BSS auquel n'importe quel autre hôte pourra se joindre.
Au niveau IP, nous sommes ici totalement connectés : A et B communiquent avec C en utilisant la même interface de C. En conséquence, si vous essayez de faire un ping de A vers B, vous recevrez de nombreux paquets ICMP REDIRECT (redirection ICMP) envoyés par C, celui-ci informant A que sa destination se trouve déjà dans le réseau d'où provient sa requête.
Solution : sur la machine C, entrez echo 0 > /proc/sys/net/ipv4/conf/ethx/send_redirects (où ethx est l'interface de C vers A et B) pour annuler l'envoi de ces messages.
Un autre problème : quel masque de sous-réseau attribuer à A et B ? Si vous attribuez à A un masque qui inclut A et B, rien ne fonctionnera, car A n'utilisera pas la passerelle (C) mais fera directement des requêtes ARP afin d'obtenir l'adresse MAC de sa destination, qui hélas est injoignable directement.
Vous pourriez envisager d'utiliser un mandataire ARP (proxy arp), mais cela ne marchera pas non plus. En effet, un mandataire ARP ne répondra à la source que si la destination et la source se trouvent sur deux interfaces différentes, ce qui n'est pas le cas !
Vous devrez donc attribuer un masque de sous-réseau très petit (Win9x autorise 255.255.255.254, alors que sous WinNT il faudra au moins 255.255.255.248), et vous devez vous assurer que les hôtes A et B n'ont pas une adresse réseau identique.
Exemples :
IP(A) = x.y.z.2/31 et IP(B) = x.y.z.3/31. Cela ne fonctionnera pas car A pensera que B est dans son sous-réseau, et cherchera à réaliser une requête ARP pour le joindre. B ne recevra pas la requête (il n'est pas joignable par A). C ne répondra pas, même s'il dispose d'un mandataire ARP car, pour lui, A et B se trouvent sur la même interface.
IP(A) = x.y.z.1/31 et IP(B) = x.y.z.2/31. Cela fonctionnera, car A contactera C pour entrer en relation avec B (envoi des paquets destinés à B vers l'adresse MAC de C).
En général, avec un masque de sous-réseau de 255.255.255.254, le système fonctionne avec 2 adresses IP en changeant simplement le dernier chiffre, et en s'assurant que si le dernier chiffre de l'un des adresses est paire, le dernier chiffre de l'autre adresse n'est pas le chiffre impair immédiatement supérieur.
Ce sont des contraintes de TCP/IP, mais c'est la seule méthode permettant d'obtenir un haut niveau de flexibilité.
Si vous utilisez un point d'accès, c'est-à-dire un réseau en mode Infrastructure, vous n'aurez pas le problème de redirection, car tout sera résolu au niveau liaison de données (presque tous les points d'accès se comportent comme des ponts). Mais les points d'accès sont chers (un millier de dollars, voire plus)[5] et il est plus économique d'utiliser un Pentium 133 avec 32 Mo de mémoire vive comme routeur, même avec 2 cartes ou plus.
A - - - - - C - - Internet \ / | \ / | /\ | / \ | / \ B - - - - - D |
Il existe plusieurs situations :
Seule la machine C dispose d'une adresse IP publique (sur son interface côté Internet). Vous devrez simplement lui attribuer une adresse IP privée (192.168.x.y par exemple) pour le réseau sans-fil, ce qui permettra l'utilisation du routage et du masquage. C sera la passerelle par défaut de A, B et D.
Vous disposez d'un sous-réseau public visible depuis Internet et C est votre passerelle par défaut (entre votre réseau et Internet). Vous devrez seulement activer le routage sur C, et paramétrer définir C comme passerelle par défaut sur A, B et D.
Vous disposez d'un sous-réseau public visible depuis Internet et C n'est pas votre passerelle par défaut vers Internet. Deux solutions s'offrent à vous : modifier votre passerelle par défaut pour qu'elle pointe sur C pour les adresses appartenant à votre réseau. Par symétrie, C doit pointer sur votre passerelle par défaut pour aller vers Internet. L'autre solution serait d'activer un mandataire ARP (proxy arp) sur C (echo 1 > /proc/sys/net/ipv4/conf/ethx/proxy_arp où ethx est l'interface vers la passerelle par défaut), puis paramétrer C pour que sa passerelle par défaut pointe vers la passerelle par défaut. Utiliser un mandataire ARP est un détournement de TCP/IP mais fonctionne bien.
Internet \ \ E \ / \ / sans-fil A - - - - - C - - F \ / \ | \ / | \ filaire /\ G | / \ | / \ B - - - - - D |
Maintenant, C relie deux réseaux : sans-fil à droite et filaire à gauche.
De plus, il y a un accès à Internet, vous avez donc au total 3 cartes réseau dans C.
Quels adresses IP attribuer aux hôtes ? Vous avez deux solutions :
Séparer le réseau en deux sous-réseaux : par exemple 192.168.1.0/24 et 192.168.2.0/24. Cette solution est rapide mais ne sera pas extensible si vous utilisez des adresses Internet publiques, car cela obligerait à gaspiller trop d'adresses IP.
Activer un mandataire ARP (proxy arp) sur C pour les 2 interfaces. Les paramètres réseau (adresse réseau et masque) sont les mêmes pour le sans-fil et le filaire, mais grâce au mandataire ARP, on peut choisir quelles adresses IP sont sur le réseau filaire et quelles adresses sont sur le réseau sans-fil.
Par exemple, considérez que vous avez un sous-réseau public en x.y.z.0/24
Les interfaces sont :
ifconfig eth0 x.y.z.C netmask 255.255.255.255 # filaire ifconfig eth1 x.y.z.C netmask 255.255.255.255 # sans-fil ifconfig eth2 x.y.z.C netmask 255.255.255.255 # vers Internet |
Les routes statiques pour eth2 sont :
route add adresse_passerelle dev eth2 route add default gw adresse_passerelle |
Ces routes servent à diriger vers votre passerelle par défaut toutes les requêtes vers Internet : comme vous pouvez le remarquer, vous devez d'abord indiquer à Linux où se trouve le routeur, puis de diriger par défaut les requêtes vers celui-ci.
Routes statiques sur eth0 :
route add x.y.z.A dev eth0 route add x.y.z.B dev eth0 route add x.y.z.D dev eth0 |
(Les hôtes A, B et D se trouvent sur le réseau filaire.)
Routes statiques sur eth1 :
route add x.y.z.E dev eth1 route add x.y.z.F dev eth1 route add x.y.z.G dev eth1 |
(Les hôtes E, F et G se trouvent sur le réseau sans-fil.)
Cela vous donnera une très grande souplesse, mais vous devrez définir à la main la configuration relative à chaque hôte.
[5] NdT : les prix ont maintenant beaucoup baissé en ce qui concerne le 802.11b. L'achat d'un point d'accès peut donc se révéler une solution plus économique que l'utilisation d'une machine Linux.