
                             Mini-HOWTO ARP-Proxy

Al Longyear, longyear@netcom.com

   5 Dcembre 1994
     _________________________________________________________________

   _(Traduction franaise par Eric Dumas Eric.Dumas@freenix.fr (Aot
   1995))._
     _________________________________________________________________

1. Note du traducteur

   Ce document utilise souvent le terme technique _proxy_. Il est utile
   de savoir que ce terme anglais signifie un mandataire, une
   procuration. Un serveur proxy peut alors tre compar  un serveur
   servant de mandataire  toutes les machines s'y connectant. Ce serveur
   essaie de rpondre aux requtes, dans ce cas prcis, ARP.

2. Introduction

   Ce document a t conu pour aider les personnes qui veulent utiliser
   le systme ARP Proxy (Protocole de Rsolution d'Adresses) avec _Linux_
   dans le cas de serveurs PPP et SLIP.

   ARP Proxy est galement appel _l'ARP gracieux_ dans certains
   ouvrages. Il y a eu pas mal de demandes au sujet de l'utilisation de
   l'ARP Proxy. Lorsqu'il ne peut tre utilis, certaines personnes
   considrent que c'est d  un dfaut du programme et se demandent
   pourquoi cela ne fonctionne pas.

   J'espre qu'avec le support de ce document, les gens en sauront un peu
   plus  propos d'ARP proxy, que cela soit utile ou non.

   L'utilisation d'ARP proxy est utile lorsque vous possdez un serveur.
   Il va permettre la connexion dynamique des machines distantes sans
   avoir besoin de mettre  jour les tables de routages sur les autres
   machines, except le serveur associ.

   Le terme de _serveur_ est fort peu appropri. TCP/IP est un
   environnement rseau _Peer to Peer_. Il n'y a pas de client ayant une
   relation avec un serveur comme d'autres systmes avec des donnes
   partages sur des serveurs que les clients exploitent. Toutefois, il
   est pratique d'appeler serveur un systme qui rponde au tlphone et
   client, un systme qui appelle pour se connecter au serveur.

   Le programme de gestion rseau de _Linux_ gre directement ARP proxy.
   Il n'y a pas besoin d'un dmon particulier comme proxyarpd utilis sur
   certains systmes.

   De plus, le protocole PPP, pppd et au moins l'un des codes SLIP,
   dip-uri, grent ARP proxy. Le programme rseau, arp va grer et
   afficher la table.

   Pour comprendre comment fonctionne ARP proxy et lorsqu'il doit tre
   utilis, vous devez avoir une connaissance de base concernant le
   fonctionnement d'un rseau en gnral.

   Les trois paragraphes suivants vont dcrire brivement la gestion
   rseau TCP/IP et le fonctionnement du routage.

3. Le ct matriel du rseau

   Tout rseau utilisant Ethernet ou Token Ring fonctionne en utilisant
   une adresse _MAC_ (_Medium Acces Control_). Il s'agit d'une adresse
   matrielle rseau associe  un contrleur spcifique. Chaque adresse
   MAC est unique. Elles sont assignes par le constructeur du
   contrleur. Toutefois elles peuvent tre remplaces par logiciel, ce
   qui n'est pas une rgle gnrale.

   Les adresses IP sont converties en adresses MAC en utilisant une table
   particulire  l'intreur du logiciel rseau appel _ARP cache_.
   Lorsque le logiciel rseau souhaite envoyer une trame IP  une adresse
   spcifique, il consulte ce cache pour dterminer l'adresse MAC. Si
   l'entre n'est pas trouve dans le cache, une requte particulire est
   envoye  toutes les machines du rseau pour convertir l'adresse IP en
   une adresse MAC. Ceci s'appelle une requte ARP.

   La rponse  la requte ARP est une rponse avec l'adresse MAC. Cette
   adresse MAC est alors ajoute au cache pour que les conversions
   puissent tre ralises sans l'aide d'ARP.

   C'est cette requte ARP qui est utilise par le systme d'ARP proxy
   pour raliser la gestion des connexions distantes.

   Il y a des rgles selon lesquelles des entres sont supprimes du
   cache. Ces rgles ne sont pas dtailles dans ce document et sont
   laisses  une documentation concernant la description technique du
   rseau IP.

   (Comme Token Ring est actuellement en dvelopement, et qu'il n'est
   disponible qu'en version de teste, le support de communication rseau
   courant sous _Linux_ est Ethernet. J'emploierai le terme d'Ethernet 
   partir de maintenant. Des caractristiques semblables sont disponibles
   pour Token Ring, indpendament du code source de routage.

4. Les raisons d'utiliser l'ARP Proxy ARP

   Le principe d'ARP proxy est de permettre l'assignation de plus d'une
   adresse IP  une seule carte rseau.

   Le fonctionnement consiste  la cration d'une entre dans le cache
   ARP de _Linux_ en associant l'adresse IP supplmentaire  l'adresse
   matrielle du contrleur Ethernet. Cela permet au systme _Linux_ de
   rpondre  une requte ARP pour traduire une adresse IP en adresse
   matrielle.

5. Routage TCP/IP

   _Une courte prface est ncessaire. Elle dcrit le principe de l'arbre
   de routage. Elle ne traite pas le routage source des trames IP. Le
   routage source ralis par Token Ring n'est pas du routage IP source
   mais il s'agit d'une couche MAC qui ralise cette opration.
   L'utilisation du routage source IP est dconseill. Le routage source
   MAC de Token Ring est ncessaire pour raliser ce style de
   communication._

   Pour comprendre un peu mieux ARP proxy, vous devez comprendre comment
   les trames IP sont routes  travers le rseau. Je ne vais pas trop
   dtailler ce partie. Si vous voulez des informations supplmentaires,
   bon nombre de livres disponibles donnent des informations plus
   pousses. (Si vous ne voulez pas regarder les livres, vous pouvez
   alors lire les documents RFC.)

   Les trames IP sont routes  chacune des tapes de leur passage 
   travers le rseau. Chaque machine, routeur ou passerelle dcide de
   lui-mme et avec sa propre copie de la table de routage ou la trame IP
   doit tre envoye.

   Le routage est ralis en utilisant un rseau IP (terme que
   j'utiliserai). A chaque interface rseau, on assigne un rseau IP
   unique. Chacun possde une adresse IP. Chacun possde un masque de
   rseau. Le rseau IP est simplement une opration binaire de l'adresse
   IP avec le masque rseau. Par exemple, l'adresse IP 10.124.35.40 et le
   masque de rseau 255.255.0.0 vont avoir un rseau IP de 10.124.0.0.
   J'utilise des masques rseau en octets mais la mme logique peut
   s'appliquer  la limite  des masques rseaux qui ne le sont pas.

   _Linux_ associe le masque du rseau  l'entre d'un chemin. Lorsque
   vous ajoutez un chemin dans le systme, vous spcifiez une adresse IP
   et le priphrique de destination. Si vous ne spcifiez pas de masque
   rseau, celui-ci est choisi comme tant le masque de rseau par dfaut
   du priphrique de destination. Il est positionn lorsque le
   priphrique est configur par ifconfig.

   Pour mieux comprendre le routage, regardez la configuration suivante :

Destination     Masque Reseau    Passerelle    Option   Peripherique

10.124.0.0      255.255.0.0      0.0.0.0       U        eth0
10.125.0.0      255.255.0.0      0.0.0.0       U        eth1
10.126.0.0      255.255.0.0      10.125.31.1   UG       eth1
10.124.12.5     255.255.255.255  0.0.0.0       UH       ppp0
0.0.0.0         0.0.0.0          10.124.25.1   U        eth0

   Il s'agit d'un systme possdant trois interfaces rseau. Il a deux
   contrleurs Ethernet et un priphrique PPP. Les trames IP peuvent
   pntrer dans ce systme par n'importe laquelle des trois sources. En
   plus, des trames sont renvoyes  travers ce systme  n'importe quel
   des trois priphriques de destination.

   Le chemin par dfaut est le priphrique de la passerelle 10.124.25.1
   comme le montre la dernire entre. Pour joindre la passerelle, la
   trame est envoye -travers le priphrique eth0.

   Un a priphrique PPP connect. Son adresse IP est 10.124.12.5.

   Le priphrique eth0 est sur le rseau d'adresse IP 10.124.0.0 alors
   que le priphrique eth1 est sur celui d'adresse IP 10.125.0.0.

   En plus, un chemin vers le rseau IP 10.126.0.0 est disponible par la
   passerelle associe 10.125.31.1.

   Pour comprendre comment le routage est ralis, considrons une trame
   IP qui doit tre envoye  l'adresse 10.125.45.1.

   _Linux_ va consulter la table de routage et pour chacune des entres,
   prendre le masque de rseau, puis effectuer une opration logique (et)
   sur le masque rseau. Enfin il va le comparer  l'entre de l'adresse
   IP de destination. Si le rsultat correspond, la trame est envoye au
   priphrique indiqu.

   Le rsultat est que la dite trame pour l'adresse IP 10.125.45.1 sera
   envoye au priphrique eth1.

   De plus, une trame mise de l'adresse IP 10.124.12.5 sera envoye au
   priphrique ppp0 alors qu'une trame provenant de l'adresse IP
   10.124.12.6 sera envoye au priphrique eth0 car le priphrique
   accepte pour seule et unique adresse, l'adresse IP 10.124.12.5.

   Les trames pour l'adresse 10.126.31.4 sont diffrentes. Elles ont une
   _passerelle_ associe. Le problme est rsolu de la mme manire.
   Toutefois, au lieu d'envoyer les trames simplemement au priphrique
   eth1, elles sont envoyes au systme unique associ  l'adresse IP
   10.125.31.1. Il s'agit de l'adresse IP qui est transforme en une
   adresse MAC, plutt qu'en une adresse de destination 10.126.31.4.

   Lorsqu'elle arrive sur le systme d'adresse 10.126.31.1, celui-ci va
   renvoyer la trame sur la destination finale 10.126.31.4 en utilisant
   sa propre table de routage qui peut lui indiquer de rediriger la trame
   sur l'interface eth3.

   De nombreuse conditions d'erreurs qui sont dtectes par ce systme de
   routage. Je ne veux pas toutes les dtailler, toutefois, si par
   exemple 10.126.31.1 ne connat pas le chemin pour atteindre l'adresse
   .4, alors il devrait renvoyer une trame ICMP (Protocole de Messages de
   Contrles d'Internet)  l'envoyeur initial comme quoi il n'a pas de
   chemin pour la machine spcifie.

6. Routage avec ARP Proxy

   Enfin, nous atteignons le sujet de ce document maintenant que toutes
   les bases ont ts poses.

   Il faut se rappeler que _Linux_ va mettre une entre dans le cache ARP
   pour l'adresse IP et l'adresse matrielle MAC associe lorsque l'on
   utilise ARP Proxy. Souvenez-vous que c'est ce cache qui est utilis
   pour convertir une adresse IP en une adresse MAC.

   Lorsqu'un site distant se connecte  l'adresse IP 10.124.12.5, le
   systme _Linux_ ajoutera l'adresse IP ainsi que l'adresse MAC associe
   au contrleur eth0, dans le cache ARP.

   Lorsqu'il reoit une requte pour convertir l'adresse 10.124.12.5 en
   une adresse MAC, _Linux_ va envoyer l'entre de ses tables au
   demandeur. Le rsultat est que la trame pour cette adresse IP sera
   envoye au serveur et peut alors la transmettre au site distant.

   C'est de cette manire qu'ARP proxy fonctionne. Le serveur est un
   proxy (un agent, un intermdiaire, etc.) pour l'adresse IP du site
   distant. C'est le terme employ pour un rseau qui peut accepter des
   trames de l'adresse IP distante et le servir en rpondant aux requtes
   ARP.

   Donc, pour qu'ARP proxy fonctionne, l'adresse IP du site (10.124.12.5
   dans mon exemple) doit tre l'une des adresses IP pour l'une des
   cartes rseaux.

   Il y a deux raisons pour justifier cette obligation :
    1. L'adresse MAC d'un contrleur est entre dans le cache ARP pour y
       tre associe  l'adresse IP. Une adresse MAC est ncessaire pour
       l'assignation ARP depuis que le cache ARP est une conversion
       d'adresse IP en une adresse MAC.
    2. Tout systme du rseau ralise son propre routage. Ces systmes
       savent que pour envoyer une trame IP  un autre systme distant
       ayant une adresse IP, il doit 'mettre la trame dans le mme fil'
       qui est branch  la carte rseau.

7. Lorsque l'ARP Proxy ne fonctionne pas

   Considrons ce qui pourrait se passer si l'adresse IP distante tait
   10.200.3.1 plutt que 10.124.12.5.

    1. Les systmes distants peuvent ne pas savoir o envoyer cette
       adresse Ils savent tous que pour joindre le rseau IP 10.124.0.0,
       les trames doivent aller sur le cble connect  eth0. Toutefois,
       il n'y a pas de rseau ayant l'adresse 10.200.0.0. Ils ne
       sauraient pas comment envoyer les trames au bon destinataire.
    2. Le serveur risque ne pas savoir quelle carte utiliser pour
       l'adresse MAC approprie lorsqu'il cre une entre ARP.

   C'est la raison la plus frquente pour laquelle ARP proxy ne
   fonctionne pas chez certaines personnes. Elles ont un rseau IP
   diffrent associ  l'adresse IP du site distant plutt qu' l'une de
   leurs interfaces rseau.

8. Les problmes avec ARP Proxy et qui doivent tre vits

    1. Ne pas avoir plus d'un systme qui rponde  l'entre ARP proxy
       d'une adresse IP particulire. Dans le cas de BSD, il faut
       vrifier qu'il n'y ait pas de conflit entre les adresses avec le
       proxy ARP. Pour un rseau bas sur un systme de type BSD, vous
       devrez orienter le rseau tout entier sur un seul serveur. Pour
       finir, les systmes BSD n'aprcient gre de recevoir plus d'une
       rponse pour une requte ARP.
    2. N'essayez pas de lancer ARP proxy pour une adresse dj prsente
       sur le rseau. C'est une petite variation du problme ci-dessus.
       Si vous essayez de lancer ARP proxy pour une adresse IP disponible
       sur le rseau, alors deux rponses vont tre gnres. Cela
       signifie que vous ne devriez pas prendre des adresses IP du rseau
       et les envoyer dans une connexion distante. Cela peut avoir pour
       concquence que votre serveur ralise une opration ARP Proxy.

9. Que faire si vous ne pouvez utiliser ARP Proxy tout en voulant avoir les
mmes fonctionnalits ?

   Il y a plusieurs choix possibles si vous tes capables d'utiliser ARP
   proxy.

   La mthode la plus simple est de crer un sous-rseau d'adresses IP
   pour que toutes les adresses externes aient leur propre adresse IP
   rseau. Puis, d'ajouter un chemin rseau dans chacun des routeurs (les
   priphriques indiqus par l'adresse passerelle dans chacun de vos
   fichiers _hosts_) pour que le rseau IP soit reconnu par le serveur 
   partir duquel les adresses IP se connectent.

   Autrement, vous pouvez galement utiliser des passerelles entre le
   serveur et les routeurs.

   Une autre manire de faire est de mettre un chemin de machine si vous
   ne dsirez pas employer un sous-rseau pour le rseau IP. Vous pouvez
   mettre les entres dans chacun des routeurs pour toutes les adresses
   IP.

   Vous ne devrez mettre  jour que les passerelles et les routeurs. Vous
   n'avez pas besoin de modifier toutes les machines de votre rseau. Le
   chemin par dfaut que les machines utilisent pour envoyer des trames
   aux routeurs va provoquer ce qui s'appelle un _ICMP redirect_ (une
   redirection ICMP) de trames vers la machine effectuant la requte.
   Cela va alors automatiquement ajouter un chemin vers le serveur
   appropri.

10. Conclusion

   J'espre avoir un peu eclairci ARP proxy et son fonctionnement.
   Heureusement, si vous utilisez pppd ou dip-uri, vous n'avez pas besoin
   de connatre les diffrentes tapes du mcanisme. C'est ralis
   automatiquement pour vous par ces programmes.

   ARP Proxy n'est pas destin  n'importe qui. C'est une solution qui
   fonctionne dans certains cas. Pouvoir dterminer ses besoins peux vous
   aider  rsoudre vos problmes de rseaux.

   Des informations supplmentaires peuvent tre trouve dans le livre
   _TCP/IP Illustrated, volume 1 "The protocols" _par W. Richard Stevens
   et publi par Addison Wessley.

   Merci !
