Objetivo

Aunque las direcciones Internet tengan nombres “legibles” (www.google.com), éstos deben ser traducidos a la dirección IP (213.129.232.18) del respectivo servidor. Esa conversión es efectuada realizando una búsqueda en el DNS (Domain Name System).

Una cache DNS guardia localmente los resultados de esa búsqueda para utilización futura, evitando la repetición de búsquedas y aumentando drásticamente la velocidad de respuesta.

Instalación

root@server:~# apt install bind9 bind9-doc dnsutils

Configuración

La configuración generada durante la instalación es perfectamente funcional, no requiere modificaciones. Sin embargo, vamos personalizar la instalación en 2 aspectos principales: vamos a definir a cuáles servidores consultará el nuestro para pedir ayuda en la resolución de nombres, si no es posible hacer esto localmente (forwarders) y vamos a fortalecer algunos aspectos de seguridad.

Como forwarders podemos optar por varias hipótesis: una es utilizar los servidores DNS de nuestro proveedor de acceso a Internet.

Otra posibilidad muy interesante es utilizar uno de los diversos servicios públicos de DNS disponibles en la actualidad, como:

Estos servicios prometen suministrar no sólo resoluciones más rápidas, sino también diversos servicios adicionales de seguridad, como filtros de direcciones maliciosos y otros más.

En este caso, utilizaremos los servidores OpenDNS (http://www.opendns.com). Para tener otra opción, también se añadirá el del router ADSL.

Por seguridad sólo serán recibidas conexiones por la interfaz local o por la destinada a la red interna (listen-on { 127.0.0.1; 192.168.1.100; };). Así mismo, sólo serán contestados los pedidos de resolución que partan del propio puesto o de la red interna (allow-query { 127.0.0.1; 192.168.1.0/24; };). Todos los otros pedidos serán ignorados, para evitar eventuales utilizaciones abusivas de nuestro servidor DNS por parte de terceros.

La configuración está guardada en el archivo /etc/bind/named.conf.options:

/etc/bind/named.conf.options
// [...]
 
options {
        directory "/var/cache/bind";
 
        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113
 
        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.
 
        forwarders {
 
                // Google Public DNS (IPv4)
                8.8.8.8;
                8.8.4.4;
                // Google Public DNS (IPv6)
                2001:4860:4860::8888;
                2001:4860:4860::8844;
 
                // OpenDNS servers
                208.67.222.222;
                208.67.220.220;
 
                // ADSL router
                192.168.1.1;
        };
 
        //========================================================================
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //========================================================================
        dnssec-validation auto;
 
        auth-nxdomain no;    # conform to RFC1035
        // listen-on-v6 { any; };
};

Verificar si el archivo de configuración fue correctamente editado:

root@server:~# named-checkconf

Actualizar el archivo /etc/resolv.conf para que la resolución de nombres se haga localmente:

/etc/resolv.conf
nameserver 127.0.0.1
nameserver ::1

Verificar también que en el archivo /etc/nsswitch.conf la resolución de nombres pase también por el servicio DNS:

/etc/nsswitch.conf
# [...]
hosts:  files dns
# [...]

Reiniciar el servicio DNS:

root@server:~# systemctl restart bind9

Verificación

Para verificar la configuración, debe buscar la dirección IP de cualquier sitio en internet. El servidor DNS deberá mostrar nuestra dirección (127.0.0.1) y las direcciones IP del sitio buscado, se mostrarán de forma correcta:

root@server:~# nslookup www.debian.org
Server:         127.0.0.1
Address:        127.0.0.1#53
 
Non-authoritative answer:
Name:   www.debian.org
Address: 5.153.231.4
Name:   www.debian.org
Address: 130.89.148.14

El proceso inverso, es decir, buscar un nombre a partir de una dirección IP, también debe funcionar:

root@server:~# nslookup 5.153.231.4
Server:         127.0.0.1
Address:        127.0.0.1#53
 
Non-authoritative answer:
4.231.153.5.in-addr.arpa        name = senfter.debian.org.
 
Authoritative answers can be found from:
.       nameserver = g.root-servers.net.
.       nameserver = a.root-servers.net.
.       nameserver = l.root-servers.net.
.       nameserver = j.root-servers.net.
.       nameserver = b.root-servers.net.
.       nameserver = k.root-servers.net.
.       nameserver = m.root-servers.net.
.       nameserver = f.root-servers.net.
.       nameserver = c.root-servers.net.
.       nameserver = d.root-servers.net.
.       nameserver = h.root-servers.net.
.       nameserver = e.root-servers.net.
.       nameserver = i.root-servers.net.

Configuración de los clientes

Windows

Para los sistemas Windows, debe indicar, las propiedades del protocolo de Internet (TCP(IP)) de conexión de red, y debe determinar la dirección de nuestro servidor DNS (192.168.1.100) como servidor DNS preferido.

Linux

Para los sistemas Linux, se debe editar el archivo /etc/resolv.conf para substituir o añadir el nameserver con la dirección IP de nuestro servidor:

/etc/resolv.conf
# [...]
nameserver 192.168.1.100
# [...]

Configuración automática de clientes

El servidor DNS puede ser atribuido a los clientes automáticamente, a través del protocolo DHCP. Para esto, basta acrecentar la opción domain-name-servers como la o las direcciones de los servidores DNS al archivo /etc/dhcp/dhcpd.conf del servidor DHCP:

/etc/dhcp/dhcpd.conf
# [...]
option domain-name-servers 192.168.1.100;
# [...]