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:
- 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:
- ... 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.