Wie entscheidet Windows, welcher DNS-Server zum Auflösen von Namen verwendet wird?

41

Welchen Algorithmus verwendet Windows, um zu entscheiden, welcher DNS-Server abgefragt wird, um Namen aufzulösen?

Nehmen wir an, ich habe mehrere Schnittstellen, die alle aktiv sind, einige ohne DNS-Server, einige mit der Anweisung, dies automatisch zu bestimmen, und andere mit manueller Angabe (in der Schnittstelle ipv4 UND der Schnittstelle ipv6).

Ich bitte um eine Antwort auf diese allgemeine Frage in der Hoffnung, dass ich weiß, wie ich ein spezifischeres Problem in Windows Vista lösen kann - ich habe zwei Schnittstellen, eine niedrigere Metrik und einen manuell festgelegten DNS-Server. nslookup verwendet DIESEN DNS-Server und löst die Namen korrekt auf. Alle anderen Anwendungen können den Namen jedoch nicht auflösen, es sei denn, ich gebe manuell einen DNS-Server für die andere Schnittstelle an, die die Anwendungen dann verwenden. nslookup verwendet auch den DNS-Server, der für diese andere Schnittstelle angegeben wurde, sobald er angegeben wurde.

Vielen Dank

Artefacto
quelle

Antworten:

27

Wenn ich mich nicht irre, wird dies durch die NIC-Bindungsreihenfolge in den erweiterten Einstellungen im Netzwerkverbindungsordner bestimmt. Sie können dies überprüfen, indem Sie die Bindungsreihenfolge der verschiedenen Netzwerkkarten ändern und nslookup als Test ausführen.

Um meine Antwort zu erweitern und den von Evan verlinkten Artikel zu zitieren , hier ein Auszug aus dem Artikel:

Der DNS-Client-Dienst fragt die DNS-Server in der folgenden Reihenfolge ab:

  1. Der DNS-Clientdienst sendet die Namensabfrage an den ersten DNS-Server in der Liste der DNS-Server des bevorzugten Adapters und wartet eine Sekunde auf eine Antwort.

  2. Wenn der DNS-Clientdienst innerhalb einer Sekunde keine Antwort vom ersten DNS-Server erhält, sendet er die Namensabfrage an die ersten DNS-Server aller noch in Betracht kommenden Adapter und wartet zwei Sekunden auf eine Antwort.

  3. Wenn der DNS-Clientdienst innerhalb von zwei Sekunden keine Antwort von einem DNS-Server erhält, sendet der DNS-Clientdienst die Abfrage an alle DNS-Server auf allen noch in Betracht kommenden Adaptern und wartet weitere zwei Sekunden auf eine Antwort.

  4. Wenn der DNS-Clientdienst immer noch keine Antwort von einem DNS-Server erhält, sendet er die Namensabfrage an alle DNS-Server auf allen noch in Betracht kommenden Adaptern und wartet vier Sekunden auf eine Antwort.

  5. Wenn der DNS-Clientdienst keine Antwort von einem DNS-Server erhält, sendet der DNS-Client die Abfrage an alle DNS-Server auf allen noch in Betracht kommenden Adaptern und wartet acht Sekunden auf eine Antwort.

Der bevorzugte Adapter in Schritt 1 ist der Adapter, der in der Bindereihenfolge an erster Stelle aufgeführt ist.

Joeqwerty
quelle
4
Dieser Prozess hat sich in Windows 10 geändert, obwohl ich den neuen Prozess nicht kenne, von dem ich weiß, dass er nicht für Windows 10 gilt. Weitere Informationen finden
Robert
14

In Windows 10 (und Windows Server 2016) müssen Sie die Metrik jeder Schnittstelle in der gewünschten Reihenfolge aktualisieren.

  1. Gehen Sie zu Systemsteuerung> Netzwerk und Internet> Netzwerkverbindungen
  2. Klicken Sie mit der rechten Maustaste auf die gewünschte Verbindung (Verbindung mit höherer Priorität).
  3. Klicken Sie auf Eigenschaften> Internet Protocol Version 4
  4. Klicken Sie auf Eigenschaften> Erweitert
  5. Deaktivieren Sie "Automatische Metrik"
  6. Geben Sie 10 in 'Interface Metric' ein
  7. OK klicken

Verweise:

Ich habe 10 für mein LAN, 20 für WLAN und 100 für VPN-Schnittstellen verwendet (ich bevorzuge lokales DNS bei der Arbeit, dies kann für andere umgekehrt sein). Denken Sie daran, niedrigere Metrik = höhere Priorität .

In diesem Artikel im Microsoft Support finden Sie eine Erläuterung der Funktion "Automatische Metrik" für IPv4-Routen .

Jacob Evans
quelle
+1 Für mich unter Windows 10 war dies die einzige Lösung, danke.
GµårÐïåñ
Die Änderung der Metrik wirkt sich nur auf die Routenauswahl aus. Es hat keinen Einfluss darauf, welcher DNS-Server verwendet wird.
25.
14 Upvotes und persönliche Erfahrungen stimmen nicht überein, ich stimme dem zu, aber die Entwickler bei Microsoft schienen es so kodiert zu haben.
Jacob Evans
8

Diese Seite beschreibt den von Windows zum Ausführen von DNS-Abfragen verwendeten Algorithmus. Es ist nicht tief genug, um Ihnen alle Antworten zu geben, die Sie suchen, aber einige Zeit mit einem Schnüffler und dieser Artikel sollte alles sein, was Sie brauchen, um zu bestimmen, was in Ihrer spezifischen Situation passiert.

Evan Anderson
quelle
3

Ich hatte genau das gleiche Problem. Ich habe einen Tag damit verbracht, es herauszufinden. Jetzt weiß ich und es funktioniert wie ein Zauber.

Wenn Sie mehrere Netzwerkkarten haben und wenn Sie jeweils einen DNS-Server angeben. Wissen Sie, welcher DNS-Server zuletzt verwendet wird?

Nun, Sie können es über die Praxis überprüfen.

nslookup 192.168.3.6

Sie sehen also den Server, den Ihr PC tatsächlich verwendet

Die Frage ist: Wovon hängt es ab, welche DNS-Serverfenster verwendet werden und wie wir sie ändern können.

Wir brauchen es besonders, wenn wir VPN-Clients verwenden.

Die Antwort von qwerty2010 ist richtig und richtig. Sie können es jedoch NUR verwenden, wenn sich die Netzwerkkarte in der Systemsteuerung befindet - Netzwerk- und Freigabecenter - Adaptereinstellungen ändern - Liste der Netzwerkkarten

Nur wenn Sie die für Ihren VPN-Client verantwortliche Netzwerkkarte sehen, können Sie mithilfe einer Grafik festlegen, welchen DNS-Server (der auf einer bestimmten Netzwerkkarte angegeben ist) Sie verwenden möchten.

Gehen Sie zu Netzwerk- und Freigabecenter -> Adaptereinstellungen ändern -> Erweitert -> Erweiterte Einstellungen -> und wechseln Sie mit DNS, das Sie VERWENDEN möchten, auf den neuesten Stand der Technik. (UP Sie müssen es anheben).

Wenn Sie jedoch zum Beispiel den Shrew-VPN-Client verwenden, haben Sie keine Netzwerkkarte.

Wie geht's.

Sie öffnen die Registrierung.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}

Und Sie suchen in den Unterordnern 0000, 0001 usw. den Ordner mit

DriverDesc = Shrew Soft Virtual Adapter

fein. Dann kopieren Sie in die Zwischenablage

NetCfgInstanceId = {B498E7DE-7257-48F6-AD32-60E470030F05}

Jetzt gehen Sie

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Linkage]

und du öffnest key = Bind. Sie werden die Liste so sehen

\Device\{1DF89CE3-CAAD-4EB7-A53F-AD16BC1D5EFD}
\Device\{70126DBE-B44D-4392-9417-0CABD6E384B1}
\Device\{D5127F8E-E7BB-4661-AE5A-A922614173D0}
\Device\{C44039AB-6801-4A9B-A736-3B12782FF411}
\Device\{85231D0F-CD05-4774-A983-632C5D83AC62}
\Device\{7E87BC81-8C58-4E05-9FA0-7897A6AA5CCE}
\Device\{3A1A3EFC-A9DE-4BCA-BAF6-81C7074487E0}
\Device\{8D41EDFC-04AC-4537-B5D5-0D54EB51A023}

Alles, was Sie tun müssen, ist an die Spitze zu setzen

\Device\{B498E7DE-7257-48F6-AD32-60E470030F05}
\Device\{1DF89CE3-CAAD-4EB7-A53F-AD16BC1D5EFD}
\Device\{70126DBE-B44D-4392-9417-0CABD6E384B1}
\Device\{D5127F8E-E7BB-4661-AE5A-A922614173D0}
\Device\{C44039AB-6801-4A9B-A736-3B12782FF411}
\Device\{85231D0F-CD05-4774-A983-632C5D83AC62}
\Device\{7E87BC81-8C58-4E05-9FA0-7897A6AA5CCE}
\Device\{3A1A3EFC-A9DE-4BCA-BAF6-81C7074487E0}
\Device\{8D41EDFC-04AC-4537-B5D5-0D54EB51A023}

Das ist alles. Es ist kein Neustart erforderlich.

Jetzt verwendet Ihr Windows DNS, das in shrew vpn nic angegeben ist, wenn Sie eine vpn-Verbindung verwenden.

Alex
quelle
0

Da dies für Sie oder andere hilfreich sein kann, können Sie die Windows-Round-Robin-Verwendung der aufgelisteten DNS deaktivieren, um die DNS-Verwendung vorhersehbarer zu machen. Versuchen Sie, das RoundRobin=0in HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\DNS\Parameters( Referenz ) einzustellen, um das DNS-Round-Robing zu deaktivieren.

Es gibt auch ein "Timeout" für das Rotieren der Server. Sie können auch versuchen, es auf Null zu setzen :

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
 ServerPriorityTimeLimit=0
Higuita
quelle
Gemäß dem erwähnten "Verweis" (Link) gilt dies für die Konfiguration des DNS-Servers, indem mehrere IP-Adressen für einen abgefragten vollqualifizierten Domänennamen in einer von Abfrage zu Abfrage gedrehten Sortierreihenfolge bereitgestellt werden. Dies hat nichts mit der Frage zu tun, wie ein DNS-Resolver (Client) den abzufragenden DNS-Server auswählt.
Thomas Urban
-13

Es entscheidet nicht zufällig. Sie sind mit einem Router verbunden, der die IP-Adresse von einem Unternehmen mit DNS-Servern erhält. Sie erhalten Ihre Anfrage, es sei denn, Sie ändern die IP- Adresse manuell in einen anderen DNS, zum Beispiel: OpenDns . Oder Sie entscheiden sich für einen eigenen DNS-Server. Das funktioniert auch Geben Sie einfach die IP-Adressen in der Netzwerkzentrale ein und alles sollte in Ordnung sein. Und ja, Sie müssen diese manuell einstellen.

Sie können auch eine Datei mit dem C:\Windows\System32Namen "hosts" ohne Erweiterung anpassen . Sie können URL-Anfragen umleiten lassen, anstatt sie an das Standard-DNS zu senden. An einen lokalen Server (der ausgeführt werden muss und Port 80 überwacht)

KdgDev
quelle
18
Grundsätzlich ist alles, was Sie hier gesagt haben, falsch
MDMarra
3
Und ein zusätzliches -1 für die Erwähnung des eiternden Gräuels, der die Hosts-Datei ist.
Maximus Minimus
Art und Weise informativ zu sein MarkM
KdgDev
4
@WebDevHobo - Es gibt wirklich zu viel in einem Kommentar zu korrigieren, aber ich werde auf die großen Punkte eingehen. 1) Das OP verfügt über einen Computer mit mehreren Schnittstellen (höchstwahrscheinlich separate NICs), auf denen jeweils ein anderer DNS definiert ist. Im Rahmen der Frage betreibt er eindeutig ein paar interne DNS-Server oder hat ein paar bevorzugte externe DNS-Server - die Box ist wahrscheinlich mehrfach vernetzt. 2) Sie müssen die Adresse eines internen DNS-Servers nicht manuell festlegen, wenn Sie DHCP in der DHCP-Serverkonfiguration für diesen Adresspool verwenden. 3) Der Pfad zur Hosts-Datei lautet c: \ windows \ system32 \ drivers \ etc
MDMarra 13.11.09
3
Und die HOSTS-Datei sollte in dieser Situation oder praktisch in jedem Fall nicht verwendet werden, es sei denn, Sie entwickeln lokal und verwenden HOST-Header oder ähnliches und benötigen einen FQDN für die lokale Auflösung. Auf dem Server muss nicht unbedingt Port 80 ausgeführt werden, unabhängig davon, ob die HOSTS-Datei für die Namensauflösung oder ein DNS-Server verwendet wird. Fügen Sie einfach an das Ende der URL Folgendes an: port_number. HOSTS kümmert sich nicht um den Port, so wie DNS es nicht tut - es ist eine Möglichkeit, einen Hostnamen in eine IP-Adresse zu übersetzen und nicht mehr.
MDMarra,