it-swarm.com.de

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

Wie arbeiten /etc/hosts Und DNS unter Linux zusammen, um Hostnamen in IP-Adressen aufzulösen?

  1. wenn ein Hostname in /etc/hosts aufgelöst werden kann, gilt DNS nach /etc/hosts, um den Hostnamen aufzulösen, oder behandelt die aufgelöste IP-Adresse von /etc/hosts als "Hostname", um sie rekursiv aufzulösen?
  2. In meinem Browser (Firefox und Google Chrome), wenn ich zu /etc/hosts Hinzufüge:

    127.0.0.1 google.com www.google.com
    

    wenn Sie www.google.com in die Adressleiste des Browsers eingeben und die Eingabetaste drücken, wird keine Verbindung zur Website hergestellt. Nachdem ich diese Zeile aus /etc/hosts Entfernt habe, kann ich eine Verbindung zur Website herstellen. Bedeutet dies, dass /etc/hosts DNS zum Auflösen von Hostnamen überschreibt?

    Nachdem ich die Zeile erneut zu /etc/hosts Hinzugefügt habe, kann ich auch nach dem Aktualisieren der Webseite eine Verbindung zur Website herstellen. Warum wird /etc/hosts Nicht erneut angewendet, sodass ich keine Verbindung zur Website herstellen kann?

Vielen Dank.

10
Tim

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

hosts:    files mdns4_minimal [NOTFOUND=return] dns

Hier bezieht sich files auf das /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.


Um den NSS-Host-Auflösungsreihenfolgen zu folgen, verwenden Sie getent mit hosts als Datenbank, z.

getent hosts example.com
21
heemayl

Um nur Ihre letzte Frage zu beantworten: /etc/hosts Wird nicht sofort erneut angewendet, da firefox den letzten Hostnamen zwischenspeichert, den es für google.com Erhalten hat. Wenn Sie möchten, dass es immer wieder abgerufen wird, müssen Sie network.dnsCacheExpiration in 0 auf about:config setzen. Weitere Infos (wenn auch etwas veraltet) hier . Entschuldigung, wenn dies offtopic ist.


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

Erstens ist die Schnittstelle nicht asynchron. Jedes mäßig komplexe Programm muss einen separaten Thread erzeugen, der nur die getaddrinfo() ausführt, und dann sein eigenes Protokoll erfinden, um mit ihm zu kommunizieren (und nicht einmal getaddrinfo_a() eingeben, das a sendet Signal nach Abschluss, es ist also noch schlimmer).

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

Da viele Programme den Standard-Resolver nicht direkt verwenden, müssen sie auch sein Verhalten nicht exakt replizieren und einige oder alle von /etc/resolv.conf, /etc/hosts, /etc/nsswitch.conf Ignorieren. oder /etc/gai.conf.

[1] und erwähne nicht einmal die nicht wiedereintretende, nur ipv4 gethostbyname(), die seit Ewigkeiten veraltet war.

7
Uncle Billy

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

Der Kleber, der sie verbindet, ist innerhalb von /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 (Suche nach LookupOrder, ähnlich wie Cache FF DNS NI DS) in MacOS-Systemen aufgelistet werden.

Die tatsächliche Reihenfolge wird komplex und normalerweise kompliziert, da jeder Namensauflösungsdienst in andere Auflösungsebenen schauen kann (und dies oft auch tut). Wie dnsmasq (ein leichter DNS-Server im Allgemeinen bei 127.0.0.1:53 oder ::1:53 (oder beides)) liest und enthält normalerweise der Inhalt der Datei /etc/hosts. Oder wie systemd.resolver (ein grundlegender Resolver, der nur nicht gepunktete Namen wie mycomputer auflösen sollte) ruft unter bestimmten Bedingungen direkt DNS-Auflösungen für gepunktete Namen (mycomputer.here.dev.) auf.

Im Allgemeinen werden Dienste der Reihe nach aufgerufen, und der erste, der nicht fehlschlägt, gewinnt und wird als korrekte Adresse akzeptiert. Die allgemeine Grundreihenfolge lautet: /etc/hosts (Datei), mDNS (nicht gepunktete Namen), DNS, NIS, NIS +, LDAP. In einigen Linux-Systemen gibt es eine Last-Resort-Auflösung für der 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 der sehr alte (glibc 2.4 und früher) order Eintrag gesetzt in /etc/Host.conf als:

order hosts,bind,nis

Gilt nur für den Datendienst (Datei /etc/hosts).

Die Auswirkungen auf diesen (Linux-) Client-Computer in Bezug auf NIS und LDAP werden (normalerweise) vom verwendeten DNS-Server (Binden, Ungebunden usw.) gesteuert.

damit:

  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 sie rekursiv aufzulösen?

Keiner.

Wenn ein Hostname in /etc/hosts aufgelöst werden kann, gilt DNS nicht (wenn sich Dateien vor DNS befinden).

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

Es ist einfach: die aufgelöste Adresse.

browser

Ein Browser kann eine beliebige Methode verwenden, um einen Namen aufzulösen (nachdem er seinen Cache mit aufgelösten Namen überprüft hat). Nur wenn eine vom System bereitgestellte Methode verwendet wird, gilt die oben angegebene Reihenfolge. Der Browser kann sich wie jedes Programm dafür entscheiden, einen beliebigen DNS-Server direkt zu kontaktieren.

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

Damit:

  1. ... Bedeutet dies, dass/etc/hosts DNS zum Auflösen von Hostnamen überschreibt?

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

Warum wird /etc/hosts nicht erneut angewendet, sodass ich keine Verbindung zur Website herstellen kann?

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

Wenn der Name des Browsers im Cache aufgelöst ist, verwendet der Browser ihn erneut.

Verwenden Sie diese Option, um den Cache zu leeren .

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

6
Isaac