Annexe écrite à partir d'une première version de Robert Cheramy. |
Cette partie requiert des connaissances de base en réseau Ethernet et IP. Lien vers une formation VIA à ce sujet. |
Le proxy-ARP rejoint le principe du bridge (expliqué dans l'annexe précédente Monter un bridge (firewallant)) dans le sens où il permet de connecter plusieurs machines au réseau avec une machine centrale sous Linux. Par contre, contrairement au bridge qui agit au niveau Ethernet (i.e. layer 2), le proxy-ARP agit au niveau IP (i.e. layer 3). Cette annexe va donc vous apprendre à faire des tables de routage sous Linux !
Le proxy-ARP marche un peu comme un routeur :
points communs : il possède une table de routage et modifie les headers du niveau 2 en regardant les headers du niveau 3 ;
différences : les clients qui sont derrière le proxy-ARP sont configurés normalement, comme si le proxy-ARP n'existait pas.
Communication de la machine extérieur1 vers la machine client1 :
La machine extérieur1 émet une requête ARP :
"Qui est client1 ?" [ARP who-has client1] |
Le proxy-arp répond à la place de client1 :
"Je suis client1, j'attends tes paquets" [ARP client1 is-at MAC_de_proxy-arp]. |
Désormais, la machine extérieur1 va transmettre tous ses paquets à destination de client1 à proxy-arp. Proxy-arp se charge ensuite de les retransmettre à client1 en mettant sa MAC comme MAC source.
Communication de client1 vers extérieur1 :
La machine client1 émet une requête ARP :
"Qui est extérieur1 ?" [ARP who-has extérieur1] |
Le proxy-arp répond à la place d' extérieur1 :
"Je suis extérieur1, j'attends tes paquets" [ARP extérieur1 is-at MAC_de_proxy-arp]. |
Désormais, la machine client1 va transmettre tous ses paquets à destination d' extérieur1 à proxy-arp. Proxy-arp se charge ensuite de les retransmettre à extérieur1 en mettant sa MAC comme MAC source.
Tout d'abord, la machine qui sert de proxy-ARP doit avoir plusieurs cartes réseau (autant que de machines derrière le proxy-ARP plus une carte réseau à connecter vers le réseau extérieur). Les modules correspondant à ces multiples cartes réseau doivent être compilés et installés. Les alias faisant la correspondance entre les interfaces réseau et les noms des modules à charger doivent être écrits dans un fichier du type /etc/modprobe.d/reseau contenant :
alias eth0 nom_du_module_de_la_carte_réseau_n°1 alias eth1 nom_du_module_de_la_carte_réseau_n°2 alias eth2 nom_du_module_de_la_carte_réseau_n°3 |
N'oubliez pas d'exécuter la commande update-modules après toute modification d'un fichier dans le répertoire /etc/modprobe.d/.
Vérifiez que toutes vos cartes réseau sont bien reconnues au démarrage.
Pour plus de précisions concernant ce qui suit, je vous invite à consulter man interfaces et man route.
Nous allons maintenant modifier le fichier de configuration des interfaces réseau /etc/network/interfaces en utilisant mon fichier de configuration d'exemple et en le personnalisant :
# mv /etc/network/interfaces /etc/network/interfaces.old # cp ~/config/interfaces-proxy-arp /etc/network/interfaces |
ou :
% wget http://people.via.ecp.fr/~alexis/formation-linux/config/interfaces-proxy-arp # mv /etc/network/interfaces /etc/network/interfaces.old # mv interfaces-proxy-arp /etc/network/interfaces |
Personnalisez le nouveau fichier /etc/network/interfaces ; les lignes de commentaire doivent vous permettre de comprendre chaque paramètre :
# /etc/network/interfaces # Fichier de configuration d'exemple des interfaces réseau # pour faire un Proxy-ARP # Formation Debian GNU/Linux par Alexis de Lattre # http://www.via.ecp.fr/~alexis/formation-linux/ # Plus d'informations dans "man interfaces" et "man route" # L'interface de loopback auto lo iface lo inet loopback # Activation du "forwarding IP" et du "proxy-arp" au niveau du noyau : up echo "1" > /proc/sys/net/ipv4/ip_forward up echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp # Configuration de l'interface eth0, connectée au réseau extérieur auto eth0 iface eth0 inet static # Adresse IP du proxy-arp : address 138.195.152.12 # Masque de sous-réseau du réseau extérieur : netmask 255.255.255.128 # Adresse de broadcast du réseau extérieur : broadcast 138.195.152.127 # Adresse de la passerelle du réseau extérieur : gateway 138.195.152.1 # Configuration de l'interface eth1, connectée à client1 auto eth1 iface eth1 inet static # Adresse IP du proxy-arp : address 138.195.152.12 # Masque du sous-réseau du réseau extérieur : netmask 255.255.255.128 # Adresse de broadcast du réseau extérieur : broadcast 138.195.152.127 # Route qui dit que client1 est derrière eth1 : up route add 138.195.152.42 dev eth1 # Suppression d'une route ajoutée à tort par la ligne précédente # 138.195.144.0 = adresse du réseau extérieur # 255.255.240.0 = masque de sous-réseau du réseau extérieur up route del -net 138.195.152.0 netmask 255.255.255.128 dev eth1 # Configuration de l'interface eth2, connectée à client2 auto eth2 iface eth2 inet static # Adresse IP du proxy-arp : address 138.195.152.12 # Masque du sous-réseau du réseau extérieur : netmask 255.255.255.128 # Adresse de broadcast du réseau extérieur : broadcast 138.195.152.127 # Route qui dit que client2 est derrière eth2 : up route add 138.195.152.43 dev eth2 # Suppression d'une route ajoutée à tort par la ligne précédente # 138.195.144.0 = adresse du réseau extérieur # 255.255.240.0 = masque de sous-réseau du réseau extérieur up route del -net 138.195.152.0 netmask 255.255.255.128 dev eth2 |
Relancez la configuration des interfaces réseau :
# /etc/init.d/networking restart |
Vérifiez que les changements ont bien été pris en compte :
% ifconfig |
Vérifiez que la table de routage est bonne :
% route -n |
Dans l'exemple de ce chapitre, la table de routage est la suivante :
Table de routage IP du noyau Destination Passerelle Genmask Indic Metric Ref Use Iface 138.195.152.42 0.0.0.0 255.255.255.255 UH 0 0 0 eth1 138.195.152.43 0.0.0.0 255.255.255.255 UH 0 0 0 eth2 138.195.152.0 0.0.0.0 255.255.255.128 U 0 0 0 eth0 0.0.0.0 138.195.152.1 0.0.0.0 UG 0 0 0 eth0 |
La configuration des clients est strictement identique à la configuration qu'ils auraient s'ils n'étaient pas derrière le proxy-ARP. Par contre, il faut définir leur IP en dur, pas par DHCP, car le broadcast est bloqué par le proxy-ARP.
Si le client est aussi une Debian, éditez le fichier /etc/network/interfaces :
# /etc/network/interfaces de client1 auto lo iface lo inet loopback auto eth0 iface eth0 inet static # Adresse IP de client1 : address 138.195.152.42 # Masque de sous-réseau du réseau extérieur : netmask 255.255.255.128 # Adresse de broadcast du réseau extérieur : broadcast 138.195.152.127 # Adresse de la passerelle du réseau extérieur : gateway 138.195.152.1 |
Pour que le système tienne compte des modifications :
# /etc/init.d/networking restart Reconfiguring network interfaces: done. |
La configuration Windows est semblable, si vous avez compris, ça devrait aller.
Le proxy-ARP bloque le broadcast des clients ; donc si ces derniers font une requête DHCP, elle n'atteindra pas le réseau extérieur. Pour pallier à ce problème et faire en sorte que les clients puissent être configurés par DHCP, il faut installer un relai DHCP sur le proxy-ARP.
Pour cela, installez le package suivant :
# apt-get install dhcp3-relay |
Lors de la configuration du package, il vous demande :
What DHCP servers should the DHCP relay forward requests to ? Entrez l'adresse IP du serveur DHCP du réseau extérieur.
On what network interfaces should the DHCP server listen ? Si toutes les interfaces sont utilisées pour faire le proxy-ARP, comme c'est le cas dans cet exemple, laissez le champ vide et validez.
Le fichier de configuration /etc/default/dhcp3-relay est alors généré, et le démon dhcrelay3 lançé. Si vous avez besoin d'arrêter ou de relancer le démon, utilisez le script /etc/init.d/dhcp3-relay avec le bon argument.
Vous pouvez maintenant configurer le réseau de client1 et client2 par DHCP.
Pensez a rajouter les IP de client1, client2 et proxy-arp dans les /etc/hosts des trois machines ; c'est plus pratique pour travailler quand on est coupé du réseau...
Précédent | Sommaire | Suivant |
Monter un bridge (firewallant) | Niveau supérieur | Faire marcher une connexion sans fil |