Naviguer entre plusieurs profils réseau
Introduction
Problématique
Nous nous intéressons au cas d'un ordinateur qui doit s'adapter à plusieurs configurations réseau. Typiquement, il s'agit d'un ordinateur portable qui navigue entre le réseau résidentiel, celui de l'entreprise, ceux des clients, etc. Plusieurs changements sont nécessaires (adresse IP, passerelle, serveurs de noms) pour passer d'une configuration (ou « profil ») à une autre, et l'on peut vouloir relancer des services ou démarrer certaines tâches avant ou après la reconfiguration.
Objectif
Nous allons dans ce document donner une description des logiciels qui permettent d'identifier le réseau auquel l'ordinateur est maintenant connecté puis de reconfigurer la machine en conséquence. Et oui, tout ceci peut se dérouler sans la moindre intervention de l'utilisateur !
Limitations
Ce document se concentre sur le système d'exploitation Linux en général et s'appuie en particulier sur les logiciels disponibles depuis la distribution Debian. Le lecteur y trouvera des informations utiles pour d'autres distributions de Linux voire éventuellement pour d'autres systèmes d'exploitation d'inspiration Unix. Ce document ne sera probablement d'aucune utilité à l'administrateur de systèmes Microsoft Windows, toutefois.
Organisation
Ce document est organisé de la façon suivante : nous procédons dans un premier temps à l'analyse détaillée du problème, afin de le décomposer et de préciser la terminologie utilisée. Ensuite, nous dressons la liste des logiciels disponibles et les comparons séquentiellement. Enfin, nous concluons ce document en précisant nos critères de choix et en citant les paquets qui y répondent le mieux.
Analyse détaillée du problème
Notre objectif est de faire en sorte que l'ordinateur détecte lorsque sa localisation a changé, qu'il identifie son nouvel environnement et qu'il adapte sa configuration en conséquence. L'ensemble représente notre cahier des charges et nous pouvons y distinguer trois tâches :
- La détection d'un changement potentiel. La suspension et la reprise de l'ordinateur, le branchement d'un câble réseau, le branchement sur le secteur ou à une station de dockage, ainsi que l'ajout d'une carte réseau PCMCIA, sont autant d'évènements susceptibles de signaler un changement d'environnement. La succession des outils qui suivent ne sera déclenchée que lorsque l'un de ces évènements a eu lieu. Nous appelons cette tâche de détection d'un changement potentiel la Tâche 1.
- L'identification de l'environnement actuel. À cette phase, l'on essaie de contacter des équipements « permanents » du réseau qui permettraient d'identifier où l'on se trouve, ou de détecter que l'on n'est plus connecté à eux. Cette tâche est appelée dans ce document Tâche 2. Du résultat de cette phase dépend l'éventuelle reconfiguration de l'étape suivante.
- La reconfiguration du système, ou Tâche 3. Nous serons amenés à
considérer cette tâche sous deux aspects :
- La reconfiguration de l'interface réseau proprement dite. A
minima, il s'agit ici de fixer ou obtenir une adresse IP, adapter le
fichier
/etc/resolv.conf
(qui contient les serveurs de noms) et les routes. Ce sera la Tâche 3.a dans le reste de ce document. - La reconfiguration des services voire des applications (par exemple utiliser un autre mandataire http) et le lancement de commandes spécifiques au nouvel environnement (comme lancer la synchronisation de certains fichiers). Ce sera pour nous la Tâche 3.b.
- La reconfiguration de l'interface réseau proprement dite. A
minima, il s'agit ici de fixer ou obtenir une adresse IP, adapter le
fichier
Comparaison des logiciels disponibles
Avertissement : la comparaison des logiciels disponibles a été effectuée en août 2003 et n'est à ce titre peut-être pas complètement à jour. Si un nouveau paquet est apparu ou si un paquet mérite que sa description dans cette liste soit modifiée, je serais heureux de faire évoluer ce document d'après vos suggestions
Les logiciels présentés dans cette section sont tous disponibles
depuis la distribution Debian GNU/Linux. Debian a sa façon propre de
gérer les interfaces réseau : le paquet ifupdown
fournit
des outils de haut-niveau pour les gérer en se basant sur leur
description dans le fichier
/etc/network/interfaces
. Toutefois, il est également
possible d'utiliser des commandes plus universelles comme
ifconfig
, éventuellement en ignorant le fichier
/etc/network/interfaces
. De telles solutions auront
l'avantage de fonctionner avec d'autres systèmes que Debian. L'auteur
n'utilisant que Debian, il privilégiera les solutions intégrées au
système de gestion des interfaces réseau de Debian.
Le paquet Debian ifupdown
propose un mécanisme de
« profil » (mapping en anglais). Ce mécanisme permet
d'appeler un script lorsque la commande « ifup
<interface>
» est lancée, script dont le résultat
spécifie le profil à activer. Typiquement, le script va procéder à
l'identification de l'environnement de l'ordinateur. Le profil ainsi
activé permet d'ajuster l'adresse IP de la machine et la
passerelle. Le paquet resolvconf
est nécessaire pour
adapter de façon similaire les serveurs de noms. De plus, il est
possible de préciser dans le fichier
/etc/network/interfaces
des actions à exécuter une fois
qu'un profil particulier a été mis en place. ifupdown
, en
association avec resolvconf
, permet donc de réaliser la
Tâche 3.a et fournit le minimum pour permettre à l'administrateur de
lancer des scripts arbitraires pour la Tâche 3.b.
Ifupdown
et resolvconf
sont des paquets
spécifiques à Debian (pour autant que l'auteur sache) et résolvent
partiellement le problème posé dans ce document ; certains des
logiciels cités plus bas s'intègrent à eux, d'autres pas.
Logiciels pour la Tâche 1 : détection d'un changement potentiel
Afin de détecter la suspension, la mise en veille et la reprise de
l'ordinateur, il est conseillé d'utiliser APM ou ACPI (qui sont
mutuellement exclusifs) et d'installer les paquets apmd
ou acpid
, respectivement. Ces paquets permettent
d'exécuter des scripts lorsqu'un changement comme le branchement sur
le secteur ou la suspension de l'ordinateur a lieu.
Par ailleurs, ifplugd
est un démon très simple qui (par
défaut) lance la commande « ifup/ifdown
<interface>
» lorsqu'un câble réseau vient d'être branché
ou débranché. Signalons que laptop-net
(évalué plus bas
dans ce document) intègre cette fonctionnalité. ifplugd
demeure plus robuste et est par exemple capable d'ignorer les courtes
déconnexions du câble réseau.
Enfin, le paquet hotplug
permet de détecter l'insertion
ou la suppression d'une carte réseau (une carte PCMCIA par exemple)
afin de configurer l'interface correspondante.
Logiciels pour les Tâches 2 (identification de l'environnement) et 3 (reconfiguration du système)
Debian propose de nombreux paquets pour remplir ces tâches. Certains se limitent à l'une des deux tâches, d'autres combinent les deux. Nous allons les passer en revue dans l'ordre alphabétique. Il convient d'avertir le lecteur que les jugements portés plus bas reflètent l'opinion de l'auteur et qu'ils ne constituent en rien la position officielle du projet Debian ou de qui que ce soit d'autre que l'auteur sur les paquets.
Divine
: Automatic IP configuration detection for laptops
- Tâches 2 et 3.a, laisse une possibilité de faire 3.b à la main.
- Ne teste que l'IP d'une machine distante (pas l'adresse MAC).
- Ignore
ifupdown
(ne renseigne pas le fichier/etc/network/interfaces
). - Ne supporte pas le DHCP.
- Format du fichier de configuration débile.
- Se définit lui-même comme un « quick hack », posant des problèmes de sécurité.
- Pas de raisons de l'installer.
Guessnet
: Guess which LAN is connected to a network device
- Tâche 2 uniquement.
- Teste l'IP et optionnellement la MAC d'une machine distante, peut aussi tester la présence d'un concentrateur d'accès (via un modem pppoe) (fonctionnalité qui reste à éprouver) ou lancer tout script extérieur. Aussi, inclut un test de présence de câble réseau.
- Conçu pour les profils d'
ifupdown
(complètement intégré à lui), donc supporte tout ce queifupdown
supporte (IP statique, DHCP, ...). Penser au paquetresolvconf
pour le fichier/etc/resolv.conf
. - A recourt à des ruses pour se passer des options dans le fichier
/etc/network/interfaces
. Lisibilité correcte, sans plus. - Laisse
ifup
remplir la Tâche 3.a et repose sur le mécanisme deifup
pour la Tâche 3.b (scripts lancés parifup
après que l'interface ait été configurée). - Fournit des scripts prometteurs (
test-dhcp
,test-wifi-ap
, etc) mais la documentation est incomplète. - Bien, son seul inconvénient est qu'il ne gère qu'une interface à la fois.
Ifscheme
: scheme control for network interfaces
- Intégré à
ifupdown
(permet d'activer un profil particulier). - Ne fait rien (suppose la localisation déjà connue, repose sur
ifupdown
pour reconfigurer le système), si ce n'est qu'il active un profil décrit dans le fichier/etc/network/interfaces
. - Pour ceux qui veulent manuellement, mais proprement (à la Debian) reconfigurer leur réseau. Compte-tenu de nos ambitions dans ce document, nous n'avons pas de raisons d'installer ce paquet.
ifupdown-roam
: roaming enhancements for ifupdown
- Tâche 2 uniquement.
- Conçu pour faciliter une utilisation « nomade » d'un ordinateur,
ses caractéristiques les plus intéressantes ont été intégrées au
paquet
guessnet
. L'auteur d'ifupdown-roam
recommande désormais d'utiliserguessnet
. - Pas de raisons de l'installer.
intuitively
: automatic IP configuration detection for laptops
- Tâches 2 et 3.a, avec de quoi lancer ce que l'on veut pour la Tâche 3.b.
- Semblable à
divine
, en plus propre. - Teste l'adresse IP et optionnellement l'adresse MAC d'une machine distante.
- Fichier de configuration clair.
- Pages de manuel et fichier README.
- Utilise des liens symboliques rangés dans une sous-arborescence
par schéma :
/etc/intuitively/identifiant_schema/etc/resolv.conf -> /etc/resolv.conf
. - Ne supporte pas le DHCP.
- Ignore
ifupdown
. - Mieux que
divine
, mais toujours très incomplet.
laptop-net
: automatically adapt laptop ethernet
- Le tout-en-un : Tâches 1, 2 et 3.
- S'intègre à
/etc/apm
et détecte les changements d'état du lien réseau (câble branché ou débranché). - Ne teste que les adresses IP (pas les adresses MAC).
- Supporte le DHCP.
- Ignore
ifupdown
. - Pas de page de manuel, pas de README, pas de temps à perdre à deviner.
- Bonus : laisse des liens symboliques morts à sa désinstallation.
- Sans doute uniquement utilisé par son auteur, et c'est bien ainsi.
laptop-netconf
: network detection and configuration program for laptops
- Tâche 2, laisse la possibilité de faire 3.a (et 3.b) à la main.
- Ne teste que sur un couple adresse IP + adresse MAC.
- Exécute un script écrit par l'utilisateur lorsqu'une machine distante est identifiée.
- Ne fonctionne que pour une interface, en tout et pour tout !
- Se dit être encore en développement.
- Peu de documentation : courte page de manuel, en plus de la documentation présente dans les fichiers de configuration.
- Propose d'utiliser des liens symboliques, il faut écrire son script pour les utiliser.
- Propose de truander
ifupdown
(remplacer le fichier/etc/network/interfaces
). - Moins mature et moins complet que
guessnet
.
netenv
: configure your system for different network environments
- Tâche 3.a, laisse la possibilité de faire 3.b à la main.
- Montre une boîte de dialogue (en mode texte) au démarrage pour faire choisir la configuration réseau (!) Elle peut être évitée.
- Permet de faire ce que les « profils » du fichier
/etc/network/interfaces
permettent déjà de faire. Inutile pour Debian à part pour la boîte de dialogue de choix. - Page de manuel et documentation HTML.
- Pas de raisons de l'installer (voir plutôt
ifscheme
).
switchconf
: change system configuration to one of many predefined
- Tâche 3.a, pas évident de faire ce que l'on veut en 3.b.
- Utilise des liens symboliques « de façon élégante » (comme
intuitively
). - Propose ainsi de truander
ifupdown
(remplacer le fichier/etc/network/interfaces
). - Utilise deux répertoires,
before.d
etafter.d
, pour ranger des scripts (à écrire soi-même) que l'on veut lancer avant et après chaque changement de configuration. Peu pratique pour lancer certains scripts seulement dans certaines configurations : on utilisera plutôt des lignes «up
» dans le fichier/etc/network/interfaces
. - Pas de raisons de l'installer.
waproamd
: WLAN roaming daemon
- Conçu pour les interfaces WiFi compatibles IEEE 802.11 et dont le pilote supporte l'extension sans-fil de Linux.
- Tâches 1 et 2 : pour chaque interface, un démon est lancé et celui-ci se charge de tester « en permanence » si un point d'accès est accessible.
- Un script générique (ou un script spécifique au point d'accès, si
un tel script existe) est lancé lorsqu'un point d'accès devient
accessible ou est perdu ; c'est ce script qui, typiquement,
lancera «
iwconfig
», se chargeant ainsi de la Tâche 3. waproamd
coopérait avecifplugd
, mais il semble qu'il cherche maintenant à s'en affranchir.- Un paquet pas extrêmement pratique à configurer et à utiliser,
mais indispensable si l'on veut faire avec une interface WiFi ce que
ifplugd
fait pour les interfaces filaires, à savoir détecter la présence d'un point d'accès et configurer automatique l'interface sans intervention humaine. Signalons toutefois que compte tenu de la sur-consommation induite par l'utilisation de la carte WiFi, l'utilisateur d'un ordinateur portable non branché sur le secteur pourra préférer éteindre manuellement la carte WiFi et ne l'allumer que lorsqu'un point d'accès est effectivement disponible.
whereami
: automatically reconfigure your (laptop) system for a new location
- Tâches 2, 3.a et propose plusieurs scripts pour 3.b
- Impressionnant pour la détection de la situation : permet de
tester la présence d'une adresse IP et/ou MAC, la réponse à une
requête DHCP, la présence d'un câble réseau, d'un concentrateur
d'accès PPPOE, d'un motif dans la sortie de «
lspci -v
» (pour détecter une station de dockage), d'un module chargé (lsmod
), d'un point d'accès WiFi, et enfin de tester si l'on a reçu des octets sur l'interface. - Permet de cascader les tests, de tester successivement plusieurs interfaces : les fichiers de configuration fournis en exemple dans le paquet sont atrocement compliqués mais montrent que pratiquement toutes les situations peuvent être décrites et gérées.
- Ignore le fichier
/etc/network/interface
, typiquement. Reconfiguration de l'IP à la main, apparemment (!) - Permet d'exécuter tout script quand on arrive, quand on part ou simplement quand on est dans une situation déterminée.
- Fournit des scripts pour adapter
bins
,masqmail
, le fichier de configuration de Netscape, le fichier/etc/resolv.conf
, le smarthost d'exim4
, d'exim
, depostfix
et deqmail
, la timezone, ... - Optionnellement intégré à APM.
- Pages de manuel et documentation au format HTML (pas parfaitement à jour).
- Au final, impressionnant pour la Tâche 2, un peu faible pour la Tâche 3.a et extrêmement flexible et pratique, grâce à ses scripts, pour la Tâche 3.b.
- Si
whereami
ne peut pas résoudre votre problème de configuration, aucun autre paquet ne pourra le faire. Maintenant, vous pouvez peut-être vous en tirez avec quelque chose de plus simple quewhereami
...
Discussion
Dans cette section, nous allons décrire la configuration particulière de l'auteur et motiver son choix de logiciels. Dans cette étude de cas, l'ordinateur portable oscille entre réseau résidentiel et réseau professionnel et ne dispose que d'une seule interface réseau permanente (par opposition à une carte amovible type PCMCIA). En plus de la satisfaction de notre cahier des charges aux trois Tâches, l'auteur accorde de l'importance aux deux critères suivants :
- l'intégration à la façon Debian de gérer les interfaces réseau,
par opposition à la modification directe des interfaces réseau en
court-circuitant le paquet
ifupdown
; - le respect de la « philosophie Unix », à savoir « une tâche par outil ».
Aussi l'auteur a-t-il choisi :
- Pour la Tâche 1 (détection d'un changement potentiel), les
paquets
apmd
etifplugd
.ifplugd
est le choix naturel pour détecter le branchement ou le débranchement d'un câble réseau à la carte réseau, tandis que le choix d'apmd
s'explique par l'utilisation du système APM pour la gestion de l'énergie -- eût-il utilisé le système ACPI, l'auteur aurait choisi le paquetacpid
. - Pour la Tâche 2 (identification de l'environnement actuel), le
paquet
guessnet
. Il propose une panoplie de tests suffisante et documente l'intégration au paquetifupdown
. - Pour la Tâche 3.a (reconfiguration de l'interface réseau) :
les profils, décrits dans le fichier
/etc/network/interfaces
, du paquetifupdown
, utilisant les extensions du paquetresolvconf
pour permettre de gérer le fichier/etc/resolv.conf
(résolution de nom). - Pour la Tâche 3.b (reconfiguration des services) : les
lignes
up
du fichier/etc/network/interfaces
, qui pour l'instant ne contiennent que de très simples commandes. L'auteur a toutefois conservé une copie des scripts proposés par le paquetwhereami
pour une éventuelle utilisation future.
Aucune configuration particulière des paquets apmd
,
ifplugd
, resolvconf
et guessnet
n'a été nécessaire. La configuration est entièrement contenue, de
façon compacte et relativement claire, dans le fichier
/etc/network/interfaces
, dont des extraits sont présentés
en annexe à titre d'illustration.
Guessnet
est donc la solution d'identification de
l'environnement qui se distingue dans notre comparatif, en ce qu'elle
s'intègre par conception à la façon Debian de gérer les interfaces
réseaux et parce qu'elle est riche fonctionnellement (tests nombreux,
support de plusieurs interfaces physiques, ...). Pour les cas les plus
compliqués, où en particulier il est nécessaire de cascader les tests
ou de tester plusieurs interfaces physiques en même temps,
whereami
semble être le seul candidat.
Remerciements
L'auteur tient avant tout à remercier tous les contributeurs, qu'ils soient développeurs, utilisateurs ou traducteurs, du projet Debian pour mettre à la disposition du plus grand nombre un ensemble de logiciels de qualité. Merci également aux contributeurs de la liste de diffusion debian-user-french@debian.org et en particulier François Tourde et Loïc Minier.
Annexes
Extraits du fichier /etc/network/interfaces
de l'auteur
mapping eth0 script /usr/sbin/guessnet-ifupdown map default: none map verbose: true iface eth0-limsi inet static # Partie classique de configuration de l'interface address 192.44.xx.yy (masqué) netmask 255.255.255.0 broadcast 192.44.78.255 gateway 192.44.78.22 # Partie pour resolvconf dns-search limsi.fr dns-nameservers 192.44.78.7 192.44.78.53 192.175.152.129 # Définitions des tests pour guessnet test1-peer address 192.44.78.22 mac aa:bb:cc:dd:ee:ff (masqué) test2-peer address 192.44.78.22 mac aa:bb:cc:dd:ee:ff (masqué) # Adaptation de l'imprimante par défaut up foomatic-configure -n biglexrv -D iface eth0-famille inet static address 192.168.2.26 netmask 255.255.255.0 broadcast 192.168.2.255 gateway 192.168.2.22 dns-search famille dns-nameservers 192.168.2.22 test-peer address 192.168.2.1 mac aa:bb:cc:dd:ee:ff (masqué) up foomatic-configure -n CanonS600 -D
Droits d'auteur et de diffusion
Copyright Daniel Déchelotte, 2004-2005.
Ce document est régi par la licence CeCILL soumise au droit français et respectant les principes de diffusion des logiciels libres. Vous pouvez utiliser, modifier et/ou redistribuer ce document sous les conditions de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA sur le site http://www.cecill.info/.