Qu'est-ce que /etc/hosts et pourquoi est-il utilisé ?
Pour envoyer le trafic réseau à un hôte, l'adresse IP (Internet Protocol) numérique de cet hôte doit être connue. L'adresse IP est traditionnellement écrite sous la forme xxx.xxx.xxx.xxx où chaque xxx représente une valeur comprise entre 0 et 255, pour une adresse réseau IPv4. Les ordinateurs ont besoin de ces adresses, mais les humains ont du mal à se souvenir des valeurs numériques. Le service de nom de domaine (DNS) fournit un mécanisme pour associer un ou plusieurs noms alphanumériques à une adresse IP numérique. Sur un système Linux, ces noms lisibles sont convertis en leurs équivalents IP numériques par la bibliothèque Resolver, contenue dans les fichiers libresolve.so fournis avec le package glibc RPM. Les programmes qui ont besoin de rechercher l'adresse IP numérique pour un nom émettent des appels vers cette bibliothèque.
Les noms d'hôte et leurs adresses IP peuvent être trouvés à divers endroits :fichiers locaux, serveurs DNS distants ou serveurs NIS+, pour n'en nommer que quelques-uns. L'ordre dans lequel ces ressources sont recherchées dépend des hôtes :entrée dans /etc/nsswitch.conf dossier. Cette ligne ressemble généralement à ceci :
# vi /etc/nsswitch.conf hosts: files dns
Cela oblige la bibliothèque de résolution à consulter d'abord le fichier /etc/hosts local; si le nom d'hôte n'y est pas trouvé, alors consultez les serveurs de noms DNS distants identifiés par le /etc/resolv.conf fichier.
Linux fournit le bind Package RPM pour permettre à un domaine administratif de configurer et de maintenir son propre service DNS, mais souvent la taille du réseau local n'est que de quelques hôtes et justifie l'effort de maintenance d'un service DNS injustifié.
Format du fichier /etc/hosts
Le fichier /etc/hosts est un fichier texte ordinaire. Deux types de lignes sont autorisées :
- Lignes vides
- Définitions des noms d'hôtes
Les lignes peuvent être mélangées au besoin. Les commentaires commencent par un symbole dièse (# ) et continuez jusqu'à la fin de la ligne.
Associer les noms d'hôte et les adresses IP
Pour chaque hôte, une seule ligne doit être présente avec les informations suivantes :
IP_address canonical_hostname [aliases ...]
Les champs de l'entrée sont séparés par des espaces blancs (espaces ou tabulations). Le premier champ est l'adresse IP numérique à utiliser pour tous les noms d'hôtes de cette entrée. Une adresse IPv4 (10.1.2.3), une adresse IPv6 (2001:0db8:0000:0000:0000:0000:1428:57ab) ou une abréviation IPv6 (::1) peuvent être utilisées, selon vos besoins.
Après l'adresse IP, les jetons restants spécifient les noms d'hôte connus localement associés à cette adresse IP. Par convention, le premier nom après l'adresse IP est le nom de domaine canonique ou complet. Un exemple de nom canonique serait server.example.com ; c'est le nom officiel de l'hôte.
Tous les noms restants définis pour l'adresse IP sont des alias ou des noms alternatifs pour le nom d'hôte officiel. Par exemple, supposons que l'une des fonctions attribuées à serveur.exemple.com soit le site FTP de l'entreprise. Un alias approprié pourrait alors être myftp.example.com et ce nom pourrait être ajouté à l'entrée /etc/hosts après le nom canonique. Souvent, un alias est simplement le nom d'hôte, sans suffixe de domaine. Par exemple :
192.168.10.12 server.example.com myftp.example.com myhost myftp
L'avantage de répertorier le nom d'hôte canonique comme première définition sur la ligne est que la conversion IP en nom d'hôte (similaire aux recherches DNS inversées) n'affiche généralement que le premier nom trouvé ; convention utilise le nom canonique pour cela. Dans notre exemple, la commande :
$ ping myftp PING myhost.example.com (192.168.10.12) 56(84) bytes of data. 64 bytes from myhost.example.com (192.168.10.12): icmp_seq=1 ttl=64 time=0.023 ms 64 bytes from myhost.example.com (192.168.10.12): icmp_seq=2 ttl=64 time=0.028 ms 64 bytes from myhost.example.com (192.168.10.12): icmp_seq=3 ttl=64 time=0.028 ms
Notez que nous avons envoyé un ping à myftp, mais les résultats proviennent de l'hôte myhost :il s'agit d'un indice fiable indiquant que vous vous adressez à un alias, et non à l'hôte réel.