66 votes

La résolution DNS de Windows 10 via une connexion VPN ne fonctionne pas

Dans Windows 10, lorsqu'il est connecté à un VPN avec Split Tunneling activé (passerelle désactivée), la résolution DNS utilise toujours les serveurs DNS du réseau local, ignorant les serveurs DNS et le suffixe DNS définis sur la connexion VPN.

Le comportement attendu est d'utiliser les serveurs DNS du VPN, sinon il devient impossible de résoudre les entrées DNS sur le réseau distant (comme les ordinateurs de domaine).

Cela fonctionnait correctement dans la version précédente de Windows.

Cette question a été largement débattue sur ce fil de discussion sur les réponses de Microsoft .

71voto

user154684 Points 91

J'ai résolu ce problème de façon permanente en utilisant manuellement en définissant la métrique de ma connexion LAN à une valeur plus élevée que la métrique de la connexion VPN.

Cela peut se faire de deux manières :

  • Par l'intermédiaire de l'interface graphique : Connexions réseau > Propriétés > double-cliquez sur IPv4 > Avancé > Décochez Automatic Metric > Entrez 15 pour la métrique de l'interface > OK > OK.
  • Ligne de commande : netsh int ip set interface interface="LAN CONNECTION NAME" metric=15

L'effet est immédiat (au moins en utilisant la ligne de commande) et les recherches de DNS passent maintenant par mon VPN comme prévu.

Cela fonctionne avec Split Tunneling et c'est une solution permanente pour les reconnexions et les redémarrages.

Note pour les utilisateurs d'IPv6 vous devrez également modifier la métrique dans les propriétés IPv6 de votre réseau local.

En fonction de votre environnement, vous pouvez avoir une métrique par défaut différente pour votre connexion VPN. Il suffit d'ajuster la métrique de votre réseau local à un nombre plus élevé que celle de votre VPN.

Notez que vous pourriez également modifier la métrique du VPN au lieu de la connexion LAN, mais cela ne serait pas permanent car Windows réinitialise la métrique lorsque la connexion est établie.

De plus, si vous constatez que vous ne pouvez pas modifier les propriétés TCP/IP de votre VPN car qui a également été brisé dans une première version de Windows 10 vous pouvez définir la plupart des propriétés par le biais de Powershell :

1. Get-VpnConnection
2. Set-VpnConnection -Name "myVPN" -SplitTunneling $True
3. Set-VpnConnection -Name "myVPN" -DnsSuffix yourdomain.local

17voto

LikeARock47 Points 171

J'ai lancé une nouvelle installation de Windows 10 dans une VM pour la tester après avoir constaté ce problème sur toutes les machines Win10 physiques que je possède. J'ai testé toutes les réponses de ce fil de discussion et aucune n'a fonctionné. J'ai découvert que la solution consiste à combiner les réponses postées ici par "Keenans" et "ECC-Dan" :

http://answers.microsoft.com/en-us/Windows/forum/windows_10-networking/win-10-dns-resolution-of-remote-network-via-vpn/513bdeea-0d18-462e-9ec3-a41129eec736?page=1

Panneau de configuration > Centre Réseau et partage > Modifier les paramètres de l'adaptateur > Cliquez avec le bouton droit de la souris sur votre adaptateur Ethernet ou Wifi > Propriétés > double-cliquez sur IPv4 > Avancé > Décochez Automatic Metric > Entrez 15 pour la métrique de l'interface > OK > OK.

Sur cette même page de propriétés, double-cliquez sur IPv6 > Advanced > Uncheck Automatic Metric > Enter 15 for interface metric > OK > OK.

Ce n'est qu'après avoir modifié ces deux paramètres que le problème est résolu. J'ai essayé de changer l'un ou l'autre à nouveau et le problème s'est reproduit. Après avoir modifié les deux, j'ai exécuté nslookup à partir de la ligne de commande et il a renvoyé le serveur DNS sur le réseau distant auquel le VPN est connecté, alors que sinon il aurait renvoyé le serveur DNS local. J'ai ensuite utilisé la capture Wireshark sur l'interface Ethernet, j'ai fait quelques pings vers des sites web aléatoires, et j'ai vérifié qu'il n'y avait pas de paquets DNS capturés. Cela prouve qu'après avoir effectué les changements, les requêtes DNS sont envoyées UNIQUEMENT sur la connexion VPN, et non simultanément sur toutes les connexions (ce qui est connu comme la fuite DNS Win10). C'est donc aussi une partie de la solution pour la fuite DNS de Win10 :

https://medium.com/@ValdikSS/beware-of-Windows-10-dns-resolver-and-dns-leaks-5bc5bfb4e3f1#.7ppsn1nda

Notez que pour réparer la fuite DNS, vous devez d'abord effectuer les étapes ci-dessus. Ensuite, vous devez définir deux valeurs de registre. Les articles liés n'en listent qu'une, qui à elle seule ne résout pas le problème dans les nouvelles versions de Win10. Définissez ces valeurs de registre :

Key: HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\DNSClient
Value:  DisableSmartNameResolution
Data:  1

Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
Value: DisableParallelAandAAAA
Data:  1

Ce n'est qu'après avoir fait tout cela que le comportement de votre client DNS redeviendra celui qu'il avait dans Win7. On peut se demander comment cela a pu passer le contrôle qualité chez Microsoft.

6voto

Jose Ortega Points 181

Découvrez l'indice de réseau :

Get-NetIPInterface | select ifindex,*int*

ifIndex InterfaceAlias              InterfaceIndex InterfaceMetric
------- --------------              -------------- ---------------
     26 vEthernet (Default Switch)              26            5000
     11 VPN - VPN Client                        11              30
      7 Ethernet                                 7              25
      1 Loopback Pseudo-Interface 1              1              75

Le mien était le VPN avec l'indice 11. Je change le VPN "interfaceMetric" de 30 à 1 :

Get-NetIPInterface -InterfaceIndex 11 | Set-NetIPInterface -InterfaceMetric 1

Vérifier le changement :

Get-NetIPInterface | select ifindex,*int*

ifIndex InterfaceAlias              InterfaceIndex InterfaceMetric
------- --------------              -------------- ---------------
     26 vEthernet (Default Switch)              26            5000
     11 VPN - VPN Client                        11              1
      7 Ethernet                                 7              25
      1 Loopback Pseudo-Interface 1              1              75

2voto

ceztko Points 152

Comme mentionné dans d'autres réponses, la solution à la question du PO est de définir la métrique de l'interface VPN plus basse que la métrique de toutes les interfaces réseau ordinaires, avec une valeur par défaut raisonnable de 1. Ce paramètre peut être conservé en accédant à l'interface utilisateur :

enter image description here

Toutes les réponses données ont un support limité pour les scripts. @ECC-Dan 回答 dépend de la recherche de la carte réseau du système et de la modification de la valeur métrique pour qu'elle soit supérieure à celle de l'interface VPN. Au lieu de cela, @JoseOrtega 回答 ajuste la connexion VPN avec Set-NetIPInterface mais cette valeur sera perdue à la reconnexion dans le cas de connexions L2TP/IPSec. Le problème avec ces connexions VPN est qu'il ne s'agit pas d'interfaces réseau permanentes, mais qu'elles sont créées à la volée sur la base d'un paramètre de configuration appelé "RASPhone" (l'ancien magasin de connexions dialup). Les connexions VPN peuvent être créées avec la cmdlet powershell Add-VpnConnection mais il manque une option spécifique pour définir la métrique de l'interface. Jusqu'à ce que ce problème ne soit pas résolu (comment signaler cette fonctionnalité manquante à Microsof ?), la solution consiste à modifier manuellement le magasin RASphone qui se trouve à l'adresse suivante C:\ProgramData\Microsoft\Network\Connections\Pbk\rasphone.pbk . Ceci est effectué par la fonction script suivante, basée sur ce forum poste :

function PushVpnConnection(
    [string]$connName,
    [string]$connUrl,
    [string]$sharedKey)
{
    Remove-VpnConnection -AllUserConnection -Name $connName -Force 2> $null
    Add-VpnConnection -AllUserConnection -Name $connName -ServerAddress $connUrl `
        -TunnelType L2TP -L2tpPsk $sharedKey -Force -AuthenticationMethod MSChapv2,Chap `
        -SplitTunneling $True -EncryptionLevel 'Optional'

    # Tweak the rasphone to change the IpInterfaceMetric setting to 1
    $rasphonepath = 'C:\ProgramData\Microsoft\Network\Connections\Pbk\rasphone.pbk'
    $rasphone = Get-Content $rasphonepath -Raw
    $regex = "^([\s\S]*\[${connName}\][\s\S]*IpInterfaceMetric=)(\d+)([\s\S]*)$"
    $match = [Regex]::Match($rasphone, $regex)
    $rasphone = $match.Groups[1].Value + '1' + $match.Groups[3].Value
    $rasphone | Set-Content $rasphonepath
}

Cela créera une connexion VPN L2TP/IPSec avec le tunnelage partagé activé et la métrique 1. Il doit être exécuté avec des privilèges d'administrateur. Il peut être exécuté comme suit :

PushVpnConnection 'ConnectionName' 'connectionurl.com' 'presharedkey'

1voto

Milan Kerslager Points 191

Cela ne fonctionne pas même si j'ai changé les métriques sur IPv4 et IPv6 et utilisé les registres DisableSmartNameResolution et DisableParallelAandAAAA avec Windows 10 Edu actuel (en décembre 2018) lorsque le client est connecté par un câble UTP et que le protocole IPv6 est pris en charge sur le réseau local (c'est-à-dire que le client a une adresse IPv6 publique/globale).

Il suffit de désactiver le protocole IPv6 sur l'interface UTP/LAN utilisée pour le VPN pour qu'il fonctionne (pour supprimer/ne pas utiliser l'adresse IPv6 globale sur le client).

Il fonctionne sans problème lorsque le client est connecté à l'Internet par Wi-Fi et que l'IPv6 est disponible (le client a une adresse IPv6 globale et n'a pas de connexion UTP/LAN).

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