Zmień serwer DNS z terminala (lub skryptu) w systemie Mac OS X

29

Jak mogę zmienić mój serwer DNS z terminala w systemie Mac OS X? [Potrzebuję tego, ponieważ mój DNS nie działa poprawnie z moją VPN. Czasami używa DNS do mojego głównego połączenia, a czasem DNS określony dla VPN (co powinno).]

Dan Rosenstark
źródło

Odpowiedzi:

15

Możesz używać scutilinteraktywnie z terminala. Uruchom sudo scutili uruchom następujące polecenia, zamieniając serwery DNS w stosownych przypadkach:

> otwórz
> d.init
> d.add Adresy serwerów * 8.8.8.8 9.9.9.9
> ustaw stan: / Sieć / Usługa / PRIMARY_SERVICE_ID / DNS
> wyjdź

Zamiast korzystać z serwerów DNS 8.8.8.8i 9.9.9.9korzystać z nich.

Jedynym problemem jest to, że nie jest to trwałe podczas ponownego uruchamiania . Jeśli chcesz stałych zmian, będziesz chciał ncutil . Powodem, dla którego edycja /etc/resolv.confnie jest wystarczająca w nowszych wersjach OS X, jest to, że configd używa teraz bazy danych do przechowywania informacji o bieżących ustawieniach, które czytają inne aplikacje. Niektóre aplikacje będą nadal czytać /etc/resolv.conf (na przykład host), chociaż nie dotyczy to wszystkich aplikacji.

John T.
źródło
2
8.8.8.8 jest jednak poprawny. Publiczny DNS Google. 8.8.4.4 jest drugorzędny. :-)
Forgotten Semicolon
Wiem, używam go :)
John T
1
Powinno. Możesz użyć scutil --dnsdo potwierdzenia.
John T
2
Wydaje się, że nie działa to na moim systemie Mac OSX 10.7.5 MBP, a przynajmniej nie w przypadku dosłownego. Czy powinienem wymienić cokolwiek w set State:/Network/Service/PRIMARY_SERVICE_ID/DNSwierszu, czy mogę tego używać tak, jak jest? Czy scutil --dnspo zmianie powinny pojawiać się nowe serwery DNS ?
ssc
2
@ssc Uruchom, scutila następnie > listznajdź klucz do zastąpienia PRIMARY_SERVICE_ID.
J.Money
46

Możesz użyć networksetup:

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

np. (połączenie z lotniskiem za pomocą serwerów DNS Google)

sudo networksetup -setdnsservers AirPort 8.8.8.8 8.8.4.4

Możesz znaleźć nazwę usługi sieciowej, uruchamiając networksetup -listallnetworkservices. Prawdopodobnie będzie to „Wi-Fi”.

Jest to tak samo, jakbyś edytował pliki w okienku preferencji sieci w Preferencjach systemowych, więc jest trwały po ponownym uruchomieniu.

Być może wystąpił problem z systemem DNS w systemie Snow Leopard, który występuje, gdy zapytania o serwery DNS zmieniają się (patrz pytanie 84144 ))

Chealion
źródło
Wow, 84144 to problem, który mam. Wciąż przetwarzam to wszystko .... dziękuję bardzo!
Dan Rosenstark,
6
Jedna uwaga dla każdego, kto chce usunąć DNS, po prostu napisz „puste” (bez cudzysłowów) zamiast DNS:sudo networksetup -setdnsservers <networkservice> empty
jackJoe,
14

Nie mam wystarczającej liczby punktów, aby odpowiedzieć na post Chealiona, ale aby go dodać, zacznę od listy interfejsów

networksetup -listallnetworkservices

Gdy masz interfejs, który chcesz zmienić, możesz wykonać poniższe czynności (korzystam z Wi-Fi, ale możesz wykonać dowolny inny interfejs)

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

Pierwszy wiersz powyższego opróżni ustawienia DNS, a następnie podąży za nim z serwerami DNS, których chcemy użyć, i dokładnie wyczyści pamięć podręczną DNS

Aby zweryfikować zmianę DNS, możesz to zrobić przed i po lub po nim

scutil --dns | grep 'nameserver\[[0-9]*\]'
David Kittell
źródło
Każdy, kto natknął się na tę stronę. Mam Gist na GitHub, który powinien pomóc. gist.github.com/dkittell/34fe7b7422323fba546948b7448933a5
David Kittell
1

resolv.conf nie działa już w OSX. U góry tego pliku znajduje się powiadomienie w następujący sposób:

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

Ponadto networksetup -listallnetworkservicesnie zawiera wszystkich interfejsów VPN.

Oto jeden ze sposobów użycia scutil do kierowania na właściwy interfejs: 1. Utwórz plik za commands.txtpomocą poleceń dla interaktywnego narzędzia scutil. np. zawartość bezpiecznego interfejsu Pulse w moim przypadku:

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. Uruchom scutil z dołączonymi poleceniami. (Potrzebujesz sudo set)
sudo scutil < commands.txt
kikas
źródło