J'ai install� le mandataire ARP du sous-r�seau sur un noyau Linux version 2.0.30, mais il parait que le code fonctionne avec une version 1.2.x.
La premi�re chose � noter est que le code ARP est en deux parties :
une partie dans le noyau, qui envoie et re�oit les requ�tes et les r�ponses
ARP et met � jour le cache ARP, etc. ; l'autre partie est constitu�e de
la commande
arp(8)
qui permet au super-utilisateur de mettre � jour manuellement
le cache ARP, et � tout le monde de le consulter.
Le premier probl�me que j'ai eu �tait que la commande arp(8)
de
ma distribution Slackware 3.1 �tait antique (dat�e de 1994 !) et ne
communiquait pas correctement du tout avec le code ARP du noyau
(``arp -a
'' donnait un r�sultat �trange).
La commande arp(8)
de ``net-tools-1.33a
'', qui est disponible
sur un grand nombre de sites, en particulier (d'apr�s le README qui lui
est joint)
ftp.linux.org.uk:/pub/linux/Networking/PROGRAMS/NetTools/
, fonctionne
correctement, et contient de nouvelles pages de manuel arp(8)
qui expliquent
les choses bien mieux que les anciennes.
Une fois muni d'une commande arp(8)
d�cente, il ne me restait plus
qu'� modifier le seul fichier /etc/rc.d/rc.inet1
(pour la
Slackware - c'est probablement diff�rent pour d'autres distributions).
Tout d'abord, il nous faut changer l'adresse de diffusion, le num�ro
de r�seau, et le masque de eth0 :
NETMASK=255.255.255.240 # pour la partie h�te sur 4 bits NETWORK=x.y.z.64 # notre nouveau r�seau # (remplacez x.y.z par votre r�seau) BROADCAST=x.y.z.79 # pour moi.
Il faut ensuite ajouter une ligne pour configurer la seconde interface Ethernet (apr�s les chargements de modules qui sont �ventuellement n�cessaires pour lancer le pilote) :
/sbin/ifconfig eth1
nom_sur_le_r�seau_1broadcast
x.y.z.255 netmask 255.255.255.0
Puis nous ajoutons une route pour la nouvelle interface :
/sbin/route add -net
x.y.z.0 netmask 255.255.255.0
Et vous aurez sans doute besoin de changer la passerelle par d�faut pour utiliser celle du r�seau 1.
Arriv�s � ce point, nous pouvons ajouter la ligne pour le mandatement ARP :
/sbin/arp -i eth1 -Ds ${NETWORK} eth1 netmask ${NETMASK} pub
Ceci demande � ARP d'ajouter au cache une entr�e statique (``s
'')
pour le r�seau ${NETWORK}
.
Le ``-D''
dit d'utiliser la m�me adresse mat�rielle que
l'interface eth1 (la seconde interface), ce qui nous �vite d'avoir
� chercher l'adresse mat�rielle de eth1 et de la coder directement dans
la commande.
L'option netmask
indique qu'il s'agit d'une entr�e ARP
concernant un sous-r�seau, qui est constitu� des
num�ros IP tels que
num�ro_ip & ${NETMASK} == ${NETWORK} & ${NETMASK}
L'option pub
demande de publier cette entr�e ARP, c'est-�-dire qu'il
s'agit d'mandatement, et qu'il faudra r�pondre au nom de
ces num�ros IP. L'option ``-i eth1
'' pr�cise qu'il ne faudra r�pondre
qu'aux requ�tes ARP arrivant par l'interface eth1.Normalement, � ce point, si la machine est red�marr�e, tous les machines du r�seau 0 sembleront �tre sur le r�seau 1. Vous pouvez v�rifier que l'entr�e de mandatement ARP de sous-r�seau a �t� prise en compte correctement sur la machine A. Sur ma machine (j'ai chang� les noms pour prot�ger les innocents) c'est :
#/sbin/arp -an Address HWtype HWaddress Flags Mask Iface x.y.z.1 ether 00:00:0C:13:6F:17 C * eth1 x.y.z.65 ether 00:40:05:49:77:01 C * eth0 x.y.z.67 ether 08:00:20:0B:79:47 C * eth0 x.y.z.5 ether 00:00:3B:80:18:E5 C * eth1 x.y.z.64 ether 00:40:96:20:CD:D2 CMP 255.255.255.240 eth1
Vous pouvez aussi regarder le fichier /proc/net/arp
,
par exemple avec cat(1)
.
La derni�re ligne est l'entr�e de mandatement pour le sous-r�seau. Les
indicateurs CMP
r�v�lent qu'il s'agit d'une donn�e statique
(entr�e Manuellement) qui doit �tre Publi�e. Elle ne servira qu'� r�pondre
qu'aux requ�tes ARP qui arrivent par eth1 et pour lesquelles le num�ro IP,
une fois masqu�, correspond au num�ro de r�seau (�galement masqu�).
Remarquez que la commande arp(8)
a trouv� automatiquement l'adresse
mat�rielle de eth1 et l'a employ�e comme adresse � utiliser
(� cause de l'option ``-Ds
'').
De la m�me fa�on il est probablement prudent de v�rifier que la table de routage a �t� remplie correctement. Voici la mienne (ici aussi, les noms ont �t� chang�s pour prot�ger les innocents) :
#/bin/netstat -rn Kernel routing table Destination Gateway Genmask Flags Metric Ref Use Iface x.y.z.64 0.0.0.0 255.255.255.240 U 0 0 71 eth0 x.y.z.0 0.0.0.0 255.255.255.0 U 0 0 389 eth1 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 7 lo 0.0.0.0 x.y.z.1 0.0.0.0 UG 1 0 573 eth1
Vous pouvez aussi regarder le contenu du fichier /proc/net/route
(par exemple avec cat(1)
).
Remarquez que la premi�re entr�e concerne un sous-ensemble de la seconde, mais la table de routage les classe dans l'ordre des masques, et donc l'entr�e eth0 sera test�e avant celle de eth1.
Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:38