Récupérez l' utilitaire de configuration du pont depuis la page personnelle d'Alan Cox. C'est la même référence que dans le document de Chris. Je n'ai pas compris que c'était un URL ftp en non un URL http...
Lisez le Multiple Ethernet HOWTO pour obtenir des conseils pour faire reconnaître et pour configurer plus d'une carte réseau.
Vous pourrez trouver encore plus de détails sur le type de commandes magiques à passer au prompt se trouvent dans le Boot Prompt HOWTO.
Pour compléter vos lectures, lisez le NET-2 HOWTO. C'est un document plutôt long, et vous devrez y piocher les détails qui vous intéressent.
Les lectures précédentes vont vous indiquer ce dont vous avez besoin pour préparer le noyau à reconnaître un deuxième périphérique ethernet lors du démarrage, en ajoutant la ligne suivante dans votre fichier /etc/lilo.conf
, et en relançant lilo
:
append = "ether=0,0,eth1"
Notez le "eth1". "eth0" représente la première carte. "eth1" est la seconde carte. Vous pouvez également ajouter les paramètres de démarrage à la ligne de commande que lilo
vous offre. Pour trois cartes :
linux ether=0,0,eth1 ether=0,0,eth2
J'utilise loadlin
pour lancer mon noyau Linux depuis DOS :
loadlin.exe c:\vmlinuz root=/dev/hda3 ro ether=0,0,eth1 ether=0,0,eth2
Notez que cette astuce oblige le noyau à détecter les cartes au démarrage. La détection ne sera pas faite si vous chargez les gestionnaires de périphérique ethernet en module (par sécurité, puisque l'ordre de détection ne peut être déterminé), donc si vous utilisez des modules, vous aurez à ajouter l'IRQ appropriée et le paramètre de port pour le gestionnaire de périphérique dans votre fichier /etc/conf.modules
. Dans mon cas, j'ai les lignes :
alias eth0 3c509
alias eth1 de620
options 3c509 irq=5 io=0x210
options de620 irq=7 bnc=1
Vous pouvez savoir si vous utilisez les modules en utilisant ``ps -aux'' pour voir si kerneld
est lancé, et en vérifiant qu'il y a des fichiers .o
dans un sous-répertoire du répertoire /lib/modules
. Utilisez le nom de répertoire que vous donne la commande uname -r
. Si vous avez un kerneld
lancé et/ou vous avez un fichier foo.o
, éditez /etc/conf.modules
et lisez avec soin la page de manuel de depmod
.
Notez également que jusque récemment (noyau 2.0.25), le driver pour la carte 3c509 ne pouvait pas être utilisé pour plus d'une carte s'il était utilisé en module. J'ai vu un patch quelque part pour corriger cette limitation. Il devrait être inclus dans le noyau à l'heure où vous lisez ces lignes.
Recompilez le noyau avec le bridging :
CONFIG_BRIDGE=y
J'ai également compilé mon noyau avec le firewalling, l'IP-forwarding et l'IP-masquerading. C'est seulement si vous désirez utiliser le firewalling également...
CONFIG_FIREWALL=y
CONFIG_NET_ALIAS=y
CONFIG_INET=y
CONFIG_IP_FORWARD=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_FIREWALL=y
CONFIG_IP_FIREWALL_VERBOSE=y
CONFIG_IP_MASQUERADE=y
Vous aurez besoin en plus de la configuration réseau standard :
CONFIG_NET=y
et je ne pense pas que vous deviez vous préocupper des autres options réseau. Les options que je n'ai pas compilé dans le noyau sont sélectionnées en tant que modules afin que je puisse les ajouter éventuellement plus tard.
Installez le nouveau noyau, relancez lilo
et redémarrez sur le nouveau noyau. Rien ne devrait avoir changé pour l'instant !
Chris dit qu'un pont ne doit pas avoir d'adresse IP mais ce n'est pas la configuration qui est présenté ici.
Vous allez utiliser la machine pour vous connecter au réseau donc vous avez besoin d'une adresse et vous devez vous assurer que le device loopback configuré normalement afin que vos logiciels puisse communiquer avec ce à quoi ils s'attendent. Si loopback est désactivé, le résolveur de noms ou d'autres services ne fonctionneront pas. Voyez le NET-2-HOWTO, mais votre configuration standard devrait déjà avoir fait cela :
ifconfig lo 127.0.0.1
route add -net 127.0.0.0
Vous allez devoir donner des adresses à vos cartes réseau. J'ai changé le fichier /etc/rc.d/rc.inet1
de ma slackware (3.x) pour configurer deux cartes et vous devrez juste regarder votre fichier de configuration du réseau et doubler ou tripler le nombre d'instructions s'y trouvant. Supposons que vous ayez déjà une adresse à
192.168.2.100
(cette adresse fait partie des adresses réservées pour des réseaux privés, mais ne faites pas attention, cela ne cassera rien si vous utilisez cette adresse par erreur) alors vous avez probablement une ligne ressemblant à
ifconfig eth0 192.168.2.100 netmask 255.255.255.0 metric 1
dans votre fichier de configuration. La première chose que vous allez probablement vouloir faire est couper l'espace des adresses atteintes par cette carte en deux afin de pouvoir éventuellement faire un pont ou filtrer entre les deux moitiés. Ajoutez donc une ligne qui réduit le masque de sous-réseau pour adresser un plus petit nombre de machines :
ifconfig eth0 netmask 255.255.255.128
Essayez cette configuration. Cela restreint la carte à l'espace des adresses entre .0 et .127.
A présent, vous pouvez configurer votre deuxième carte dans la deuxième moitié de l'espace des adresses locales. Assurez vous que personne n'utilise l'adresse que vous allez prendre. Pour des raisons de symétrie, j'utiliserai ici 228=128+100. N'importe quelle adresse conviendra, à condition qu'elle ne se trouve pas dans le masque de l'autre carte. Évitez les adresses spéciales comme .0, .1, .128, etc... à moins que vous sachiez ce que vous faites.
ifconfig eth1 192.168.2.228 netmask 255.255.255.128 metric 1
Cela restreint la deuxième carte aux adresses entre .128 et .255.
C'est ici que les défauts de l'utilisation simultannée du pont et du firewall : vous ne pouvez pas filtrer des paquets qui ne sont pas routés. Pas de route, pas de firewall. Cette règle est vérifiée en tout cas dans les version 2.0.30 ou suivantes du noyau. Les filtres du firewall sont étroitement liés au code source de l'IP-Forwarding.
Cela ne signifie pas que vous ne pouvez pas utiliser le pont. Vous pouvez installer un pont entre deux cartes et filtrer à partir d'une troisième. Vous pouvez n'avoir que deux cartes et les faire filtrer une adresse IP externe, comme celle d'un routeur proche, à condition que le routeur relié à une seule carte.
En d'autres termes, puisque je veux utiliser la machine comme firewall, je dois contrôler avec précision la destination physique de certains paquets.
J'ai le petit réseau de machines sur un hub connecté à eth0
, je configure donc un réseau de ce côté :
route add -net 192.168.2.128 netmask 255.255.255.128 dev eth0
Remplacez le 128 par un 0 pour un réseau de classe C entier. Ici, je ne le fais pas puisque j'ai juste divisé en deux l'espace d'adressage. Le "dev eth0" n'est pas nécessaire ici, puisque l'adresse de la carte fait partie de ce réseau, mais il peut être nécessaire de l'écrire chez vous. On pourrait désirer plus d'une carte prenant ce sous réseau en charge (127 machines sur un segment, bravo !) mais ces cartes utiliseraient le même masque de sous-réseau et seraient considérées comme une seule par la partie routage du noyau.
Sur l'autre carte, j'ai une ligne qui passe directement à travers un gros routeur, auquel je fais confiance.
client 129 __ | __ client 1 \ .0 .128 | / net 1 client 2 --- Hub - eth0 - Kernel - eth1 - Hub - Router --- net 2 client 3 __/ .100 .228 .2 | \__ net 3 | client 254
J'utilise une route fixe (c'est-à-dire "statique") depuis la carte vers ce routeur, puisque sinon il ferait partie du masque de sous-réseau de la première carte et le noyau se tromperait sur la manière d'envoyer les paquets au routeur. Je veux filtrer ces paquets et c'est une raison de plus de les router explicitement.
route add 192.168.2.2 dev eth1
Je n'en ai pas besoin, puisque je n'ai pas d'autres machines dans cette moitié de l'espace d'adressage, mais je déclare un réseau sur la seconde carte. La séparation de mes interfaces réseau en deux groupes grâce au routage me permettra éventuellement de faire du filtrage très précis, mais vous pouvez très bien vous en sortir avec beaucoup moins de routage que cela.
route add -net 192.168.2.128 netmask 255.255.255.128 dev eth1
J'ai également besoin d'envoyez tous les paquets non-locaux au monde et je dis donc au noyau de les envoyer au gros routeur :
route add default gw 192.168.2.2
Nous avions auparavant une configuration standard pour le réseau, mais comme nous faisons du bridging, nous devons écouter sur chaque carte les paquets qui ne nous sont pas destinés. Ceci doit aller dans le fichier de configuration réseau :
ifconfig promisc eth0
ifconfig promisc eth1
La page de manuel indique d'utiliser allmulti=promisc
, mais cela ne fonctionnait pas pour moi.
J'ai remarqué une chose : j'ai dû passer la seconde carte dans un mode lui permettant aux questions du gros routeur à propos des machines que je cache sur mon réseau local.
ifconfig arp eth1
Pour faire bonne mesure, j'ai effectué cette opération pour l'autre carte aussi.
ifconfig arp eth0
Ajoutez la mise en route du pont dans votre fichier de configuration :
brcfg -enable
La configuration du pont mettra en route certains ports. Vous pouvez expérimenter l'allumage et l'extinction des ports un à la fois :
brcfg -port 0 -disable/-enable
brcfg -port 1 -disable/-enable
Vous pouvez obtenir un rapport sur l'état courant avec :
brcfg
sans aucun paramètres. Vous pourrez voir que le pont écoute, apprend, et effectue le forwarding. (Je ne comprends pas pourquoi le code répète la même adresse matérielle pour mes deux cartes, mais peu importe... le HOWTO de Chris affirme que c'est correct).
Si le réseau est encore en fonction, essayez votre script de configuration en vrai en arrêtant les deux cartes et en l'exécutant :
ifconfig eth0 down
ifconfig eth1 down
/etc/rc.d/rc.inet1
Avec un peu de chance, les divers systèmes tel nfs, ypbind, etc... ne s'en rendront pas compte. N'essayez pas ceci si vous n'êtes pas derrière le clavier !
Si vous désirez être plus prudent que cela, vous devrez arrêter le plus de démons possible, et démonter les répertoires NFS. Le pire qu'il puisse vous arriver est d'avoir à rebooter en mode single-user (le paramètre "single" de lilo
ou loadlin
), et de restaurer les fichiers à leur valeur d'avant les modifications.
Vérifiez qu'il existe un trafic différent sur chaque interface :
tcpdump -i eth0
(dans une fenêtre)
tcpdump -i eth1
(dans une autre fenêtre)
Vous devriez être habitué à l'utilisation de tcpdump pour trouver des évènements qui ne devraient pas se passer, ou qui existent mais ne devraient pas.
Par exemple, recherchez les paquets qui ont traversé le pont vers la seconde carte depuis le réseau interne. Ici, je cherche les paquets venant de la machine avec l'adresse .22 :
tcpdump -i eth1 -e host 192.168.2.22
A présent, envoyez un ping depuis l'hôte en .22 vers le routeur. Vous devriez voir le paquet affiché par tcpdump.
A présent, vous devriez avoir un pont, et qui possède également deux adresses réseau. Vérifiez que vous pouvez les ping
er depuis l'extérieur de votre réseau local et depuis l'intérieur, que vous pouvez utiliser telnet
et ftp
depuis et vers l'intérieur du réseau.