  Mini-HOWTO ARP-Proxy
  Al Longyear, longyear@netcom.com
  5 Decembre 1994

  (Traduction  francaise  par  Eric  Dumas  Eric.Dumas@freenix.fr  (Aout
  1995)).

  11..  NNoottee dduu ttrraadduucctteeuurr

  Ce document utilise souvent le terme technique _p_r_o_x_y. Il est utile  de
  savoir  que  ce terme anglais signifie un mandataire, une procuration.
  Un serveur proxy peut alors etre  compare  a  un  serveur  servant  de
  mandataire  a toutes les machines s'y connectant. Ce serveur essaie de
  repondre aux requetes, dans ce cas precis, ARP.

  22..  IInnttrroodduuccttiioonn

  Ce document a ete concu pour aider les personnes qui veulent  utiliser
  le  systeme  ARP Proxy (Protocole de Resolution d'Adresses) avec LLiinnuuxx
  dans le cas de serveurs PPP et SLIP.

  ARP Proxy est egalement appele _l_'_A_R_P _g_r_a_c_i_e_u_x dans certains  ouvrages.
  Il  y  a  eu  pas  mal  de demandes au sujet de l'utilisation de l'ARP
  Proxy. Lorsqu'il ne peut etre utilise, certaines personnes considerent
  que c'est du a un defaut du programme et se demandent pourquoi cela ne
  fonctionne pas.

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

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

  Le  terme  de  _s_e_r_v_e_u_r  est  fort  peu  approprie.   TCP/IP   est   un
  environnement  reseau  _P_e_e_r  _t_o _P_e_e_r. Il n'y a pas de client ayant une
  relation avec un serveur comme  d'autres  systemes  avec  des  donnees
  partagees  sur  des serveurs que les clients exploitent. Toutefois, il
  est pratique d'appeler serveur un systeme qui reponde au telephone  et
  client, un systeme qui appelle pour se connecter au serveur.

  Le  programme  de  gestion reseau de LLiinnuuxx gere directement ARP proxy.
  Il n'y a pas besoin d'un demon particulier comme proxyarpd utilise sur
  certains systemes.

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

  Pour  comprendre  comment  fonctionne ARP proxy et lorsqu'il doit etre
  utilise, vous devez avoir  une  connaissance  de  base  concernant  le
  fonctionnement d'un reseau en general.

  Les  trois  paragraphes   suivants  vont decrire brievement la gestion
  reseau TCP/IP et le fonctionnement du routage.

  33..  LLee ccoottee mmaatteerriieell dduu rreesseeaauu

  Tout reseau utilisant Ethernet ou Token Ring fonctionne  en  utilisant
  une  adresse  _M_A_C  (_M_e_d_i_u_m  _A_c_c_e_s  _C_o_n_t_r_o_l).  Il  s'agit d'une adresse
  materielle reseau associee a un controleur specifique.  Chaque adresse
  MAC   est   unique.  Elles  sont  assignees  par  le  constructeur  du
  controleur. Toutefois elles peuvent etre remplacees par  logiciel,  ce
  qui n'est pas une regle generale.

  Les adresses IP sont converties en adresses MAC en utilisant une table
  particuliere  a  l'intereur  du  logiciel  reseau  appele  _A_R_P  _c_a_c_h_e.
  Lorsque le logiciel reseau souhaite envoyer une trame IP a une adresse
  specifique, il consulte ce cache pour determiner  l'adresse  MAC.   Si
  l'entree n'est pas trouvee dans le cache, une requete particuliere est
  envoyee a toutes les machines du reseau pour convertir l'adresse IP en
  une adresse MAC. Ceci s'appelle une requete ARP.

  La reponse a la requete ARP est une reponse avec l'adresse MAC.  Cette
  adresse MAC est alors  ajoutee  au  cache  pour  que  les  conversions
  puissent etre realisees sans l'aide d'ARP.

  C'est  cette  requete  ARP qui est utilisee par le systeme d'ARP proxy
  pour realiser la gestion des connexions distantes.

  Il y a des regles selon lesquelles  des  entrees  sont  supprimees  du
  cache.   Ces  regles  ne  sont pas detaillees dans ce document et sont
  laissees a une documentation concernant la  description  technique  du
  reseau IP.

  (Comme  Token  Ring  est  actuellement en developement, et qu'il n'est
  disponible qu'en version de teste, le support de communication  reseau
  courant  sous  LLiinnuuxx  est Ethernet. J'emploierai le terme d'Ethernet a
  partir de maintenant. Des caracteristiques semblables sont disponibles
  pour Token Ring, independament du code source de routage.

  44..  LLeess rraaiissoonnss dd''uuttiilliisseerr ll''AARRPP PPrrooxxyy AARRPP

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

  Le fonctionnement consiste a la creation d'une entree  dans  le  cache
  ARP  de  LLiinnuuxx  en  associant  l'adresse IP supplementaire a l'adresse
  materielle du controleur Ethernet. Cela permet  au  systeme  LLiinnuuxx  de
  repondre  a  une  requete  ARP pour traduire une adresse IP en adresse
  materielle.

  55..  RRoouuttaaggee TTCCPP//IIPP

  _U_n_e _c_o_u_r_t_e _p_r_e_f_a_c_e _e_s_t _n_e_c_e_s_s_a_i_r_e_. _E_l_l_e _d_e_c_r_i_t _l_e _p_r_i_n_c_i_p_e _d_e  _l_'_a_r_b_r_e
  _d_e  _r_o_u_t_a_g_e_.  _E_l_l_e  _n_e _t_r_a_i_t_e _p_a_s _l_e _r_o_u_t_a_g_e _s_o_u_r_c_e _d_e_s _t_r_a_m_e_s _I_P_.  _L_e
  _r_o_u_t_a_g_e _s_o_u_r_c_e _r_e_a_l_i_s_e _p_a_r _T_o_k_e_n _R_i_n_g _n_'_e_s_t _p_a_s _d_u _r_o_u_t_a_g_e  _I_P  _s_o_u_r_c_e
  _m_a_i_s   _i_l  _s_'_a_g_i_t  _d_'_u_n_e  _c_o_u_c_h_e  _M_A_C  _q_u_i  _r_e_a_l_i_s_e  _c_e_t_t_e  _o_p_e_r_a_t_i_o_n_.
  _L_'_u_t_i_l_i_s_a_t_i_o_n _d_u _r_o_u_t_a_g_e _s_o_u_r_c_e _I_P _e_s_t _d_e_c_o_n_s_e_i_l_l_e_. _L_e _r_o_u_t_a_g_e  _s_o_u_r_c_e
  _M_A_C   _d_e   _T_o_k_e_n  _R_i_n_g  _e_s_t  _n_e_c_e_s_s_a_i_r_e  _p_o_u_r  _r_e_a_l_i_s_e_r  _c_e  _s_t_y_l_e  _d_e
  _c_o_m_m_u_n_i_c_a_t_i_o_n_.

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

  Les  trames  IP  sont  routees  a chacune des etapes de leur passage a
  travers le reseau. Chaque machine, routeur  ou  passerelle  decide  de
  lui-meme et avec sa propre copie de la table de routage ou la trame IP
  doit etre envoyee.

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

  LLiinnuuxx associe le masque du reseau a l'entree d'un chemin. Lorsque vous
  ajoutez un chemin dans le systeme, vous specifiez une adresse IP et le
  peripherique de destination.  Si  vous  ne  specifiez  pas  de  masque
  reseau, celui-ci est choisi comme etant le masque de reseau par defaut
  du  peripherique  de  destination.  Il  est  positionne   lorsque   le
  peripherique est configure 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 systeme possedant trois interfaces reseau.  Il  a  deux
  controleurs  Ethernet  et  un  peripherique PPP. Les trames IP peuvent
  penetrer dans ce systeme par n'importe laquelle des trois sources.  En
  plus,  des trames sont renvoyees a travers ce systeme a n'importe quel
  des trois peripheriques de destination.

  Le chemin par defaut est le peripherique de la passerelle  10.124.25.1
  comme  le  montre  la derniere entree.  Pour joindre la passerelle, la
  trame est envoyee a-travers le peripherique eth0.

  Un a peripherique PPP connecte. Son adresse IP est 10.124.12.5.

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

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

  Pour comprendre comment le routage est realise, considerons une  trame
  IP qui doit etre envoyee a l'adresse 10.125.45.1.

  LLiinnuuxx  va  consulter  la table de routage et pour chacune des entrees,
  prendre le masque de reseau, puis effectuer une operation logique (et)
  sur  le masque reseau. Enfin il va le comparer a l'entree de l'adresse
  IP de destination. Si le resultat correspond, la trame est envoyee  au
  peripherique indique.

  Le  resultat  est que la dite trame pour l'adresse IP 10.125.45.1 sera
  envoyee au peripherique eth1.

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

  Les  trames pour l'adresse 10.126.31.4 sont differentes. Elles ont une
  _p_a_s_s_e_r_e_l_l_e associee.  Le probleme  est  resolu  de  la  meme  maniere.
  Toutefois,  au  lieu d'envoyer les trames simplemement au peripherique
  eth1, elles sont envoyees au systeme unique  associe  a  l'adresse  IP
  10.125.31.1.  Il  s'agit  de  l'adresse  IP qui est transformee en une
  adresse MAC, plutot qu'en une adresse de destination 10.126.31.4.

  Lorsqu'elle arrive sur le systeme 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 detectees par ce systeme de
  routage. Je ne veux  pas  toutes  les  detailler,  toutefois,  si  par
  exemple  10.126.31.1 ne connait pas le chemin pour atteindre l'adresse
  .4, alors il devrait renvoyer une trame ICMP (Protocole de Messages de
  Controles  d'Internet)  a  l'envoyeur initial comme quoi il n'a pas de
  chemin pour la machine specifiee.

  66..  RRoouuttaaggee aavveecc AARRPP PPrrooxxyy

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

  Il  faut  se rappeler que LLiinnuuxx va mettre une entree dans le cache ARP
  pour l'adresse IP et l'adresse materielle MAC  associee  lorsque  l'on
  utilise  ARP  Proxy.  Souvenez-vous que c'est ce cache qui est utilise
  pour convertir une adresse IP en une adresse MAC.

  Lorsqu'un site distant se connecte  a  l'adresse  IP  10.124.12.5,  le
  systeme  LLiinnuuxx  ajoutera l'adresse IP ainsi que l'adresse MAC associee
  au controleur eth0, dans le cache ARP.

  Lorsqu'il recoit une requete pour convertir l'adresse  10.124.12.5  en
  une adresse MAC, LLiinnuuxx va envoyer l'entree de ses tables au demandeur.
  Le resultat est que la trame pour cette adresse  IP  sera  envoyee  au
  serveur et peut alors la transmettre au site distant.

  C'est  de  cette  maniere  qu'ARP  proxy fonctionne. Le serveur est un
  proxy (un agent, un intermediaire, etc.) pour  l'adresse  IP  du  site
  distant.   C'est le terme employe pour un reseau qui peut accepter des
  trames de l'adresse IP distante et le servir en repondant aux requetes
  ARP.

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

  Il y a deux raisons pour justifier cette obligation :

  1. L'adresse  MAC  d'un controleur est entree dans le cache ARP pour y
     etre associee a l'adresse IP. Une adresse MAC est  necessaire  pour
     l'assignation  ARP  depuis  que  le  cache  ARP  est une conversion
     d'adresse IP en une adresse MAC.

  2. Tout systeme du reseau realise son  propre  routage.  Ces  systemes
     savent  que  pour  envoyer  une trame IP a un autre systeme distant
     ayant une adresse IP, il doit 'mettre la trame dans  le  meme  fil'
     qui est branche a la carte reseau.

  77..  LLoorrssqquuee ll''AARRPP PPrrooxxyy nnee ffoonnccttiioonnnnee ppaass

  Considerons  ce  qui pourrait se passer si l'adresse IP distante etait
  10.200.3.1 plutot que 10.124.12.5.

  1. Les systemes distants  peuvent  ne  pas  savoir  ou  envoyer  cette
     adresse

     Ils  savent  tous  que  pour  joindre  le reseau IP 10.124.0.0, les
     trames doivent aller sur le cable connecte a  eth0.  Toutefois,  il
     n'y  a  pas  de reseau 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 appropriee lorsqu'il cree une entree ARP.

  C'est  la  raison  la  plus  frequente  pour  laquelle  ARP  proxy  ne
  fonctionne pas chez  certaines  personnes.  Elles  ont  un  reseau  IP
  different  associe a l'adresse IP du site distant plutot qu'a l'une de
  leurs interfaces reseau.

  88..  LLeess pprroobblleemmeess aavveecc AARRPP PPrrooxxyy eett qquuii ddooiivveenntt eettrree eevviitteess

  1. Ne pas avoir plus d'un systeme qui reponde  a  l'entree  ARP  proxy
     d'une adresse IP particuliere. Dans le cas de BSD, il faut verifier
     qu'il n'y ait pas de conflit entre les adresses avec le  proxy ARP.
     Pour  un  reseau  base  sur  un  systeme  de  type BSD, vous devrez
     orienter le reseau tout entier sur un seul serveur.

     Pour finir, les systemes BSD  n'aprecient  gere  de  recevoir  plus
     d'une reponse pour une requete ARP.

  2. N'essayez  pas  de  lancer ARP proxy pour une adresse deja presente
     sur le reseau.

     C'est une petite variation du probleme ci-dessus. Si  vous  essayez
     de  lancer  ARP proxy pour une adresse IP disponible sur le reseau,
     alors deux reponses vont etre generees. Cela signifie que  vous  ne
     devriez  pas  prendre des adresses IP du reseau et les envoyer dans
     une connexion distante. Cela peut avoir pour concequence que  votre
     serveur realise une operation ARP Proxy.

  99..   QQuuee  ffaaiirree  ssii  vvoouuss nnee ppoouuvveezz uuttiilliisseerr AARRPP PPrrooxxyy ttoouutt eenn vvoouullaanntt
  aavvooiirr lleess mmeemmeess ffoonnccttiioonnnnaalliitteess ??

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

  La methode la plus simple est de creer un  sous-reseau  d'adresses  IP
  pour  que  toutes  les  adresses externes aient leur propre adresse IP
  reseau.  Puis, d'ajouter un chemin reseau  dans  chacun  des  routeurs
  (les  peripheriques  indiques  par l'adresse passerelle dans chacun de
  vos fichiers _h_o_s_t_s) pour que le reseau IP soit reconnu par le  serveur
  a partir duquel les adresses IP se connectent.

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

  Une autre maniere de faire est de mettre un chemin de machine si  vous
  ne  desirez pas employer un sous-reseau pour le reseau IP. Vous pouvez
  mettre les entrees dans chacun des routeurs pour toutes  les  adresses
  IP.

  Vous  ne  devrez  mettre  a  jour que les passerelles et les routeurs.
  Vous n'avez pas besoin  de  modifier  toutes  les  machines  de  votre
  reseau.  Le  chemin par defaut que les machines utilisent pour envoyer
  des trames aux routeurs va provoquer ce qui s'appelle un _I_C_M_P _r_e_d_i_r_e_c_t
  (une  redirection  ICMP)  de  trames  vers  la  machine  effectuant la
  requete.  Cela va alors automatiquement  ajouter  un  chemin  vers  le
  serveur approprie.

  1100..  CCoonncclluussiioonn

  J'espere  avoir  un  peu  eclairci  ARP  proxy  et son fonctionnement.
  Heureusement, si vous utilisez pppd ou dip-uri, vous n'avez pas besoin
  de  connaitre  les  differentes  etapes  du  mecanisme.  C'est realise
  automatiquement pour vous par ces programmes.

  ARP Proxy n'est pas destine a n'importe qui. C'est  une  solution  qui
  fonctionne dans certains cas. Pouvoir determiner ses besoins peux vous
  aider a resoudre vos problemes de reseaux.

  Des informations supplementaires peuvent etre trouvee  dans  le  livre
  _T_C_P_/_I_P  _I_l_l_u_s_t_r_a_t_e_d_,  _v_o_l_u_m_e _1 _"_T_h_e _p_r_o_t_o_c_o_l_s_"  par W. Richard Stevens
  et publie par Addison Wessley.

  Merci !

