GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie arbeiten `/etc/hosts` und DNS zusammen, um Hostnamen in IP-Adressen aufzulösen?

Dies wird durch die NSS-Konfiguration (Name Service Switch) vorgegeben, d. h. /etc/nsswitch.conf hosts der Datei Richtlinie. Zum Beispiel auf meinem System:

hosts:    files mdns4_minimal [NOTFOUND=return] dns

Hier, files bezieht sich auf die /etc/hosts Datei und dns bezieht sich auf das DNS-System. Und wie Sie sich vorstellen können, was zuerst kommt, gewinnt .

Siehe auch man 5 nsswitch.conf um mehr darüber zu erfahren.

Nebenbei bemerkt, verwenden Sie getent, um den Anweisungen zur NSS-Hostauflösung zu folgen mit hosts als Datenbank z.B.:

getent hosts example.com

Um nur Ihre letzte Frage zu beantworten:/etc/hosts trifft nicht sofort wieder zu, weil firefox speichert den zuletzt erhaltenen Hostnamen für google.com; Wenn Sie möchten, dass es immer wieder abgerufen wird, müssen Sie network.dnsCacheExpiration festlegen bis 0 in about:config . Mehr Infos (wenn auch etwas veraltet) hier. Tut mir leid, wenn dies nicht zum Thema gehört.

Als Nebenbemerkung verwenden viele Programme nicht den Standard-Resolver (getaddrinfo(3) , getnameinfo(3) [1]), weil es scheiße ist .

Erstens ist die Schnittstelle nicht asynchron; Jedes mäßig komplexe Programm muss einen separaten Thread erstellen, der nur getaddrinfo() ausführt und dann ein eigenes Protokoll erfinden, um mit ihm zu kommunizieren (und lassen Sie uns nicht einmal auf getaddrinfo_a() eingehen , die ein Signal sendet nach Fertigstellung, also noch schlimmer).

Zweitens die Resolver-Implementierung in glibc (die Standard-C-Bibliothek in Linux) ist schrecklich und erwartet, dass Sie sie zufällige dynamische Objekte über dlopen() in den Adressraum ziehen lassen hinter Ihrem Rücken und macht es unmöglich, es in irgendeiner Weise einzudämmen oder in statisch gelinkten ausführbaren Dateien zu verwenden.

Da viele Programme den Standard-Resolver nicht direkt verwenden, machen sie sich auch nicht die Mühe, sein Verhalten genau zu replizieren, und ignorieren einige oder alle von /etc/resolv.conf , /etc/hosts , /etc/nsswitch.conf oder /etc/gai.conf .

[1] und erwähnen nicht einmal den nicht-reentranten, nur IPv4-kompatiblen gethostbyname() , die seit Ewigkeiten missbilligt wurde.


Die Datei /etc/hosts und die DNS arbeiten nicht zusammen. Sie bieten unabhängige Auflösungen von Namen (Netzwerknamen).

Der Klebstoff, der sie verbindet, befindet sich in /etc/nsswitch.conf für Linux-Systeme. In /etc/netsvc.conf für AIX-Server, im System für Windows und könnte mit lookupd -configuration aufgeführt werden (Suchen Sie nach LookupOrder, ähnlich wie:Cache FF DNS NI DS ) in MacOS-Systemen.

Die eigentliche Reihenfolge wird komplex und normalerweise verworren, da jeder Namensauflösungsdienst in andere Auflösungsebenen schauen könnte (und dies oft tut). Wie dnsmasq (ein leichter DNS-Server im Allgemeinen unter 127.0.0.1:53 , oder ::1:53 (oder beides)) liest und enthält normalerweise den /etc/hosts Dateiinhalt. Oder wie systemd.resolver (ein einfacher Resolver, der nur Namen ohne Punkte wie mycomputer auflösen sollte ) ruft direkt DNS-Auflösungen für gepunktete Namen (mycomputer.here.dev.) auf ) unter bestimmten Bedingungen.

Im Allgemeinen werden die Dienste der Reihe nach aufgerufen und der erste, der nicht fehlschlägt, gewinnt und wird als die richtige Adresse akzeptiert. Die allgemeine Grundreihenfolge ist:/etc/hosts (Datei), mDNS (nicht gepunktete Namen), DNS, NIS, NIS+, LDAP. In einigen Linux-Systemen gibt es eine Notlösung für den Computer hostname im Dienst myhostname

Zum Beispiel in diesem System (von cat /etc/nsswitch ):

hosts:          files mdns4_minimal [NOTFOUND=return] dns myhostname

Beachten Sie, dass das sehr alte (glibc 2.4 und früher) order Eintrag gesetzt in /etc/host.conf als:

order hosts,bind,nis

Gilt nur für die Dateien (Datei /etc/hosts ) Namensdienst.

Die Auswirkungen auf diesen (Linux-)Client-Rechner in Bezug auf NIS und LDAP werden (normalerweise) durch den verwendeten DNS-Server gesteuert (bind, unbound, etc.).

Also:

  1. Wenn ein Hostname in /etc/hosts aufgelöst werden kann, wird DNS nach /etc/hosts angewendet, um den Hostnamen aufzulösen, oder wird die aufgelöste IP-Adresse von /etc/hosts als "Hostname" behandelt, um rekursiv aufgelöst zu werden?

Keine.

Wenn ein Hostname in /etc/hosts aufgelöst werden kann , der DNS trifft nicht zu (wenn Dateien vor DNS liegen).

noch ist die aufgelöste IP-Adresse, die als "Hostname" behandelt wird.

Es ist einfach:die aufgelöste Adresse.

Browser

Ein Browser könnte jede Methode verwenden, um einen Namen aufzulösen (nachdem er seinen Cache mit aufgelösten Namen überprüft hat). Nur wenn es sich um eine vom System bereitgestellte Methode handelt, gilt die oben angegebene Reihenfolge. Der Browser könnte, wie jedes andere Programm auch, jeden DNS-Server direkt kontaktieren.

Wenn die Systemreihenfolge /etc/hosts hat vor DNS , bedeutet dies, dass ein Eintrag in dieser Datei Vorrang vor DNS hat Lösungsdienst.

Also:

  1. ... Bedeutet das, dass /etc/hosts DNS für die Auflösung von Hostnamen überschreibt?

Ja (wenn der Browser die vom System bereitgestellte Auflösung verwendet).

Warum nicht /etc/hosts erneut beantragen, sodass ich mich nicht mit der Website verbinden kann?

Nur bis der interne Cache des Browsers für diesen bestimmten Namen gelöscht wird (oder das Zeitlimit überschritten wird), wird dieser Name erneut außerhalb des Browsers gesucht.

Wenn der Browser einen Namen in seinem Cache aufgelöst hat, verwendet der Browser ihn erneut.

Verwenden Sie dies, um den Cache zu löschen.

Oder schließen Sie einfach (warten Sie eine Weile) und starten Sie den Browser neu.


Linux
  1. Wie behandelt Linux mehrere aufeinanderfolgende Pfadtrennzeichen (/home////username///file)?

  2. Eine benutzerspezifische Hosts-Datei erstellen, um /etc/hosts zu ergänzen?

  3. Wie wird /etc/motd aktualisiert?

  4. Manuelle Änderungen an /etc/hosts oder /etc/sysconfig/network-scripts/ifcfg-* gehen verloren

  5. CentOS / RHEL:So stellen Sie eine gelöschte /etc/passwd-Datei wieder her

Der richtige Weg zum Bearbeiten von /etc/passwd- und /etc/group-Dateien unter Linux

CentOS / RHEL 7 :So stellen Sie gelöschte Root-Einträge in /etc/shadow- und/oder /etc/passwd-Dateien wieder her

Die Dateien /proc/mounts, /etc/mtab und /proc/partitions verstehen

Wie erstelle ich in meiner Datei /etc/hosts/ unter Linux/OSX eine Wildcard-Subdomain?

Unterschied zwischen /etc/hosts und /etc/resolv.conf

So richten Sie /etc/issues ein, um die IP-Adresse für eth0 anzuzeigen