Erzwingen Sie, dass die DNS-Auflösung außerhalb des VPN erfolgt

Ich verwende Mojave (10.14) und habe ein Cisco AnyConnect VPN, über das der Datenverkehr für ausgewählte Routen (bestimmt durch das VPN-Profil, außerhalb meiner Kontrolle) gesendet wird.

Das Traffic-Routing funktioniert gut, das Problem ist, dass die DNS-Auflösung über das VPN für Hostnamen erfolgt, die sich nicht im internen Netzwerk befinden.

Die Ausgabe von scutil --dnsenthält:

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

Weiterhin enthält es:

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)

Das heißt, wenn ich www.apple.com öffne, sehe ich über das VPN:

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

Und ich möchte nicht, dass das passiert. Vielmehr möchte ich, dass die DNS-Auflösung zwischen mir und meinem ISP (oder zwischen mir und 1.1.1.1oder 8.8.8.8) stattfindet und dann , wenn die Auflösung fehlschlägt, das VPN konsultieren.

Wie aktualisiere ich den Resolver, um zuerst Cloudflare/Google für DNS zu verwenden, indem ich die Befehlszeile auf einem Mac verwende?

Hoffentlich liege ich mit meiner Antwort falsch, Sie können das nicht, aber mal sehen, wie Ihr Netzwerk-Routing aussieht. Ich habe kein VPN, mit dem Split-Tunneling getestet werden kann - aber Sie haben überlegene Details angegeben, und da die VPN-Konfiguration außerhalb Ihrer Kontrolle liegt, bleiben Sie möglicherweise bei dem, was sie vorschreibt.
Was ist der eigentliche Grund, warum Sie dies tun möchten?
@ThorbjørnRavnAndersen Ich hatte Probleme mit der langsamen Auflösung des VPN-DNS und würde mein Netzwerk gerne so konfigurieren, dass es stattdessen Google/Cloudflare verwendet, aber das VPN scheint immer Vorrang zu haben, auch wenn die Route nicht wirklich gesichert ist durch das VPN.

Antworten (3)

Ich habe eine ähnliche Situation, in der ich eine sehr schwerfällige Captive-Portal-WLAN-Verbindung mit einer sehr schwerfälligen, sehr gruseligen virtuellen Firewall verwenden muss. Es schnüffelt nicht nur sichere Verbindungen aus, es imitiert DNS-Server-IPs unter Verwendung von DPI (wenn es die Anfrage erkennt).

Das einzige, was für mich funktioniert, ist, über das VPN/die Firewall zu gehen, anstatt zu versuchen, sich darunter zu schleichen, indem ich dnscrypt-proxy verwende, der nur DNS-über-HTTPS verwendet, da es das dnscrypt-Protokoll erkennen kann. Im Moment ist DNS-over-HTTPS überhaupt nicht bekannt.

Ich implementiere es mit einem LaunchAgent, der /etc/resolve.confauf Änderungen achtet, und wenn er eine Änderung erkennt, startet er dnscrypt-proxy neu und führt dann networksetup -setdnsservers Wi-Fi 127.0.0.1.

Übrigens: Ich benutze Quad9 schon seit einiger Zeit und bevorzuge es Google und CloudFlare.

Bearbeiten: Nachdem ich ein bisschen mehr damit gespielt habe, bemerke ich, dass IPv6-Adressen irgendwie mit ::1einem DNS-Server aufgelöst werden (irgendwie habe ich nicht einmal herausgefunden, woher der Datenverkehr kommt), auch wenn es keine gibt andere DNS-Server eingestellt. Also wahrscheinlich besser, IPv6 einfach zu deaktivieren, wenn Sie können.


Bearbeiten 2:

Ja, ich denke, die Möglichkeit, diese Route aufzuteilen, könnte einfach zu viel mit der neueren VPN-Implementierung auf Systemebene zu tun haben. Ich denke, DNS-Proxy ist wahrscheinlich die beste Wahl. Es ist möglicherweise möglich, die Standardroute zu entfernen ipsec0und sie dann für einen eingeschränkten IP-Bereich wieder hinzuzufügen ... aber jedes Mal, wenn ich dies versuche (mit IKEv2, nicht AnyConnect, aber ich gehe davon aus, dass sie dieselbe API verwenden). nur ... hört auf.

Was den Restverkehr betrifft, vielleicht sein Rendezvous? sudo killall -HUP mDNSResponder; sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist?

Vielleicht können Sie auch eine App wie Shimo verwenden? Es ist mit Setapp verfügbar! Ich weiß nicht genau, wie AnyConnect funktioniert, aber es sagt, dass es es unterstützt, und es stehen Konfigurationsoptionen zur Verfügung, die genau das sind, wonach Sie für andere Protokolle suchen, einschließlich IKE, also ... vielleicht?

Schimo

Gut gemacht mit der Antwort - super technisch und vielversprechend. Für Hin- und Her-Kommentare - schauen Sie in diesem Chatroom nach dieser speziellen Frage .

Die kurze Antwort ist, dass Sie diese Änderung wahrscheinlich nicht vornehmen können.

Dies ist eine sehr typische Situation, in der die verwalteten Einstellungen eine Split-VPN-Tunnel-Situation nicht zulassen . Wenn Sie sich buchstäblich mit dem VPN-Gateway verbinden, stellt es sicher, dass Sie kein Netzwerkziel mehr erreichen können, mit Ausnahme des DNS und der Einstellungen, die sich auf dem anderen Endnetzwerk befinden, auf dem das VPN endet.

Um dies zu beheben, müssen Sie:

  • Ändern Sie Ihre VPN-Konfiguration, um einen geteilten Tunnel zuzulassen - möglicherweise müssen die Netzwerkadministratoren diese Änderung segnen / wirksam machen.
  • Schalten Sie das VPN überhaupt nicht ein
  • Richten Sie eine virtuelle Maschine ein, damit Sie die Kontrolle über Ihr Betriebssystem behalten und nur dem Gastbetriebssystem erlauben, sich mit dem VPN zu verbinden
  • Überzeugen Sie den Netzwerkadministrator, das DNS am anderen Ende an Ihre Bedürfnisse anzupassen (sekundär eine DNS-Einstellung, die Sie haben, bevor Sie sich mit VPN verbinden, die Weiterleitungen ändern usw.)
  • Verwenden Sie einen anderen Client oder eine andere Client-Einstellung, um das Profil zu vermeiden, das Sie in Cisco ausführen (vorausgesetzt, Cisco lässt Sie die Konfiguration nicht ändern). - Erzwingen Sie die DNS-Server-IP, während Sie mit VPN verbunden sind

(Dies ist eine häufige Frage, die nie anders beantwortet wird als - verwenden Sie kein VPN, aber ich hoffe, es gibt eine Möglichkeit für Sie.)

Ich glaube, das VPN ist derzeit ein Split-Tunnel. Sobald die DNS-Auflösung (z. B. an apple.com) über das VPN erfolgt, wird der Datenverkehr selbst dann außerhalb des VPN an meinen ISP gesendet.
Der Link zu „Ändern Sie Ihr VPN“ enthält Schritte zum Testen, ob Cisco Split-Tunneling zulässig war. Können Sie eine lokale, nicht routingfähige IP-Adresse in Ihrem lokalen Subnetz anpingen, sobald Sie eine Verbindung zum VPN hergestellt haben? Außerdem müssen Sie möglicherweise die Ergebnisse netstat -nrund unkommentierte Zeilen /etc/resolv.confvor und nach dem Aufbau des VPN hinzufügen, da es in erster Linie die Routing-Tabellen sind, die die Dinge regeln. @CraigOtis
Ich glaube nicht, dass /etc/resolv.confes heutzutage unter macOS verwendet wird. Die Datei enthält:This file is not consulted for DNS hostname resolution, address resolution, or the DNS query routing mechanism used by most processes on this system.
Es wird aktualisiert, um mir zu zeigen, was CiscoVPN in Bezug auf das primäre DNS ändert, also schließe ich es in meine Fehlerbehebung ein. Sie haben Recht damit, dass die Datei möglicherweise nie von macOS gelesen wird, aber sie zeigt nützliche Informationen für mich auf 10.14.1, um anzuzeigen, dass VPN den DNS-Status geändert hat.
Diese Antwort ist wahrscheinlich falsch, Sie können diese Änderung wahrscheinlich mit vornehmen scutil: superuser.com/a/86188
@Neil Mit welcher Version von Cisco VPN können Sie diese Änderung vornehmen, wenn das Tunnel-Setup gesperrt ist, um ein Split-VPN zu verhindern? Ich würde gerne mehr erfahren. Diese Frage bezieht sich auf Cisco AnyConnect, wenn Split explizit deaktiviert ist, und nicht darauf, ob Sie dies im Allgemeinen tun können, wenn es nicht erzwungen wird.
@bmike Ich denke nicht, dass es wichtig ist. Die Frage war, wie das Betriebssystem das reguläre DNS verwenden soll, bevor das VPN-DNS verwendet wird, und dies kann durch Bearbeiten der DNS-Konfiguration mit scutil. Beim Verbinden wird AnyConnect diese Einstellungen schlagen, aber es ist zumindest möglich, sie nach jeder Verbindung manuell zu aktualisieren. Die VPN-Konfiguration kann dem Betriebssystem nicht mitteilen, wie es DNS-Namen auflösen kann, daher sollte eine Überschreibung funktionieren.
@Neil Bitte zeigen Sie uns, wie - jeder Versuch, den ich unternehme, um die VPN-Verbindung zu ändern, wird unterbrochen, sodass Sie Ihr eigenes DNS oder eine VPN-Verbindung haben können - nicht beides. Vielleicht sehe ich aber nicht die genaue Verwendung, auf die Sie sich berufen ...
@bmike Ich spekuliere nur, also gehe davon aus, dass es bei mir nicht funktioniert. Ich lasse Sie wissen, ob ich es zum Laufen bringen kann.

Ihr VPN-Client registriert seinen DNS-Status mit scutil, und Sie können dasselbe Tool verwenden, um den DNS nach Ihren Wünschen zu ändern.

So listen Sie die derzeit registrierten DNS-Status auf:

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

Ich weiß nicht, wie Sie Ihren eigenen Status registrieren und die anderen außer Kraft setzen können, aber Sie können alle registrierten Status ändern, um Ihren bevorzugten DNS-Server widerzuspiegeln, ganz einfach:

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

Dieser Code durchläuft die Liste der registrierten Staaten und überschreibt sie für jeden mit einem neuen, der nur den DNS-Server Ihrer Wahl enthält. Sie können auch Suchdomänen oder andere Optionen hinzufügen.

Sie können damit experimentieren scutil, indem Sie es in der Befehlszeile ausführen und eingeben help.