$FreeBSD: head/fr_FR.ISO8859-1/articles/ip-aliasing/article.sgml 39544
2012-09-14 17:47:48Z gabor $
Définir des alias IP consiste à affecter plus d'une adresse IP à une interface réseau. Les alias IP sont typiquement employés pour héberger des serveurs Web et FTP virtuels et pour réorganiser ses serveurs sans avoir à mettre à jour d'autres machines (ce dernier usage est particulièrement utile avec les serveurs de noms de domaines). Voyez un alias IP comme un petit enfant perché sur le dos de son interface parente (qui est l'adresse primaire de l'interface physique).
Les alias IP n'ont rien à voir avec la notion de multi-hébergement - “multi-homing” (lorsqu'une machine dispose de plus d'une interface réseau active), sauf au cas où une machine sur plusieurs réseaux fournit des services tels que ceux listés plus haut. La confusion entre les deux notions est une erreur propagée du monde Macintosh et vous seriez avisé de ne pas les suivre sur ce point.
Il y a deux commandes essentielles à la mise en place d'alias IP sur FreeBSD (et sur tous les autres systèmes Unix que j'aie jamais utilisés), ce sont ifconfig et route. L'utilisation correcte de ces commandes est décrite ci-dessous. Pour connaître toutes les subtilités de leur emploi, reportez-vous aux pages de manuel correspondantes. Il y a deux autres commandes utiles pour vérifier que tout fonctionne comme il se doit et pour mettre les choses au point si ce n'est pas le cas. netstat vous permet de consulter la table de routage du noyau (entre autres choses utiles), et ping est un appréciable petit outil pour tester l'accès à votre nouvel alias (comme à toute autre adresse IP).
Important : Vous devez être en session sous le compte super-utilisateur root pour pouvoir exécuter la plupart des commandes décrites dans ce qui suit.
ifconfig sert à configurer les différentes caractéristiques d'une interface réseau (adresse, protocole, masque de réseau, etc.). ifconfig nous servira ici à ajouter (et parfois à supprimer) les adresses des alias des interfaces.
Dans l'exemple ci-dessous, nous supposerons que notre machine n'a qu'une seule interface Ethernet 3Com 3C509 (ep0) d'adresse 192.168.57.82 avec comme masque de sous-réseau 255.255.255.0, en plus de l'interface “en boucle” standard 127.0.0.1. Vous devrez bien sûr remplacer ces valeurs par l'adresse et le masque de sous-réseau de votre(vos) interface(s). L'adresse et le masque de sous-réseau de l'interface “en boucle” sont les mêmes sur toutes les machines.
Pour ajouter un alias à ep0, nous passons simplement une commande du style:
Ce qui dit à FreeBSD que nous définissons une adresse IP (inet) pour la carte 3Com (ep0) avec comme adresse 192.168.57.10, comme masque de sous-réseau (netmask) 255.255.255.255 (i.e., tous les bits à 1) pour éviter que le système d'exploitation ne proteste qu'il y a déjà une adresse affectée à cette interface, et que c'est un alias pour cette interface (alias).
Vous pouvez aussi omettre le masque de sous-réseau (ou lui donner une autre valeur). Jusqu'à FreeBSD 2.1.0 compris, il y a néanmoins un bogue qui fait que les commandes ifconfig alias échouent à la première tentative, mais réussissent à la seconde, si vous n'indiquez pas 255.255.255.255 comme masque de sous-réseau. Si vous ne donnez pas ce masque de sous-réseau de 255.255.255.255, vous devrez aussi ajouter une route manuellement, comme décrit ci-dessous.
Pour supprimer l'alias, nous exécutons une commande très similaire:
Il n'y a pas besoin de paramètres supplémentaires, tels que le masque de sous-réseau, parce que l'alias est entièrement défini par l'adresse IP, de sorte que FreeBSD peut supprimer toutes les ressources associées en se basant sur cette adresse.
route sert à modifier à la main la table de routage du noyau. Pour nos besoins, une fois que nous avons donné à FreeBSD l'alias pour l'interface, nous devons définir une route IP vers cet alias. Si vous avez précisé le masque de sous-réseau de 255.255.255.255 avec la commande précédente, vous pouvez vous dispenser de cette étape.
Pour ajouter une route vers notre nouvelle interface, nous exécutons:
Cela dit à FreeBSD que pour arriver à la machine 192.168.57.10, les paquets doivent être envoyés sur l'interface “en boucle” (127.0.0.1 aussi appelée localhost et que la distance (décompte de noeuds intermédiaires) est de 0, ce qui signifie que c'est la machine locale.
Pour supprimer cette route, nous exécutons:
De nouveau, comme la route est entièrement définie par les paramètres indiqués, nous pouvons laisser de côté les autres données telles que le masque de sous-réseau et la distance. Pour des informations complètes sur la commande route, voyez les pages de manuel.
Maintenant que nous avons (espérons-le) un alias défini et accessible, nous devons vérifier qu'il fonctionne correctement. Nous examinerons d'abord la table de routage du noyau, pour vérifier que la route vers l'alias est bien présente, puis nous utiliserons ping pour nous assurer que des paquets peuvent l'atteindre.
Pour voir la table de routage du noyau, sous forme numérique, tapons:
Dans notre exemple, voici à quoi ressemblerait le résultat:
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
Nous y voyons la route par défaut, la route vers l'interface “en boucle”, la route vers notre réseau local et une curieuse route vers notre alias. Le /32 qui suit l'adresse de l'alias donne la longueur du masque de sous-réseau (le nombre de 1, en partant de la gauche). Comme nous avons utilisé un masque de sous-réseau de 255.255.255.255, la longueur de celui-ci (le nombre de 1) est de 32.
Maintenant que nous avons vérifié que la route est bien dans la table de routage du noyau, nous pouvons effectuer un contrôle rapide pour nous assurer que cette route fonctionne bien. Exécutons une commande ping comme ci-dessous:
Si tout va bien, voici ce que nous verrions:
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
Appuyons simplement sur Ctrl-C pour arrêter ping si tout paraît satisfaisant. Il nous “crachera” 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ébut et lisez les pages de manuel (non, vraiment, allez lire les pages de manuel), et, finalement, posez vos questions sur la liste de diffusion pour les questions d'ordre général à propos de FreeBSD.
Maintenant que nous avons compris comment utiliser les commandes ifconfig et route pour ajouter et supprimer des alias IP, faisons en sorte que la machine exécute les commandes voulues au démarrage de façon à ce que l'alias soit toujours actif.
Vers la fin de notre fichier /etc/rc.local, nous ajouterons la ligne:
ifconfig ep0 inet 192.168.57.10 netmask 255.255.255.255 alias
Si nous utilisons un autre masque de sous-réseau que 255.255.255.255, nous devrons aussi utiliser la commande route comme expliqué plus haut. Il est possible d'ajouter de cette façon autant d'alias que l'on veut (en supposant que nous disposons de suffisamment d'adresses allouées). Il suffit de mettre plusieurs commandes comme la précédente dans /etc/rc.local, avec les adresses appropriées. Il est même possible de définir comme alias des adresses d'un autre réseau IP, si ce réseau est aussi routé sur nous. C'est une situation différente de celle d'une machine avec plusieurs interfaces physiques qui doivent toujours avoir des adresses sur des réseaux IP différents.
Il y a un certains nombre de points à connaître lorsque l'on utilise un grand nombre d'alias (plus de ~10), que je citerai.
Tout d'abord, il y a un bogue dans toutes les distributions de bind (le serveur DNS named fait partie de BIND) qui empêche le démarrage correct de named lorsqu'il y a plus de 64 alias sur une interface. Il n'y a pas de palliatif particulièrement simple, je ne les mentionnerai donc pas ici.
En second lieu, pour éviter de truffer votre fichier /etc/rc.local de quantité d'ifconfig, je vous suggère d'utiliser un fichier à part dans /etc pour les y mettre. Créez par exemple un fichier ifconfig.ep0 et mettez-y tous les ifconfig alias. Puis dans /etc/rc.local, ajoutez les lignes suivantes:
if [ -x /sbin/ifconfig ]; then echo -n 'Adding local ifconfigs ' . /etc/ifconfig.ep0 echo ' done.' fi
Ce fragment de procédure provient d'un fichier /etc/rc.local
fourni par Neil Fowler Wright <neil@corpex.com>
. Le bricoleur trouvera
moyen d'y mettre des boucles s'il y a plusieurs interfaces dont les alias sont définis
dans différents fichiers ifconfig.*.
M'envoyer directement un courrier électronique n'est probablement pas le meilleur moyen d'obtenir de l'aide sur les problèmes d'alias IP. Je suis assez occupé la plupart du temps, et ai tendance à devenir assez rouspéteur. Néanmoins, les participants de la liste de diffusion pour les questions d'ordre général à propos de FreeBSD sont amicaux et secourables et répondront à vos questions plus rapidement que je ne le ferais.
Cette page a grandement bénéficié des suggestions de Neil Fowler Wright, Paul DuBois, Gabe Schuyler, et de Brodie le chat.
Ce document, ainsi que d'autres peut être téléchargé sur ftp.FreeBSD.org/pub/FreeBSD/doc/.
Pour toutes questions à propos de FreeBSD, lisez la documentation avant de contacter <questions@FreeBSD.org>.
Pour les questions sur cette documentation, contactez <doc@FreeBSD.org>.