Mentir enlace caché DNS


0

Estoy tratando de configurar, para llamarlo de alguna manera, un servidor DNS "mentiroso".

Quiero decir: un servidor DNS que actúa como un caché DNS (esclavo) para un servidor existente pero que tiene su propio subconjunto de registros para algunos nombres de dominio.

El comportamiento deseado es, por ejemplo:

  • Cuando se le preguntó por "host.domain.com". Si tiene una entrada para él en su propia base de datos, responda con ella.

  • Si no está en su base de datos, pregúntele al maestro (y, opcionalmente, guarde en caché esa respuesta).

Sé que puedo poner bind9 como servidor esclavo pero, de esta manera, todas las consultas serán respondidas con la misma respuesta que se respondería al servidor real.

Por supuesto, es una configuración complicada, lo sé, pero tiene un propósito útil:

Imagine que tiene servicios complejos (por ejemplo, la configuración de respaldo de Bacula y los scripts en mi caso) y desea probarlo en servidores de producción reales antes de ponerlo en producción real.

Si pudiera redirigir temporalmente el DNS a ese DNS "mentiroso" de manera que todos los nombres se resuelvan como de costumbre, excepto algunos subconjuntos de hosts "enmascarados", se comportará como una configuración "real", pero sin realmente crear una copia de seguridad real Almacenamiento de servidores con copias de seguridad de prueba.

Por supuesto, podría usar una lista de entradas en / etc / hosts , pero requiere más configuración y es más propenso a errores (tengo los entornos de prueba totalmente automatizados con Vagrant, pero las IP pueden cambiar algunas veces).

Clonar el servidor y usarlo para hacer la prueba, también requiere más trabajo y recursos y, una vez más, es más propenso a errores porque después de las pruebas, tendré que reconfigurar el servidor real a mano mientras que, con el enfoque "dns mentiroso", Solo necesito restaurar el archivo resolv.conf original.

Configuré con éxito un servidor DNS principal para nuestro dominio y resuelve correctamente sus propias entradas y consultas a otros dominios, pero no conoce los datos de los servidores de dominio reales.

Creo que debería ser posible acercarse con Bind, pero no sé dónde buscar ...

Respuestas:


1

Bind, y algunas otras implementaciones de servidores DNS admiten algo llamado zona de política de respuesta . Esta zona le permite anular registros específicos.

Aquí hay un ejemplo de cómo usa esta función para forzar que la búsqueda segura de Google esté habilitada. Esto anula los registros google.com, www.google.com y google.ca.

named.conf

options {
    ...
    response-policy { zone "rpz"; };
};

zone "rpz" IN {
        type master;
        file "rpdb.zone";
        allow-query {none;};
};

rpdb.zone

$TTL 10800
@ IN SOA localhost. hostmaster.example.org. (
        2014110500;
        10800;
        3600;
        604800;
        10800 )

        IN      NS      localhost.

; Google forced Safe Search
google.com      IN CNAME forcesafesearch.google.com.
www.google.com  IN CNAME forcesafesearch.google.com.
google.ca       IN CNAME forcesafesearch.google.com.

Las zonas de política de respuesta son bastante flexibles en lo que pueden hacer. Se pueden usar para crear un servidor de seguridad DNS y otras cosas.


Gracias por tu respuesta. Desafortunadamente, creo que no lo entiendo muy bien ... Debo decir que soy un novato en la configuración de Bind, pero la principal diferencia que veo entre su ejemplo y mi configuración (suponiendo que el nombre de la zona no importa) es la allow-query {none;};línea . Pero, si lo agrego, entonces no resuelve los nombres de host en su propia base de datos. Por supuesto, solo tengo registros A, pero usar solo CNAME no es una opción porque los servidores de prueba no están registrados en el DNS de producción incluso con otros nombres.
bitifet

... No estoy seguro si me expliqué muy bien. Para ser claros: lo que estoy tratando de hacer es poner un DNS "intermedio" entre unos pocos hosts (un servidor de producción y algunas máquinas de prueba) y el servidor DNS de la corporación real que, por defecto, reenvía (o copia) cualquier solicitud a el DNS real, excepto por una lista dada de nombres, en cuyo caso responde con otras direcciones predefinidas.
bitifet

0

Respuesta parcial (funciona para mi configuración pero no es tan genérica como mi pregunta original):

En mi caso, solo necesito anular las direcciones de un subdominio en particular, específicamente bacula.ourDomain.com .

Como dije, configuré con éxito el enlace como maestro para bacula.ourDomain.com , pero no pude resolver ningún otro host de ourDomain.com .

Ahora acabo de agregar esto:

options {
  [...]
  forwarders {<real_ns_ip>;};
  [...]
}

De esta manera, mi servidor resuelve bacula.ourDomain.com , pero para el resto de ourDomain.com pide <real_ns_ip> .

Como dije, no es una solución genérica porque no permite elegir solo direcciones particulares del dominio, pero actualmente es suficiente para mis propósitos.

@Zoredache probablemente sería una mejor solución, pero aún no tuve éxito en ponerlo en práctica.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.