Configuration réseau sous Debian, pour faire comme les grands
Je n'ai jamais trouvé de doc complète pour ça, en tout cas, jamais une qui soit à jour, suffisamment détaillée avec de bonnes références et qui marche.
-+- root -+-
Ouais, moi non plus, et ça n'en est pas une.
Tout ce qui va suivre concerne la configuration d'un réseau sous Debian à l'aide du fichier /etc/network/interfaces.
Pour éditer ce fichier (qui appartient à root), vous devez obtenir les droits superutilisateurs et lancer un éditeur de texte.
- Exemple en mode graphique avec sudo
On installe les outils :
sudo aptitude install gedit gksu
Et on lance l'éditeur de texte :
gksudo gedit /etc/network/interfaces
- Exemple en mode graphique avec su
On installe les outils :
su -c "aptitude install gedit gksu"
Et on lance l'éditeur de texte :
gksu gedit /etc/network/interfaces
- Exemple pour les grands
sudo vim /etc/network/interfaces
Rappels : interfaces réseaux de la machine
Par défaut, les interfaces filaires sont numérotées en ethX Où X est
un nombre identifiant la carte réseau : 0 pour la première, 1 pour la suivante,
etc.
Les interfaces Wifi sont numérotées en wlanX ou athX. Il y a
d'autres type d'interfaces, comme les interfaces tun/tap, etc.
Pour lister les interfaces présentes sur une machine :
ifconfig -a
Ou, pour ne lister que les interfaces éveillées :
ifconfig
La base : notion d'interfaces
Eh oui, dans le fichier /etc/network/interfaces, on définie… des interfaces. Quelle surprise.
Une interface va consister en une adresse IP, un masque de sous-réseau, une adresse de diffusion et une adresse de réseau. Ces informations vont être à spécifier par l'utilisateur ou détectées automatiquement. On pourra aussi déclarer d'autres informations dans une interface.
- L'interface
loopback
Comme chacun sait, le premier interlocuteur de la machine, c'est elle même. Et pour se parler à elle même, outre les socks et autres dbuseries, elle peut utiliser tout simplement le réseau. L'adresse IP qu'elle utilise alors est 127.0.0.1 associée au nom d'hôte localhost.
On déclare l'interface comme suit
iface lo inet loopback
- L'interface
dhcp
Lorsque l'interface obtient sa configuration grâce à un serveur dhcp, on déclare l'interface comme ça :
iface mon_interface inet dhcp
Par défaut, quand l'interface se montera, elle va envoyer une requête dhcp, le serveur lui répondra en lui donnant une IP, un masque de sous-réseau, une adresse de diffusion, une passerelle et des serveurs DNS. Après ça, la vie est belle et la connexion est prête à l'emploi.
- L'interface
static
Parfois il n'est pas pertinent ou pas possible de se servir d'un serveur DHCP. Soit parce que c'est trop lent, soit parce qu'il n'y en a pas, soit parce qu'il ne sait pas donner des adresses fixes à ses clients, soit parce qu'il est… en panne. Bref, il y a plus de raisons que vous l'imaginez de ne pas utiliser un serveur DHCP.
Voici un exemple de configuration pour un réseau local
iface maison inet static address 192.168.0.1 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.254
Il n'est en fait pas nécessaire de renseigner tous ces champs puisque le network se déduit de l' address et du netmask et que le broadcast se déduit du network.
Monter une interface
Manuellement
Il suffit de taper en tant que superutilisateur
ifup interface_réseau=interface_nommée
Où interface_réseau est une interface apparaissant dans ifconfig -a et
interface_nommée une interface définie dans le /etc/network/interfaces.
Si les deux interfaces ont le même nom, alors on peut se contenter de taper :
ifup interface_réseau
Automatiquement au démarrage
S'il n'est pas forcément souhaitable de démarrer automatiquement une interface filaire au démarrage quand celle-ci ne sert que rarement, il est en revanche nécessaire de démarrer certaines interfaces avec le système. En particulier, l'interface de loopback doit être démarrée très tôt par le système.
L'interface loopback présente sur le système s'appelle lo. On va y monter
l'interface loop0 définie dans le fichier /etc/network/interfaces. Pour
ce faire, la syntaxe est
auto lo=loop0
On notera qu'on peut de manière équivalente faire
auto lo=loop0 iface loop0 inet loopback
et
auto lo iface lo inet loopback
La syntaxe et l'abus de notation valent bien sûr pour toutes les interfaces réseau.
Automatiquement lors du branchement d'un câble
Même chose avec allow-hotplug en lieu et place de auto. C'est alors
udev qui lancera automatiquement l'interface choisie lors de l'insertion
d'un câble (je ne sais pas trop ce qui se passe dans le cas d'une interface
wifi)
Les interfaces Wifi
Nécessite l'installation du paquet wireless-tools
En WEP
Les principaux mots-clés sont wireless-essid, wireless-mode et
wireless-key (en fait, se sont les wireless-X correspondants aux
iwconfig interface X, voir man iwconfig).
Exemple :
auto wlan0=wifi-livebox-maison iface wifi-livebox-maison inet dhcp wireless-mode managed wireless-essid LiveboxFab wireless-key s:mangezdespommes
Ou encore
iface wifi-livebox-voisin inet static wireless-mode managed wireless-essid LiveboxRobert wireless-key 4242424242424242424242 address 192.168.0.42 netmask 255.255.0.0 gateway 192.168.0.1
En WPA
Nécessite l'installation du paquet wpasupplicant.
Ici, c'est un peu le bazar. Il faut utiliser un fichier de configuration de
wpa_supplicant. Pour une liste exhaustive des directives, voir man
wpa_supplicant.conf.
Exemple pour un réseau WPA-PSK EAS (Freebox) avec une carte wifi classique.
iface wifi-freebox-caroline inet dhcp wpa-driver wext wpa-ssid reseaucaro wpa-conf /etc/wpa_supplicant/wifi-freebox-caroline.conf
Et le fichier /etc/wpa_supplicant/wifi-freebox-caroline.conf
network={
ssid="reseaucaro"
proto=WPA
key_mgmt=WPA-PSK
scan_ssid=1
psk="Caroline n'aime pas les souris. Elle utilise urxvt."
}
Attention: pensez à bien régler les permissions de ce fichier pour que seul root puisse y accéder en lecture et en écriture.
ou
psk=16e108f672e5dc681662707ba88349da8e6e787080f301ce4e35917b99b3f5ab
Exemple pour une authentification WPA2-TKIP
iface wifi-netgear-alice inet dhcp wpa-driver wext wpa-ssid diguedondaine wpa-conf /etc/wpa_supplicant/wifi-netgear-alice.conf
Et le fichier /etc/wpa_supplicant/wifi-netgear-alice.conf
network={
ssid="diguedondaine"
proto=RSN
key_mgmt=WPA-PSK
scan_ssid=1
pairwise=TKIP
group=TKIP
psk=16e108f672e5dc681662707ba88349da8e6e787080f301ce4e35917b99b3f5ab
}
Attention: de même, pensez à bien régler les permissions de ce fichier pour que seul root puisse y accéder en lecture et en écriture.
Spécifier les serveurs DNS
Nécessite le paquet resolvconf.
La grosse plaie quand on spécifie une adresse statiquement c'est que le serveur DNS n'est pas mis à jour et qu'il est difficile de faire en sorte de le spécifier proprement (avec des post-up).
Le paquet resolvconf ajoute la possibilité de définir les entrées du
/etc/resolv.conf depuis l'interface.
La syntaxe est la suivante :
iface prout0 inet static address 192.168.0.1 netmask 255.255.255.0 gateway 192.168.0.254 dns-nameservers 42.42.42.1 42.42.42.2 dns-domain chezlefab.net dns-search chezlefab.net chadok.info
Voir man resolvconf et man resolv.conf pour plus d'options.
Profils itinérants et mapping
Bon, c'est là que les choses se corsent. Ayant un portable, je le connecte souvent à des réseaux différents. Le réseau du labo qui est filaire et fonctionne par dhcp, le réseau de mon appart en Wifi sur ma Freebox, le réseau de mes parents soit en Wifi sur une Livebox soit en filaire sur la même Livebox, et je passe toutes les *box de mes connaissances.
Pour épater ses amis, un bon truc, c'est d'utiliser le mapping. Le principe est
le suivant. Un script détecte sur une interface donnée la présence où non d'une
machine (identification par adresse MAC) d'une borne Wifi (identification par
SSID) ou autre. En fonction de cela, une interface ou l'autre de
/etc/network/interfaces est montée sur une des interfaces de la machine.
Pour la suite, j'utiliserai le paquet guessnet. Comme d'habitude, un exemple vaut mieux qu'un long discours :
Mon mapping Wifi avec guessnet
Premièrement, le bloc mapping :
mapping wlan0 script /usr/sbin/guessnet-ifupdown map timeout: 3 map verbose: true map wifi-livebox-maison wifi-freebox-caroline wifi-netgear-alice
- L'argument donné à
scriptest particulier à la méthode utilisée ici (guessnet). map timeout:On définit un timeout pour le cas où la détection serait trop longue.map verbose:On n'a pas peur d'afficher les détails d'exécution du script.mapon définit la liste des interfaces à tester.
Maintenant, voyons comment sont renseignés les tests à faire dans chacune des interfaces. Je ne reprends que la première ligne des interfaces déjà définies plus haut.
iface wifi-livebox-maison inet static ... test wireless essid LiveboxFab
iface wifi-livebox-caroline inet dhcp ... test wireless essid reseaucaro mac 00:11:22:33:44:55
- Le premier test recherche un réseau de SSID
LiveboxFab. Si le test réussit, la c'est wifi-livebox-maison qui est montée surwlan0. - Le second test recherche un réseau de SSID
reseaucaroet d'adresse mac00:11:22:33:44:55. De la même manière, si le test réussit, c'est wifi-livebox-caroline qui est montée surwlan0.
Les tests sont effectués sur les interfaces suivant l'ordre d'apparition de
celles-ci dans l'argument map du bloc mapping.
Si aucun test ne réussit, il est possible de lancer une interface par défaut.
Pour ce faire, il faut la définir dans le mapping avec une ligne :
mapping wlan0 ... map default: ether-dhcp
Je ne veux pas que le Wifi soit monté automatiquement. Je tape donc
ifup wlan0
manuellement quand je souhaite l'activer, et
ifdown wlan0
pour le désactiver.
Il est possible de docker ces commandes pour les adeptes du clickodrôme.
Mon mapping Ethernet avec guessnet
Le test à effectuer n'est plus wireless mais peer. On peut par exemple
vérifier que la machine 192.168.0.254 existe et a pour addresse mac
00:cc:22:77:cc:44 avec la ligne
test peer address 192.168.0.254 mac 00:cc:22:77:cc:44
À utiliser en combinaison avec allow-hotplug pour un confort d'utilisation plus grand ^^
Pour plus d'informations sur les tests fournis par guessnet : man
guessnet.
Les bridges
À venir… ou pas !
Récapitulatif
Voici un petit fichier /etc/network/interfaces contenant tout ce que nous
venons de voir.
#################################### # Interface de loopback # #################################### auto lo iface lo inet loopback #################################### # Interface réseau filaire # #################################### allow-hotplug eth0 ## Mapping mapping eth0 script /usr/sbin/guessnet-ifupdown map timeout: 3 map verbose: true map ether-livebox-maison ether-bureau map default: ether-dhcp ## Ethernet maison iface ether-livebox-maison inet dhcp test peer address 192.168.0.254 mac 00:cc:22:77:cc:44 ## Ethernet bureau iface ether-bureau inet static address 172.0.42.42 network 172.0.0.0 netmask 255.255.0.0 broadcast 172.0.255.255 gateway 172.0.255.254 dns-nameservers 42.42.42.1 42.42.42.2 test peer address 172.0.255.254 mac 00:cc:22:77:cc:45 ## Ethernet default iface ether-dhcp inet dhcp #################################### # Interface réseau Wifi # #################################### ## Mapping mapping wlan0 script /usr/sbin/guessnet-ifupdown map timeout: 3 map verbose: true map wifi-livebox-maison wifi-freebox-caroline wifi-netgear-alice ## Wifi maison iface wifi-livebox-maison inet dhcp wireless-mode managed wireless-essid LiveboxFab wireless-key s:mangezdespommes test wireless essid LiveboxFab ## Wifi caroline iface wifi-freebox-caroline inet dhcp wpa-driver wext wpa-ssid reseaucaro wpa-conf /etc/wpa_supplicant/wifi-freebox-caroline.conf test wireless essid reseaucaro ## Wifi alice iface wifi-netgear-alice inet dhcp wpa-driver wext wpa-ssid diguedondaine wpa-conf /etc/wpa_supplicant/wifi-netgear-alice.conf test wireless essid diguedondaine
Voir aussi
Remerciements
smolski de debian-facile pour sa relecture et ses réflexions pertinentes et constructives, trôôôôôôôôôôôô bien !




