<!--
     The FreeBSD Documentation Project
     The FreeBSD French Documentation Project

     $FreeBSD: doc/fr_FR.ISO8859-1/articles/ip-aliasing/article.sgml,v 1.4 2001/07/13 15:48:39 nik Exp $
     Original revision: n.nn
-->   

<!DOCTYPE ARTICLE PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN"> %man;
<!ENTITY % urls PUBLIC "-//FreeBSD//ENTITIES Common Document URL Entities//FR"> %urls;
<!ENTITY % abstract PUBLIC "-//FreeBSD//ENTITIES DocBook Abstract Entities//FR"> %abstract;
<!ENTITY % artheader PUBLIC "-//FreeBSD//ENTITIES DocBook ArtHeader Entities//FR"> %artheader;
<!ENTITY % translators PUBLIC "-//FreeBSD//ENTITIES DocBook Translator Entities//FR"> %translators;

<!ENTITY % authors PUBLIC "-//FreeBSD//ENTITIES DocBook Author Entities//EN"> %authors;
<!ENTITY % mailing-lists PUBLIC "-//FreeBSD//ENTITIES DocBook Mailing List Entities//FR"> %mailing-lists;
 <!ENTITY rel.current CDATA "3.2">
]>

<article lang="fr">
  <articleinfo>
    <title>Alias IP avec FreeBSD 2.x</title>
    <authorgroup>
      <author>
        <firstname>Ben</firstname>
        <surname>Black</surname>
      </author>
    </authorgroup>
    &artheader.copyright;
    <abstract>
      <para><email>black@cypher.net</email></para>
      &abstract.license;
      &abstract.disclaimer;
      &trans.a.haby;
    </abstract>
  </articleinfo>
  <sect1>
    <title>Introduction</title>
    <para>D&eacute;finir des <emphasis>alias IP</emphasis> consiste &agrave; affecter plus 
      d'une adresse IP &agrave; une interface r&eacute;seau. Les alias IP sont typiquement
      employ&eacute;s pour h&eacute;berger des serveurs Web et FTP virtuels et pour 
      r&eacute;organiser ses serveurs sans avoir &agrave; mettre &agrave; jour d'autres machines
      (ce dernier usage est particuli&egrave;rement utile avec les serveurs de noms
      de domaines). Voyez un alias IP comme un petit enfant perch&eacute; sur le 
      dos de son interface parente (qui est l'adresse primaire de l'interface
      physique).</para>
    <para>Les alias IP <emphasis>n'ont rien &agrave; voir</emphasis> avec la notion
      de <emphasis>multi-h&eacute;bergement</emphasis>&nbsp;-&nbsp;&ldquo;<foreignphrase>multi-homing</foreignphrase>&rdquo; 
      (lorsqu'une machine dispose de plus d'une interface r&eacute;seau active), sauf
      au cas o&ugrave; une machine sur plusieurs r&eacute;seaux fournit des services tels que
      ceux list&eacute;s plus haut. La confusion entre les deux notions est une erreur
      propag&eacute;e du monde Macintosh et vous seriez avis&eacute; de ne pas les suivre sur
      ce point.</para>
    <para>Il y a deux commandes essentielles &agrave; la mise en place d'alias IP sur
      FreeBSD (et sur tous les autres syst&egrave;mes Unix que j'aie jamais utilis&eacute;s),
      ce sont <command>ifconfig</command> et <command>route</command>. 
      L'utilisation correcte de ces commandes est d&eacute;crite ci-dessous. Pour 
      conna&icirc;tre toutes les subtilit&eacute;s de leur emploi, reportez-vous aux pages de
      manuel correspondantes. Il y a deux autres commandes utiles pour v&eacute;rifier
      que tout fonctionne comme il se doit et pour mettre les choses au point
      si ce n'est pas le cas. <command>netstat</command> vous permet de 
      consulter la table de routage du noyau (entre autres choses utiles), et
      ping est un appr&eacute;ciable petit outil pour tester l'acc&egrave;s &agrave; votre nouvel
      alias (comme &agrave; toute autre adresse IP).</para>
    <important>
      <para>Vous <emphasis>devez</emphasis> &ecirc;tre en session sous le compte
        super-utilisateur <username>root</username> pour pouvoir ex&eacute;cuter la
        plupart des commandes d&eacute;crites dans ce qui suit.</para>
    </important>
  </sect1>
  <sect1>
    <title>Utiliser <command>ifconfig</command></title>
    <para><citerefentry><refentrytitle>ifconfig</refentrytitle></citerefentry>
      sert &agrave; configuer les diff&eacute;rentes caract&eacute;ristiques d'une interface r&eacute;seau
      (adresse, protocole, masque de r&eacute;seau, etc.). 
      <citerefentry><refentrytitle>ifconfig</refentrytitle></citerefentry> nous
      servira ici &agrave; ajouter (et parfois &agrave; supprimer) les adresses des alias des
      interfaces.</para>
    <para>Dans l'exemple ci-dessous, nous supposerons que notre machine n'a 
      qu'une seule interface Ethernet 3Com 3C509 (<devicename>ep0</devicename>)
      d'adresse <hostid role="ipaddr">192.168.57.82</hostid> avec comme masque
      de sous-r&eacute;seau <hostid role="netmask">255.255.255.0</hostid>, en plus
      de l'interface &ldquo;en boucle&rdquo; standard 
      <hostid role="ipaddr">127.0.0.1</hostid>. Vous devrez bien s&ucirc;r remplacer
      ces valeurs par l'adresse et le masque de sous-r&eacute;seau de votre(vos)
      interface(s). L'adresse et le masque de sous-r&eacute;seau de l'interface 
      &ldquo;en boucle&rdquo; sont les m&ecirc;mes sur toutes les machines.</para>
    <para>Pour ajouter un alias &agrave; <devicename>ep0</devicename>, nous passons
      simplement une commande du style:</para>
    <informalexample>
<screen>&prompt.root; <userinput>ifconfig ep0 inet 192.168.57.10 netmask 255.255.255.255 alias</userinput></screen>
    </informalexample>
    <para>Ce qui dit &agrave; FreeBSD que nous d&eacute;finissons une adresse IP 
      (<literal>inet</literal>) pour la carte 3Com 
      (<devicename>ep0</devicename>) avec comme adresse
      <hostid role="ipaddr">192.168.57.10</hostid>, comme masque de 
      sous-r&eacute;seau (<literal>netmask</literal>)
      <hostid role="netmask">255.255.255.255</hostid> (i.e., tous
      les bits &agrave; 1) pour &eacute;viter que le syst&egrave;me d'exploitation ne proteste qu'il
      y a d&eacute;j&agrave; une adresse affect&eacute;e &agrave; cette interface, et que c'est un alias 
      pour cette interface (<literal>alias</literal>).</para>
    <para>Vous pouvez aussi omettre le masque de sous-r&eacute;seau (ou lui donner une
      autre valeur). Jusqu'&agrave; FreeBSD 2.1.0 compris, il y a n&eacute;anmoins un bogue
      qui fait que les commandes <command>ifconfig alias</command> &eacute;chouent &agrave;
      la premi&egrave;re tentative, mais r&eacute;ussissent &agrave; la seconde, si vous n'indiquez
      pas <hostid role="netmask">255.255.255.255</hostid> comme masque de
      sous-r&eacute;seau. Si vous ne donnez pas ce masque de sous-r&eacute;seau de
      <hostid role="netmask">255.255.255.255</hostid>, vous devrez aussi ajouter
      une route manuellement, comme d&eacute;crit ci-dessous.</para>
    <para>Pour supprimer l'alias, nous ex&eacute;cutons une commande tr&egrave;s 
      similaire:</para>
    <informalexample>
<screen>&prompt.root; <userinput>ifconfig ep0 inet 192.168.57.10 -alias</userinput></screen>
    </informalexample>
    <para>Il n'y a pas besoin de param&egrave;tres suppl&eacute;mentaires, tels que le masque
      de sous-r&eacute;seau, parce que l'alias est enti&egrave;rement d&eacute;fini par l'adresse IP,
      de sorte que FreeBSD peut supprimer toutes les ressources associ&eacute;es en se
      basant sur cette adresse.</para>
 </sect1>
 <sect1>
    <title>Utiliser <command>route</command></title>
    <para><citerefentry><refentrytitle>route</refentrytitle></citerefentry> sert
      &agrave; modifier &agrave; la main la table de routage du noyau. Pour nos besoins, une
      fois que nous avons donn&eacute; &agrave; FreeBSD l'alias pour l'interface, nous devons
      d&eacute;finir une route IP vers cet alias. Si vous avez pr&eacute;cis&eacute; le masque de
      sous-r&eacute;seau de <hostid role="netmask">255.255.255.255</hostid> avec la
      commande pr&eacute;c&eacute;dente, vous pouvez vous dispenser de cette &eacute;tape.</para>
    <para>Pour ajouter une route vers notre nouvelle interface, nous 
      ex&eacute;cutons:</para>
    <informalexample>
<screen>&prompt.root; <userinput>route add -host 192.168.57.10 127.0.0.1 0</userinput></screen>
    </informalexample>
    <para>Cela dit &agrave; FreeBSD que pour arriver &agrave; la machine 
      <hostid role="ipaddr">192.168.57.10</hostid>, les paquets doivent &ecirc;tre
      envoy&eacute;s sur l'interface &ldquo;en boucle&rdquo;
      (<hostid role="ipaddr">127.0.0.1</hostid> aussi appel&eacute;e
      <hostid role="hostname">localhost</hostid> et que la distance (d&eacute;compte
      de noeuds interm&eacute;diaires) est de <literal>0</literal>, ce qui signifie
      que c'est la machine locale.</para>
    <para>Pour supprimer cette route, nous ex&eacute;cutons:</para>
    <informalexample>
<screen>&prompt.root; <userinput>route delete -host 192.168.57.10</userinput></screen>
    </informalexample>
    <para>De nouveau, comme la route est enti&egrave;rement d&eacute;finie par les param&egrave;tres
      indiqu&eacute;s, nous pouvons laisser de c&ocirc;t&eacute; les autres donn&eacute;es telles que 
      le masque de sous-r&eacute;seau et la distance. Pour des informations compl&egrave;tes
      sur la commande 
      <citerefentry><refentrytitle>route</refentrytitle></citerefentry>,
      voyez les pages de manuel.</para>
  </sect1> 
  <sect1>
    <title>Tester notre travail</title>
    <para>Maintenant que nous avons (esp&eacute;rons-le) un alias d&eacute;fini et accessible,
      nous devons v&eacute;rifier qu'il fonctionne correctement. Nous examinerons 
      d'abord la table de routage du noyau, pour v&eacute;rifier que la route vers
      l'alias est bien pr&eacute;sente, puis nous utiliserons 
      <citerefentry><refentrytitle>ping</refentrytitle></citerefentry> pour
      nous assurer que des paquets peuvent l'atteindre.</para>
    <para>Pour voir la table de routage du noyau, sous forme num&eacute;rique, 
      tapons:</para>
    <informalexample>
<screen>&prompt.user; <userinput>netstat -nr</userinput></screen>
    </informalexample>
    <para>Dans notre exemple, voici &agrave; quoi ressemblerait le r&eacute;sultat:</para>
    <programlisting>
Routing tables

Internet:
Destination        Gateway            Flags     Refs     Use     Netif Expire
default            192.168.57.1       UGSc        4      964       ep0
127.0.0.1          127.0.0.1          UH          1       39       lo0
192.168.57         link#2             UC          0        0
192.168.57.10/32   link#2             UC          0        0
192.168.57.82      127.0.0.1          UGHS        0        0       lo0
224/4              link#2             UCS         0        0
    </programlisting>
    <para>Nous y voyons la route par d&eacute;faut, la route vers l'interface
      &ldquo;en boucle&rdquo;, la route vers notre r&eacute;seau local et une curieuse
      route vers notre alias. Le <literal>/32</literal> qui suit l'adresse de
      l'alias donne la longueur du masque de sous-r&eacute;seau (le nombre de 1, en
      partant de la gauche). Comme nous avons utilis&eacute; un masque de sous-r&eacute;seau  
      de <hostid role="netmask">255.255.255.255</hostid>, la longueur de 
      celui-ci (le nombre de 1) est de 32.</para>
    <para>Maintenant que nous avons v&eacute;rifi&eacute; que la route est bien dans la table
      de routage du noyau, nous pouvons effectuer un contr&ocirc;le rapide pour nous
      assurer que cette route fonctionne bien. Ex&eacute;cutons une commande
      <citerefentry><refentrytitle>ping</refentrytitle></citerefentry> comme
      ci-dessous:</para>
    <informalexample>
<screen>&prompt.user; <userinput>ping 192.168.57.10</userinput></screen>
    </informalexample>
    <para>Si tout va bien, voici ce que nous verrions:</para>
    <programlisting>
PING 192.168.57.10 (192.168.57.10): 56 data bytes
64 bytes from 192.168.57.10: icmp_seq=0 ttl=255 time=0.313 ms
64 bytes from 192.168.57.10: icmp_seq=1 ttl=255 time=0.197 ms
64 bytes from 192.168.57.10: icmp_seq=2 ttl=255 time=0.190 ms
    </programlisting>
    <para>Appuyons simplement sur 
      <keycombo><keycap>Ctrl</keycap><keycap>C</keycap></keycombo> pour arr&ecirc;ter
      <citerefentry><refentrytitle>ping</refentrytitle></citerefentry> si tout
      para&icirc;t satisfaisant. Il nous &ldquo;crachera&rdquo; alors quelques 
      statistiques, que nous pouvons normalement ignorer. S'il n'y a pas de
      retour ou s'il y a des messages d'erreur, quelque chose ne va pas.
      Reprenez tout du d&eacute;but et lisez les pages de manuel (non, vraiment,
      <emphasis>allez lire les pages de manuel</emphasis>), et, finalement,
      posez vos questions sur la &a.questions;.</para>
  </sect1>
  <sect1>
    <title>Tout mettre en place</title>
    <para>Maintenant que nous avons compris comment utiliser les commandes
      <citerefentry><refentrytitle>ifconfig</refentrytitle></citerefentry> et
      <citerefentry><refentrytitle>route</refentrytitle></citerefentry> pour
      ajouter et supprimer des alias IP, faisons en sorte que la machine
      ex&eacute;cute les commandes voulues au d&eacute;marrage de fa&ccedil;on &agrave; ce que l'alias soit
      toujours actif.</para>
    <para>Vers la fin de notre fichier <filename>/etc/rc.local</filename>, nous
      ajouterons la ligne:</para>
    <programlisting>
ifconfig ep0 inet 192.168.57.10 netmask 255.255.255.255 alias
    </programlisting>
    <para>Si nous utilisons un autre masque de sous-r&eacute;seau que
      <hostid role="netmask">255.255.255.255</hostid>, nous devrons aussi 
      utiliser la commande 
      <citerefentry><refentrytitle>route</refentrytitle></citerefentry> comme
      expliqu&eacute; plus haut. Il est possible d'ajouter de cette fa&ccedil;on autant 
      d'alias que l'on veut (en supposant que nous disposons de suffisamment
      d'adresses allou&eacute;es). Il suffit de mettre plusieurs commandes comme
      la pr&eacute;c&eacute;dente dans <filename>/etc/rc.local</filename>, avec les adresses
      appropri&eacute;es. Il est m&ecirc;me possible de d&eacute;finir comme alias des adresses
      d'un autre r&eacute;seau IP, si ce r&eacute;seau est aussi rout&eacute; sur nous. C'est une
      situation diff&eacute;rente de celle d'une machine avec plusieurs interfaces
      <emphasis>physiques</emphasis> qui doivent <emphasis>toujours</emphasis> 
      avoir des adresses sur des r&eacute;seaux IP diff&eacute;rents.</para>
    <para>Il y a un certains nombre de points &agrave; conna&icirc;tre lorsque l'on utilise
      un grand nombre d'alias (plus de ~10), que je citerai.</para>
    <para>Tout d'abord, il y a un bogue dans toutes les distributions de
      <application>bind</application> (le serveur DNS 
      <application>named</application> fait partie de 
      <application>BIND</application>) qui emp&ecirc;che le d&eacute;marrage correct de
      <application>named</application> lorsqu'il y a plus de 64 alias sur
      une interface. Il n'y a pas de palliatif particuli&egrave;rement simple, je ne
      les mentionnerai donc pas ici.</para>
    <para>En second lieu, pour &eacute;viter de truffer votre fichier
      <filename>/etc/rc.local</filename> de quantit&eacute; 
      d'<citerefentry><refentrytitle>ifconfig</refentrytitle></citerefentry>, je
      vous sugg&egrave;re d'utiliser un fichier &agrave; part dans <filename>/etc</filename>
      pour les y mettre. Cr&eacute;ez par exemple un fichier 
      <filename>ifconfig.ep0</filename> et mettez-y tous les 
      <literal>ifconfig alias</literal>. Puis dans
      <filename>/etc/rc.local</filename>, ajoutez les lignes suivantes:</para>
    <programlisting>
if [ -x /sbin/ifconfig ]; then
        echo -n 'Adding local ifconfigs '
        . /etc/ifconfig.ep0
        echo ' done.'
fi
    </programlisting>
    <para>Ce fragment de proc&eacute;dure provient d'un fichier
      <filename>/etc/rc.local</filename> fourni par Neil Fowler Wright 
      <email>neil@corpex.com</email>. Le bricoleur trouvera moyen d'y mettre
      des boucles s'il y a plusieurs interfaces dont les alias sont d&eacute;finis
      dans diff&eacute;rents fichiers <filename>ifconfig.*</filename>.</para>
  </sect1>
  <sect1>
    <title>O&ugrave; trouver plus d'aide</title>
    <para>M'envoyer directement un courrier &eacute;lectronique n'est probablement pas
      le meilleur moyen d'obtenir de l'aide sur les probl&egrave;mes d'alias IP. Je 
      suis assez occup&eacute; la plupart du temps, et ai tendance &agrave; devenir assez
      rousp&eacute;teur. N&eacute;anmoins, les participants de la &a.questions; sont
      amicaux et secourables et r&eacute;pondront &agrave; vos questions plus rapidement que
      je ne le ferais.</para>
    <para>Cette page a grandement b&eacute;n&eacute;fici&eacute; des suggestions de Neil Fowler 
      Wright, Paul DuBois, Gabe Schuyler, et de Brodie le chat.</para>
  </sect1>
</article>
