Antecedentes
Utilizo un router de red privada que es un host separado de mi escritorio. Esta red privada ("corporativa") va y viene (sobre todo bajo mi control), y quiero asegurarme de que cuando esté disponible mi escritorio utilizará los DNS de la red corporativa, pero dejará de utilizar esos DNS cuando la red corporativa no esté disponible.
Para poder trabajar con ejemplos concretos, mi red local utiliza 172.16.1.0/24 con un servidor DNS en 172.16.1.1, mientras que la red corporativa utiliza 10.10.0.0/16 con un servidor DNS en 10.10.1.1.
El router de la red privada utiliza dnsmasq que he configurado algo así:
# /etc/dnsmasq.d/default.dnsmasq
server=172.16.1.1
server=/mycompany.com/it.mycompany.com/mycompany.org/10.10.1.1
Donde 172.16.1.1 es mi DNS local (en mi router de Internet) y 10.10.1.1 es el DNS corporativo que maneja el DNS para redes privadas como nuestra intranet. Por lo tanto, si busco "apple.stackexchange.com" será resuelto por 172.16.1.1 mientras que "confluence.mycompany.com" será resuelto por 10.10.1.1.
Así que he escrito un script que básicamente toma un montón de CIDRs y configura la ruta para ellos, luego cambia al DNS de la red privada. Aquí hay una versión saneada del script para completarlo:
#!/bin/sh
# Alters routing and DNS to use private network routes and DNS for
# private network destinations
networks=( "10.10.0.0/16" "192.168.20.0/24" )
gateway=172.16.1.10
if [ "$1" = "up" -o "$1" = "on" -o "$1" = "start" ] ; then
echo "Setting up private configuration"
for net in ${networks[@]}; do
/sbin/route add -net $net -gateway $gateway
done
/usr/sbin/networksetup -setdnsservers 'Ethernet' $gatewayip
elif [ "$1" = "down" -o "$1" = "off" -o "$1" = "stop" ] ; then
echo "Shutting down private configuration"
/usr/sbin/networksetup -setdnsservers 'Ethernet' 'Empty'
for net in ${networks[@]}; do
/sbin/route delete -net $net -gateway $gateway
done
else
echo "Usage: $0 (start|stop)"
fi
dscacheutil -flushcache
Esto lleva a una situación un poco extraña en la que estoy pasando todas las solicitudes de DNS a través del router privado, cuando el router privado simplemente va a rebotar la mayoría de las solicitudes de DNS de vuelta al router de Internet. Funciona, pero no creo que sea particularmente ordenado o robusto.
La pregunta
¿Hay alguna forma de configurar el DNS de MacOS de forma similar a mi configuración de dnsmasq, en la que simplemente le digo a mi Mac que siga usando 172.16.1.1 para el DNS, excepto cuando el dominio es miempresa.com o miempresa.org, en cuyo caso debería usar 10.10.1.1?
0 votos
Parece que la creación de los archivos /etc/resolver/miempresa.com y miempresa.org con
nameserver 10.10.1.1
en ellos (véase mi respuesta a esta pregunta ) haría lo que necesitas.0 votos
@GordonDavisson gracias, ¡eso resolvió mi problema!
0 votos
También hay una solución usando scutil aquí: apple.stackexchange.com/a/385218/141050 - así que Real Soon Now™ resolveré si puedo usar eso en mi script.