  Mini How-To sur la configuration de l'aliasing IP sous Linux
  Harish Pillay,  h.pillay@ieee.org
  Version Francaise 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1..  SSyynnooppssiiss

  C'est  une  recette  de  cuisine  sur  la  maniere  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
  electronique sur les numeros alias IP.
  adresses IP sur la meme interface reseau.)

  22..  MMaa ccoonnffiigguurraattiioonn

  +o  le        dernier        noyau        (2.0.27        -       depuis
     ftp.funet.fi:/pub/Linux/kernel/src/v2.0) cela fonctionne depuis les
     noyaux 1.3.7x.

  +o  Aliasing IP compile en module chargeable. Vous auriez du indiquer a
     la commande "make config", pour  compiler  votre  noyau,  que  vous
     voulez  compiler  l'option  IP  masquerade  en ((MM))odule (NDT: c'est
     plutot l'option IP Aliasing).  Verifiez  dans  le  HOW-TO  sur  les
     modules    (s'il    existe),    ou   verifiez   dans   le   fichier
     /usr/src/linux/Documentation/modules.txt.

  +o  Je dois fournir 2 adresses IP en  plus  de  celle  qui  m'est  deja
     attribuee.

  +o  Un  adaptateur  de poche D-Link DE620 (ce n'est pas important, cela
     fonctionne avec  n'importe  quel  adaptateur  reseau  supporte  par
     Linux).

  33..  CCoommmmaannddeess

  +o  Premierement,  chargez le module IP alias (vous pouvez sauter cette
     etape si vous avez compile ce module dans le noyau):

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

  +o  Deuxiemement, configurez les interfaces loopback, eth0 et tous  les
     numeros   IP,  en  commencant  par  le  numero  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 numero IP principal, alors que .10 et .100 sont  les
  aliases.   La  magie vient de eth0:x, ou x=0,1,3,...n pour les differ-
  ents numeros IP.  Le numero IP principal n'a pas besoin d'alias.

  +o  Troisiemement,  configurez  les  routes.  D'abord  la  route   pour
     l'interface  loopback, puis le reseau, et finalement les numeros IP
     varies en commencant par celui par defaut (alloue 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 numeros IP prives  (RFC  1918)
  dans  un but d'illustration. Remplacez-les par vos propres numeros IP,
  officiels ou prives.

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

  Voila a 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 sur, les donnees de /proc/net ont  ete  creees  par  la  commande
  ifconfig, et non a la main!

  44..  QQuueessttiioonnss

  44..11..  CCoommmmeenntt ggaarrddeerr llaa ccoonnffiigguurraattiioonn aapprreess uunn rreebboooott??

  Reponse:

  +o  que  vous  utilisiez  un init a la maniere BSD ou a la maniere SysV
     (RedHat par  exemple),  vous  pouvez  toujours  inclure  cela  dans
     /etc/rc.d/rc.local.

  +o  Voici ce que j'ai dans mon systeme init SysV (RedHat 3.0.3 et 4.0):

  +o  Mon /etc/rc.d/rc.local: (edite pour  ne  montrer  que  les  parties
     interessantes)

       # 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4..22..    CCoommmmeenntt  ccoonnffiigguurreerr  sseennddmmaaiill  ppoouurr  rreecceevvooiirr  ddeess  mmaaiillss  ssuurr
  pplluussiieeuurrss nnuummeerrooss IIPP??

  Reponse:

  +o  Creer  (s'il  n'existe  pas  deja)  un fichier appele, par exemple,
     /etc/mes_noms.cw. Il ne doit pas forcemement s'appeler ainsi, ni se
     trouver dans le repertoire /etc.

  +o  Dans  ce  fichier,  placer les noms officiels des numeros alias IP.
     Si ces numeros n'ont pas de nom dans un domaine, alors vous  pouvez
     indiquer le numero IP lui-meme.

       /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

  +o  Dans votre fichier sendmail.cf, a l'endroit ou on definit une macro
     de classe fichier Fw, ajoutez:

       #################
       # infos locales #
       #################
       # fichier contenant les noms des hotes pour lesquels on recoit du courrier
       Fw/etc/mes_noms.cw

  +o  Cela  devrait  suffire.  Testez  votre  nouvelle  configuration  en
     lancant 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 teste moi@4.5.6.7, cela a envoye le mail a la
  machine locale, alors que moi@4.5.6.8 a ete envoye a l'agent de trans-
  port smtp.  C'est la reponse correcte.

  +o  Tout est configure maintenant.

  55..  CCoonncclluussiioonn

  J'espere que ce qui precede sera utile a quelqu'un.

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

  Et particulierement a Juan Jose  Ciarlante  pour  avoir  clarifie  mes
  questions.   Merci  aussi  a  tous ceux qui ont remarque mes fautes de
  frappe et m'ont fourni des suggestions!

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

  Amusez-vous bien.

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

