Note | |
---|---|
Annexe écrite à partir d'une première version de Robert Cheramy. |
Important | |
---|---|
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é au Chapitre 39) 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 ~/fichiers-config/interfaces-proxy-arp /etc/network/interfaces
ou :
%
wget http://formation-debian.via.ecp.fr/fichiers-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://formation-debian.via.ecp.fr/ # 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 192.168.0.12 # Masque de sous-réseau du réseau extérieur : netmask 255.255.255.0 # Adresse de la passerelle du réseau extérieur : gateway 192.168.0.1 # Configuration de l'interface eth1, connectée à client1 auto eth1 iface eth1 inet static # Adresse IP du proxy-arp : address 192.168.0.12 # Masque du sous-réseau du réseau extérieur : netmask 255.255.255.0 # Route qui dit que client1 est derrière eth1 : up route add 192.168.0.42 dev eth1 # Suppression d'une route ajoutée à tort par la ligne précédente # 192.168.0.0 = adresse du réseau extérieur # 255.255.255.0 = masque de sous-réseau du réseau extérieur up route del -net 192.168.0.0 netmask 255.255.255.0 dev eth1 # Configuration de l'interface eth2, connectée à client2 auto eth2 iface eth2 inet static # Adresse IP du proxy-arp : address 192.168.0.12 # Masque du sous-réseau du réseau extérieur : netmask 255.255.255.0 # Route qui dit que client2 est derrière eth2 : up route add 192.168.0.43 dev eth2 # Suppression d'une route ajoutée à tort par la ligne précédente # 192.168.0.0 = adresse du réseau extérieur # 255.255.255.0 = masque de sous-réseau du réseau extérieur up route del -net 192.168.0.0 netmask 255.255.255.0 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 192.168.0.42 0.0.0.0 255.255.255.255 UH 0 0 0 eth1 192.168.0.43 0.0.0.0 255.255.255.255 UH 0 0 0 eth2 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 0.0.0.0 192.168.0.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 192.168.0.42 # Masque de sous-réseau du réseau extérieur : netmask 255.255.255.0 # Adresse de la passerelle du réseau extérieur : gateway 192.168.0.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 relais DHCP sur le proxy-ARP.
Pour cela, installez le paquet suivant :
#
aptitude install dhcp3-relay
Lors de la configuration du paquet, 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...