Ändern Sie die DNS-Suchreihenfolge auf Mac El Capitan

2910
Brick

Ich habe einen Router, auf dem auch ein DNS ausgeführt wird, der Namen für Computer in meinem lokalen Netzwerk enthält. Es ist so eingerichtet, dass Anfragen weitergeleitet werden. Für jeden öffentlichen Computer wird der DNS-Server meines ISP erreicht. Der Router ist so konfiguriert, dass es sich um den primären DNS handelt, und der DNS des ISP wird als sekundär aufgelistet. Ich habe ein paar Maschinen (solche mit Einträgen in meinem privaten DNS), die statische IPs haben. Die anderen Maschinen, einschließlich des Macs, der Gegenstand dieser Frage ist, erhalten ihre Adressen per DHCP.

Windows-Maschinen in diesem Netzwerk funktionieren einwandfrei. Sie lösen die privaten Namen auf die Maschinen in meinem Netzwerk auf und haben auch Zugang zum öffentlichen Internet.

Mein einzelner Mac-Laptop funktioniert nicht. Es greift problemlos auf das öffentliche Internet zu, trifft jedoch nicht meine internen DNS, um die internen Namen zu erhalten. Wenn ich zum Beispiel einen Ping an eine interne Maschine mache

ping internal.example.com 

Ich bekomme Pakete zurück, aber es wird eine IP-Adresse angezeigt, die Hover entspricht. (Hover stellt anscheinend eine Landing Page für jede Subdomain auf, für die es keine öffentliche Route gibt.) Wenn ja

nslookup internal.example.com 

Ich erhalte jedoch die richtige (interne) IP-Adresse für den Computer in meinem lokalen Netzwerk.

Schließlich, wenn ich noch einmal ping, aber diesmal meine internen DNS (192.168.1.2) verwenden,

ping internal.example.com 192.168.1.2 

Ich erhalte die Antwort vom richtigen Rechner in meinem lokalen Netzwerk . Dies scheint darauf hinzudeuten, dass auch der "native" Ansatz das kann, was ich will, wenn er nur das richtige DNS verwendet.

Ich habe viele Artikel gefunden, die über dieses Problem sprechen, aber was ich bisher gefunden habe, ist entweder veraltet oder keine vollständige Lösung für mein Problem. Was ich bisher zusammengeschustert habe:

  • Apple hat seine Methodik für die DNS-Auflösung im Verlauf mehrerer Betriebssystemupgrades geändert, so dass Online-Antworten schnell veraltet sind.
  • Der Mac hat (mindestens) zwei DNS-Auflösungsschemata, die ab El Capitan gleichzeitig ausgeführt werden. Dies hängt mit der Erzielung unterschiedlicher Ergebnisse von Ping und Nslookup zusammen, wie oben erwähnt. Die Befehlszeilen-Dienstprogramme, die auf dem "üblichen" Linux-System arbeiten, scheinen dies zumindest auf ihren Manpages zu dokumentieren, normalerweise in einem Abschnitt mit dem Titel "Mac OS X Notice". Leider ist nicht klar, welche Dienstprogramme welche verwenden, ohne sie einzeln zu überprüfen. (Bisher sieht es so aus, als würden nslookup und dig die Linux-Methodik verwenden und Ping verwendet, was "native" für Mac OS ist.)
  • Es ist eine (mehr oder weniger) dokumentierte Funktion der "nativen" DNS-Methode, die dynamisch auswählt, welches DNS verwendet werden soll. Das bedeutet insbesondere, dass die Reihenfolge, die in Fenstern wie der Systemsteuerung Netzwerk oder die vom Router (in meinem Fall) angegebene Reihenfolge angezeigt wird, nicht beachtet wird.
  • Ich habe einige Informationen vom "nativen" DNS-Tool mit dem Befehl sudo killall -INFO mDNSResponderin der Befehlszeile erhalten. Das liefert Nachrichten in /var/log/system.log. Aus dieser Protokollnachricht wird ersichtlich, dass der DNS meines ISP in diesem System zuerst aufgeführt wird. (Auch hier stelle ich fest, dass es aufgeführt ist zweite in der Konfiguration des Routers und in der Systemsteuerung Netzwerk. Es ist auch an zweiter Stelle aufgeführt, wenn ich laufe scutil.)
  • Ich habe versucht, den Cache auf mDNSResponder zu leeren, sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder;aber das hat nicht geholfen.
  • Ich habe versucht, die Datei com.apple.mDNSResponder.plistwie in dieser Anleitung zu bearbeiten ( https://www.cnet.com/news/os-x-10-6-3-and-dns-server-priority-changes/ ), konnte es aber nicht Bearbeiten Sie die Datei. (Schreibgeschützt, auch mit sudo vi.) Außerdem hat die Datei auf meinem System einen anderen Inhalt als in diesen Anweisungen explizit angegeben.

Trotz alledem habe ich immer noch einen Mac, der nicht in einem Netzwerk mit anderen Computern funktioniert, die hervorragend funktionieren. Ich könnte wahrscheinlich die DNS des ISP auf dem Router herausnehmen, so dass es nicht einmal angeboten wird, aber das fühlt sich an wie ein Hack. Gibt es eine gute Lösung für El Capitan?

Sorry, wenn das schon beantwortet wurde. (Ich habe das Gefühl, dass es irgendwo sein muss!) Ich habe den ganzen Tag den ganzen Tag herumgegraben und noch keine Lösung für El Capitan gefunden.

3

1 Antwort auf die Frage

4
Spiff

macOS verfügt über ein ausgeklügeltes System für das DNS-Anforderungsrouting ("Bereichsabfragen"), um Fälle wie VPN zu behandeln, in denen Sie möglicherweise den Domänennamen Ihrer Arbeit benötigen, um Ihren VPN-Tunnel durchzugehen, sodass Sie Antworten von den internen DNS-Servern Ihrer Arbeit erhalten, die möglicherweise mehr / andere Informationen enthalten als die externen DNS-Server Ihrer Arbeit.

Um zu sehen, welche DNS-Server von MacOS verwendet werden und wie der Abfragebereich eingerichtet ist, verwenden Sie:

scutil --dns 

Verwenden Sie zum Abfragen von DNS wie bei macOS:

dns-sd -G v4v6 example.com 

…oder…

dns-sd -q example.com 255 255 

Siehe die Manpages scutil(8)und dns-sd(1)für weitere Informationen.

DNS-Tools zur Fehlerbehebung wie nslookup(1), dig(1)und host(1)enthalten ihren eigenen DNS - Resolver - Code und nicht Verwendung des Systems DNS - Abfrage - APIs machen, damit sie nicht das Systemverhalten bekommen. Wenn Sie nicht angeben, welchen DNS-Server sie verwenden sollen, wird wahrscheinlich nur einer verwendet /etc/resolv.conf, der automatisch generiert wird und nur die Standard-DNS-Server für nicht beschränkte Abfragen enthält.

Herkömmliche Unix-Befehlszeilentools, die nicht für DNS spezifisch sind, wie z. B. ping(8)wahrscheinlich die traditionellen gethostbyname(3)APIs, die unter macOS das Verhalten des DNS-Auflösers verwenden.

Um zu sehen, was Ihr DHCP-Server Ihrem Mac empfohlen hat, schauen Sie sich die domain_name_serverZeile in der Ausgabe von an:

ipconfig getpacket en0 

(Ersetzen Sie en0 durch den korrekten Namen der BSD-Schnittstelle, wie Sie es in sehen würden. ifconfig)

Bitte beachten Sie, ich bin mir ziemlich sicher, dass die DNS-RFCs keine DNS-Implementierungen benötigen, um die Liste der Server nach Rang zu berücksichtigen. Obwohl es bei DNS-Implementierungen üblich ist, sie auf diese Weise zu behandeln, ist es wahrscheinlich nicht ratsam, sich auf alle Implementierungen zu verlassen, um Dinge auf diese Weise zu implementieren, wenn dies nicht in den relevanten Standards angegeben ist.

Beachten Sie außerdem, dass Ihr Mac möglicherweise auch DNS-Serverlisten von IPv6-Router-Ankündigungen oder DHCP6 abruft, sofern diese in Ihrem Netzwerk aktiv sind. Und natürlich VPN-Einstellungen, installierte Konfigurationsprofile, Open Directory, Active Directory usw., falls diese Dinge in Ihrer Umgebung verwendet werden.

Wenn ich 'ifconfig getpacket en0' mache, wird mir mitgeteilt, dass 'ifconfig: interface getpacket nicht vorhanden' ist. (Ich habe geprüft und "en0" ist der richtige Schnittstellenname.) Die Manpage für "ifconfig" listet dies auch nicht als Option auf. (Ich habe darauf geantwortet, und es scheint überhaupt nicht in dem Dokument zu sein.) Brick vor 7 Jahren 0
@Brick `ipconfig`, nicht` ifconfig` (`p` nicht` f`). Spiff vor 7 Jahren 0
Mit der korrekten Schreibweise (meinem Fehler!) Bekomme ich Informationen von diesem Befehl, aber es sagt mir, was ich von einem Blick auf das Kontrollfeld "Netzwerk" bekomme. Mein lokales DNS wird zuerst aufgeführt, gefolgt vom ISP. Ich schätze Ihren Beitrag, aber bisher bin ich noch dort, wo ich angefangen habe. Die neue Information aus Ihrer Antwort ist, dass der Standard möglicherweise keine Einhaltung der Reihenfolge erfordert, also werde ich das prüfen. Das war nicht mein Verständnis, aber ich behaupte überhaupt nicht, ein Experte zu sein. Ich suche nach einer Möglichkeit, die "anspruchsvolle" Methode zu umgehen. Wenn dies fehlschlägt, ist mir klar, dass ich den DNS für alle wiederholen muss. Brick vor 7 Jahren 0
Ohne ersichtlichen Grund wechselte er für ein paar Bewegungen zu meinem bevorzugten DNS und ging dann zurück. Sehr frustrierend... Brick vor 7 Jahren 0
Ich bin +1 auf diese Antwort, aber ich lasse die Frage zunächst offen. Ich habe mein unmittelbares Problem gelöst, indem ich den DNS des ISP als sekundäre Option für die DHCP-Clients entfernt habe. (Es wird immer noch von meinem Router für weitergeleitete Anfragen verwendet.) Darüber hinaus habe ich meine Einstellungen bei Hover so geändert, dass er keine Zielseite bereitstellt. Ich denke, dass dies die Verwendung meines internen DNS möglicherweise erzwungen hat, da der Mac keine Antwort vom öffentlichen Server erhalten hätte, wenn ich das zuerst getan hätte. Möchte noch wissen, wie man diese Einstellung am Mac ändert - wenn es überhaupt möglich ist. Brick vor 7 Jahren 0
Nach einigen weiteren Nachforschungen bin ich zu dem Schluss gekommen, dass selbst die Windows-Systeme, die ich hatte, nicht aus dem Grund funktionierten, den ich dachte. Der Schlüsselteil dieser Antwort war für mich der Teil, der anzeigte, dass die Standards keine bestimmte Suchreihenfolge erfordern. Vielen Dank! Brick vor 7 Jahren 0
@Brick Übrigens, von Apples Open Source bis zu mDNSResponder von El Capitan. Wenn ich es richtig verstehe, sieht es so aus, als würde macOS * versuchen, die aufgelistete Reihenfolge einzuhalten, aber wenn es keine Antwort darauf gibt Rechtzeitig vom ersten Server in der Liste aus könnte der Server in eine Strafbox gesetzt und für eine Weile auf den nächsten Server verschoben werden. Spiff vor 7 Jahren 0