Sophie

Sophie

distrib > Mandriva > 9.0 > i586 > by-pkgid > 0d5cd12c82d627a82c59047e1ba7b8a9 > files > 1596

howto-html-fr-9.0-0.2mdk.noarch.rpm

<HTML>
<HEAD>
<TITLE>PONT</TITLE>
</HEAD>
<BODY>
<A NAME="BRIDGING"></A> <H1>3. <A NAME="s3"></A>PONT</H1>
<P>
<A HREF="Bridge+Firewall.html#toc3">Contenu de cette section</A></P>

<A NAME="Software"></A> <H2>3.1 <A NAME="ss3.1"></A> Logiciel</H2>

<P>R&eacute;cup&eacute;rez l'
<A HREF="ftp://shadow.cabi.net/pub/Linux/BRCFG.tgz">utilitaire de configuration du pont</A>
 depuis la page personnelle d'Alan Cox. C'est la m&ecirc;me r&eacute;f&eacute;rence que dans le document de Chris. Je n'ai pas compris que c'&eacute;tait un URL <EM>ftp</EM> en non un URL <EM>http</EM>...</P>
<P></P>

<A NAME="Prior Reading"></A> <H2>3.2 <A NAME="ss3.2"></A> Lecture pr&eacute;liminaires</H2>

<P>Lisez le 
<A HREF="ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/mini/Multiple-Ethernet">Multiple Ethernet HOWTO</A>
 pour obtenir des conseils pour faire reconna&icirc;tre et pour configurer plus d'une carte r&eacute;seau.</P>
<P></P>
<P>Vous pourrez trouver encore plus de d&eacute;tails sur le type de commandes magiques &agrave; passer au <EM>prompt</EM> se trouvent dans le 
<A HREF="ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/BootPrompt-HOWTO">Boot Prompt HOWTO</A>
.</P>
<P></P>
<P>Pour compl&eacute;ter vos lectures, lisez le 
<A HREF="ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/NET-2-HOWTO">NET-2 HOWTO</A>
. C'est un document plut&ocirc;t long, et vous devrez y piocher les d&eacute;tails qui vous int&eacute;ressent.</P>
<P></P>

<A NAME="Boot configuration"></A> <H2>3.3 <A NAME="ss3.3"></A> Configuration de lancement</H2>

<P>Les lectures pr&eacute;c&eacute;dentes vont vous indiquer ce dont vous avez besoin pour pr&eacute;parer le noyau &agrave; reconna&icirc;tre un deuxi&egrave;me p&eacute;riph&eacute;rique ethernet lors du d&eacute;marrage, en ajoutant la ligne suivante dans votre fichier <CODE>/etc/lilo.conf</CODE>, et en relan&ccedil;ant <CODE>lilo</CODE>&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
append = 'ether=0,0,eth1' 
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>Notez le 'eth1'. 'eth0' repr&eacute;sente la premi&egrave;re carte. 'eth1' est la seconde carte. Vous pouvez &eacute;galement ajouter les param&egrave;tres de d&eacute;marrage &agrave; la ligne de commande que <CODE>lilo</CODE> vous offre. Pour trois cartes&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
linux ether=0,0,eth1 ether=0,0,eth2 
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>J'utilise <CODE>loadlin</CODE> pour lancer mon noyau Linux depuis DOS&nbsp;: </P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
loadlin.exe c:\vmlinuz root=/dev/hda3 ro ether=0,0,eth1 ether=0,0,eth2 
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>Notez que cette astuce oblige le noyau &agrave; d&eacute;tecter les cartes au d&eacute;marrage. La d&eacute;tection ne sera pas faite si vous chargez les gestionnaires de p&eacute;riph&eacute;rique ethernet en <B>module</B> (par s&eacute;curit&eacute;, puisque l'ordre de d&eacute;tection ne peut &ecirc;tre d&eacute;termin&eacute;), donc si vous utilisez des modules, vous aurez &agrave; ajouter l'IRQ appropri&eacute;e et le param&egrave;tre de port pour le gestionnaire de p&eacute;riph&eacute;rique dans votre fichier <CODE>/etc/conf.modules</CODE>. Dans mon cas, j'ai les lignes&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
 
<PRE>
alias eth0 3c509
alias eth1 de620
options 3c509 irq=5 io=0x210
options de620 irq=7 bnc=1
</PRE>
 
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>Vous pouvez savoir si vous utilisez les modules en utilisant ``ps -aux'' pour voir si <CODE>kerneld</CODE> est lanc&eacute;, et en v&eacute;rifiant qu'il y a des fichiers <CODE>.o</CODE> dans un sous-r&eacute;pertoire du r&eacute;pertoire <CODE>/lib/modules</CODE>. Utilisez le nom de r&eacute;pertoire que vous donne la commande <CODE>uname -r</CODE>. Si vous avez un <CODE>kerneld</CODE> lanc&eacute; et/ou vous avez un fichier <CODE>foo.o</CODE>, &eacute;ditez <CODE>/etc/conf.modules</CODE> et lisez avec soin la page de manuel de <CODE>depmod</CODE>.</P>
<P></P>
<P>Notez &eacute;galement que jusque r&eacute;cemment (noyau 2.0.25), le <EM>driver</EM> pour la carte <B>3c509</B> ne pouvait pas &ecirc;tre utilis&eacute; pour plus d'une carte s'il &eacute;tait utilis&eacute; en module. J'ai vu un <EM>patch</EM> quelque part pour corriger cette limitation. Il devrait &ecirc;tre inclus dans le noyau &agrave; l'heure o&ugrave; vous lisez ces lignes.</P>
<P></P>

<A NAME="Kernel configuration"></A> <H2>3.4 <A NAME="ss3.4"></A> Configuration du noyau</H2>

<P>Recompilez le noyau avec le <EM>bridging</EM>&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
CONFIG_BRIDGE=y 
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>J'ai &eacute;galement compil&eacute; mon noyau avec le <EM>firewalling</EM>, l'<EM>IP-forwarding</EM> et l'<EM>IP-masquerading</EM>. C'est seulement si vous d&eacute;sirez utiliser le <EM>firewalling</EM> &eacute;galement...</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
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
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>Vous aurez besoin en plus de la configuration r&eacute;seau standard&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
CONFIG_NET=y
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>et je ne pense pas que vous deviez vous pr&eacute;ocupper des autres options r&eacute;seau. Les options que je n'ai pas compil&eacute; dans le noyau sont s&eacute;lectionn&eacute;es en tant que modules afin que je puisse les ajouter &eacute;ventuellement plus tard.</P>
<P></P>
<P>Installez le nouveau noyau, relancez <CODE>lilo</CODE> et red&eacute;marrez sur le nouveau noyau. Rien ne devrait avoir chang&eacute; pour l'instant&nbsp;!</P>
<P></P>

<A NAME="Network addresses"></A> <H2>3.5 <A NAME="ss3.5"></A> Adresses r&eacute;seau</H2>

<P>Chris dit qu'un pont ne doit pas avoir d'adresse IP mais ce n'est pas la configuration qui est pr&eacute;sent&eacute; ici.</P>
<P></P>
<P>Vous allez utiliser la machine pour vous connecter au r&eacute;seau donc vous avez besoin d'une adresse et vous devez vous assurer que le device <EM>loopback</EM> configur&eacute; normalement afin que vos logiciels puisse communiquer avec ce &agrave; quoi ils s'attendent. Si <EM>loopback</EM> est d&eacute;sactiv&eacute;, le <EM>r&eacute;solveur de noms</EM> ou d'autres services ne fonctionneront pas. Voyez le NET-2-HOWTO, mais votre configuration standard devrait d&eacute;j&agrave; avoir fait cela&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
ifconfig lo 127.0.0.1
route add -net 127.0.0.0
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>Vous allez devoir donner des adresses &agrave; vos cartes r&eacute;seau. J'ai chang&eacute; le fichier <CODE>/etc/rc.d/rc.inet1</CODE> de ma slackware (3.x) pour configurer deux cartes et vous devrez juste regarder votre fichier de configuration du r&eacute;seau et doubler ou tripler le nombre d'instructions s'y trouvant. Supposons que vous ayez d&eacute;j&agrave; une adresse &agrave;</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
192.168.2.100
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>(cette adresse fait partie des adresses r&eacute;serv&eacute;es pour des r&eacute;seaux priv&eacute;s, mais ne faites pas attention, cela ne cassera rien si vous utilisez cette adresse par erreur) alors vous avez probablement une ligne ressemblant &agrave;</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
ifconfig eth0 192.168.2.100 netmask 255.255.255.0 metric 1
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>dans votre fichier de configuration. La premi&egrave;re chose que vous allez probablement vouloir faire est couper l'espace des adresses atteintes par cette carte en deux afin de pouvoir &eacute;ventuellement faire un pont ou filtrer entre les deux moiti&eacute;s. Ajoutez donc une ligne qui r&eacute;duit le masque de sous-r&eacute;seau pour adresser un plus petit nombre de machines&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
ifconfig eth0 netmask 255.255.255.128
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>Essayez cette configuration. Cela restreint la carte &agrave; l'espace des adresses entre .0 et .127.</P>
<P></P>
<P>A pr&eacute;sent, vous pouvez configurer votre deuxi&egrave;me carte dans la deuxi&egrave;me moiti&eacute; de l'espace des adresses locales. Assurez vous que personne n'utilise l'adresse que vous allez prendre. Pour des raisons de sym&eacute;trie, j'utiliserai ici 228=128+100. N'importe quelle adresse conviendra, &agrave; condition qu'elle ne se trouve pas dans le masque de l'autre carte. &Eacute;vitez les adresses sp&eacute;ciales comme .0, .1, .128, etc... &agrave; moins que vous sachiez ce que vous faites.</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
ifconfig eth1 192.168.2.228 netmask 255.255.255.128 metric 1
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>Cela restreint la deuxi&egrave;me carte aux adresses entre .128 et .255. </P>
<P></P>

<A NAME="Network routing"></A> <H2>3.6 <A NAME="ss3.6"></A> Routage r&eacute;seau</H2>

<P>C'est ici que les d&eacute;fauts de l'utilisation simultann&eacute;e du pont et du firewall&nbsp;: vous ne pouvez pas filtrer des paquets qui ne sont pas rout&eacute;s. Pas de route, pas de firewall. Cette r&egrave;gle est v&eacute;rifi&eacute;e en tout cas dans les version 2.0.30 ou suivantes du noyau. Les filtres du firewall sont &eacute;troitement li&eacute;s au code source de l'IP-Forwarding.</P>
<P></P>
<P>Cela ne signifie pas que vous ne pouvez pas utiliser le pont. Vous pouvez installer un pont entre deux cartes et filtrer &agrave; partir d'une troisi&egrave;me. Vous pouvez n'avoir que deux cartes et les faire filtrer une adresse IP externe, comme celle d'un routeur proche, &agrave; condition que le routeur reli&eacute; &agrave; une seule carte.</P>
<P></P>
<P>En d'autres termes, puisque je veux utiliser la machine comme firewall, je dois contr&ocirc;ler avec pr&eacute;cision la destination physique de certains paquets.</P>
<P></P>
<P>J'ai le petit r&eacute;seau de machines sur un <EM>hub</EM> connect&eacute; &agrave; <CODE>eth0</CODE>, je configure donc un r&eacute;seau de ce c&ocirc;t&eacute;&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
route add -net 192.168.2.128 netmask 255.255.255.128 dev eth0
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>Remplacez le 128 par un 0 pour un r&eacute;seau de classe C entier. Ici, je ne le fais pas puisque j'ai juste divis&eacute; en deux l'espace d'adressage. Le 'dev eth0' n'est pas n&eacute;cessaire ici, puisque l'adresse de la carte fait partie de ce r&eacute;seau, mais il peut &ecirc;tre n&eacute;cessaire de l'&eacute;crire chez vous. On pourrait d&eacute;sirer plus d'une carte prenant ce sous r&eacute;seau en charge (127 machines sur un segment, bravo&nbsp;!) mais ces cartes utiliseraient le m&ecirc;me masque de sous-r&eacute;seau et seraient consid&eacute;r&eacute;es comme une seule par la partie routage du noyau.</P>
<P></P>
<P>Sur l'autre carte, j'ai une ligne qui passe directement &agrave; travers un gros routeur, auquel je fais confiance.</P>
<P>
<PRE>
                                             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
</PRE>
</P>
<P></P>
<P>J'utilise une route fixe (c'est-&agrave;-dire 'statique') depuis la carte vers ce routeur, puisque sinon il ferait partie du masque de sous-r&eacute;seau de la premi&egrave;re carte et le noyau se tromperait sur la mani&egrave;re d'envoyer les paquets au routeur. Je veux filtrer ces paquets et c'est une raison de plus de les router explicitement.</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
route add 192.168.2.2 dev eth1
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>Je n'en ai pas besoin, puisque je n'ai pas d'autres machines dans cette moiti&eacute; de l'espace d'adressage, mais je d&eacute;clare un r&eacute;seau sur la seconde carte. La s&eacute;paration de mes interfaces r&eacute;seau en deux groupes gr&acirc;ce au routage me permettra &eacute;ventuellement de faire du filtrage tr&egrave;s pr&eacute;cis, mais vous pouvez tr&egrave;s bien vous en sortir avec beaucoup moins de routage que cela.</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
route add -net 192.168.2.128 netmask 255.255.255.128 dev eth1
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>J'ai &eacute;galement besoin d'envoyez tous les paquets non-locaux au monde et je dis donc au noyau de les envoyer au gros routeur&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
route add default gw 192.168.2.2
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>

<A NAME="Card configuration"></A> <H2>3.7 <A NAME="ss3.7"></A> configuration de la carte</H2>

<P>Nous avions auparavant une configuration standard pour le r&eacute;seau, mais comme nous faisons du <EM>bridging</EM>, nous devons &eacute;couter sur chaque carte les paquets qui ne nous sont pas destin&eacute;s. Ceci doit aller dans le fichier de configuration r&eacute;seau&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
ifconfig promisc eth0
ifconfig promisc eth1
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>La page de manuel indique d'utiliser <CODE>allmulti=promisc</CODE>, mais cela ne fonctionnait pas pour moi.</P>
<P></P>

<A NAME="Additional routing"></A> <H2>3.8 <A NAME="ss3.8"></A> Routage additionnel</H2>

<P>J'ai remarqu&eacute; une chose&nbsp;: j'ai d&ucirc; passer la seconde carte dans un mode lui permettant aux questions du gros routeur &agrave; propos des machines que je cache sur mon r&eacute;seau local.</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
ifconfig arp eth1
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>Pour faire bonne mesure, j'ai effectu&eacute; cette op&eacute;ration pour l'autre carte aussi.</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
ifconfig arp eth0
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>

<A NAME="Bridge Configuration"></A> <H2>3.9 <A NAME="ss3.9"></A> Configuration du pont</H2>

<P>Ajoutez la mise en route du pont dans votre fichier de configuration&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
brcfg -enable
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>La configuration du pont mettra en route certains ports. Vous pouvez exp&eacute;rimenter l'allumage et l'extinction des ports un &agrave; la fois&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
brcfg -port 0 -disable/-enable
brcfg -port 1 -disable/-enable 
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>Vous pouvez obtenir un rapport sur l'&eacute;tat courant avec&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
brcfg
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>sans aucun param&egrave;tres. Vous pourrez voir que le pont &eacute;coute, apprend, et effectue le <EM>forwarding</EM>. (Je ne comprends pas pourquoi le code r&eacute;p&egrave;te la m&ecirc;me adresse mat&eacute;rielle pour mes deux cartes, mais peu importe... le HOWTO de Chris affirme que c'est correct).</P>
<P></P>

<A NAME="Try it out"></A> <H2>3.10 <A NAME="ss3.10"></A> Essais</H2>

<P>Si le r&eacute;seau est encore en fonction, essayez votre script de configuration en vrai en arr&ecirc;tant les deux cartes et en l'ex&eacute;cutant&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
ifconfig eth0 down
ifconfig eth1 down
/etc/rc.d/rc.inet1
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>Avec un peu de chance, les divers syst&egrave;mes tel <B>nfs</B>, <B>ypbind</B>, etc... ne s'en rendront pas compte. <I>N'essayez pas ceci si vous n'&ecirc;tes pas derri&egrave;re le clavier&nbsp;!</I></P>
<P></P>
<P>Si vous d&eacute;sirez &ecirc;tre plus prudent que cela, vous devrez arr&ecirc;ter le plus de d&eacute;mons possible, et d&eacute;monter les r&eacute;pertoires NFS. Le pire qu'il puisse vous arriver est d'avoir &agrave; rebooter en mode <EM>single-user</EM> (le param&egrave;tre '<B>single</B>' de <CODE>lilo</CODE> ou <CODE>loadlin</CODE>), et de restaurer les fichiers &agrave; leur valeur d'avant les modifications.</P>
<P></P>

<H2>3.11 <A NAME="ss3.11"></A> V&eacute;rifications</H2>

<P>V&eacute;rifiez qu'il existe un trafic diff&eacute;rent sur chaque interface&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
tcpdump -i eth0
</PRE>
 (dans une fen&ecirc;tre)
<PRE>
tcpdump -i eth1
</PRE>
 (dans une autre fen&ecirc;tre)
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>Vous devriez &ecirc;tre habitu&eacute; &agrave; l'utilisation de <B>tcpdump</B> pour trouver des &eacute;v&egrave;nements qui ne devraient pas se passer, ou qui existent mais ne devraient pas.</P>
<P></P>
<P>Par exemple, recherchez les paquets qui ont travers&eacute; le pont vers la seconde carte depuis le r&eacute;seau interne. Ici, je cherche les paquets venant de la machine avec l'adresse .22&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
tcpdump -i eth1 -e host 192.168.2.22
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>A pr&eacute;sent, envoyez un ping depuis l'h&ocirc;te en .22 vers le routeur. Vous devriez voir le paquet affich&eacute; par tcpdump.</P>
<P></P>
<P>A pr&eacute;sent, vous devriez avoir un pont, et qui poss&egrave;de &eacute;galement deux adresses r&eacute;seau. V&eacute;rifiez que vous pouvez les <CODE>ping</CODE>er depuis l'ext&eacute;rieur de votre r&eacute;seau local et depuis l'int&eacute;rieur, que vous pouvez utiliser <CODE>telnet</CODE> et <CODE>ftp</CODE> depuis et vers l'int&eacute;rieur du r&eacute;seau.</P>
<P></P>

<HR>
<P>
Chapitre <A HREF="Bridge+Firewall-4.html">suivant</A>,
Chapitre <A HREF="Bridge+Firewall-2.html">Pr&eacute;c&eacute;dent</A>
<P>
Table des mati&egrave;res de <A HREF="Bridge+Firewall.html#toc3">ce chapitre</A>,
 <A HREF="Bridge+Firewall.html#toc">Table des mati&egrave;res</A> g&eacute;n&eacute;rale</P>
<P>
<A HREF="Bridge+Firewall.html">D&eacute;but</A> du document,
 <A HREF="#0"> D&eacute;but de ce chapitre</A></P>
</BODY>
</HTML>