Warum trifft meine Namensauflösung den DNS auch bei einem Host-Dateieintrag?

15

Ich verwende Ubuntu 10.04.2 LTS Desktop. Als Webentwickler habe ich natürlich ein "me.com" in meiner /etc/hostsDatei erstellt. Leider wird meine Namensauflösung vor der ersten Überprüfung meines lokalen Hosteintrags an den DNS gesendet, und ich kann nicht herausfinden, warum.

Das Endergebnis ist, dass, wenn meine /etc/resolv.conf nameserver 127.0.0.1zuerst darin enthalten ist, ich innerhalb von weniger als einer Sekunde eine Antwort von me.com (local) in meinem Webbrowser erhalte. Aber wenn ich diesen Eintrag nicht habe, dauert meine Antwort manchmal bis zu 5 Sekunden, wenn mein ISP etwas langsam ist.

Das Problem war so lästig, dass ich hier tatsächlich eine Frage stellen musste (und jemand hat sie gelöst), wie dieser Eintrag automatisch eingefügt werden kann /etc/resolv.conf. Aber einer der User (@shellholic) hat mir hier dringend empfohlen (und mit mir darüber hin und her kommentiert), dass ich diese Frage stellen soll.

Wissen Sie, warum die Namensauflösung meiner Workstation zuerst den DNS-Server erreichen muss, bevor ich meinen /etc/hostsDateieintrag erhalte? Im Moment verwende ich den Trick resolv.conf .

Volomike
quelle
1
Sie könnten versuchen zu suchen /etc/nsswitch.conf. Die Einträge in meinem System sind ein wenig nicht offensichtlich, aber Sie können Lookups nur filesals Option testen und sehen, ob dies einen Unterschied macht.
Belacqua
Ja, können Sie uns den Output von cat /etc/nsswitch.confund geben cat /etc/host.conf? Außerdem: Wie testen Sie dies (durch Ping, Browser, Packet Sniffing usw.)?
Ordnen Sie den
Um die Version von @arrange zu vervollständigen, können Sie das Ergebnis von anhängen time getent hosts me.com; hostname --fqdn; grep 'me.com' /etc/hosts; grep hosts /etc/nsswitch.conf; netstat -uln | grep ':53'; cat /etc/host.conf; wc -l /etc/hosts. Zögern Sie nicht, die Rationalität zu verschleiern.
Shellholic
@Shellholic ^ Rationalität ^ rational? heh.
Belacqua
@jgbelacqua: in der Tat
Shellholic

Antworten:

14

Die Datei /etc/nsswitch.conf können Sie die Reihenfolge der Namensauflösung neu konfigurieren. Standardmäßig ist die Hostdatei die erste und dann die konfigurierte DNS. Es könnte mehr Möglichkeiten geben.

Die Datei /etc/hosts listet nur IP-Adressen und Hostnamen auf (mehrere Namen für eine IP, wenn Sie möchten)

In der Datei /etc/resolv.confwerden die Standardsuchdomänen und die zu verwendenden Nameserver nacheinander aufgelistet.

jfmessier
quelle
4
Denken Sie auch daran, dass ein Name, der von einer Anwendung oder einem Dienst auf Ihrer Linux-Box aufgelöst wurde, für eine als TTL (Time to Live) bezeichnete Dauer im Cache verbleibt. Wenn Sie also die Auflösungssequenz ändern, sollten Sie Ihr System neu starten oder den Cache leeren.
jfmessier
Wie löscht man den "Cache"?
Eric Johnson
Ich bin nicht sicher, aber ein Neustart einer Netzwerkverbindung mit den Befehlen ifup und ifdown könnte dies tun. Natürlich sollte ein Neustart den Cache leeren, aber wir verwenden Linux, oder?
jfmessier
nscdkann Namensauflösungsabfragen zwischenspeichern, beachtet jedoch nicht ttl (und ist daher standardmäßig deaktiviert). systemd-resolvedwird auch Einträge zwischenspeichern. Wenn keine von diesen konfiguriert ist, zwischenspeichern Linux-Hosts keine DNS-Antworten . (Browser wahrscheinlich auf der Anwendungsebene)
Gert van den Berg