                       Alias IP avec FreeBSD 2.x

  Ben Black

   Copyright (c) 1999 Groupe de Documentation de FreeBSD. Tous droits
   reserves.

   <black@cypher.net>

   La redistribution du code source (SGML), modifie ou non, et
   compile (HTML, PostScript, etc.) est soumise aux conditions
   suivantes :

    1. Le copyright ci-dessus, la presente liste de conditions et
       l'avertissement qui la suit doivent figurer dans le code
       source.

    2. Le code source distribue sous forme compilee doit faire
       apparaitre le copyright ci-dessus, la presente liste de
       conditions et l'avertissement qui la suit.

   CE DOCUMENT EST FOURNI ``TEL QU'EN L'ETAT'' PAR LE PROJET DE
   DOCUMENTATION FRANC,AISE DE FreeBSD ET IL N'EST DONNE AUCUNE
   GARANTIE, IMPLICITE OU EXPLICITE, QUANT A SON UTILISATION
   COMMERCIALE, PROFESSIONNELLE OU AUTRE. LES COLLABORATEURS DU
   PROJET DE DOCUMENTATION FRANC,AISE DE FreeBSD NE PEUVENT EN AUCUN
   CAS ETRE TENUS POUR RESPONSABLES DE QUELQUE DOMMAGE OU PREJUDICE
   DIRECT, INDIRECT, SECONDAIRE OU ACCESSOIRE (Y COMPRIS LES PERTES
   FINANCIeRES DUES AU MANQUE A GAGNER, A L'INTERRUPTION D'ACTIVITES,
   OU LA PERTE D'INFORMATIONS ET AUTRES) DECOULANT DE L'UTILISATION
   DE LA DOCUMENTATION OU DE L'IMPOSSIBILITE D'UTILISER CELLE-CI, ET
   DONT L'UTILISATEUR ACCEPTE L'ENTIERE RESPONSABILITE.

   Version franc,aise de Frederic Haby
   <frederic.haby@mail.dotcom.fr>.

     --------------------------------------------------------------

1. Introduction

   Definir des alias IP consiste `a affecter plus d'une adresse IP `a
   une interface reseau. Les alias IP sont typiquement employes pour
   heberger des serveurs Web et FTP virtuels et pour reorganiser ses
   serveurs sans avoir `a mettre `a jour d'autres machines (ce
   dernier usage est particulierement utile avec les serveurs de noms
   de domaines). Voyez un alias IP comme un petit enfant perche sur
   le dos de son interface parente (qui est l'adresse primaire de
   l'interface physique).

   Les alias IP n'ont rien `a voir avec la notion de
   multi-hebergement - ``multi-homing'' (lorsqu'une machine dispose
   de plus d'une interface reseau active), sauf au cas ou une machine
   sur plusieurs reseaux fournit des services tels que ceux listes
   plus haut. La confusion entre les deux notions est une erreur
   propagee du monde Macintosh et vous seriez avise de ne pas les
   suivre sur ce point.

   Il y a deux commandes essentielles `a la mise en place d'alias IP
   sur FreeBSD (et sur tous les autres systemes Unix que j'aie jamais
   utilises), ce sont ifconfig et route. L'utilisation correcte de
   ces commandes est decrite ci-dessous. Pour connaitre toutes les
   subtilites de leur emploi, reportez-vous aux pages de manuel
   correspondantes. Il y a deux autres commandes utiles pour verifier
   que tout fonctionne comme il se doit et pour mettre les choses au
   point si ce n'est pas le cas. netstat vous permet de consulter la
   table de routage du noyau (entre autres choses utiles), et ping
   est un appreciable petit outil pour tester l'acces `a votre nouvel
   alias (comme `a toute autre adresse IP).

     Important : Vous devez etre en session sous le compte
     super-utilisateur root pour pouvoir executer la plupart des
     commandes decrites dans ce qui suit.

     --------------------------------------------------------------

2. Utiliser ifconfig

   ifconfig sert `a configurer les differentes caracteristiques d'une
   interface reseau (adresse, protocole, masque de reseau, etc.).
   ifconfig nous servira ici `a ajouter (et parfois `a supprimer) les
   adresses des alias des interfaces.

   Dans l'exemple ci-dessous, nous supposerons que notre machine n'a
   qu'une seule interface Ethernet 3Com 3C509 (ep0) d'adresse
   192.168.57.82 avec comme masque de sous-reseau 255.255.255.0, en
   plus de l'interface ``en boucle'' standard 127.0.0.1. Vous devrez
   bien sur remplacer ces valeurs par l'adresse et le masque de
   sous-reseau de votre(vos) interface(s). L'adresse et le masque de
   sous-reseau de l'interface ``en boucle'' sont les memes sur toutes
   les machines.

   Pour ajouter un alias `a ep0, nous passons simplement une commande
   du style:

 # ifconfig ep0 inet 192.168.57.10 netmask 255.255.255.255 alias

   Ce qui dit `a FreeBSD que nous definissons une adresse IP (inet)
   pour la carte 3Com (ep0) avec comme adresse 192.168.57.10, comme
   masque de sous-reseau (netmask) 255.255.255.255 (i.e., tous les
   bits `a 1) pour eviter que le systeme d'exploitation ne proteste
   qu'il y a dej`a une adresse affectee `a cette interface, et que
   c'est un alias pour cette interface (alias).

   Vous pouvez aussi omettre le masque de sous-reseau (ou lui donner
   une autre valeur). Jusqu'`a FreeBSD 2.1.0 compris, il y a
   neanmoins un bogue qui fait que les commandes ifconfig alias
   echouent `a la premiere tentative, mais reussissent `a la seconde,
   si vous n'indiquez pas 255.255.255.255 comme masque de
   sous-reseau. Si vous ne donnez pas ce masque de sous-reseau de
   255.255.255.255, vous devrez aussi ajouter une route manuellement,
   comme decrit ci-dessous.

   Pour supprimer l'alias, nous executons une commande tres
   similaire:

 # ifconfig ep0 inet 192.168.57.10 -alias

   Il n'y a pas besoin de parametres supplementaires, tels que le
   masque de sous-reseau, parce que l'alias est entierement defini
   par l'adresse IP, de sorte que FreeBSD peut supprimer toutes les
   ressources associees en se basant sur cette adresse.

     --------------------------------------------------------------

3. Utiliser route

   route sert `a modifier `a la main la table de routage du noyau.
   Pour nos besoins, une fois que nous avons donne `a FreeBSD l'alias
   pour l'interface, nous devons definir une route IP vers cet alias.
   Si vous avez precise le masque de sous-reseau de 255.255.255.255
   avec la commande precedente, vous pouvez vous dispenser de cette
   etape.

   Pour ajouter une route vers notre nouvelle interface, nous
   executons:

 # route add -host 192.168.57.10 127.0.0.1 0

   Cela dit `a FreeBSD que pour arriver `a la machine 192.168.57.10,
   les paquets doivent etre envoyes sur l'interface ``en boucle''
   (127.0.0.1 aussi appelee localhost et que la distance (decompte de
   noeuds intermediaires) est de 0, ce qui signifie que c'est la
   machine locale.

   Pour supprimer cette route, nous executons:

 # route delete -host 192.168.57.10

   De nouveau, comme la route est entierement definie par les
   parametres indiques, nous pouvons laisser de cote les autres
   donnees telles que le masque de sous-reseau et la distance. Pour
   des informations completes sur la commande route, voyez les pages
   de manuel.

     --------------------------------------------------------------

4. Tester notre travail

   Maintenant que nous avons (esperons-le) un alias defini et
   accessible, nous devons verifier qu'il fonctionne correctement.
   Nous examinerons d'abord la table de routage du noyau, pour
   verifier que la route vers l'alias est bien presente, puis nous
   utiliserons ping pour nous assurer que des paquets peuvent
   l'atteindre.

   Pour voir la table de routage du noyau, sous forme numerique,
   tapons:

 % netstat -nr

   Dans notre exemple, voici `a quoi ressemblerait le resultat:

 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
    

   Nous y voyons la route par defaut, la route vers l'interface ``en
   boucle'', la route vers notre reseau local et une curieuse route
   vers notre alias. Le /32 qui suit l'adresse de l'alias donne la
   longueur du masque de sous-reseau (le nombre de 1, en partant de
   la gauche). Comme nous avons utilise un masque de sous-reseau de
   255.255.255.255, la longueur de celui-ci (le nombre de 1) est de
   32.

   Maintenant que nous avons verifie que la route est bien dans la
   table de routage du noyau, nous pouvons effectuer un controle
   rapide pour nous assurer que cette route fonctionne bien.
   Executons une commande ping comme ci-dessous:

 % ping 192.168.57.10

   Si tout va bien, voici ce que nous verrions:

 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
    

   Appuyons simplement sur Ctrl-C pour arreter ping si tout parait
   satisfaisant. Il nous ``crachera'' 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 debut et lisez les pages de manuel (non, vraiment, allez
   lire les pages de manuel), et, finalement, posez vos questions sur
   la liste de diffusion pour les questions d'ordre general `a propos
   de FreeBSD.

     --------------------------------------------------------------

5. Tout mettre en place

   Maintenant que nous avons compris comment utiliser les commandes
   ifconfig et route pour ajouter et supprimer des alias IP, faisons
   en sorte que la machine execute les commandes voulues au demarrage
   de fac,on `a ce que l'alias soit toujours actif.

   Vers la fin de notre fichier /etc/rc.local, nous ajouterons la
   ligne:

 ifconfig ep0 inet 192.168.57.10 netmask 255.255.255.255 alias
    

   Si nous utilisons un autre masque de sous-reseau que
   255.255.255.255, nous devrons aussi utiliser la commande route
   comme explique plus haut. Il est possible d'ajouter de cette
   fac,on autant d'alias que l'on veut (en supposant que nous
   disposons de suffisamment d'adresses allouees). Il suffit de
   mettre plusieurs commandes comme la precedente dans /etc/rc.local,
   avec les adresses appropriees. Il est meme possible de definir
   comme alias des adresses d'un autre reseau IP, si ce reseau est
   aussi route sur nous. C'est une situation differente de celle
   d'une machine avec plusieurs interfaces physiques qui doivent
   toujours avoir des adresses sur des reseaux IP differents.

   Il y a un certains nombre de points `a connaitre lorsque l'on
   utilise un grand nombre d'alias (plus de ~10), que je citerai.

   Tout d'abord, il y a un bogue dans toutes les distributions de
   bind (le serveur DNS named fait partie de BIND) qui empeche le
   demarrage correct de named lorsqu'il y a plus de 64 alias sur une
   interface. Il n'y a pas de palliatif particulierement simple, je
   ne les mentionnerai donc pas ici.

   En second lieu, pour eviter de truffer votre fichier /etc/rc.local
   de quantite d'ifconfig, je vous suggere d'utiliser un fichier `a
   part dans /etc pour les y mettre. Creez par exemple un fichier
   ifconfig.ep0 et mettez-y tous les ifconfig alias. Puis dans
   /etc/rc.local, ajoutez les lignes suivantes:

 if [ -x /sbin/ifconfig ]; then
         echo -n 'Adding local ifconfigs '
         . /etc/ifconfig.ep0
         echo ' done.'
 fi
    

   Ce fragment de procedure provient d'un fichier /etc/rc.local
   fourni par Neil Fowler Wright <neil@corpex.com>. Le bricoleur
   trouvera moyen d'y mettre des boucles s'il y a plusieurs
   interfaces dont les alias sont definis dans differents fichiers
   ifconfig.*.

     --------------------------------------------------------------

6. Ou trouver plus d'aide

   M'envoyer directement un courrier electronique n'est probablement
   pas le meilleur moyen d'obtenir de l'aide sur les problemes
   d'alias IP. Je suis assez occupe la plupart du temps, et ai
   tendance `a devenir assez rouspeteur. Neanmoins, les participants
   de la liste de diffusion pour les questions d'ordre general `a
   propos de FreeBSD sont amicaux et secourables et repondront `a vos
   questions plus rapidement que je ne le ferais.

   Cette page a grandement beneficie des suggestions de Neil Fowler
   Wright, Paul DuBois, Gabe Schuyler, et de Brodie le chat.

     --------------------------------------------------------------

        Ce document, ainsi que d'autres peut etre telecharge sur
                   ftp.FreeBSD.org/pub/FreeBSD/doc/.

Pour toutes questions `a propos de FreeBSD, lisez la documentation avant
                 de contacter <questions@FreeBSD.org>.
Pour les questions sur cette documentation, contactez <doc@FreeBSD.org>.
