Les entrées dans les fichiers «hôtes» locaux remplacent-elles les recherches de nom directes et inverses?

16

Si j'ai les entrées suivantes dans un fichier d'hôtes:

192.168.100.1    bugs
192.168.100.2    daffy.example.com
192.168.100.3    elmer.example.com.

Est-ce que les tentatives de résolution de nom IP-> par des utilisateurs locaux (je suppose en utilisant «gethostbyaddr» ou l'équivalent Windows) honoreront ces entrées? Ce comportement est-il configurable? Comment varie-t-il entre les systèmes d'exploitation? Est-il important que les entrées du fichier «hôtes» soient pleinement qualifiées ou non?

EDIT: En réponse à Russell, mon système Linux de test exécute RHEL 4. Mon /etc/nsswitch.conf contient la ligne «hosts» suivante:

hosts:      files dns nis

Si j'effectue un ping à l'un de mes hôtes par son nom (par exemple, bugs, daffy), la résolution directe fonctionne correctement. Si je traceroute l'un d'eux par adresse IP, la recherche inversée fonctionne comme prévu. Cependant, si je les ping par IP, le ping ne semble pas résoudre leurs noms d'hôte. Ma compréhension était que le ping Linux tenterait toujours de résoudre les adresses IP en noms, sauf indication contraire. Pourquoi traceroute serait-il capable de gérer les recherches inversées dans les fichiers hôtes, mais pas le ping?

Murali Suriar
la source

Réponses:

16

Généralement, le fichier hosts sera utilisé pour les recherches directes et inverses. La préférence sur un système Unix dépendra de l'ordre des entrées dans votre fichier nsswitch.conf.

Par exemple, la ligne ci-dessous obligera le fichier d'hôtes à remplacer DNS. Si vous inversez les entrées, DNS remplacera le fichier hosts.

hôtes: fichiers dns

Je ne sais pas si vous pouvez régler l'ordre de préférence sur un système Windows.

J'ai jeté un œil à la source du ping dans inetutils-20071127 (la version installée sur ma boîte Ubuntu 9.04) et la source semble activer le mode numérique uniquement si vous pingez une adresse IP plutôt qu'un nom d'hôte:

                if (inet_aton (target, & whereeto.sin_addr) == 1) {
                        nom d'hôte = cible;
                        if (argc == 1)
                                options | = F_NUMERIC;

Cela pourrait expliquer pourquoi vous n'obtenez pas de recherche inversée lorsque vous envoyez une requête ping à votre hôte par adresse IP.

Russell Heilling
la source
C'était ma pensée, mais cela ne semble pas être le cas. Voir la question mise à jour pour plus de détails.
Murali Suriar
Je n'ai pas encore eu l'occasion de regarder la source; cependant, un rapide coup d'œil à la sortie ldd montre que sur mon système, ping est directement lié à la bibliothèque de résolveur DNS libresolv, ce qui pourrait impliquer qu'il contourne le fichier nsswitch et effectue ses recherches inverses directement ...
Russell Heilling
Lorsque vous utilisez l' hostutilitaire ISC , on peut avoir l'impression que la modification de / etc / hosts n'a aucun effet. host 10.0.0.1fera une requête DNS et ignorera le fichier hosts. Cela permet de vérifier le résolveur du système:perl -MSocket -le '$a=inet_aton(shift); $_=gethostbyaddr $a, AF_INET; print' 10.0.0.1
mivk
8

J'ai trouvé une référence à la modification des entrées de registre pour modifier l'ordre de résolution des noms sous Windows:

http://forums11.itrc.hp.com/service/forums/questionanswer.do?threadId=963485

Citant de là:

Par défaut, Windows vérifie les fournisseurs de résolution de noms dans l'ordre suivant:

Local, (cache de nom local NetBT), hôtes, DNS, NetBT (WINS).

Vous voulez que la commande soit Hosts, DNS, Local, NetBT.

Dans ce qui suit, les nombres inférieurs sont plus prioritaires.

Les clés de registre suivantes dans

HKEY_LOCAL_MACHINE\SYSTEM\CurentControlSet\ServicessTcpip\ServiceProvider

doivent être modifiés.

DnsPriority= 0x3e8 (Decimal: 1000)
HostsPriority= 0x1f4 (Decimal: 500)
LocalPriority= 0x5dc (Decimal: 1500)
NetbtPriority= 0x7d1 (Decimal: 2001)
James F
la source
Comment obtiennent-ils ces informations "internes"?
Pacerier
1

Le /etc/host.conffichier spécifie l'ordre utilisé pour découvrir les adresses IP. Le mien contient les éléments suivants par défaut:

#
# /etc/host.conf
#

order hosts,bind
multi on

Cela signifie que le fichier d'hôtes est toujours vérifié en premier, puis DNS (liaison).

Si nisn'est pas spécifié ici, il ne sera jamais regardé /etc/nsswitch.conf.

Lien de documentation: http://tldp.org/LDP/nag/node82.html

Sekenre
la source
La méthode /etc/host.conf est obsolète pour certains systèmes, seul nsswitch.conf est utilisé (comme les systèmes basés sur glibc et eglibc). Ces versions de glibc analyseront le '/etc/host.conf' sans avertissement et ignoreront la ligne 'order'.