En alguna ocasión puede ser interesante configurar nuestro equipo para que realice las resoluciones de nombres contra servidores DNS diferentes dependiendo del dominio preguntado.

Un caso habitual se produce cuando nuestro equipo pertenece a la red local de nuestra empresa, por ejemplo, a la vez que tiene acceso a otra red en la que hay dominios diferentes del local y sin posibilidad de relacionarlos. Pongamos por ejemplo, internet.

En este escenario, tenemos un equipo que queremos que resuelva direcciones de dominios válidos en internet y a la vez que resuelva direcciones de nuestro dominio local, que no tiene por que ser válido en internet, ni estar registrado como tal.

En una configuración típica, especificaríamos una lista de servidores DNS a utilizar en orden, de forma que las consultas se harían siempre al primero de la lista y solo se consultaría al segundo si el primero no respondiese por algún motivo.

En este caso, si el primer servidor DNS de la lista es el correspondiente a nuestro dominio local, este resolverá los nombres que conoce, y no lo hará para dominios públicos, como por ejemplo google.es. Podríamos configurar nuestro(s) servidor(es) DNS locales para que reenviasen las peticiones que no supiesen resolver a otros servidores, incluso públicos.

De hecho, este sería el funcionamiento normal y lógico de los servidores DNS.

El problema se plantea cuando nuestros servidores DNS locales no pueden reenviar las peticiones a servidores públicos, siendo la razón más común que nuestra red se encuentra aislada de internet.

Resumiendo, no podemos aprovecharnos de los reenvíos de los servidores DNS, porque ninguno de los dos disponibles conoce nada del otro, ni tiene forma de conocerlo.

Para solventarlo, podemos instruir a nuestro cliente DNS (resolver) para que utilice en cada momento el servidor DNS que nos interese. Para ello, hemos de crear un fichero, con el nombre de la red privada, en:

/etc/resolver/dominiolocal.com

En este fichero, pondremos los servidores DNS que queremos que resuelvan las peticiones para el dominio dominiolocal.com, de la forma:

nameserver 1.2.3.4
nameserver 1.2.3.5

De esta forma, nuestro cliente DNS utilizará siempre los servidores de nombres que tengamos definidos en nuestro sistema (en /etc/resolv.conf) para resolver cualquier dominio (todos los públicos), mientras que cuando se le solicite la dirección de un equipo de nuestra red local (equipo.dominiolocal.com), consultará a los servidores definidos en /etc/resolver/dominiolocal.com.

Más información sobre el fantástico cliente DNS de Mac OS X en:

man 5 resolver

Tags: , , ,