Cambiar el servidor DNS desde la terminal (o script) en Mac OS X

29

¿Cómo puedo cambiar mi servidor DNS desde la Terminal en Mac OS X? [Necesito esto porque mi DNS no funciona correctamente con mi VPN. Algunas veces está usando el DNS para mi conexión principal, y otras veces está usando el DNS especificado para la VPN (que debería).]

Dan Rosenstark
fuente

Respuestas:

15

Puede usar de forma scutilinteractiva desde la terminal. Ejecute sudo scutily ejecute estos comandos, intercambiando sus servidores DNS en donde corresponda:

> abierto
> d.init
> d.add ServerAddresses * 8.8.8.8 9.9.9.9
> establecer estado: / Red / Servicio / PRIMARY_SERVICE_ID / DNS
> dejar

En lugar de usar 8.8.8.8y 9.9.9.9usar sus servidores DNS.

El único problema es que esto no es persistente en todos los reinicios . Si desea cambios permanentes, querrá ncutil . La razón por la que la edición /etc/resolv.confno es suficiente en las versiones más nuevas de OS X es porque configd ahora usa una base de datos para almacenar información de la configuración actual, que otras aplicaciones leen. Ciertas aplicaciones seguirán leyendo /etc/resolv.conf (host, por ejemplo), aunque ese no es el caso para todas las aplicaciones.

John T
fuente
2
8.8.8.8 es válido, sin embargo. DNS público de Google. 8.8.4.4 es el secundario. :-)
Olvidado punto y coma
Lo sé, lo uso :)
John T
1
Debería. Puedes usar scutil --dnspara confirmar.
John T
2
Esto no parece funcionar en mi Mac OSX 10.7.5 MBP, al menos no cuando se hace literalmente. ¿Debo reemplazar algo en la set State:/Network/Service/PRIMARY_SERVICE_ID/DNSlínea o puedo usarlo como está? ¿Deberían aparecer los nuevos servidores DNS en la scutil --dnssalida después del cambio?
ssc
2
@ssc Ejecutar scutilseguido de > listpara encontrar la clave para reemplazar PRIMARY_SERVICE_ID con.
J.Money
46

Puedes usar networksetup:

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

por ejemplo (hacer que la conexión del aeropuerto use los servidores DNS de Google)

sudo networksetup -setdnsservers AirPort 8.8.8.8 8.8.4.4

Puede averiguar el nombre del servicio de red ejecutando networksetup -listallnetworkservices. Probablemente sea 'Wi-Fi'.

Esto es lo mismo que si editara las entradas en el Panel de preferencias de red en Preferencias del sistema, por lo que es persistente en todos los reinicios.

Es posible que se encuentre con un problema de DNS en Snow Leopard que ocurre cuando se cambia el orden de los servidores DNS (consulte la pregunta 84144 ))

Chealion
fuente
Wow, 84144 es el problema que estoy teniendo. Todavía estoy procesando todo esto ... ¡muchas gracias!
Dan Rosenstark
66
Una nota para cualquiera que quiera eliminar el DNS, simplemente escriba "vacío" (sin las comillas) en lugar del DNS:sudo networksetup -setdnsservers <networkservice> empty
jackJoe
14

No tengo suficientes puntos para responder a la publicación de Chealion, pero para agregarla, comenzaría enumerando las interfaces

networksetup -listallnetworkservices

Una vez que tenga la interfaz que desea cambiar, puede hacer lo siguiente (estoy usando el Wi-Fi pero puede hacer cualquier otra interfaz)

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

La primera línea de lo anterior vaciará la configuración de DNS y luego la seguirá con los servidores DNS que nos gustaría usar y borrará finamente la caché de DNS

Para verificar el cambio de DNS, puede hacerlo antes y después o simplemente después

scutil --dns | grep 'nameserver\[[0-9]*\]'
David Kittell
fuente
Cualquiera que haya tropezado con esta página. Tengo un Gist en GitHub ahora que debería ayudar. gist.github.com/dkittell/34fe7b7422323fba546948b7448933a5
David Kittell
1

resolv.conf ya no funciona en OSX. Hay un aviso justo en la parte superior de ese archivo de la siguiente manera:

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

También, networksetup -listallnetworkservices no enumera todas las interfaces VPN.

Aquí hay una forma de usar scutil para apuntar a la interfaz correcta: 1. Cree un archivo commands.txtcon sus comandos para la herramienta interactiva scutil. Por ejemplo, contenido para la interfaz segura Pulse en mi 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. Ejecute scutil con los comandos incluidos. (Necesita sudo para set)
sudo scutil < commands.txt
kikas
fuente