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

Harish Pillay, h.pillay@ieee.org
Version Franaise par Laurent Caillat-Vallet, caillat@univ-lyon1.fr

   13 Janvier 1997
     _________________________________________________________________

   _C'est une recette de cuisine pour configurer et utiliser l'aliasing
   IP sous Linux._
     _________________________________________________________________

1. Synopsis

   C'est une recette de cuisine sur la manire de configurer et
   d'utiliser l'aliasing IP sur une machine Linux. De plus, il y a des
   instructions pour configurer la machine pour recevoir du courrier
   lectronique sur les numros alias IP.
   (NDT: l'aliasing IP permet d'associer plusieurs adresses IP sur la
   mme interface rseau.)

2. Ma configuration

     * le dernier noyau (2.0.27 - depuis
       ftp.funet.fi:/pub/Linux/kernel/src/v2.0) cela fonctionne depuis
       les noyaux 1.3.7x.
     * Aliasing IP compil en module chargeable. Vous auriez du indiquer
        la commande "make config", pour compiler 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).

3. Commandes

     * Premirement, 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

     * Deuximement, 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, ou x=0,1,3,...n pour les
       diffrents numros IP. Le numro IP principal n'a pas besoin
       d'alias.
     * Troisimement, configurez les routes. D'abord la route pour
       l'interface loopback, puis le rseau, et finalement les numros IP
       varis 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 :-) !

   Voila  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!

4. Questions

4.1 Comment garder la configuration aprs un reboot?

   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
#

4.2 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.
     * 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.

/etc/mes_noms.cw:
-----------------
# /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.

5. Conclusion

   J'espre que ce qui prcde sera utile  quelqu'un.

   Merci  tous ceux qui ont superbement travaill sur Linux et
   l'aliasing IP.

   Et particulirement  Juan Jose Ciarlante pour avoir clarifi mes
   questions. Merci aussi  tous ceux qui ont remarqu mes fautes de
   frappe et m'ont fourni des suggestions!

   Si vous trouvez ce document utile, ou si vous avez des suggestions
   pour des amliorations, envoyez moi un courrier lectronique :
   h.pillay@ieee.org.

   Amusez-vous bien.

   Des questions? envoyez moi un courrier lectronique 
   h.pillay@ieee.org.
