En este artículo voy a explicar cómo configurar un falso servidor DNS root que resuelva cualquier pedido, de cualquier dominio, a una misma dirección IP, utilizando Bind9.

El sistema de nombres de dominio, o DNS, es uno de los pilares fundamentales de Internet. Es una base de datos global, jerárquica y distribuida de información de hosts responsable de traducir nombres en direcciones y viceversa, rutear correo electrónico a su destino, y muchas otras aplicaciones.

Un servidor DNS se encarga de resolver nombres de dominio (direcciones canónicas, comprensibles por seres humanos, por ejemplo "www.google.com") a direcciones de red (direcciones IP, Internet Protocol, capa 3, comprensibles por dispositivos de red, por ejemplo 173.194.42.80).

emi@hal9000:~ % host www.google.com
www.google.com has address 173.194.42.83
www.google.com has address 173.194.42.84
www.google.com has address 173.194.42.80
www.google.com has address 173.194.42.81
www.google.com has address 173.194.42.82
www.google.com has IPv6 address 2800:3f0:4002:802::1010

Los usuarios generalmente no se comunican directamente con el servidor DNS. La resolución de nombres se hace de forma transparente por las aplicaciones del cliente (por ejemplo, navegadores, clientes de correo, etc). Al realizar una petición que requiere una búsqueda de DNS (por ejemplo ingresar "www.google.com" en la barra de direcciones del navegador), ésta es resuelta por el sistema operativo subyacente. El cual, antes de establecer alguna comunicación, comprueba si la respuesta se encuentra en una memoria temporal (caché). En el caso de que no se encuentre, la petición se enviará a uno o más servidores DNS. De esta forma, es necesario que el sistema operativo "conozca" al menos un servidor DNS para consultarle las peticiones de las aplicaciones.

En síntesis, para poder conectar un sistema a Internet, además de una dirección de red (IP), es necesario con contar con un servidor DNS que resuelva los nombres de dominio a direcciones de red. La mayoría de los usuarios domésticos utilizan como servidor DNS el proporcionado por el proveedor de servicios de Internet (ISP, Internet Service Provider). La dirección de estos servidores puede ser configurada de forma manual o automática mediante DHCP (el mismo protocolo que asigna direcciones de red).

Entonces, ¿para qué podría servir un servidor DNS falso que resuelva cualquier solicitud a una misma IP? Inmediatamente se podría pensar en hacking, pero no es así. Un servidor DNS trivial o falso puede tener muchas aplicaciones, por ejemplo: puede ser útil al implementar una red cerrada, para hacer pruebas de laboratorio, para capturar cualquier solicitud y redireccionarla a un único sitio (mecanismos de autenticación en redes WIFI), y un largo etcétera. Sea cual sea su uso, a continuación voy a explicar cómo configurar un servidor DNS falso root utilizando Bind9.

BIND (Berkeley Internet Name Domain) es una implementación de los protocolos DNS que incluye un servidor DNS, una librería para resolución DNS, y un conjunto de herramientas para gestionar y verificar el funcionamiento de un servidor DNS. El servidor DNS provisto por BIND, llamado named, es utilizado por la mayoría de los servidores DNS en Internet.

La versión 9 es un rediseño de prácticamente todos los aspectos de la arquitectura subyacente de BIND.

Instalación

Para instalar BIND en Debian y derivados, ejecutar:

apt-get install bind9

Configuración de un servidor DNS trivial

Para configurar el servidor DNS trivial utilizando Bind9, es necesario realizar las siguientes modificaciones.

Editar el archivo de configuración del servicio /etc/bind/named.conf y comentar la línea que incluye al archivo de zonas por defecto. Debe quedar así:

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";

Luego editar el archivo /etc/bind/named.conf.options:

options {
    directory "/var/cache/bind";
    dnssec-validation auto;
    auth-nxdomain no;    # conform to RFC1035
    listen-on-v6 { none; };
    allow-transfer { none; };
}

En el archivo /etc/bind/named.conf.local, borrar su contenido y agregar las siguientes líneas:

zone "." {
    type master;
    file "fake.root";
    allow-update{ none; };
};

De esta forma se define la zona raíz (.).

Finalmente, crear el archivo /var/cache/bind/fake.root con el siguiente contenido:

@ IN SOA ns.domain.com. hostmaster.domain.com. ( 1 3h 1h 1w 1d )
 IN NS 10.10.10.1
* IN A 10.10.10.1

(Importante: dejar el espacio en blanco antes de IN NS 10.10.10.1)

En este archivo se define la zona "." de forma tal que cualquier nombre (*) sea resuelto a la dirección IP 10.10.10.1. la configuración del nombre del servidor de nombres (ns.domain.com.) y responsable de la zona (hostmaster.domain.com.) son triviales y pueden ser reemplazadas por cualquier otro valor. Sólo es necesario modificar 10.10.10.1 por la dirección IP deseada.

De esta forma, todas las solicitudes que se realicen a este servidor de nombre resuelven a la dirección 10.10.10.1.

Verificación

Desde línea de comandos es posible consultar nombres al servidor (cuya dirección IP es 10.10.10.50) utilizando las herramientas nslookup en Windows y GNU/Linux, o host en FreeBSD y GNU/Linux:

root@beer:/etc/bind# nslookup pepe 10.10.10.50
Server:         10.10.10.50
Address:        10.10.10.50#53

Name:   pepe
Address: 10.10.10.1

root@beer:/etc/bind# nslookup www.google.china 10.10.10.50
Server:         10.10.10.50
Address:        10.10.10.50#53

Name:   www.google.china
Address: 10.10.10.1
root@beer:/etc/bind# nslookup ahivalabalaatajala.org 10.10.10.50
Server:         10.10.10.50
Address:        10.10.10.50#53

Name:   ahivalabalaatajala.org
Address: 10.10.10.1

También es posible utilizar la herramienta de diagnóstico dig que es parte del paquete BIND, o drill en FreeBSD.


Tal vez pueda interesarte


Compartí este artículo