Configuration réseau itinérante
Une configuration simple
La configuration réseau sous Linux, c'est relativement simple. Mais dès qu'on veut mettre en place un système vagabond (ou «itinérant») sur son ordinateur portable, ça devient beaucoup plus compliqué si on n'est pas assez rigoureux. Suite à mes diverses recherches sur le net et à la lecture des pages de manuel UNIX, j'en suis venu à la conclusion que la plupart des pages web sur le sujet étaient un peu trop alambiquées pour pas grand chose... Je me permets donc de détailler ici ma solution.
Je suis parvenu à configurer mon interface Ethernet et mon interface Wifi de manière 100% automatique à l'aide du seul fichier /etc/network/interfaces. Juste un petit bémol, l'interface wifi ne se connecte pas automatiquement quand mon ibook sort de la mise en veille et que le point d'accès précédent n'est pas disponible. C'est le seul point noir que je dois corriger. A priori ça devrait être le boulot d'ifplugd, mais je n'ai pas réussi à le lui dire correctement...
Ah oui, j'oubliais : j'ai fait tout ceci sur un iBook G4 12". Donc si ça marche ici, ça doit marcher ailleurs ;-)
L'interface Ethernet
Commençons par le plus facile. Nous voulons ici configurer l'interface Ethernet de manières différentes selon le lieu où l'on se trouve. Voici, en exemple, mon cas de figure :
- chez moi : interface configurée en dur, avec serveur DNS local
- au boulot : interface configurée en dur aussi
- ailleurs : en dhcp
Tout ceci, sans oublier le cas de figure où le câble réseau est débranché : inutile de perdre du temps à faire du DHCP si on n'a pas de réseau !
Paquetages à installer
- resolvconf : mise à jour automatique du /etc/resolv.conf selon les indications dns-*
- ifplugd : détection du lien réseau, et ifup/ifdown sur l'interface correspondante
- guessnet : détection du réseau sur lequel on est connecté et configuration de l'interface en conséquence
La config
# démarrer l'interface ethernet au démarrage auto eth0 # utiliser un script de mapping mapping eth0 script guessnet-ifupdown # teste toutes les interfaces préfixées de "eth0-" map autofilter: true map default: eth0-dhcp iface eth0-nonet inet manual test missing-cable iface eth0-home inet static test peer address IP.AD.DR.ESS mac MA:CA:DD:RE:SS address w.x.y.z netmask x.x.x.y gateway w.x.y.a dns-nameservers w.x.y.b dns-search domain.com iface eth0-work inet static test peer address IP.AD.DR.ESS mac MA:CA:DD:RE:SS blablabla iface eth0-dhcp inet dhcp # fallback
Juste penser à configurer ifplugd (RTFM !!) pour qu'il surveille l'interface eth0
L'interface Wifi
Pour le Wifi, c'est un poil plus compliqué. Déjà, je ne me connecte que sur des réseaux en WPA, donc utilisation obligée de wpa_supplicant. Ensuite, chez moi, le Wifi n'est qu'un autre moyen de me connecter à mon réseau local. Donc si je suis connecté en Wifi et via Ethernet, je me retrouve avec deux interfaces utilisant la même adresse IP. Donc ça coince. Ensuite, la configuration Wifi doit se faire selon les points d'accès disponibles...
Pour wpa_supplicant, en principe il faut utiliser un fichier de configuration pour indiquer les différentes clefs WPA et leur SSID associé. C'est lourd, ça oblige à séparer la config. Mais heureusement pour nous, wpa_supplicant gère les options wpa-* dans le fichier /etc/network/interfaces !
Pour ifplugd en revanche, on devrait avoir des ifup/ifdown suivant l'état du réseau, mais non. Peut être est-ce lié au fait que sur mon iBook et sa carte Airport Extrême (Broadcom), je me retrouve avec deux interfaces : wmaster0 et wlan0 ? Dans tous les cas, ça m'interdit d'avoir une configuration Wifi "automagique". Quelque part, tant mieux : par défaut je ne serai donc pas connecté via Wifi à l'insu de mon plein gré. J'ai juste rajouté une entrée "sudo" pour avoir le droit de faire un ifup/ifdown sur l'interface Wifi, et le tour est joué.
Enfin, il reste l'itinérance Wifi à gérer... Là encore ça s'avère très simple : guessnet gère les tests "wireless" (notamment la présence d'une SSID, ce qui nous suffira ici)
Liste des courses
- resolvconf : on sait pourquoi
- wpa_supplicant : on sait pourquoi
- guessnet : on sait pourquoi
- wireless-tools : bon, ça, vous devriez déjà l'avoir installé...
La config
auto wlan0 mapping wlan0 script guessnet-ifupdown map autofilter: true iface wlan0-home inet static # on teste l'SSID avec une adresse MAC pour plus de "sûreté" test wireless essid "HOMESWEETHOME" mac MA:CA:DD:RE:SS wpa-ssid "HOMESWEETHOME" # ça paraît évident.. wpa-psk "ma passphrase secrète !" address blablabla # là c'est comme pour eth ! iface wlan0-boulot inet dhcp test wireless essid "WORKINGSTUFF" mac MA:CA:DD:RE:SS wpa-ssid "WORKINGSTUFF" wpa-psk "une autre passphrase que je ne vous dirai pas" # Ici on est en DHCP ! C'est magique ! iface wlan0-freewifi inet dhcp test wireless essid "FreeWifi" wireless-essid "FreeWifi" wireless-mode open iface wlan0-open inet dhcp test wireless open # Ici, pas de WPA, donc pas besoin de wpa_supplicant, # donc pas besoin de wpa-*. # On utilise iwconfig avec wireless-*. wireless-essid any wireless-mode open # C'est tout ! C'est magique !
Et le pied c'est que wpa_supplicant fait son boulot tout seul comme un grand !