Les clients DHCP

Tout système d'exploitation (y compris MS Windows™ depuis l'antique version 95) dispose d'un client DHCP dont le rôle est de rechercher sur le réseau un serveur DHCP et de négocier avec lui une configuration IP cohérente.

Si le poste de travail est correctement configuré, le client DHCP s'occupera de tout.

MS Windows™

N'étant pas un fan de ces systèmes, nous nous contenterons de la démonstration sur un Windows XP Pro (SP3).

Configuration

Voici un moyen (parmi d'autres) d'y arriver. Celle-ci s'appelle la « méthode en dix clics ».

Tu cliques à gauche sur Démarrer et, à condition d'avoir configuré son machin de cette façon, les favoris réseau apparaissent. Tu cliques à droite sur les favoris réseau et tu cliques à gauche sur propriétés. Etape 1 Tout ceci doit faire apparaitre cette fenêtre : Etape 2 Là, tu cliques à droite sur la Connexion au réseau local et tu cliques à gauche sur propriétés. Ceci t'amène à : Etape 3 Tu cliques deux fois de suite à gauche sur Protocole Internet (TCP/IP). Tu es presque arrivé. Etape 4 Ici, il suffit de cliquer à gauche successivement sur Obtenir une adresse IP automatiquement, sur Obtenir les adresses des serveurs DNS automatiquement et enfin sur OK. Et voilà le travail.

Contrôle

Il existe une méthode, dite « méthode en sept clics », qui permet de consulter sa configuration IP. Nous allons en voir une autre dite « méthode de la ligne de commande ».

Tu ouvres une console DOS, aussi appelée invite de commandes et tu tapes :

ipconfig

ipconfig Nous obtenons alors l'essentiel de la configuration IP.

Si nous souhaitons plus de détails, il faudra utiliser la commande :

ipconfig /all

ipconfig /all Nous voyons ici toutes les informations concernant le bail dhcp obtenu. La « méthode en sept clics » n'apporte strictement aucune information supplémentaire, elle permet juste de faire travailler l'index et le majeur (éventuellement l'annulaire) de la main droite (habituellement), au détriment de tous les autres doigts.

GNU/Linux

Ici, nous sommes dans le bazar et suivant les distributions, les choses peuvent changer de façon plus ou moins significative. Nous prendrons comme exemple une Debian Lenny et une Ubuntu Jaunty dont les architectures restent très proches puisque l'autre est dérivée de l'une.

GNU/Linux étant en perpétuelle évolution, les possibilités de configuration du réseau ont suivi le même chemin. Il existe en gros deux moyens de le faire :

  • des fichiers texte qui décrivent la configuration de chaque interface, c'est la bonne vieille méthode, encore tout à fait d'actualité dans le cas de machines sédentaires (poste de travail de bureau (Desktop) et encore plus de serveurs ;
  • un système dynamique, NetworkManager, qui s'appuie lui-même sur la couche HAL et sur DBUS en environnement graphique, qui est bien pratique pour les postes portables (Laptop), surtout lorsqu'ils sont équipés d'une connexion WI-FI. NetworkManager dispose d' « applets » adaptés à la plupart des environnements graphiques (GNOME, KDE, XFCE…). Ce projet, initié par RedHat en 2004 manque peut-être encore un peu de maturité, mais commence à être tout à fait utilisable par une autre population que celle des « geeks ».

NetworkManager

Commençons par le plus « simple », c'est-à-dire la méthode où ce sont les autres qui choisissent à votre place (courant très en vogue de nos jours). Un « Desktop » avec Ubuntu 9.04 (Jaunty) est connecté au réseau où notre DHCP opère. Voici ce que ça donne : L'applet pour GNOME Tu cliques à droite sur l'applet puis à gauche sur Informations de connexion (méthode en deux clics) et tu obtiens :

Lecture de la configuration courante

Bien entendu, tout ceci fonctionne bien parce que les concepteurs d'Ubuntu Jaunty ont correctement pensé l'architecture de la distribution, que tous les paquets nécessaires ont été installés et que les scripts de post-installation ont correctement configuré tout ça. Les trois paquets essentiels, mais qui incluent beaucoup de dépendances, sont :

  • network-manager pour la gestion automatisée des connexions actives ;
  • network-manager-gnome pour que l'applet soit présent dans la zone de notification ;
  • dhcp3-client qui est le client DHCP probablement le plus courant, bien qu'il en existe de nombreux autres. Car dans une architecture client/serveur, il faut un serveur mais aussi un client.

A l'ancienne

Une méthode plus rustique, mais tout aussi efficace lorsque l'on est sédentaire, consiste à configurer le réseau au moyen de fichiers texte. Dans l'architecture Debian et dérivées, tout de passe dans /etc/network/interfaces.

Nous sommes sur une Lenny sans interface graphique (pas de méthodes en X clics). Il nous faut bien sûr un client DHCP, pourquoi pas dhcp3-client qui est le choix par défaut sur Debian. En suite, nous pouvons créer ou modifier le fichier /etc/network/interfaces comme ceci :

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

La traduction est assez intuitive : Nous voulons que eth0 soit activée automatiquement et soit configurée par DHCP.

Après un démarrage de notre Lenny, voyons où nous en sommes. Il existe plusieurs façons de récolter les informations :

ifconfig

Méthode traditionnelle :

# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:16:36:51:5d:5a  
          inet adr:192.168.0.67  Bcast:192.168.0.255  Masque:255.255.255.0
          adr inet6: 2a01:e35:2e52:9840:216:36ff:fe51:5d5a/64 Scope:Global
          adr inet6: fe80::216:36ff:fe51:5d5a/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:134 errors:0 dropped:0 overruns:0 frame:0
          TX packets:69 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000 
          RX bytes:18211 (17.7 KiB)  TX bytes:9947 (9.7 KiB)
          Interruption:10 Adresse de base:0xc100 

iproute

Plus moderne :

# ip addr ls dev eth0
2: eth0:  mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:16:36:51:5d:5a brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.67/24 brd 192.168.0.255 scope global eth0
    inet6 2a01:e35:2e52:9840:216:36ff:fe51:5d5a/64 scope global dynamic 
       valid_lft 86174sec preferred_lft 86174sec
    inet6 fe80::216:36ff:fe51:5d5a/64 scope link 
       valid_lft forever preferred_lft forever

les logs

Si nous voulons vraiment savoir ce qu'il s'est passé au niveau DHCP, il suffit de consulter les logs du client dhcp3-client qui se trouvent sur Debian dans /var/lib/dhcp3/dhclient.eth0.leases :

# cat /var/lib/dhcp3/dhclient.eth0.leases 
lease {
  interface "eth0";
  fixed-address 192.168.0.67;
  option subnet-mask 255.255.255.0;
  option routers 192.168.0.252;
  option dhcp-lease-time 3600;
  option dhcp-message-type 5;
  option domain-name-servers 192.168.0.252;
  option dhcp-server-identifier 192.168.0.252;
  option netbios-name-servers 192.168.0.252;
  option domain-name "maison.mrs";
  renew 5 2009/05/08 08:38:00;
  rebind 5 2009/05/08 09:05:37;
  expire 5 2009/05/08 09:13:07;
}
Nous avons ici toutes les informations transmises. Notre système est « neuf », c'est la première fois que l'interface est configurée. Comme nous sommes curieux, nous avons mis en place un « sniffeur » (l'indispensable Wireshark), qui a capturé le dialogue, mais nous verrons ça plus tard.

Les heures sont indiquées en UTC.

La machine cliente a été démarrée à 8h 12 UTC. Nous pouvons prendre une petite récréation. Rendez-vous vers 8h 38 UTC.

lease {
  interface "eth0";
  fixed-address 192.168.0.67;
  option subnet-mask 255.255.255.0;
  option routers 192.168.0.252;
  option dhcp-lease-time 3600;
  option dhcp-message-type 5;
  option domain-name-servers 192.168.0.252;
  option dhcp-server-identifier 192.168.0.252;
  option netbios-name-servers 192.168.0.252;
  option domain-name "maison.mrs";
  renew 5 2009/05/08 08:38:00;
  rebind 5 2009/05/08 09:05:37;
  expire 5 2009/05/08 09:13:07;
}
lease {
  interface "eth0";
  fixed-address 192.168.0.67;
  option subnet-mask 255.255.255.0;
  option routers 192.168.0.252;
  option dhcp-lease-time 3600;
  option dhcp-message-type 5;
  option domain-name-servers 192.168.0.252;
  option dhcp-server-identifier 192.168.0.252;
  option netbios-name-servers 192.168.0.252;
  option domain-name "maison.mrs";
  renew 5 2009/05/08 09:05:03;
  rebind 5 2009/05/08 09:30:30;
  expire 5 2009/05/08 09:38:00;
}
Notre client DHCP a demandé un renouvèlement de son bail. Il le refera à 9h 05 UTC etc.

Notre Wireshark n'a rien perdu de tout ceci, nous pouvons aller y voir de plus près.