          Mini How-To sur la configuration de l'aliasing IP sous Linux

  Harish Pillay

    <[1]h.pillay@ieee.org>

   2001-01-23

   Historique des versions
   Version 1.2              2001-01-26             Revu par : JEY
   Version 1.1              2001-01-24             Revu par : JEY
   Version 1.0              1997-01-13             Revu par : HP

   C'est une recette de cuisine pour configurer et utiliser l'aliasing IP sur
   une machine Linux, et pour configurer cette machine pour recevoir du
   courrier lectronique sur les adresses IP utilisant l'aliasing. (NDT:
   l'aliasing IP permet d'associer plusieurs adresses IP sur la mme
   interface rseau.)

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

Ma configuration

     * L'aliasing IP est en standard dans les noyaux 2.0.x et 2.2.x, et
       disponible en option de compilation dans les versions 2.4.x.
       (L'aliasing IP a t dsapprouv dans les 2.4.x et remplac par un
       mcanisme de pare-feu plus puissant.)

     * Aliasing IP compil en module chargeable. Vous auriez du indiquer
       pendant la commande "make config", pour construire votre noyau, que
       vous voulez compiler l'option "IP Masquerade" en (M)odule. (NDT: c'est
       plutt l'option IP Aliasing). Vrifiez dans le HOW-TO sur les modules
       (s'il existe), ou vrifiez dans le fichier
       /usr/src/linux/Documentation/modules.txt.

     * Je dois fournir 2 adresses IP en plus de celle qui m'est dj
       attribue.

     * Un adaptateur de poche D-Link DE620 (ce n'est pas important, cela
       fonctionne avec n'importe quel adaptateur rseau support par Linux).

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

Commandes

    1. Chargez le module IP alias (vous pouvez sauter cette tape si vous
       avez compil ce module dans le noyau):

 /sbin/insmod /lib/modules/`uname -r`/ipv4/ip_alias.o

    2. Configurez les interfaces loopback, eth0 et tous les numros IP, en
       commenant par le numro IP principal pour l'interface eth0:

 /sbin/ifconfig lo 127.0.0.1
 /sbin/ifconfig eth0 up
 /sbin/ifconfig eth0 172.16.3.1
 /sbin/ifconfig eth0:0 172.16.3.10
 /sbin/ifconfig eth0:1 172.16.3.100

       172.16.3.1 est le numro IP principal, alors que .10 et .100 sont les
       aliases. La magie vient de eth0:x, o x=0,1,3,...n pour les diffrents
       numros IP. Le numro IP principal n'a pas besoin d'alias.

    3. Configurez les routes. D'abord la route pour l'interface loopback,
       puis le rseau, et finalement les divers numros IP en commenant par
       celui par dfaut (allou originellement):

 /sbin/route add -net 127.0.0.0
 /sbin/route add -net 172.16.3.0 dev eth0
 /sbin/route add -host 172.16.3.1 dev eth0
 /sbin/route add -host 172.16.3.10 dev eth0:0
 /sbin/route add -host 172.16.3.100 dev eth0:1
 /sbin/route add default gw 172.16.3.200

       C'est tout.

   Dans l'exemple ci-dessus, j'utilise les numros IP privs (RFC 1918) dans
   un but d'illustration. Remplacez-les par vos propres numros IP, officiels
   ou privs.

   L'exemple ne montre que 3 numros IP. Le maximum est dfini  256 dans
   /usr/include/linux/net_alias.h. 256 numros IP sur UNE carte, c'est
   beaucoup :-) !

   Voil  quoi ressemble mon /sbin/ifconfig:

 lo        Link encap:Local Loopback
                inet addr:127.0.0.1  Bcast:127.255.255.255  Mask:255.0.0.0
                          UP BROADCAST LOOPBACK RUNNING  MTU:3584  Metric:1
                     RX packets:5088 errors:0 dropped:0 overruns:0
                     TX packets:5088 errors:0 dropped:0 overruns:0

 eth0      Link encap:10Mbps Ethernet  HWaddr 00:8E:B8:83:19:20
                     inet addr:172.16.3.1  Bcast:172.16.3.255  Mask:255.255.255.0
                     UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
                     RX packets:334036 errors:0 dropped:0 overruns:0
                     TX packets:11605 errors:0 dropped:0 overruns:0
                     Interrupt:7 Base address:0x378

 eth0:0    Link encap:10Mbps Ethernet  HWaddr 00:8E:B8:83:19:20
                     inet addr:172.16.3.10  Bcast:172.16.3.255  Mask:255.255.255.0
                     UP BROADCAST RUNNING  MTU:1500  Metric:1
                     RX packets:0 errors:0 dropped:0 overruns:0
                     TX packets:0 errors:0 dropped:0 overruns:0

 eth0:1    Link encap:10Mbps Ethernet  HWaddr 00:8E:B8:83:19:20
                     inet addr:172.16.3.100  Bcast:172.16.3.255  Mask:255.255.255.0
                     UP BROADCAST RUNNING  MTU:1500  Metric:1
                     RX packets:1 errors:0 dropped:0 overruns:0
                     TX packets:0 errors:0 dropped:0 overruns:0

   Et /proc/net/aliases:

 device         family    address
 eth0:0           2      172.16.3.10
 eth0:1           2      172.16.3.100

   Et /proc/net/alias_types:

 type    name            n_attach
 2       ip              2

   Bien sr, les donnes de /proc/net ont t cres par la commande
   ifconfig, et non  la main!

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

Problmes: Questions et Rponses

  Question: Comment garder la configuration aprs un redmarrage?

   Rponse: que vous utilisiez un init  la manire BSD ou  la manire SysV
   (RedHat par exemple), vous pouvez toujours inclure cela dans
   /etc/rc.d/rc.local. Voici ce que j'ai dans mon systme init SysV (RedHat
   3.0.3 et 4.0):

   Mon /etc/rc.d/rc.local: (dit pour ne montrer que les parties
   intressantes)

 # configuration des interfaces avec IP alias
 echo "Configuration des aliases IP: 172.16.3.1, 172.16.3.10, 172.16.3.100..."
 /sbin/ifconfig lo 127.0.0.1
 /sbin/ifconfig eth0 up
 /sbin/ifconfig eth0 172.16.3.1
 /sbin/ifconfig eth0:0 172.16.3.10
 /sbin/ifconfig eth0:1 172.16.3.100
 # configuration des routes
 echo "Configuration des routes IP..."
 /sbin/route add -net 127.0.0.0
 /sbin/route add -net 172.16.3.0 dev eth0
 /sbin/route add -host 172.16.3.1 eth0
 /sbin/route add -host 172.16.3.10 eth0:0
 /sbin/route add -host 172.16.3.100 eth0:1
 /sbin/route add default gw 172.16.3.200
 #

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

  Question: Comment configurer sendmail pour recevoir des mails sur plusieurs
  numros IP?

   Rponse: Crer (s'il n'existe pas dj) un fichier appel, par exemple,
   /etc/mes_noms.cw. Il ne doit pas forcmement s'appeler ainsi, ni se
   trouver dans le repertoire /etc directory.

   Dans ce fichier, placer les noms officiels des numros alias IP. Si ces
   numros n'ont pas de nom dans un domaine, alors vous pouvez indiquer le
   numro IP lui-mme.

   Le fichier /etc/mes_noms.cw pourrait ressembler  a:

 # /etc/mes_noms.cw - inclure ici tous les aliases pour votre machine
 #                    # est un commentaire
 domaine.un.net
 domaine.deux.com
 domaine.trois.org
 4.5.6.7

   Dans votre fichier sendmail.cf,  l'endroit o on dfinit une macro de
   classe fichier Fw, ajoutez:


 ##################
 # infos locales  #
 ##################


 # fichier contenant les noms des htes pour lesquels on reoit du courrier
 Fw/etc/mes_noms.cw


   Cela devrait suffire. Testez votre nouvelle configuration en lanant
   sendmail en mode de test, par exemple:

 ganymede$ /usr/lib/sendmail -bt
 ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
 Enter < ruleset> < address>
 > 0 moi@4.5.6.7
 rewrite: ruleset  0   input: moi @ 4 . 5 . 6 . 7
 rewrite: ruleset 98   input: moi @ 4 . 5 . 6 . 7
 rewrite: ruleset 98 returns: moi @ 4 . 5 . 6 . 7
 rewrite: ruleset 97   input: moi @ 4 . 5 . 6 . 7
 rewrite: ruleset  3   input: moi @ 4 . 5 . 6 . 7
 rewrite: ruleset 96   input: moi < @ 4 . 5 . 6 . 7 >
 rewrite: ruleset 96 returns: moi < @ 4 . 5 . 6 . 7 . >
 rewrite: ruleset  3 returns: moi < @ 4 . 5 . 6 . 7 . >
 rewrite: ruleset  0   input: moi < @ 4 . 5 . 6 . 7 . >
 rewrite: ruleset 98   input: moi < @ 4 . 5 . 6 . 7 . >
 rewrite: ruleset 98 returns: moi < @ 4 . 5 . 6 . 7 . >
 rewrite: ruleset  0 returns: $# local $: moi
 rewrite: ruleset 97 returns: $# local $: moi
 rewrite: ruleset  0 returns: $# local $: moi
 < 0 moi@4.5.6.8
 rewrite: ruleset  0   input: moi @ 4 . 5 . 6 . 8
 rewrite: ruleset 98   input: moi @ 4 . 5 . 6 . 8
 rewrite: ruleset 98 returns: moi @ 4 . 5 . 6 . 8
 rewrite: ruleset 97   input: moi @ 4 . 5 . 6 . 8
 rewrite: ruleset  3   input: moi @ 4 . 5 . 6 . 8
 rewrite: ruleset 96   input: moi < @ 4 . 5 . 6 . 8 >
 rewrite: ruleset 96 returns: moi < @ 4 . 5 . 6 . 8 >
 rewrite: ruleset  3 returns: moi < @ 4 . 5 . 6 . 8 >
 rewrite: ruleset  0   input: moi < @ 4 . 5 . 6 . 8 >
 rewrite: ruleset 98   input: moi < @ 4 . 5 . 6 . 8 >
 rewrite: ruleset 98 returns: moi < @ 4 . 5 . 6 . 8 >
 rewrite: ruleset 95   input: < > moi < @ 4 . 5 . 6 . 8 >
 rewrite: ruleset 95 returns: moi < @ 4 . 5 . 6 . 8 >
 rewrite: ruleset  0 returns: $# smtp $@ 4 . 5 . 6 . 8 $: moi < @ 4 . 5 . 6 . 8 >
 rewrite: ruleset 97 returns: $# smtp $@ 4 . 5 . 6 . 8 $: moi < @ 4 . 5 . 6 . 8 >
 rewrite: ruleset  0 returns: $# smtp $@ 4 . 5 . 6 . 8 $: moi < @ 4 . 5 . 6 . 8 >
 >

   Notez que lorsque j'ai test moi@4.5.6.7, cela a envoy le mail  la
   machine locale, alors que moi@4.5.6.8 a t envoy  l'agent de transport
   smtp. C'est la rponse correcte.

   Tout est configur maintenant.

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

Remerciements

   Merci  tous ceux qui ont fait ce travail grandiose sur Linux et
   l'Aliasing IP. Et particulirement  Juan Jose Ciarlante pour avoir
   clarifi mes questions.

   Gloire aux as de la programmation!

   Si vous trouvez ce document utile, ou si vous avez des suggestions pour
   des amliorations, envoyez moi un courrier lectronique :
   <[2]h.pillay@ieee.org>. (NDT: l'auteur n'tant probablement pas
   francophone, pensez  rdiger vos courriers en anglais...)

   Amusez-vous bien.

   Pour plus d'information  propos de rseau, vous pouvez consulter le
   [3]Linux Networking Overview HOWTO (NDT: pour la version franaise:
   [4]Possibilits rseau de Linux HOWTO).
