Voici la configuration:
Le problème:
Ce que je veux faire:
Ce que j'ai essayé:
Je soupçonne que si je pouvais obtenir que le VPN ne répertorie aucun serveur DNS du tout, les règles NRPT se déclencheraient juste pour exemple.local, et tout fonctionnerait correctement. Mais je ne peux pas trouver un moyen de ne pas utiliser ceux fournis par le serveur RRAS.
J'ai trouvé la solution.
Ajuster la métrique d'interface pour être un nombre plus grand que les adaptateurs Ethernet/wifi existants le fera préférer les serveurs DNS sur le réseau local, mais les règles NRPT continueront de fonctionner pour envoyer des requêtes DNS pour mon propre domaine à mes serveurs via le VPN.
Cependant, il n'y a aucun moyen d'ajuster la métrique d'interface pour une connexion VPN dans PowerShell, ni dans VBscript, ni .NET, ni VPNv2 CSP.
Si le VPN est connecté, la métrique peut être modifiée dans PowerShell avec l'applet de commande Set-NetIPInterface, mais lorsque le VPN n'est pas connecté, il n'y apparaît pas du tout. Et les changements ne persisteront pas lors des redémarrages.
La seule façon de le modifier semble être de modifier le C:\ProgramData\Microsoft\Network\Connections\Pbk\rasphone.pbk
fichier et modification des lignes IpInterfaceMetric
et Ipv6InterfaceMetric
vers des nombres supérieurs. Je les ai changés tous les deux à 100.
Après cela, et en combinaison avec les règles NRPT, DNS fonctionne comme vous le souhaitez - toutes les requêtes par exemple.local sont envoyées à mes serveurs DNS AD. Tout le reste (y compris example.com) est envoyé aux serveurs DNS de leur réseau local.
Une solution de contournement potentielle que vous pourriez essayer consiste à mettre en place un serveur DNS Server 2016 et à implémenter une stratégie DNS pour effectuer des DNS partagés avec prise en compte de la géolocalisation. Cela vous permettrait de dire aux requêtes DNS du sous-réseau Device VPN d'utiliser l'IP externe au lieu de l'IP interne.
Les commandes powershell ressembleraient à quelque chose comme ci-dessous.
Sous-réseau VPN de l'appareil
Add-DnsServerClientSubnet -Name "DeviceVPNSubnet" -IPv4Subnet "192.168.1.0/24"
Portée de la zone VPN de l'appareil
Add-DnsServerZoneScope -ZoneName "example.com" -Name "DeviceVPNZoneScope"
Enregistrement A par défaut (devrait déjà exister)
Add-DnsServerResourceRecord -ZoneName "example.com" -A -Name "mail" -IPv4Address "192.168.0.5"
Appareil VPN Un enregistrement
Add-DnsServerResourceRecord -ZoneName "example.com" -A -Name "mail" -IPv4Address "203.0.113.5" -ZoneScope "DeviceVPNZoneScope"
Politique de résolution du périphérique VPN
Add-DnsServerQueryResolutionPolicy -Name "Device VPN Policy" -Action ALLOW -ClientSubnet "eq,DeviceVPNSubnet" -ZoneScope "DeviceVPNZoneScope,1" -ZoneName "example.com"
Vous pouvez définir des serveurs DNS internes pour n'importe quel espace de noms à l'aide de l'élément DomainNameInformation dans votre ProfileXML. Si vous utilisez un DNS fractionné, il peut y avoir des cas où les espaces de noms "internes" doivent être routés en externe et non via le tunnel VPN. Dans ces scénarios, vous devrez créer des "exclusions", qui sont essentiellement des espaces de noms définis NON pour utiliser les serveurs DNS internes. Pour ce faire, vous ne laissez pas simplement le champ DnsServers vide, mais vous laissez complètement les DnsServers hors de l'élément.
Vous pouvez trouver plus d'informations ici: https://directaccess.richardhicks.com/2018/04/23/always-on-vpn-and-the-name-resolution-policy-table-nrpt/
J'espère que cela pourra aider!
Juste une pensée, mais peut-être définir un script de connexion .bat qui ajoute l'adresse IP publique correcte du serveur de messagerie lors de la connexion au fichier hosts, puis la supprime du fichier hosts du client lors de la déconnexion? En théorie, je suppose que vous pouvez toujours l'avoir dans le fichier hosts, puis ils accèdent simplement au serveur à partir de son adresse IP publique, même au bureau. Quoi qu'il en soit, cela remplacera tout DNS du serveur RRAS.
Le fichier hosts se trouve dans C:\Windows\System32\Drivers\etc\hosts.
Lorsque vous utilisez des paramètres de métrique automatiques sur toutes les interfaces, pour une raison quelconque, la carte Ethernet LAN a une métrique inférieure à l'interface du tunnel de l'appareil, mais les interfaces wifi ont une métrique plus élevée que l'interface du tunnel de l'appareil.
Ainsi, avec Split DNS d'une zone de domaine public, les événements suivants se produisent pour les appareils connectés au LAN et au Wifi.
Clients de tunnel de périphérique utilisant une interface LAN (câble) - Résout les enregistrements du domaine public à l'aide de serveurs DNS configurés localement
Clients de tunnel de périphérique utilisant WIFI - Résout les enregistrements du domaine public en utilisant les serveurs DNS configurés sur l'interface de tunnel de périphérique
Je trouve cela étrange et je me serais attendu à ce que le tunnel de l'appareil ait toujours la métrique la plus basse, lors de l'utilisation de l'affectation automatique des métriques. La partie la plus étrange est que la métrique d'interface de tunnel de périphérique est définie sur un nombre entre les interfaces LAN (câble) et WIFI.
Qui est correct? Je préfère ne pas définir la métrique manuellement pour aucune des interfaces.
Ceci est confirmé en utilisant un VPN à tunnel partagé, n'ont pas testé avec force-tunnel. Je voudrais que tous les DNS, même pour Split-tunnel, se résolvent à l'aide des serveurs DNS configurés par le tunnel de l'appareil et utilisent les paramètres NRPT, si pour une raison quelconque je dois résoudre un domaine en dehors de la connexion VPN.