Mini-HOWTO ARP-Proxy Al Longyear, longyear@netcom.com 5 Decembre 1994 (Traduction francaise par Eric Dumas Eric.Dumas@freenix.fr (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 ! .