11 votes

Forcer la résolution DNS à se produire en dehors du VPN

J'utilise Mojave (10.14) et j'ai un VPN Cisco AnyConnect sur lequel le trafic pour les routes sélectionnées (déterminées par le profil VPN, hors de mon contrôle) est envoyé.

L'acheminement du trafic fonctionne bien, le problème est que la résolution DNS a lieu sur le VPN pour les noms d'hôte qui sont no sur le réseau interne.

La sortie de scutil --dns contient :

craig@TBMBP:~$ scutil --dns
DNS configuration

resolver #1
  search domain[0] : a.mycompany.com
  search domain[1] : b.mycompany.com
  search domain[2] : c.mycompany.com
  search domain[3] : d.mycompany.com
  search domain[4] : hsd1.ma.comcast.net <-- (my ISP)
  nameserver[0] : 10.70.yy.yy

En outre, il contient :

DNS configuration (for scoped queries)

resolver #1
  search domain[0] : hsd1.ma.comcast.net
  nameserver[0] : 2601:184:497f:...     <-- (some ipv6 address)
  nameserver[1] : 192.168.1.1
  if_index : 10 (en0)
  flags    : Scoped, Request A records, Request AAAA records
  reach    : 0x00000002 (Reachable)

Cela signifie que lorsque j'ouvre www.apple.com, je vois sur le VPN :

39  2.316879    10.70.xx.xx 10.70.yy.yy DNS 63  Standard query 0xefee A www.apple.com

Et je ne veux pas que ça arrive. Je veux plutôt que la résolution des DNS se fasse entre moi et mon fournisseur d'accès (ou entre moi et le fournisseur d'accès). 1.1.1.1 o 8.8.8.8 ) et ensuite si la résolution échoue, de consulter le RPV.

Comment mettre à jour le résolveur à utiliser Cloudflare/Google premièrement pour le DNS, en utilisant la ligne de commande sur Mac ?

5voto

Geoff Nixon Points 3143

J'ai une situation similaire où je dois utiliser un portail captif de connexion Wi-Fi très lourd avec un système de gestion de la sécurité. très maladroite, très effrayant pare-feu virtuel. Non seulement il espionne les connexions sécurisées, mais il usurpe l'identité des IP des serveurs DNS, en utilisant l'IAP (lorsqu'il détecte la demande).

La seule chose qui fonctionne pour moi est d'aller exagéré du VPN/pare-feu plutôt que d'essayer de se faufiler sous celui-ci, en utilisant dnscrypt-proxy en utilisant uniquement DNS-over-HTTPS, car il peut détecter le protocole dnscrypt. Pour l'instant, il n'est pas du tout au courant de DNS-over-HTTPS.

Je l'implémente en utilisant un LaunchAgent qui surveille /etc/resolve.conf pour les changements, et quand il détecte un changement, il redémarre dnscrypt-proxy, puis exécute networksetup -setdnsservers Wi-Fi 127.0.0.1 .

En passant, j'utilise Quad9 depuis un certain temps déjà et je le préfère de loin à Google et CloudFlare.

Edit : Après avoir joué un peu plus avec cela, je remarque que (d'une manière ou d'une autre, je n'ai même pas compris d'où vient/vient le trafic), les adresses IPv6 sont en quelque sorte résolues avec ::1 comme serveur DNS, même si aucun autre serveur DNS n'est défini. Il est donc probablement préférable de désactiver IPv6 si vous le pouvez.


Edit 2 :

Oui, je pense qu'être capable de séparer cette route pourrait être trop difficile à faire avec la nouvelle implémentation du VPN au niveau du système ; je pense que le proxy DNS est probablement votre meilleure option. Il pourrait être possible de supprimer ipsec0 comme route par défaut, puis le rajouter pour une plage d'IP restreinte. ... mais à chaque fois que j'essaie (avec IKEv2, pas AnyConnect, mais je suppose qu'ils utilisent la même API), il s'arrête tout simplement.

Quant au trafic résiduel, peut-être est-ce le Rendez-vous ? sudo killall -HUP mDNSResponder; sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist ?

Peut-être pourriez-vous utiliser une application comme Shimo ? Elle est disponible avec Setapp ! Je ne sais pas exactement comment fonctionne AnyConnect, mais il est dit qu'il le prend en charge, et il dispose d'options de configuration qui sont exactement ce que vous recherchez pour d'autres protocoles, y compris IKE, donc... peut-être ?

Shimo

2voto

Oskar Points 1242

La réponse courte est que vous ne pouvez probablement pas faire ce changement.

Il s'agit d'une situation très typique où les paramètres gérés interdire une situation de tunnel VPN divisé . Littéralement, lorsque vous vous connectez à la passerelle VPN, elle s'assure que vous ne pouvez plus atteindre aucune destination réseau, à l'exception des DNS et des paramètres qui se trouvent sur le réseau de l'autre extrémité où le VPN se termine.

Pour résoudre ce problème, vous devez :

  • modifier la configuration de votre VPN pour autoriser un tunnel divisé - éventuellement besoin des administrateurs de réseau pour bénir ce changement / le rendre effectif.
  • Ne pas engager le VPN du tout
  • Configurez une machine virtuelle afin de garder le contrôle de votre système d'exploitation et d'autoriser uniquement le système d'exploitation invité à se connecter au VPN.
  • convaincre l'administrateur réseau de modifier le DNS à l'autre extrémité pour répondre à vos besoins (secondaire d'un paramètre DNS que vous avez avant de vous connecter au VPN, changer les forwarders, etc.)
  • utilisez un autre client ou un autre paramètre client pour éviter le profil que vous exécutez dans le Cisco (en supposant que le Cisco ne vous laisse pas changer la configuration) - Forcer l'ip du serveur DNS lors de la connexion au VPN

(c'est une question courante qui ne reçoit jamais de réponse autre que - n'utilisez pas de VPN, mais j'espère qu'il y a une solution pour vous).

0voto

excalibur223 Points 157

Votre client VPN enregistre son état DNS avec scutil et vous pouvez utiliser le même outil pour modifier le DNS comme vous le souhaitez.

Pour répertorier les états DNS actuellement enregistrés :

scutil <<< list | awk '{ print $4 }' | egrep '^State:/.+/DNS$'

Je ne sais pas comment enregistrer votre propre état et le rendre prioritaire sur les autres, mais vous pouvez modifier tous les états enregistrés pour refléter votre serveur DNS préféré, facilement :

mydns=1.1.1.1
states=$(scutil <<< list | awk '{ print $4 }' | egrep '^State:.+/DNS$')
for state in $states ; do
  printf "d.init\nd.add ServerAddresses * ${mydns}\nset ${state}\nquit\n" | scutil
done

Ce code parcourt la liste des états enregistrés, et pour chacun d'entre eux, l'écrase avec un nouveau qui contient simplement le serveur DNS de votre choix. Vous pouvez également ajouter des domaines de recherche ou d'autres options.

Vous pouvez expérimenter avec scutil en le lançant à la ligne de commande, et en tapant help .

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X