Cambia server DNS dal terminale (o script) su Mac OS X


29

Come posso cambiare il mio server DNS dal Terminale su Mac OS X? [Ne ho bisogno perché il mio DNS non funziona correttamente con la mia VPN. A volte utilizza il DNS per la mia connessione principale, a volte utilizza il DNS specificato per la VPN (che dovrebbe).]

Risposte:


15

È possibile utilizzare in modo scutilinterattivo dal terminale. Esegui sudo scutiled esegui questi comandi, scambiando i tuoi server DNS dove appropriato:

> apri
> d.init
> d.add ServerAddresses * 8.8.8.8 9.9.9.9
> imposta stato: / Rete / Servizio / PRIMARY_SERVICE_ID / DNS
> esci

Invece di utilizzare 8.8.8.8e 9.9.9.9utilizzare i server DNS.

L'unico problema è che questo non è persistente tra i riavvii . Se vuoi cambiamenti permanenti, vorrai ncutil . Il motivo per cui la modifica /etc/resolv.confnon è sufficiente nelle versioni più recenti di OS X è perché configd ora utilizza un database per archiviare informazioni sulle impostazioni correnti, che altre applicazioni leggono. Alcune applicazioni continueranno a leggere /etc/resolv.conf (host per esempio), anche se non è così per tutte le applicazioni.


2
8.8.8.8 è valido, tuttavia. DNS pubblico di Google. 8.8.4.4 è il secondario. :-)
Dimenticato punto e virgola

Lo so, lo uso :)
John T

1
Dovrebbe. Puoi usare scutil --dnsper confermare.
John T,

2
Questo non sembra funzionare sul mio Mac OSX 10.7.5 MBP, almeno non se fatto letteralmente. Devo sostituire qualcosa nella set State:/Network/Service/PRIMARY_SERVICE_ID/DNSlinea o posso usarlo così com'è? I nuovi server DNS dovrebbero apparire scutil --dnsnell'output dopo la modifica?
ssc,

2
@ssc Esegui scutilseguito da > listper trovare la chiave con cui sostituire PRIMARY_SERVICE_ID.
J.Money

46

Puoi usare networksetup:

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

ad es. (se la connessione all'aeroporto utilizza i server DNS di Google)

sudo networksetup -setdnsservers AirPort 8.8.8.8 8.8.4.4

È possibile scoprire il nome del servizio di rete eseguendo networksetup -listallnetworkservices. Sarà 'Wi-Fi' probabilmente.

Questo è lo stesso che se dovessi modificare gli indirizzi nel riquadro delle preferenze di rete in Preferenze di Sistema, quindi è persistente tra i riavvii.

È possibile che si verifichi un problema DNS su Snow Leopard che si verifica quando si richiedono modifiche ai server DNS dell'ordine (vedere la domanda 84144 ))


Wow, 84144 è il problema che sto riscontrando. Sto ancora elaborando tutto questo .... grazie mille!
Dan Rosenstark,

6
Una nota per chiunque voglia rimuovere il DNS, basta scrivere "vuoto" (senza virgolette) invece del DNS:sudo networksetup -setdnsservers <networkservice> empty
jackJoe

14

Non ho abbastanza punti per rispondere al post di Chealion, ma per aggiungerlo inizierei con un elenco delle interfacce

networksetup -listallnetworkservices

Una volta che hai l'interfaccia che desideri modificare, puoi fare quanto segue (sto usando il Wi-Fi ma puoi fare qualsiasi altra interfaccia)

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

La prima riga di quanto sopra svuota le impostazioni DNS quindi la segue con i server DNS che vorremmo usare e cancella con precisione la cache DNS

Per verificare la modifica del DNS puoi farlo prima e dopo o semplicemente dopo

scutil --dns | grep 'nameserver\[[0-9]*\]'

Chiunque si è imbattuto in questa pagina. Ora ho un Gist su GitHub che dovrebbe aiutare. gist.github.com/dkittell/34fe7b7422323fba546948b7448933a5
David Kittell

1

resolv.conf non funziona più su OSX. C'è un avviso proprio nella parte superiore di quel file come segue:

#
# 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.
#

Inoltre, networksetup -listallnetworkservicesnon elenca tutte le interfacce VPN.

Ecco un modo per usare scutil per indirizzare l'interfaccia giusta: 1. Crea un file commands.txtcon i tuoi comandi per lo strumento interattivo scutil. ad es. contenuti per l'interfaccia sicura Pulse nel mio caso:

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. Esegui scutil con i comandi inseriti. (Devi usare sudo per set)
sudo scutil < commands.txt

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.