<h2>But de ce document</h2>
<p class="spip">Ce document donne les modifications à effectuer dans une configuration réseau classique (avec carte ethernet) pour activer ce dernier seulement si le câble réseau est connecté.</p>

<p class="spip">En effet, si la configuration réseau est activée alors que le réseau n’est pas disponible, de nombreux services peuvent fonctionner difficilement. De plus, cela augmente de façon importante le temps de démarrage ou d’arrêt  de l’ordinateur ainsi que le lancement de certains programmes.</p>

<p class="spip">Ce problème de configuration du réseau apparaît notamment avec les portables connectés au réseau lorsqu’ils sont en entreprise et qui se retrouvent ensuite sans réseau à la maison.</p>

<h2>Pré-requis</h2>
<p class="spip">Avoir installé une Debian de Base :
<br /></p>
<li> cf mon autre document sur ce sujet : <a href="http://www.coagul.org/article.php3?id_article=158" class="spip_out">http://www.coagul.org/article.php3 ?id_article=158</a>
<h2>Rappel rapide sur le fonctionnement du réseau sous Debian</h2>
<p class="spip">Sous Debian, le principal fichier de configuration du réseau est « <strong class="spip">/etc/network/interfaces</strong> »</p>

<p class="spip">Voici un premier exemple de ce qu’il peut contenir pour une configuration statique :</p>

<p class="spip"><code class='spip_code' dir='ltr'>auto lo</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>iface lo inet loopback</code></p>

<p class="spip"><code class='spip_code' dir='ltr'></code></p>

<p class="spip"><code class='spip_code' dir='ltr'>auto eth0</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>iface eth0 inet static</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>        address 192.168.0.1</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>        netmask 255.255.255.0</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>        gateway 192.168.0.100</code></p>

<p class="spip">Voici un autre exemple avec une configuration automatiquement avec DHCP</p>

<p class="spip"><code class='spip_code' dir='ltr'>auto lo</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>iface lo inet loopback</code></p>

<p class="spip"><code class='spip_code' dir='ltr'></code></p>

<p class="spip"><code class='spip_code' dir='ltr'>auto eth0</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>iface eth0 inet dhcp</code></p>

<p class="spip">Dans ces deux exemples, les deux premières lignes servent à configurer le réseau interne du système Linux (loopback ou 127.0.0.1). Ces deux lignes sont nécessaire au fonctionnement de nombreux services sous Linux même si celui-ci n’est jamais connecté à un réseau.</p>

<p class="spip">Les lignes suivantes, permettent de configurer la première interface réseau du système (eth0).</p>

<p class="spip">Les lignes « auto lo » et « auto eth0 » indiquent qu’il faut démarrer automatiquement les interfaces loopback et eth0 au démarrage du système.</p>

<p class="spip">La commande « <strong class="spip"> ifconfig </strong> » permet de voir ou de modifier les interfaces disponibles :</p>

<p class="spip"><code class='spip_code' dir='ltr'># ifconfig</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>eth0      Lien encap:Ethernet  HWaddr 00:0B:DB:02:59:0D</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>          adr inet6: fe80::20b:dbff:fe02:590d/64 Scope:Lien</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>          RX packets:5877 errors:0 dropped:0 overruns:0 frame:0</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>          TX packets:230 errors:0 dropped:0 overruns:0 carrier:39</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>          collisions:0 lg file transmission:1000</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>          RX bytes:457197 (446.4 KiB)  TX bytes:23816 (23.2 KiB)</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>          Interruption:11 Adresse de base:0xec80</code></p>

<p class="spip"><code class='spip_code' dir='ltr'></code></p>

<p class="spip"><code class='spip_code' dir='ltr'>lo        Lien encap:Boucle locale</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>          inet adr:127.0.0.1  Masque:255.0.0.0</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>          adr inet6: ::1/128 Scope:Hôte</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>          UP LOOPBACK RUNNING  MTU:16436  Metric:1</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>          RX packets:107 errors:0 dropped:0 overruns:0 frame:0</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>          TX packets:107 errors:0 dropped:0 overruns:0 carrier:0</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>          collisions:0 lg file transmission:0</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>          RX bytes:8771 (8.5 KiB)  TX bytes:8771 (8.5 KiB)</code></p>

<p class="spip">La commande « <strong class="spip"> route </strong> » permet de vérifier si le réseau est correctement configuré en affichant les routes disponibles :</p>

<p class="spip"><code class='spip_code' dir='ltr'># route</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>Table de routage IP du noyau</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>localnet        *               255.255.255.0   U     0      0        0 eth0</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>default         192.168.0.100   0.0.0.0         UG    0      0        0 eth0</code></p>

<p class="spip">La commande « <strong class="spip"> ping </strong> » permet de vérifier si un autre élément du réseau est accessible :</p>

<p class="spip"><code class='spip_code' dir='ltr'># ping 192.168.0.100</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>PING 192.168.0.100 (192.168.0.100) 56(84) bytes of data.</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>64 bytes from 192.168.0.100: icmp_seq=1 ttl=255 time=1.78 ms</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>64 bytes from 192.168.0.100: icmp_seq=2 ttl=255 time=0.970 ms</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>64 bytes from 192.168.0.100: icmp_seq=3 ttl=255 time=0.998 ms</code></p>

<p class="spip">La commande « <strong class="spip">ifdown eth0</strong> » permet de désactiver la configuration de l’interface réseau « eth0 »</p>

<p class="spip"><code class='spip_code' dir='ltr'># ifdown eth0</code></p>

<p class="spip">Après cette commande, la table de routage doit être vide :</p>

<p class="spip"><code class='spip_code' dir='ltr'># route</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>Table de routage IP du noyau</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface</code></p>

<p class="spip">La commande « <strong class="spip">ifup eth0</strong> » permet d’activer la configuration de l’interface réseau « eth0 »</p>

<p class="spip"><code class='spip_code' dir='ltr'># ifup eth0</code></p>

<p class="spip">Après cette commande, la table de routage apparaît de nouveau :</p>

<p class="spip"><code class='spip_code' dir='ltr'># route</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>Table de routage IP du noyau</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>localnet        *               255.255.255.0   U     0      0        0 eth0</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>default         192.168.0.100   0.0.0.0         UG    0      0        0 eth0</code></p>

<p class="spip">Les commandes « <strong class="spip">ifdown -a</strong> » et « <strong class="spip">ifup -a</strong> » permettent de désactiver ou d’activer toutes les interfaces marquées « auto » dans le fichier « <strong class="spip">/etc/network/interfaces</strong> »</p>

<h2>Exemple de problème quand le réseau n’est pas disponible</h2>
<p class="spip">Si le câble réseau est débranché alors que le réseau est toujours actif certains temps de réponses seront très longs.</p>

<p class="spip">Par exemple, la commande « <strong class="spip"> route </strong> » mettra plusieurs secondes pour afficher le résultat alors que celui-ci devrait être instantané.</p>

<p class="spip">La commande « <strong class="spip">ping </strong> »<strong class="spip"> </strong>en utilisant un nom (ex : ping monserveur) et non pas une adresse IP, mettra également de longues secondes avant d’afficher le résultat suivant :</p>

<p class="spip"><code class='spip_code' dir='ltr'># ping monserveur</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>ping: unknown host pglinux</code></p>

<p class="spip">De plus l’arrêt et le démarrage de l’ordinateur seront également très longs surtout si de nombreux services ont besoins de la résolution de noms pour fonctionner correctement.</p>

<p class="spip"><strong class="spip">Par contre si vous désactivez la configuration réseau avec la commande « ifdown eth0 », les réponses aux commandes précédentes deviennent immédiates.</strong></p>

<p class="spip">Il faut donc trouver une solution pour activer ou désactiver la configuration du réseau automatiquement si le câble réseau est branché ou pas.</p>

<h2>ifplugd -> La solution</h2>
<p class="spip">ifplugd est un démon qui détecte la présence du câble et va exécuter automatiquement les commandes « <strong class="spip"> ifdown </strong> » et « <strong class="spip"> ifup </strong> ».</p>

<p class="spip">Il faut commencer par installer le paquet :</p>

<p class="spip"><code class='spip_code' dir='ltr'># apt-get install ifplugd</code></p>

<p class="spip">Ensuite, il faut indiquer dans son fichier de configuration « <strong class="spip">/etc/default/ifplugd</strong> » l’interface à gérer :</p>

<p class="spip"><code class='spip_code' dir='ltr'>INTERFACES="eth0"</code></p>

<p class="spip">Et démarrer ou redémarrer le démon :</p>

<p class="spip"><code class='spip_code' dir='ltr'>/etc/init.d/ifplugd restart</code></p>

<p class="spip">Ensuite, il est possible d’aller voir dans les logs ce qui se passe quand le câble réseau est déconnecté puis reconnecté :</p>

<p class="spip"><code class='spip_code' dir='ltr'># tail -f /var/log/syslog</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>May 13 10:54:38 pgcoagul ifplugd(eth0)[4193]: Link beat lost.</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>May 13 10:54:45 pgcoagul ifplugd(eth0)[4193]: Link beat detected.</code></p>

<p class="spip">Normalement les commandes « <strong class="spip">ifup eth0</strong> » et « <strong class="spip">ifdown eth0</strong> » sont exécutées automatiquement par le démon « <strong class="spip"> ifplugd </strong> ».</p>

<p class="spip">Et le temps de réponse des commandes « <strong class="spip"> route </strong> » et « <strong class="spip">ping monserveur</strong> » doit être instantané.</p>

<p class="spip"><strong class="spip">ATTENTION</strong> : Il faut attendre environ 10s après avoir débranché le câble pour que la configuration de l’interface soit désactivée.</p>

<h2>Problème au démarrage</h2>
<p class="spip">La configuration précédente fonctionne parfaitement tant que l’ordinateur est allumé. Mais au démarrage de l’ordinateur, l’interface réseau est démarrée même si le câble est débranché. Cela peut allonger considérablement le temps de démarrage de l’ordinateur.</p>

<p class="spip">Pour corriger ce problème, il faut simplement indiquer que l’interface réseau ne doit pas être activée automatiquement au démarrage de l’ordinateur. Dans ce cas, c’est le démon « <strong class="spip"> ifplugd </strong> » qui déterminera s’il faut activer ou pas l’interface.</p>

<p class="spip">Pour cela, il faut simplement supprimer ou commenter la ligne suivante du fichier « <strong class="spip">/etc/network/interfaces</strong> » :</p>

<p class="spip"><code class='spip_code' dir='ltr'>#auto eth0</code></p>

<h2>Liens pour avoir plus d’informations</h2>
<p class="spip">La documentation Debian est très bien faite, complète et en français sur le sujet : 
<br /></p>
<li> <a href="http://www.debian.org/doc/manuals/reference/ch-gateway.fr.html" class="spip_out">http://www.debian.org/doc/manuals/reference/ch-gateway.fr.html</a>
<h2>Historique des modifications</h2>
<table class="spip">
<thead><tr class='row_first'><th scope='col'><strong class="spip">Version</strong></th><th scope='col'><strong class="spip">Date</strong></th><th scope='col'><strong class="spip">Commentaire</strong></th></tr></thead>
<tbody>
<tr class="row_even"><td>0.1</td><td>16/05/05</td><td>Création par Tony GALMICHE</td></tr>
<tr class="row_odd"><td> </td><td> </td><td> </td></tr>
</tbody>
</table>