Alterar servidor DNS do terminal (ou script) no Mac OS X

29

Como posso mudar meu servidor DNS do Terminal no Mac OS X? [Eu preciso disso porque meu DNS não está funcionando corretamente com minha VPN. Às vezes, ele usa o DNS para minha conexão principal e, outras vezes, o DNS especificado para a VPN (o que deveria).]

Dan Rosenstark
fonte

Respostas:

15

Você pode usar scutilinterativamente a partir do terminal. Execute sudo scutile execute estes comandos, trocando seus servidores DNS onde apropriado:

> aberto
> d.init
> d.add ServerAddresses * 8.8.8.8 9.9.9.9
> definir Estado: / Rede / Serviço / PRIMARY_SERVICE_ID / DNS
> sair

Em vez de usar 8.8.8.8e 9.9.9.9usar seus servidores DNS.

O único problema é que isso não é persistente nas reinicializações . Se você quiser alterações permanentes, precisará do ncutil . A razão pela qual a edição /etc/resolv.confnão é suficiente nas versões mais recentes do OS X é porque o configd agora usa um banco de dados para armazenar informações das configurações atuais, que outros aplicativos leem. Certos aplicativos ainda serão lidos /etc/resolv.conf (host, por exemplo), embora esse não seja o caso de todos os aplicativos.

John T
fonte
2
8.8.8.8 é válido, no entanto. DNS público do Google. 8.8.4.4 é o secundário. :-)
Esqueceu o ponto e vírgula
Eu sei, eu usá-lo :)
John T
1
Deveria. Você pode usar scutil --dnspara confirmar.
John T
2
Isso parece não funcionar no meu Mac OSX 10.7.5 MBP, pelo menos não quando feito literalmente. Devo substituir algo na set State:/Network/Service/PRIMARY_SERVICE_ID/DNSlinha ou posso usá-lo como está? Os novos servidores DNS devem aparecer na scutil --dnssaída após a alteração?
SSC
2
@ssc Execute scutilseguido por > listpara encontrar a chave para substituir PRIMARY_SERVICE_ID.
31415 J.Money
46

Você pode usar networksetup:

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

por exemplo (ter a conexão do aeroporto usando os servidores DNS do Google)

sudo networksetup -setdnsservers AirPort 8.8.8.8 8.8.4.4

Você pode descobrir o nome do serviço de rede executando networksetup -listallnetworkservices. Provavelmente será 'Wi-Fi'.

É o mesmo que se você editasse as entradas no Painel de Preferências de Rede em Preferências do Sistema, para que seja persistente nas reinicializações.

Você pode estar enfrentando um problema de DNS no Snow Leopard que ocorre quando os servidores DNS dos pedidos são alterados (consulte a pergunta 84144 )

Chealion
fonte
Uau, 84144 é o problema que estou tendo. Ainda processando tudo isso .... muito obrigado!
Dan Rosenstark
6
Uma nota para qualquer pessoa que queira remover o DNS, basta escrever "esvaziar" (sem as aspas) em vez do DNS:sudo networksetup -setdnsservers <networkservice> empty
jackJoe
14

Não tenho pontos suficientes para responder à postagem de Chealion, mas para adicioná-la, começaria listando as interfaces

networksetup -listallnetworkservices

Depois de ter a interface que você deseja alterar, faça o seguinte (estou usando o Wi-Fi, mas você pode fazer qualquer outra interface)

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

A primeira linha acima esvaziará as configurações de DNS e seguirá com os servidores DNS que gostaríamos de usar e limpará o cache DNS

Para verificar a alteração do DNS, você pode fazer isso antes e depois ou simplesmente depois

scutil --dns | grep 'nameserver\[[0-9]*\]'
David Kittell
fonte
Qualquer pessoa que tenha tropeçado nesta página. Agora eu tenho um Gist no GitHub que deve ajudar. gist.github.com/dkittell/34fe7b7422323fba546948b7448933a5
David Kittell
1

O resolv.conf não funciona mais no OSX. Há um aviso na parte superior desse arquivo, da seguinte maneira:

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

Além disso, networksetup -listallnetworkservicesnão lista todas as interfaces VPN.

Aqui está uma maneira de usar o scutil para atingir a interface correta: 1. Crie um arquivo commands.txtcom seus comandos para a ferramenta interativa do scutil. por exemplo, conteúdo da interface segura Pulse no meu 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. Execute scutil com os comandos transmitidos. (Você precisa do sudo set)
sudo scutil < commands.txt
kikas
fonte