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 --dns
enthä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.1
oder 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?
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.conf
auf Ä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 ::1
einem 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 ipsec0
und 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?
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:
(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.)
netstat -nr
und unkommentierte Zeilen /etc/resolv.conf
vor und nach dem Aufbau des VPN hinzufügen, da es in erster Linie die Routing-Tabellen sind, die die Dinge regeln. @CraigOtis/etc/resolv.conf
es 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.
scutil
: superuser.com/a/86188scutil
. 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.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
.
Fahrrad
Thorbjørn Ravn Andersen
Craig Otis