Sous Linux, comment /etc/hosts
DNS et DNS fonctionnent-ils ensemble pour résoudre les noms d'hôtes en adresses IP?
- si un nom d'hôte peut être résolu dans
/etc/hosts
, DNS s'applique-t-il après/etc/hosts
pour résoudre le nom d'hôte ou traite-t-il l'adresse IP résolue/etc/hosts
comme un "nom d'hôte" à résoudre récursivement? Dans mon navigateur (Firefox et Google Chrome), lorsque j'ajoute à
/etc/hosts
:127.0.0.1 google.com www.google.com
en tapant www.google.com dans la barre d'adresse des navigateurs et en appuyant sur Entrée, vous ne vous connecterez pas au site Web. Après avoir supprimé cette ligne
/etc/hosts
, je peux me connecter au site Web. Cela signifie-t-il que le/etc/hosts
DNS remplace la résolution des noms d'hôtes?Après avoir rajouté la ligne à
/etc/hosts
, je peux toujours me connecter au site Web, même après avoir actualisé la page Web. Pourquoi ne postule-t-il pas de/etc/hosts
nouveau, pour que je ne puisse pas me connecter au site Web?
Merci.
/etc/hosts
les serveurs de noms définis localement. C'est assez déroutant d'être témoin la première fois. (En vous regardant, navigateurs à base de chrome!)/etc/hosts
et les serveurs DNS définis par le système: ( github.com/Eloston/ungoogled-chromium ). Installation sur macOS avec Homebrew:brew cask install eloston-chromium
.Réponses:
Ceci est dicté par la configuration NSS (Name Service Switch) c'est-à-dire
/etc/nsswitch.conf
lahosts
directive du fichier . Par exemple, sur mon système:Ici,
files
fait référence au/etc/hosts
fichier etdns
fait référence au système DNS. Et comme vous pouvez l'imaginer selon la première de ces victoires .Voir aussi
man 5 nsswitch.conf
pour avoir plus d'idée à ce sujet.En passant, pour suivre les ordres de résolution des hôtes NSS, utilisez
getent
avechosts
comme base de données, par exemple:la source
systemd.resolver
affecte les résolutions? Où NIS et LDAP s'intègrent-ils dans le système de résolution? Quel ordre suit un système MacOS ou un système Windows?.Pour répondre à votre dernière question:
/etc/hosts
ne s'applique pas de nouveau immédiatement carfirefox
met en cache le dernier nom d'hôte pour lequel il a été obtenugoogle.com
; si vous voulez qu'il le récupère toujours, vous devrez le réglernetwork.dnsCacheExpiration
sur0
inabout:config
. Plus d'informations (bien qu'un peu dépassées) ici . Désolé si c'est hors sujet.Comme note secondaire, de nombreux programmes n'utilisent pas le résolveur standard (
getaddrinfo(3)
,getnameinfo(3)
[1]) car il est nul .Premièrement, l'interface n'est pas asynchrone; tout programme modérément complexe devra engendrer un thread séparé faisant juste le
getaddrinfo()
puis inventer son propre protocole pour communiquer avec lui (et n'entrons même pas dansgetaddrinfo_a()
, qui envoie un signal à la fin, c'est encore pire).Deuxièmement, l'implémentation du résolveur dans
glibc
(la bibliothèque C standard sous Linux) est horrible, s'attendant à ce que vous le laissiez tirer des objets dynamiques aléatoires dans l'espace d'adressage viadlopen()
derrière votre dos, et qu'il soit impossible de le contenir de quelque manière que ce soit ou de l'utiliser statiquement exécutables liés.Étant donné que de nombreux programmes n'utilisent pas le résolveur norme directement, ils ont aussi ne se soucient pas de reproduire exactement son comportement, et ignorent tout ou partie
/etc/resolv.conf
,/etc/hosts
,/etc/nsswitch.conf
ou/etc/gai.conf
.[1] et ne mentionne même pas le non réentrant, ipv4 uniquement
gethostbyname()
, qui est obsolète depuis des siècles.la source
google = GHBN("google.com"); facebook = GHBN("facebook.com")
vous pouvez vous retrouver avec les deuxgoogle
etfacebook
contenir l'adresse defacebook.com
. Lorsque les deux appels sont effectués dans des threads différents, c'est encore plus drôle: vous pouvez terminer avec une adresse qui est à moitié google et à moitié facebook ou des ordures complètes.gethostbyname()
maintenant?getaddrinfo
est la fonction standard pour cela, mais elle est elle-même en panne, comme je l'ai déjà expliqué, elle n'est donc pas utilisée telle quelle par les navigateurs ou d'autres applications réelles.Le fichier
/etc/hosts
et le DNS ne fonctionnent pas ensemble. Ils fournissent des résolutions de noms indépendantes (noms de réseau).La colle qui les relie est à l' intérieur
/etc/nsswitch.conf
pour les systèmes Linux . Dans les/etc/netsvc.conf
serveurs AIX, dans le système pour Windows et peut être répertorié aveclookupd -configuration
(recherchez LookupOrder, similaire à:)Cache FF DNS NI DS
dans les systèmes MacOS.L'ordre réel devient complexe et généralement alambiqué car chaque service de résolution de noms peut (et souvent le fait) regarder à l'intérieur d'autres niveaux de résolution. Comme
dnsmasq
(un serveur DNS léger généralement à127.0.0.1:53
, ou::1:53
(ou les deux)) lit et inclut généralement le/etc/hosts
contenu du fichier. Ou commesystemd.resolver
(un résolveur de base qui ne devrait résoudre que les noms non pointés commemycomputer
) appelle directement les résolutions DNS pour les noms pointés (mycomputer.here.dev.
) sous certaines conditions.En général, les services sont appelés dans l'ordre et le premier qui n'échoue pas gagne et est accepté comme la bonne adresse. L'ordre de base général est le suivant:
/etc/hosts
(fichier), mDNS (noms sans point), DNS, NIS, NIS +, LDAP. Dans certains systèmes Linux, il existe une résolution de dernier recours pour l'ordinateurhostname
du servicemyhostname
Par exemple, dans ce système (à partir de
cat /etc/nsswitch
):Notez que l'
order
entrée très ancienne (glibc 2.4 et versions antérieures) est définie/etc/host.conf
comme:Appliquer uniquement au
/etc/hosts
service de noms de fichiers (fichier ).Les effets sur cet ordinateur client (Linux) liés à NIS et LDAP sont (généralement) contrôlés par le serveur DNS utilisé (bind, unbound, etc.).
donc:
Aucun.
Si un nom d'hôte peut être résolu dans
/etc/hosts
, leDNS
ne s'applique pas (si les fichiers se trouvent avant DNS).l'adresse IP résolue n'est pas non plus traitée comme un "nom d'hôte".
C'est simplement: l'adresse résolue.
navigateur
Un navigateur peut utiliser n'importe quelle méthode pour résoudre un nom (après avoir vérifié son cache de noms résolus). Ce n'est que s'il utilise une méthode fournie par le système que l'ordre donné ci-dessus s'applique. Le navigateur, comme tout programme, peut choisir de contacter directement n'importe quel serveur DNS.
Si l'ordre du système est
/etc/hosts
antérieurDNS
, cela signifie qu'une entrée dans ce fichier aura priorité sur leDNS
service de résolution.Donc:
Oui (si le navigateur utilise la résolution fournie par le système).
Ce n'est que jusqu'à ce que le cache interne du navigateur soit effacé (ou qu'il expire) pour ce nom spécifique que ce nom soit à nouveau recherché en dehors du navigateur.
Si le navigateur a un nom résolu dans son cache, le navigateur l'utilise à nouveau.
Utilisez ceci pour vider le cache .
Ou fermez simplement (attendez un moment) et redémarrez le navigateur.
la source