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 m�me
   interface r�seau.)

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

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� d�sapprouv� dans les 2.4.x et remplac� par un
       m�canisme 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
       plut�t l'option IP Aliasing). V�rifiez dans le HOW-TO sur les modules
       (s'il existe), ou v�rifiez dans le fichier
       /usr/src/linux/Documentation/modules.txt.

     * Je dois fournir 2 adresses IP en plus de celle qui m'est d�j�
       attribu�e.

     * Un adaptateur de poche D-Link DE620 (ce n'est pas important, cela
       fonctionne avec n'importe quel adaptateur r�seau 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 num�ros IP, en
       commen�ant par le num�ro 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 num�ro IP principal, alors que .10 et .100 sont les
       aliases. La magie vient de eth0:x, o� x=0,1,3,...n pour les diff�rents
       num�ros IP. Le num�ro IP principal n'a pas besoin d'alias.

    3. Configurez les routes. D'abord la route pour l'interface loopback,
       puis le r�seau, et finalement les divers num�ros IP en commen�ant par
       celui par d�faut (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 num�ros IP priv�s (RFC 1918) dans
   un but d'illustration. Remplacez-les par vos propres num�ros IP, officiels
   ou priv�s.

   L'exemple ne montre que 3 num�ros IP. Le maximum est d�fini � 256 dans
   /usr/include/linux/net_alias.h. 256 num�ros 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 s�r, les donn�es de /proc/net ont �t� cr��es par la commande
   ifconfig, et non � la main!

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

Probl�mes: Questions et R�ponses

  Question: Comment garder la configuration apr�s un red�marrage?

   R�ponse: que vous utilisiez un init � la mani�re BSD ou � la mani�re SysV
   (RedHat par exemple), vous pouvez toujours inclure cela dans
   /etc/rc.d/rc.local. Voici ce que j'ai dans mon syst�me init SysV (RedHat
   3.0.3 et 4.0):

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

 # 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
  num�ros IP?

   R�ponse: Cr�er (s'il n'existe pas d�j�) un fichier appel�, par exemple,
   /etc/mes_noms.cw. Il ne doit pas forc�mement s'appeler ainsi, ni se
   trouver dans le repertoire /etc directory.

   Dans ce fichier, placer les noms officiels des num�ros alias IP. Si ces
   num�ros n'ont pas de nom dans un domaine, alors vous pouvez indiquer le
   num�ro IP lui-m�me.

   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 d�finit une macro de
   classe fichier Fw, ajoutez:


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


 # fichier contenant les noms des h�tes pour lesquels on re�oit du courrier
 Fw/etc/mes_noms.cw


   Cela devrait suffire. Testez votre nouvelle configuration en lan�ant
   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 r�ponse correcte.

   Tout est configur� maintenant.

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

Remerciements

   Merci � tous ceux qui ont fait ce travail grandiose sur Linux et
   l'Aliasing IP. Et particuli�rement � 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 am�liorations, envoyez moi un courrier �lectronique �:
   <[2]h.pillay@ieee.org>. (NDT: l'auteur n'�tant probablement pas
   francophone, pensez � r�diger vos courriers en anglais...)

   Amusez-vous bien.

   Pour plus d'information � propos de r�seau, vous pouvez consulter le
   [3]Linux Networking Overview HOWTO (NDT: pour la version fran�aise:
   [4]Possibilit�s r�seau de Linux HOWTO).