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 !