Proxy ARP sous Linux

networking linux

par julien, sept. 2007

Dans le cas ou l'on a des machines d'un meme reseau de part et d'autre d'une box (voir le schema ci-dessous), le proxy ARP doit etre utilise pour faire communiquer l'ensemble.

Ici, on veut que les trois machines 192.168.1.{21;22;23} puissent communiquer avec le reste du monde. Sur ces machines, on va donc specifier comme passerelle par defaut le ProxyARP : 192.168.1.20 (carte eth1).

Sur le ProxyARP, il faut donc activer le routage :

echo 'Activate routing mode'
echo 1 > /proc/sys/net/ipv4/ip_forward

et on va egalement activer le mode proxy arp

echo 'Activate ARP Proxy mode'
echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/eth1/proxy_arp

D'un point de vue reseau, le probleme est que les requete ARP ne sont pas routables. Donc quand les machines du reseau principal font chercher les adresses MAC de 192.168.1.{21;22;23}, elle ne font recevoir aucune reponse. La solution, c'est de demander au ProxyARP de repondre a leurs place avec sa propre adresse MAC. Il va donc recevoir les paquets pour les autres machines et les faire suivre grace a sa fonction de routage.

Donc :

  1. Le ProxyARP doit publier une reponse ARP pour chaque machine derriere lui et …
  2. il doit savoir vers ou router les paquets recus pour ces machines

Ce qui se traduit par :

echo "add host 192.168.1.21"
route add -host 192.168.1.21 eth1
arp -i eth0 -Ds 192.168.1.21 eth0 pub

La regle route permet de faire suivre les paquets sur l'interface eth1 (192.168.1.20) et la regle ARP permet de dire que pour l'interface eth0, on publie (pub) a tout le monde que 192.168.1.21 est relie a l'adresse MAC de la carte eth0 du ProxyARP.

Et Hop, ca marche :)

~~DISCUSSION~~