Ändern Sie den DNS-Server über das Terminal (oder Skript) unter Mac OS X

29

Wie kann ich meinen DNS-Server über das Terminal unter Mac OS X ändern? [Ich brauche das, weil mein DNS mit meinem VPN nicht richtig funktioniert. Manchmal wird der DNS für meine Hauptverbindung verwendet, und manchmal wird der für das VPN festgelegte DNS verwendet (der sollte es sein).]

Dan Rosenstark
quelle

Antworten:

15

Sie können scutilinteraktiv vom Terminal aus nutzen. Führen Sie sudo scutildie folgenden Befehle aus, und tauschen Sie die DNS-Server gegebenenfalls aus:

> öffnen
> d.init
> d.add ServerAddresses * 8.8.8.8 9.9.9.9
> Status festlegen: / Netzwerk / Dienst / PRIMARY_SERVICE_ID / DNS
> beenden

Anstatt Ihre DNS-Server zu verwenden 8.8.8.8und zu 9.9.9.9verwenden.

Das einzige Problem ist, dass dies bei Neustarts nicht dauerhaft ist . Wenn Sie dauerhafte Änderungen wünschen, möchten Sie ncutil . Der Grund, warum die Bearbeitung /etc/resolv.confin neueren Versionen von OS X nicht ausreicht, ist, dass configd jetzt eine Datenbank verwendet, um Informationen zu aktuellen Einstellungen zu speichern, die andere Anwendungen lesen. Bestimmte Anwendungen werden weiterhin gelesen /etc/resolv.conf (z. B. Host), obwohl dies nicht bei allen Anwendungen der Fall ist.

John T
quelle
2
8.8.8.8 ist jedoch gültig. Googles öffentliches DNS. 8.8.4.4 ist die sekundäre. :-)
Vergessenes Semikolon
Ich weiß, ich benutze es :)
John T
1
Es sollte. Mit können Sie scutil --dnsbestätigen.
John T
2
Dies scheint auf meinem Mac OSX 10.7.5 MBP nicht zu funktionieren, zumindest nicht, wenn dies buchstäblich getan wird. Sollte ich irgendetwas in der set State:/Network/Service/PRIMARY_SERVICE_ID/DNSLeitung ersetzen oder kann ich das so verwenden, wie es ist? Sollten die neuen DNS-Server scutil --dnsnach der Änderung in der Ausgabe erscheinen?
SSC
2
@ssc Run scutilgefolgt von > list, um den Schlüssel zu finden, durch den PRIMARY_SERVICE_ID ersetzt werden soll.
J. Money
46

Sie können verwenden networksetup:

sudo networksetup -setdnsservers <networkservice> DNS1, DNS2, DNS3

zB (mit der Flughafenverbindung werden die DNS-Server von Google verwendet)

sudo networksetup -setdnsservers AirPort 8.8.8.8 8.8.4.4

Sie können den Namen des Netzwerkdienstes ermitteln, indem Sie ausführen networksetup -listallnetworkservices. Es wird wahrscheinlich "Wi-Fi" sein.

Dies ist dasselbe, als ob Sie die Einträge in den Systemeinstellungen im Bereich "Netzwerkeinstellungen" bearbeiten würden, sodass sie auch nach einem Neustart bestehen bleiben.

Möglicherweise tritt auf Snow Leopard ein DNS-Problem auf, das auftritt, wenn die Reihenfolge der DNS-Server geändert wird (siehe Frage 84144 ).

Chealion
quelle
Wow, 84144 ist das Problem, das ich habe. Das alles wird noch bearbeitet ... vielen Dank!
Dan Rosenstark
6
Ein Hinweis für alle, die den DNS entfernen möchten, schreiben Sie einfach "leer" (ohne Anführungszeichen) anstelle des DNS:sudo networksetup -setdnsservers <networkservice> empty
jackJoe
14

Ich habe nicht genug Punkte, um auf Chealions Post zu antworten, aber um sie zu ergänzen, fange ich mit der Auflistung der Interfaces an

networksetup -listallnetworkservices

Sobald Sie die Schnittstelle haben, die Sie ändern möchten, können Sie das Folgende tun (ich verwende das Wi-Fi, aber Sie können jede andere Schnittstelle tun)

sudo networksetup -setdnsservers Wi-Fi empty
sudo networksetup -setdnsservers Wi-Fi 8.8.8.8 8.8.4.4
sudo killall -HUP mDNSResponder

In der ersten Zeile werden die DNS-Einstellungen geleert und anschließend die DNS-Server, die wir verwenden möchten, und der DNS-Cache geleert

Um die DNS-Änderung zu überprüfen, können Sie dies vorher und nachher oder einfach danach tun

scutil --dns | grep 'nameserver\[[0-9]*\]'
David Kittell
quelle
Jeder, der über diese Seite gestolpert ist. Ich habe jetzt ein Gist auf GitHub, das helfen sollte. gist.github.com/dkittell/34fe7b7422323fba546948b7448933a5
David Kittell
1

resolv.conf funktioniert unter OSX nicht mehr. Ganz oben in dieser Datei befindet sich ein Hinweis wie folgt:

#
# macOS Notice
#
# This file is not consulted for DNS hostname resolution, address
# resolution, or the DNS query routing mechanism used by most
# processes on this system.
#
# To view the DNS configuration used by this system, use:
#   scutil --dns
#
# SEE ALSO
#   dns-sd(1), scutil(8)
#
# This file is automatically generated.
#

Listet networksetup -listallnetworkservicesauch nicht alle VPN-Schnittstellen auf.

Hier ist eine Möglichkeit, mit scutil auf die richtige Benutzeroberfläche zuzugreifen: 1. Erstellen Sie commands.txtmit Ihren Befehlen eine Datei für das interaktive Tool scutil. zB Inhalte für Pulse Secure Interface in meinem Fall:

get State:/Network/Service/net.pulsesecure.pulse.nc.main/DNS
d.add ServerAddresses * 8.8.8.8 9.9.9.9
set State:/Network/Service/net.pulsesecure.pulse.nc.main/DNS
  1. Führen Sie scutil mit den eingegebenen Befehlen aus. (Sie benötigen sudo für set)
sudo scutil < commands.txt
kikas
quelle