Comment Windows choisit-il le serveur DNS à utiliser pour résoudre les noms?


42

Quel algorithme Windows utilise-t-il pour décider du serveur DNS à interroger afin de résoudre les noms?

Disons que j'ai plusieurs interfaces, toutes actives, certaines avec aucun serveur DNS spécifié, certaines dites de le déterminer automatiquement, et certaines avec cela spécifié manuellement (dans l'interface ipv4 ET l'interface ipv6).

Je demande une réponse à cette question générale en espérant savoir comment résoudre un problème plus spécifique sous Windows Vista: j'ai deux interfaces, une métrique inférieure et un serveur DNS spécifié manuellement. nslookup utilise CE serveur DNS et résout les noms correctement. Cependant, toutes les autres applications ne parviennent pas à résoudre le nom, sauf si je spécifie manuellement un serveur DNS pour l'autre interface, que les applications utilisent ensuite. nslookup utilise également le serveur DNS spécifié pour cette autre interface une fois celle-ci spécifiée.

Merci

Réponses:


27

Si je ne me trompe pas, cela dépend de l'ordre de liaison des cartes réseau dans les paramètres avancés du dossier des connexions réseau. Vous pouvez le vérifier en modifiant l'ordre de liaison des différentes cartes réseau et en exécutant nslookup à titre de test.

Pour développer ma réponse, citant l'article auquel Evan a fait référence , voici un extrait de cet article:

Le service client DNS interroge les serveurs DNS dans l'ordre suivant:

  1. Le service client DNS envoie la requête de nom au premier serveur DNS de la liste des serveurs DNS de l'adaptateur préféré et attend une réponse une seconde.

  2. Si le service client DNS ne reçoit pas de réponse du premier serveur DNS dans un délai d'une seconde, il envoie la requête de nom aux premiers serveurs DNS de tous les adaptateurs toujours en cours de traitement et attend une réponse pendant deux secondes.

  3. Si le service client DNS ne reçoit de réponse d'aucun serveur DNS dans les deux secondes, il envoie la requête à tous les serveurs DNS de tous les adaptateurs toujours en cours de traitement et attend une réponse pendant deux secondes supplémentaires.

  4. Si le service client DNS ne reçoit toujours pas de réponse d'un serveur DNS, il envoie la requête de nom à tous les serveurs DNS de tous les adaptateurs toujours en cours de traitement et attend une réponse pendant quatre secondes.

  5. Si le service client DNS ne reçoit de réponse d'aucun serveur DNS, le client DNS envoie la requête à tous les serveurs DNS de tous les adaptateurs toujours en cours de traitement et attend une réponse pendant huit secondes.

L'adaptateur préféré à l'étape 1 est l'adaptateur répertorié en premier dans l'ordre de liaison.


4
Ce processus a changé dans Windows 10, bien que je ne connaisse pas le nouveau processus, je sais que ce qui précède ne s'applique pas à Windows 10, consultez ce blog - blogs.technet.microsoft.com/networking/2015/08/14/…
Robert

14

Sous Windows 10 (et Windows Server 2016), vous devez mettre à jour la métrique de chaque interface dans l'ordre que vous souhaitez.

  1. Panneau de configuration Aller à> Réseau et Internet> Connexions réseau
  2. Cliquez avec le bouton droit sur la connexion souhaitée (connexion prioritaire)
  3. Cliquez sur Propriétés> Internet Protocol Version 4.
  4. Cliquez sur Propriétés> Avancé
  5. Décochez la case 'Métrique automatique'
  6. Entrez 10 dans 'Interface Metric'
  7. Cliquez sur OK

Les références:

J'ai utilisé 10 pour mon réseau local, 20 pour le réseau local sans fil et 100 pour les interfaces VPN (je préfère le DNS local au travail, cela peut être inversé pour les autres). Rappelez-vous métrique inférieure = priorité plus élevée .

Consultez cet article du support technique de Microsoft pour une explication de la fonctionnalité de métrique automatique pour les itinéraires IPv4 .


+1 Pour moi sur Windows 10, c'était la seule solution, merci.
GµårÐïåñ

La modification de la métrique n'affecte que la sélection de l'itinéraire. Cela n'affecte pas le serveur DNS qui sera utilisé.
Jruv

14 votes positifs et expérience personnelle en désaccord, je suis d'accord pour dire qu'il ne le devrait pas, mais le développeur de Microsoft semble l'avoir codé de cette façon.
Jacob Evans

8

Cette page décrit l'algorithme utilisé par Windows pour effectuer des requêtes DNS. Ce n'est pas assez en profondeur pour vous donner toutes les réponses que vous cherchez, mais quelque temps sans renifleur et cet article devrait être tout ce dont vous avez besoin pour déterminer ce qui se passe dans votre situation spécifique.


3

J'ai eu exactement le même problème. J'ai passé une journée à essayer de comprendre. Maintenant je sais et ça marche comme un charme.

Si vous avez plusieurs cartes réseau et si vous spécifiez le serveur DNS dans chacune d’elles. Savez-vous quel serveur DNS sera utilisé enfin?

Eh bien, vous pouvez le vérifier via la pratique.

nslookup 192.168.3.6

Donc, vous voyez le serveur que votre PC utilise réellement

La question est de savoir de quoi dépend ce que les fenêtres du serveur DNS choisissent d'utiliser et comment nous pouvons le changer.

Nous en avons particulièrement besoin lorsque nous utilisons des clients VPN.

La réponse de qwerty2010 est juste et correcte. Mais vous pouvez l’utiliser UNIQUEMENT lorsque vous avez la carte réseau dans le panneau de configuration - Centre de réseau et de partage - Modifier les paramètres de l’adaptateur - Liste des NIC

Ce n'est que si vous voyez la carte réseau responsable de votre client VPN que vous pouvez utiliser un moyen graphique pour indiquer à Windows le serveur DNS que vous souhaitez utiliser (spécifié sur une carte réseau particulière).

Vous accédez donc au Centre de partage et réseau -> Modifier les paramètres de l’adaptateur -> Avancé -> Paramètres avancés -> et vous déplacez le NIC avec le DNS que vous souhaitez UTILISER. (UP, vous devez le lever).

Cependant, si, par exemple, vous utilisez le client vpn de Shrew, vous n’avez pas de NIC.

Que faire.

Vous ouvrez le registre.

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

Et vous regardez dans les sous-dossiers 0000, 0001, etc. le dossier avec

DriverDesc = Shrew Soft Virtual Adapter

bien. Ensuite, vous copiez dans le presse-papier

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

Maintenant tu vas

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

et vous ouvrez key = Bind. Vous verrez la liste comme ceci

\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}

Tout ce que vous avez à faire est de mettre au sommet

\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}

C'est tout. Il n'y a pas besoin de redémarrer.

Maintenant, vos fenêtres utiliseront le DNS spécifié dans le pseudo vpn shrew lorsque vous utiliserez une connexion vpn.


0

Comme cela peut vous aider ou aider d’autres personnes, vous pouvez désactiver l’utilisation de round-robin de Windows des DNS répertoriés pour rendre l’utilisation de DNS plus prévisible. Essayez de régler le RoundRobin=0dans la HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\DNS\Parameters( référence ) pour désactiver le Round robing DNS.

Il existe également un "délai d'attente" pour la rotation des serveurs, vous pouvez également essayer de le mettre à zéro :

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
 ServerPriorityTimeLimit=0

Selon la "référence" mentionnée (lien), cela s'applique à la configuration du serveur DNS afin qu'il fournisse plusieurs adresses IP à certains noms de domaine complets interrogés dans un ordre de tri pivoté d'une requête à l'autre. Cela n'a rien à voir avec la question de savoir comment un résolveur DNS (client) choisit le serveur DNS à interroger.
Thomas Urban

-13

Cela ne décide pas au hasard. Vous êtes connecté à un routeur qui obtient l'adresse IP d'une entreprise disposant de serveurs DNS. Ils reçoivent votre demande, sauf si vous modifiez manuellement l'adresse IP en un autre DNS, par exemple: OpenDns . Ou peut-être décidez-vous d'avoir vos propres serveurs DNS. Cela fonctionne aussi. Il suffit d'entrer les adresses IP dans le centre du réseau et tout devrait bien se passer. Et oui, vous devrez les définir manuellement.

Vous pouvez également ajuster un fichier C:\Windows\System32appelé "hôtes" sans extension. Cela vous permet de rediriger les demandes d'URL au lieu d'être envoyées au DNS standard. Vers un serveur local (qui doit être en cours d'exécution et à l'écoute du port 80)


18
Fondamentalement, tout ce que vous avez dit ici est faux
MDMarra

3
Et un -1 supplémentaire pour même mentionner l'abomination purulente qui est le fichier hosts.
Maximus Minimus

Façon d'être informatif MarkM
KdgDev

4
@WebDevHobo - Il y a vraiment trop à corriger dans un commentaire, mais je vais aborder les gros points. 1) L'OP dispose d'un ordinateur avec plusieurs interfaces (cartes réseau probablement distinctes), chacune ayant un DNS différent défini. Dans le contexte de la question, il utilise clairement quelques serveurs DNS internes ou a quelques serveurs DNS externes préférés - la boîte est probablement multi-hébergée. 2) Vous n'avez pas besoin de définir manuellement l'adresse d'un serveur DNS interne si vous utilisez DHCP dans la configuration du serveur DHCP pour ce pool d'adresses. 3) Le chemin d'accès au fichier hosts est c: \ windows \ system32 \ drivers \ etc
MDMarra

3
Et le fichier HOSTS ne doit pas être utilisé dans cette situation, ou pratiquement jamais, à moins que vous ne fassiez du développement local et que vous utilisiez des en-têtes HOST ou quelque chose de ce type et que vous ayez besoin d'un nom de domaine complet pour le résoudre localement. Et le serveur n'a pas besoin d'exécuter le port 80, que vous utilisiez le fichier HOSTS pour la résolution de nom ou un serveur DNS. Ajoutez simplement: numéro_port à la fin de l'URL. HOSTS ne se soucie pas du port, tout comme DNS ne le fait pas: c'est un moyen de traduire un nom d'hôte en une adresse IP et rien de plus.
MDMarra
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.