81 votes

Comment Windows décide-t-il du serveur DNS à utiliser pour la résolution des noms ?

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

Disons que j'ai plusieurs interfaces, toutes actives, certaines sans serveur DNS spécifié, d'autres avec une détermination automatique et d'autres encore avec une spécification manuelle (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 dans 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 à moins que je ne spécifie manuellement un serveur DNS pour l'autre interface, que les applications utilisent alors. nslookup utilise également le serveur DNS spécifié pour cette autre interface une fois qu'il est spécifié.

Gracias

46voto

joeqwerty Points 106914

Si je ne me trompe pas, c'est déterminé par 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 changeant l'ordre de liaison des différentes cartes réseau et en lançant nslookup comme test.

Pour développer ma réponse, en citant l'article dont Evan a donné le lien 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 pendant 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 sur tous les adaptateurs qui sont encore à l'étude et attend une réponse pendant deux secondes.

  3. Si le service client DNS ne reçoit pas de réponse d'un serveur DNS dans les deux secondes, le service client DNS envoie la requête à tous les serveurs DNS sur tous les adaptateurs qui sont encore à l'étude et attend une réponse pendant deux autres secondes.

  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 sur tous les adaptateurs qui sont encore en cours d'examen et attend une réponse pendant quatre secondes.

  5. Si le service client DNS ne reçoit pas de réponse d'un serveur DNS, le client DNS envoie la requête à tous les serveurs DNS de tous les adaptateurs qui sont encore à l'étude et attend une réponse pendant huit secondes.

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

40voto

Jacob Evans Points 7455

Dans Windows 10, vous devez mettre à jour la métrique de chaque interface dans l'ordre que vous souhaitez.

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

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 inverse pour d'autres). Rappelez-vous métrique inférieure = priorité supérieure .

Voir cet article dans Microsoft Support pour Une explication de la fonctionnalité de métrique automatique pour les routes IPv4. .

Je soupçonne que cela fonctionne parce qu'une partie de la sélection de route consiste à définir l'IP source de l'interface avec la priorité métrique la plus élevée (chiffre le plus bas), car vous n'utilisez pas la même adresse IP pour toutes les connexions, alors qu'une connexion BGP à double adresse utiliserait la même IP source, mais sélectionnerait différentes passerelles de saut suivant en attendant l'IP de destination.

Pour le serveur, installez le service DNS et faites quelque chose d'utile/intelligent, je ne suis pas d'accord pour faire cela sur un OS serveur.

27voto

Jonathan B. Points 288

Pour répondre spécifiquement à la question, Windows utilise les premiers enregistrements DNS associés à l'interface réseau de rang le plus élevé (une interface de type InterfaceMetric dont la valeur est inférieure a un rang supérieur). Les exemples ci-dessous montrent comment obtenir et modifier cette valeur de classement d'interface. Lorsqu'aucun serveur DNS manuel n'est configuré sur une interface, Windows s'appuie sur les serveurs DNS fournis par tout serveur DHCP associé à une interface réseau.

Un scénario courant où ce problème apparaît est lorsque vous avez un ou plusieurs VPN qui fournissent un serveur DNS pour les ressources définies pour ce réseau virtuel.

Cependant, le serveur DNS public attribué par un routeur WiFi prend le dessus et prétend que les hôtes n'existent pas ou répond avec une adresse IP inattendue.

Pour résoudre ce problème, nous devons dicter explicitement quelle interface réseau doit être prioritaire en spécifiant sa "métrique" associée. (Actuellement, cette mesure ne semble pouvoir être réglée que par PowerShell... voir ci-dessous). )

Modifier la métrique de l'interface réseau (par exemple, le VPN)

Tout d'abord, listez les interfaces locales et leurs métriques

C:\> Get-NetIPInterface | Select-Object -Property InterfaceAlias, InterfaceMetric | Sort-Object -Property InterfaceMetric

InterfaceAlias               InterfaceMetric
--------------               ---------------
vEthernet (DockerNAT)                     15
Npcap Loopback Adapter                    25
Ethernet 11                               25
Local Area Connection* 1                  25
Local Area Connection* 2                  25
Npcap Loopback Adapter                    25
Ethernet 2                                35
Wi-Fi                                     55
Bluetooth Network Connection              65
Loopback Pseudo-Interface 1               75
MY VPN                                   200   <--- There's my NIC with my fave DNS
vEthernet (Default Switch)              5000

Ensuite, définissez la métrique de l'interface réseau

(NOTE : Assurez-vous que vous faites ceci à partir d'une console PowerShell administrative)

C:\>  Set-NetIPInterface -InterfaceAlias "MY VPN" -InterfaceMetric 10

C:\> Get-NetIPInterface | Select-Object -Property InterfaceAlias, InterfaceMetric | Sort-Object -Property InterfaceMetric

InterfaceAlias               InterfaceMetric
--------------               ---------------
MY VPN                                    10   <--- Awesome!!! My fave DNS is now on top!!
vEthernet (DockerNAT)                     15
Npcap Loopback Adapter                    25
Ethernet 11                               25
Local Area Connection* 1                  25
Local Area Connection* 2                  25
Npcap Loopback Adapter                    25
Ethernet 2                                35
Wi-Fi                                     55
Bluetooth Network Connection              65
Loopback Pseudo-Interface 1               75
vEthernet (Default Switch)              5000

Test de l'effet de la métrique d'interface

Dans cet exemple, avant de changer la valeur de la métrique, l'envoi d'un ping à une ressource locale qui a également une IP définie publiquement renvoie son IP publique (au lieu de l'IP interne renvoyée par le serveur DNS de mon VPN).

Exemple quand c'est mauvais ! :(

> ping 10640-TEST

Pinging 10640-TEST.example.com [XX.163.171.155] with 32 bytes of data:
Reply from XX.163.171.155: bytes=32 time=80ms TTL=45
Reply from XX.163.171.155: bytes=32 time=76ms TTL=45

Exemple Quand c'est bon ! :)

Après avoir modifié la métrique sur l'interface réseau, je vois maintenant l'adresse IP interne attendue qui est renvoyée par le serveur DNS associé à mon VPN :

> ping 10640-TEST

Pinging 10640-TEST.example.com [192.168.100.44] with 32 bytes of data:
Reply from 192.168.100.44: bytes=32 time=42ms TTL=127
Reply from 192.168.100.44: bytes=32 time=52ms TTL=127

9voto

Evan Anderson Points 140581

Cette page décrit l'algorithme utilisé par Windows pour effectuer des requêtes DNS. Il n'est pas assez approfondi pour vous donner toutes les réponses que vous cherchez, mais un peu de temps avec un renifleur et cet article devraient suffire pour déterminer ce qui se passe dans votre situation spécifique.

8voto

Alex Points 233

J'ai eu exactement le même problème. J'ai passé une journée à essayer de le résoudre.

Si vous avez plusieurs cartes réseau et si vous spécifiez un serveur DNS dans chacune d'elles, savez-vous quel serveur DNS sera utilisé ?

Eh bien, vous pouvez le vérifier avec :

nslookup 192.168.3.6

Vous voyez donc le serveur que votre PC utilise réellement.

La question est la suivante : comment Windows choisit-il le serveur DNS à utiliser et comment peut-on le modifier ?

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

En réponse de qwerty2010 est juste et correct. Mais vous pouvez l'utiliser UNIQUEMENT si vous avez une carte réseau dans le panneau de configuration - centre de réseau et de partage - modifier les paramètres de l'adaptateur - liste des cartes réseau.

Vous pouvez utiliser la méthode graphique uniquement si vous voyez le nœud de réseau responsable de votre client VPN.

Vous allez donc dans Centre de réseau et de partage -> Modifier les paramètres de l'adaptateur -> Avancé -> Paramètres avancés -> et vous déplacez UP le nic avec le DNS que vous voulez UTILISER.

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

Que faites-vous ? 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

Ensuite, vous copiez dans le presse-papiers

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

Maintenant vous allez

[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 en haut

\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, votre Windows utilisera le DNS spécifié dans le shrew vpn nic lorsque vous utiliserez la connexion vpn.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X