1 votos

¿Estoy configurando correctamente las rutas y los DNS para una red privada?

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.

1voto

Rus Puntos 11

Según el comentario de Gordon, el uso del sistema de resolución era efectivamente la solución que necesitaba, sigue el script actualizado:

#!/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"  )
work_domains=( "intranet.company.com" "services.company.com" "customer.org" )
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
    for netname in ${work_domains[@]}; do
        echo "nameserver $gateway" >> /etc/resolver/$netname
    done
elif [ "$1" = "down" -o "$1" = "off" -o "$1" = "stop" ] ; then
    echo "Shutting down private configuration"
    for netname in ${work_domains[@]}; do
        rm /etc/resolver/$netname
    done
    for net in ${networks[@]}; do
        /sbin/route delete -net $net -gateway $gateway
    done
else
    echo "Usage: $0 (start|stop)"
fi
dscacheutil -flushcache

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X