doc/fr_FR.ISO8859-1/articles/ip-aliasing/article.sgml
2007-01-20 13:34:48 +00:00

277 lines
16 KiB
Text
Executable file

<!--
The FreeBSD Documentation Project
The FreeBSD French Documentation Project
$FreeBSD$
Original revision: n.nn
-->
<!DOCTYPE ARTICLE PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN"> %man;
<!ENTITY % urls PUBLIC "-//FreeBSD//ENTITIES Common Document URL Entities//FR"> %urls;
<!ENTITY % abstract PUBLIC "-//FreeBSD//ENTITIES DocBook Abstract Entities//FR"> %abstract;
<!ENTITY % artheader PUBLIC "-//FreeBSD//ENTITIES DocBook ArtHeader Entities//FR"> %artheader;
<!ENTITY % translators PUBLIC "-//FreeBSD//ENTITIES DocBook Translator Entities//FR"> %translators;
<!ENTITY % authors PUBLIC "-//FreeBSD//ENTITIES DocBook Author Entities//EN"> %authors;
<!ENTITY % mailing-lists PUBLIC "-//FreeBSD//ENTITIES DocBook Mailing List Entities//FR"> %mailing-lists;
<!ENTITY rel.current CDATA "3.2">
]>
<article lang="fr">
<articleinfo>
<title>Alias IP avec FreeBSD 2.x</title>
<authorgroup>
<author>
<firstname>Ben</firstname>
<surname>Black</surname>
</author>
</authorgroup>
&artheader.copyright;
<abstract>
<para><email>black@cypher.net</email></para>
&abstract.license;
&abstract.disclaimer;
&trans.a.haby;
</abstract>
</articleinfo>
<sect1>
<title>Introduction</title>
<para>D&eacute;finir des <emphasis>alias IP</emphasis> consiste &agrave; affecter plus
d'une adresse IP &agrave; une interface r&eacute;seau. Les alias IP sont typiquement
employ&eacute;s pour h&eacute;berger des serveurs Web et FTP virtuels et pour
r&eacute;organiser ses serveurs sans avoir &agrave; mettre &agrave; jour d'autres machines
(ce dernier usage est particuli&egrave;rement utile avec les serveurs de noms
de domaines). Voyez un alias IP comme un petit enfant perch&eacute; sur le
dos de son interface parente (qui est l'adresse primaire de l'interface
physique).</para>
<para>Les alias IP <emphasis>n'ont rien &agrave; voir</emphasis> avec la notion
de <emphasis>multi-h&eacute;bergement</emphasis>&nbsp;-&nbsp;&ldquo;<foreignphrase>multi-homing</foreignphrase>&rdquo;
(lorsqu'une machine dispose de plus d'une interface r&eacute;seau active), sauf
au cas o&ugrave; une machine sur plusieurs r&eacute;seaux fournit des services tels que
ceux list&eacute;s plus haut. La confusion entre les deux notions est une erreur
propag&eacute;e du monde Macintosh et vous seriez avis&eacute; de ne pas les suivre sur
ce point.</para>
<para>Il y a deux commandes essentielles &agrave; la mise en place d'alias IP sur
FreeBSD (et sur tous les autres syst&egrave;mes Unix que j'aie jamais utilis&eacute;s),
ce sont <command>ifconfig</command> et <command>route</command>.
L'utilisation correcte de ces commandes est d&eacute;crite ci-dessous. Pour
conna&icirc;tre toutes les subtilit&eacute;s de leur emploi, reportez-vous aux pages de
manuel correspondantes. Il y a deux autres commandes utiles pour v&eacute;rifier
que tout fonctionne comme il se doit et pour mettre les choses au point
si ce n'est pas le cas. <command>netstat</command> vous permet de
consulter la table de routage du noyau (entre autres choses utiles), et
ping est un appr&eacute;ciable petit outil pour tester l'acc&egrave;s &agrave; votre nouvel
alias (comme &agrave; toute autre adresse IP).</para>
<important>
<para>Vous <emphasis>devez</emphasis> &ecirc;tre en session sous le compte
super-utilisateur <username>root</username> pour pouvoir ex&eacute;cuter la
plupart des commandes d&eacute;crites dans ce qui suit.</para>
</important>
</sect1>
<sect1>
<title>Utiliser <command>ifconfig</command></title>
<para><citerefentry><refentrytitle>ifconfig</refentrytitle></citerefentry>
sert &agrave; configurer les diff&eacute;rentes caract&eacute;ristiques d'une interface r&eacute;seau
(adresse, protocole, masque de r&eacute;seau, etc.).
<citerefentry><refentrytitle>ifconfig</refentrytitle></citerefentry> nous
servira ici &agrave; ajouter (et parfois &agrave; supprimer) les adresses des alias des
interfaces.</para>
<para>Dans l'exemple ci-dessous, nous supposerons que notre machine n'a
qu'une seule interface Ethernet 3Com 3C509 (<devicename>ep0</devicename>)
d'adresse <hostid role="ipaddr">192.168.57.82</hostid> avec comme masque
de sous-r&eacute;seau <hostid role="netmask">255.255.255.0</hostid>, en plus
de l'interface &ldquo;en boucle&rdquo; standard
<hostid role="ipaddr">127.0.0.1</hostid>. Vous devrez bien s&ucirc;r remplacer
ces valeurs par l'adresse et le masque de sous-r&eacute;seau de votre(vos)
interface(s). L'adresse et le masque de sous-r&eacute;seau de l'interface
&ldquo;en boucle&rdquo; sont les m&ecirc;mes sur toutes les machines.</para>
<para>Pour ajouter un alias &agrave; <devicename>ep0</devicename>, nous passons
simplement une commande du style:</para>
<informalexample>
<screen>&prompt.root; <userinput>ifconfig ep0 inet 192.168.57.10 netmask 255.255.255.255 alias</userinput></screen>
</informalexample>
<para>Ce qui dit &agrave; FreeBSD que nous d&eacute;finissons une adresse IP
(<literal>inet</literal>) pour la carte 3Com
(<devicename>ep0</devicename>) avec comme adresse
<hostid role="ipaddr">192.168.57.10</hostid>, comme masque de
sous-r&eacute;seau (<literal>netmask</literal>)
<hostid role="netmask">255.255.255.255</hostid> (i.e., tous
les bits &agrave; 1) pour &eacute;viter que le syst&egrave;me d'exploitation ne proteste qu'il
y a d&eacute;j&agrave; une adresse affect&eacute;e &agrave; cette interface, et que c'est un alias
pour cette interface (<literal>alias</literal>).</para>
<para>Vous pouvez aussi omettre le masque de sous-r&eacute;seau (ou lui donner une
autre valeur). Jusqu'&agrave; FreeBSD 2.1.0 compris, il y a n&eacute;anmoins un bogue
qui fait que les commandes <command>ifconfig alias</command> &eacute;chouent &agrave;
la premi&egrave;re tentative, mais r&eacute;ussissent &agrave; la seconde, si vous n'indiquez
pas <hostid role="netmask">255.255.255.255</hostid> comme masque de
sous-r&eacute;seau. Si vous ne donnez pas ce masque de sous-r&eacute;seau de
<hostid role="netmask">255.255.255.255</hostid>, vous devrez aussi ajouter
une route manuellement, comme d&eacute;crit ci-dessous.</para>
<para>Pour supprimer l'alias, nous ex&eacute;cutons une commande tr&egrave;s
similaire:</para>
<informalexample>
<screen>&prompt.root; <userinput>ifconfig ep0 inet 192.168.57.10 -alias</userinput></screen>
</informalexample>
<para>Il n'y a pas besoin de param&egrave;tres suppl&eacute;mentaires, tels que le masque
de sous-r&eacute;seau, parce que l'alias est enti&egrave;rement d&eacute;fini par l'adresse IP,
de sorte que FreeBSD peut supprimer toutes les ressources associ&eacute;es en se
basant sur cette adresse.</para>
</sect1>
<sect1>
<title>Utiliser <command>route</command></title>
<para><citerefentry><refentrytitle>route</refentrytitle></citerefentry> sert
&agrave; modifier &agrave; la main la table de routage du noyau. Pour nos besoins, une
fois que nous avons donn&eacute; &agrave; FreeBSD l'alias pour l'interface, nous devons
d&eacute;finir une route IP vers cet alias. Si vous avez pr&eacute;cis&eacute; le masque de
sous-r&eacute;seau de <hostid role="netmask">255.255.255.255</hostid> avec la
commande pr&eacute;c&eacute;dente, vous pouvez vous dispenser de cette &eacute;tape.</para>
<para>Pour ajouter une route vers notre nouvelle interface, nous
ex&eacute;cutons:</para>
<informalexample>
<screen>&prompt.root; <userinput>route add -host 192.168.57.10 127.0.0.1 0</userinput></screen>
</informalexample>
<para>Cela dit &agrave; FreeBSD que pour arriver &agrave; la machine
<hostid role="ipaddr">192.168.57.10</hostid>, les paquets doivent &ecirc;tre
envoy&eacute;s sur l'interface &ldquo;en boucle&rdquo;
(<hostid role="ipaddr">127.0.0.1</hostid> aussi appel&eacute;e
<hostid role="hostname">localhost</hostid> et que la distance (d&eacute;compte
de noeuds interm&eacute;diaires) est de <literal>0</literal>, ce qui signifie
que c'est la machine locale.</para>
<para>Pour supprimer cette route, nous ex&eacute;cutons:</para>
<informalexample>
<screen>&prompt.root; <userinput>route delete -host 192.168.57.10</userinput></screen>
</informalexample>
<para>De nouveau, comme la route est enti&egrave;rement d&eacute;finie par les param&egrave;tres
indiqu&eacute;s, nous pouvons laisser de c&ocirc;t&eacute; les autres donn&eacute;es telles que
le masque de sous-r&eacute;seau et la distance. Pour des informations compl&egrave;tes
sur la commande
<citerefentry><refentrytitle>route</refentrytitle></citerefentry>,
voyez les pages de manuel.</para>
</sect1>
<sect1>
<title>Tester notre travail</title>
<para>Maintenant que nous avons (esp&eacute;rons-le) un alias d&eacute;fini et accessible,
nous devons v&eacute;rifier qu'il fonctionne correctement. Nous examinerons
d'abord la table de routage du noyau, pour v&eacute;rifier que la route vers
l'alias est bien pr&eacute;sente, puis nous utiliserons
<citerefentry><refentrytitle>ping</refentrytitle></citerefentry> pour
nous assurer que des paquets peuvent l'atteindre.</para>
<para>Pour voir la table de routage du noyau, sous forme num&eacute;rique,
tapons:</para>
<informalexample>
<screen>&prompt.user; <userinput>netstat -nr</userinput></screen>
</informalexample>
<para>Dans notre exemple, voici &agrave; quoi ressemblerait le r&eacute;sultat:</para>
<programlisting>
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 192.168.57.1 UGSc 4 964 ep0
127.0.0.1 127.0.0.1 UH 1 39 lo0
192.168.57 link#2 UC 0 0
192.168.57.10/32 link#2 UC 0 0
192.168.57.82 127.0.0.1 UGHS 0 0 lo0
224/4 link#2 UCS 0 0
</programlisting>
<para>Nous y voyons la route par d&eacute;faut, la route vers l'interface
&ldquo;en boucle&rdquo;, la route vers notre r&eacute;seau local et une curieuse
route vers notre alias. Le <literal>/32</literal> qui suit l'adresse de
l'alias donne la longueur du masque de sous-r&eacute;seau (le nombre de 1, en
partant de la gauche). Comme nous avons utilis&eacute; un masque de sous-r&eacute;seau
de <hostid role="netmask">255.255.255.255</hostid>, la longueur de
celui-ci (le nombre de 1) est de 32.</para>
<para>Maintenant que nous avons v&eacute;rifi&eacute; que la route est bien dans la table
de routage du noyau, nous pouvons effectuer un contr&ocirc;le rapide pour nous
assurer que cette route fonctionne bien. Ex&eacute;cutons une commande
<citerefentry><refentrytitle>ping</refentrytitle></citerefentry> comme
ci-dessous:</para>
<informalexample>
<screen>&prompt.user; <userinput>ping 192.168.57.10</userinput></screen>
</informalexample>
<para>Si tout va bien, voici ce que nous verrions:</para>
<programlisting>
PING 192.168.57.10 (192.168.57.10): 56 data bytes
64 bytes from 192.168.57.10: icmp_seq=0 ttl=255 time=0.313 ms
64 bytes from 192.168.57.10: icmp_seq=1 ttl=255 time=0.197 ms
64 bytes from 192.168.57.10: icmp_seq=2 ttl=255 time=0.190 ms
</programlisting>
<para>Appuyons simplement sur
<keycombo><keycap>Ctrl</keycap><keycap>C</keycap></keycombo> pour arr&ecirc;ter
<citerefentry><refentrytitle>ping</refentrytitle></citerefentry> si tout
para&icirc;t satisfaisant. Il nous &ldquo;crachera&rdquo; alors quelques
statistiques, que nous pouvons normalement ignorer. S'il n'y a pas de
retour ou s'il y a des messages d'erreur, quelque chose ne va pas.
Reprenez tout du d&eacute;but et lisez les pages de manuel (non, vraiment,
<emphasis>allez lire les pages de manuel</emphasis>), et, finalement,
posez vos questions sur la &a.questions;.</para>
</sect1>
<sect1>
<title>Tout mettre en place</title>
<para>Maintenant que nous avons compris comment utiliser les commandes
<citerefentry><refentrytitle>ifconfig</refentrytitle></citerefentry> et
<citerefentry><refentrytitle>route</refentrytitle></citerefentry> pour
ajouter et supprimer des alias IP, faisons en sorte que la machine
ex&eacute;cute les commandes voulues au d&eacute;marrage de fa&ccedil;on &agrave; ce que l'alias soit
toujours actif.</para>
<para>Vers la fin de notre fichier <filename>/etc/rc.local</filename>, nous
ajouterons la ligne:</para>
<programlisting>
ifconfig ep0 inet 192.168.57.10 netmask 255.255.255.255 alias
</programlisting>
<para>Si nous utilisons un autre masque de sous-r&eacute;seau que
<hostid role="netmask">255.255.255.255</hostid>, nous devrons aussi
utiliser la commande
<citerefentry><refentrytitle>route</refentrytitle></citerefentry> comme
expliqu&eacute; plus haut. Il est possible d'ajouter de cette fa&ccedil;on autant
d'alias que l'on veut (en supposant que nous disposons de suffisamment
d'adresses allou&eacute;es). Il suffit de mettre plusieurs commandes comme
la pr&eacute;c&eacute;dente dans <filename>/etc/rc.local</filename>, avec les adresses
appropri&eacute;es. Il est m&ecirc;me possible de d&eacute;finir comme alias des adresses
d'un autre r&eacute;seau IP, si ce r&eacute;seau est aussi rout&eacute; sur nous. C'est une
situation diff&eacute;rente de celle d'une machine avec plusieurs interfaces
<emphasis>physiques</emphasis> qui doivent <emphasis>toujours</emphasis>
avoir des adresses sur des r&eacute;seaux IP diff&eacute;rents.</para>
<para>Il y a un certains nombre de points &agrave; conna&icirc;tre lorsque l'on utilise
un grand nombre d'alias (plus de ~10), que je citerai.</para>
<para>Tout d'abord, il y a un bogue dans toutes les distributions de
<application>bind</application> (le serveur DNS
<application>named</application> fait partie de
<application>BIND</application>) qui emp&ecirc;che le d&eacute;marrage correct de
<application>named</application> lorsqu'il y a plus de 64 alias sur
une interface. Il n'y a pas de palliatif particuli&egrave;rement simple, je ne
les mentionnerai donc pas ici.</para>
<para>En second lieu, pour &eacute;viter de truffer votre fichier
<filename>/etc/rc.local</filename> de quantit&eacute;
d'<citerefentry><refentrytitle>ifconfig</refentrytitle></citerefentry>, je
vous sugg&egrave;re d'utiliser un fichier &agrave; part dans <filename>/etc</filename>
pour les y mettre. Cr&eacute;ez par exemple un fichier
<filename>ifconfig.ep0</filename> et mettez-y tous les
<literal>ifconfig alias</literal>. Puis dans
<filename>/etc/rc.local</filename>, ajoutez les lignes suivantes:</para>
<programlisting>
if [ -x /sbin/ifconfig ]; then
echo -n 'Adding local ifconfigs '
. /etc/ifconfig.ep0
echo ' done.'
fi
</programlisting>
<para>Ce fragment de proc&eacute;dure provient d'un fichier
<filename>/etc/rc.local</filename> fourni par Neil Fowler Wright
<email>neil@corpex.com</email>. Le bricoleur trouvera moyen d'y mettre
des boucles s'il y a plusieurs interfaces dont les alias sont d&eacute;finis
dans diff&eacute;rents fichiers <filename>ifconfig.*</filename>.</para>
</sect1>
<sect1>
<title>O&ugrave; trouver plus d'aide</title>
<para>M'envoyer directement un courrier &eacute;lectronique n'est probablement pas
le meilleur moyen d'obtenir de l'aide sur les probl&egrave;mes d'alias IP. Je
suis assez occup&eacute; la plupart du temps, et ai tendance &agrave; devenir assez
rousp&eacute;teur. N&eacute;anmoins, les participants de la &a.questions; sont
amicaux et secourables et r&eacute;pondront &agrave; vos questions plus rapidement que
je ne le ferais.</para>
<para>Cette page a grandement b&eacute;n&eacute;fici&eacute; des suggestions de Neil Fowler
Wright, Paul DuBois, Gabe Schuyler, et de Brodie le chat.</para>
</sect1>
</article>