Traductions de cette page?:

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 ethXX 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

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é à script est 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.
  • map on 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 sur wlan0.
  • Le second test recherche un réseau de SSID reseaucaro et d'adresse mac 00: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 sur wlan0.

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 !

 
tuto_nix/config_network.txt · Dernière modification: 24/04/2011 19:06 (modification externe)