Mini-HOWTO ARP-Proxy
 Al Longyear, [email protected]
 5 Decembre 1994

 (Traduction  francaise  par  Eric  Dumas  [email protected]  (Aout
 1995)).

 11..  NNoottee dduu ttrraadduucctteeuurr

 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.

 22..  IInnttrroodduuccttiioonn

 Ce document a ete concu pour aider les personnes qui veulent  utiliser
 le  systeme  ARP Proxy (Protocole de Resolution d'Adresses) avec LLiinnuuxx
 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 LLiinnuuxx 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.

 33..  LLee ccoottee mmaatteerriieell dduu rreesseeaauu

 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  LLiinnuuxx  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.

 44..  LLeess rraaiissoonnss dd''uuttiilliisseerr ll''AARRPP PPrrooxxyy AARRPP

 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  LLiinnuuxx  en  associant  l'adresse IP supplementaire a l'adresse
 materielle du controleur Ethernet. Cela permet  au  systeme  LLiinnuuxx  de
 repondre  a  une  requete  ARP pour traduire une adresse IP en adresse
 materielle.

 55..  RRoouuttaaggee TTCCPP//IIPP

 _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.

 LLiinnuuxx 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.

 LLiinnuuxx  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.

 66..  RRoouuttaaggee aavveecc AARRPP PPrrooxxyy

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

 Il  faut  se rappeler que LLiinnuuxx 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  LLiinnuuxx  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, LLiinnuuxx 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.

 77..  LLoorrssqquuee ll''AARRPP PPrrooxxyy nnee ffoonnccttiioonnnnee ppaass

 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.

 88..  LLeess pprroobblleemmeess aavveecc AARRPP PPrrooxxyy eett qquuii ddooiivveenntt eettrree eevviitteess

 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.

 99..   QQuuee  ffaaiirree  ssii  vvoouuss nnee ppoouuvveezz uuttiilliisseerr AARRPP PPrrooxxyy ttoouutt eenn vvoouullaanntt
 aavvooiirr lleess mmeemmeess ffoonnccttiioonnnnaalliitteess ??

 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.

 1100..  CCoonncclluussiioonn

 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 !