Configura tu Raspberry Pi como un DNS Server

Para que los ordenadores puedan comunicarse entre sí todos los dispositivos conectados a Internet poseen una dirección única, una denominada dirección IP que permite a los clientes saber a qué servidor han de dirigirse. Estas direcciones, compuestas por secuencias de cifras, son imposibles de recordar para los usuarios, que en cambio sí son capaces de reconocer y recordar los nombres de dominio. Aquí es donde entra el juego el sistema de nombres de dominio o DNS (Domain Name System), que traduce los dominios en cifras y a la inversa. Antes de obtener la dirección correcta, no obstante, los clientes han de enviar una o más peticiones al servidor de nombres de dominio o DNS Server. Dado que en ocasiones este proceso puede costar un tiempo precioso, configurar un servidor de nombres propio puede agilizar la conexión. El pequeño y versátil Raspberry Pi representa un buen punto de partida en este sentido. A continuación aclaramos cómo funciona un DNS y cómo puedes instalar un servidor DNS en tu Raspberry Pi.

Qué es exactamente el DNS

El sistema de nombres de dominio es una herramienta de orientación en redes basadas en direcciones IP. Mientras que los usuarios introducen nombres de dominio como www.example.org en la barra de direcciones del navegador, los ordenadores utilizan direcciones IPv4 o IPv6 para comunicarse. Esto hace que para garantizar el entendimiento mutuo sea necesario traducir este nombre de dominio. Esta llamada resolución de nombres tiene lugar por medio de un servidor DNS, aunque previamente el navegador consulta en su memoria caché por si el sistema ya conociera la dirección y pudiera ahorrarse la consulta al servidor de nombres.

Si no es así, la petición se envía a uno o varios servidores DNS. De entre ellos el primer servidor consultado suele ser el del proveedor de Internet, que coteja la petición con su base de datos y entrega un resultado si encuentra coincidencia. En caso contrario, cuando en la base de datos no existe ningún registro para este dominio, la petición pasa a uno de los trece servidores raíz de nombres de Internet, que albergan todas las direcciones de la World Wide Web.

En relación con el DNS hay que tener en cuenta que la mayor parte de los participantes de Internet, sobre todo los clientes de cualquier usuario, no poseen una dirección IP fija. Dentro de su red, los proveedores de Internet suelen asignar las direcciones IP cada 24 horas. Transcurrido este periodo se produce una brevísima interrupción de la conexión a Internet y el usuario recibe entonces una nueva dirección. Este procedimiento no suele generar problemas, pues los clientes rara vez reciben peticiones del exterior de la red local (son ellos los que envían las peticiones al servidor y no al revés).

Hay algunos casos, como un escritorio remoto o un servidor de juegos, en que se hace necesario configurar un servidor propio y para ello suele utilizarse un DNS dinámico, porque el servidor doméstico recibe del proveedor de DDNS un dominio con el cual está siempre disponible. Si la cuestión es poder acceder al servidor DNS desde fuera de la red local en cualquier momento cabe considerar la opción de utilizar un DDNS.

Cuáles son las ventajas de instalar tu propio servidor DNS

Los motivos para utilizar un servidor DNS propio en lugar de buscar direcciones IP en otros servidores pueden ser diferentes. La instalación de un servidor doméstico podría ser una solución conveniente si dentro de una red local acceden a Internet diferentes personas y dispositivos, como puede suceder en una familia numerosa, un piso compartido o una pequeña oficina.

  • Velocidad: cuando no existe ninguna entrada en la memoria caché del navegador, una petición web puede recorrer diversos routers y servidores antes de que el contenido solicitado llegue al usuario y, aunque el tiempo de espera se mueve en el terreno de los milisegundos, si no se tiene que establecer una conexión nueva con el DNS del proveedor de Internet, todo este proceso puede transcurrir incluso más rápidamente.
  • Privacidad: el funcionamiento del sistema de nombres de dominio se fundamenta en el envío de peticiones a servidores ajenos, generando huellas digitales que muchos usuarios prefieren evitar. Utilizando un servidor DNS propio muchos de los datos permanecen a resguardo.
  • Seguridad: alojando un servidor DNS también se tiene el control sobre los registros. Los cibercriminales no cejan en el intento de interponerse en el recorrido de las peticiones al servidor DNS del proveedor para entregar una dirección IP falsa, de tal forma que en lugar de la página que se pretendía abrir se accede a otra. Esto es especialmente peligroso cuando se usan los servicios de la banca digital porque si se introducen datos sensibles en una copia exacta de la página web de un determinado banco, los criminales no tardan en acceder a la cuenta.
  • Filtro publicitario: Los bloqueadores de anuncios o ad blockers recurren a una lista de servidores web susceptibles de ser bloqueados, pero un servidor DNS doméstico también puede hacerlo. De esta forma es posible liberar de publicidad a todos los dispositivos de la red local con un solo gesto sin tener que instalar un programa extra en cada dispositivo.
  • Control parental: lo que funciona para la publicidad, también puede aplicarse a la protección de los menores de edad. Un servidor DNS autogestionado permite bloquear servidores que ofrecen contenido inapropiado para los más jóvenes.
  • Aprendizaje: muchos usuarios instalan su propio servidor DNS con la mera intención de comprender mejor el funcionamiento de Internet pues no se conforman con saber que la electricidad procede del enchufe y las páginas web del navegador. Para entender la tecnología que hay detrás, nada mejor que un proyecto DIY como este y en general con todo lo que tiene que ver con un Raspberry Pi.

Cómo configurar un servidor DNS en un Raspberry Pi

Si quieres instalar un DNS server en tu Raspberry Pi necesitas, además del popular miniordenador, lo siguiente:

  • Una tarjeta SD con el sistema operativo Raspbian instalado
  • Conexión Ethernet al router
  • Alimentación por cable Micro USB
  • Cliente SSH (p. ej., PuTTY)

En nuestro ejemplo vamos a basar nuestro servidor DNS en BIND, un software de código abierto que se remonta al Berkeley Internet Name Domain Server y que hoy, ya en su novena versión, cuenta con el apoyo del Internet Software Consortium (ISC) para su desarrollo.

Antes de nada conviene asegurarse de que el Raspberry Pi obtiene una dirección IP estática dentro de la red local. Para ello se abre la configuración de red:

sudo nano /etc/network/interfaces

Y se asigna al Raspberry Pi una dirección IP única.

Consejo

Nano es un simple editor de Linux cuya instalación en un Raspberry Pi es casi indispensable.

Ahora ya puedes instalar BIND. Además del programa en sí, bind9, conviene instalar también los paquetes bind9utils y dnsutils pues, aun sin ser imprescindibles, contienen herramientas útiles para el mantenimiento del servidor DNS. Utiliza el siguiente comando para instalar el paquete completo:

sudo apt-get install bind9 bind9utils dnsutils

Hecho esto, bind9 ya está instalado en el sistema. Con todo, aún son necesarios algunos ajustes antes de poder utilizar el Raspberry Pi como un servidor DNS.

Abre a continuación el archivo de configuración de bind9:

sudo nano /etc/bind/named.conf.local

Aquí hay que configurar dos zonas, una para la búsqueda directa (Forward lookup), por la cual se busca la dirección IP a partir del dominio, y una para la inversa (Reverse lookup).

sudo nano /etc/bind/named.conf.local 

    zone "home.lan" IN {
            type master;
            file "/etc/bind/db.home.lan";
      };
    zone "1.168.192.in-addr.arpa" {
            type master;
            file "/etc/bind/db.rev.1.168.192.in-addr.arpa";
      };

Como puedes reconocer en el código, utilizas dos archivos diferentes (db.home.lan y db.rev.1.168.192.in-addr.arpa) para definir las dos zonas, pero antes los tienes que crear. Puedes decidir libremente cómo nombrarlos, pero debe figurar siempre de la misma forma cada vez que sea necesario. Crea el archivo para la zona de la búsqueda directa (db.home.lan) con estas líneas de código:

sudo nano /etc/bind/db.home.lan
  
    home.lan. IN SOA raspberry.home.lan. hostmaster.home.lan. (
       2017081401 ; serial
        8H ; refresh
        4H ; retry
        4W ; expire
        1D ; minimum
    )
    home.lan. IN NS raspberry.home.lan.
    home.lan. IN MX 10 raspberry.home.lan.
    localhost    IN A 127.0.0.1
    raspberry    IN A 192.168.1.31
    router       IN A 192.168.1.1

Las dos últimas líneas corresponden a la dirección IP de tu Raspberry Pi (al cual se ha asignado al principio una dirección IP estática) y de tu router, por lo que tendrás que modificarlas.

Recuerda que los nombres de dominio se han de cerrar siempre con un punto (raspberry.home.lan.).

Al principio del archivo, tras el número de serie (serial), se define la duración del intervalo de tiempo entre acciones regulares.

Los datos NS y MX indican que tanto el servidor de nombres como el de correo están puestos a disposición por el Raspberry Pi.

Consejo

Al comienzo del archivo se ha de indicar siempre un número de serie, para el cual se ha consolidado el formato YYYYMMDDXX que corresponde a la secuencia año-mes-día, a la que se añade un número de serie que va aumentando a medida que se van creando versiones en un mismo día.

Crea a continuación el archivo de la zona de búsqueda inversa (db.rev.1.168.192.in-addr.arpa):

sudo nano /etc/bind/db.rev.1.168.192.in-addr.arpa

    @ IN SOA raspberry.home.lan. hostmaster.home.lan. (
        2017081401 ; serial
        8H ; refresh
        4H ; retry
        4W ; expire
        1D ; minimum
    )
               IN NS raspberry.home.lan.
    1         IN PTR router.home.lan.
    31        IN PTR raspberry.home.lan.

Este ejemplo parte de la suposición de que la dirección de red local comienza con 192.168.1. Si no es así, has de indicar el espacio de nombres correcto en el archivo y en el nombre de dominio. No olvides definirlo también en el archivo de configuración de BIND cuando sea necesario (etc/bind/named.conf.local)

Cuando se instala un DNS en un Raspberry Pi, este servidor funciona como caché para peticiones al DNS, pues una vez solicitada una resolución de dominio, la entrada queda guardada en el servidor. Esto significa que la primera petición se envía también a otros servidores. En el archivo /etc/bind/named.conf.options se establece a cuáles. Abre para ello el archivo y cambia la dirección IP en la entrada “forwarders”:

sudo nano /etc/bind/named.conf.options 

    forwarders {
      1.2.3.4;
      5.6.7.8;
    };

Aquí puedes introducir, por ejemplo, la dirección IP del servidor DNS de tu proveedor de Internet o la de un sistema abierto. Una opción muy popular es la dirección del servidor DNS de Google (8.8.8.8), pero si prefieres mantenerte al margen de los proveedores comerciales, puedes optar por los servidores 208.67.222.222 y 208.67.220.220 de Open DNS, por ejemplo.

Ahora que ya has configurado el servidor DNS en tu Raspberry Pi con BIND, inicia el programa con el comando para que los cambios cobren efecto:

sudo service bind9 restart

o bien con:

sudo service bind9 stop
sudo service bind9 start

Si apareciera algún tipo de error al iniciar el servidor DNS, puede resultar útil echar un vistazo al archivo de registro en /var/log/syslog.

Y si incluyes el servidor DNS en el inicio automático de programas del sistema ya no tendrás que iniciarlo a mano cada vez que reinicies el Raspberry Pi:

sudo update-rc.d bind9 defaults

Ahora solo queda incluir el nuevo servidor DNS en los ajustes del router para que todas las peticiones relativas a la resolución de nombres se envíen al Raspberry Pi. Para ello introduce en la configuración del dispositivo, normalmente disponible en una interfaz web, la dirección IP del Raspberry Pi. Desde este momento tienes todo el control sobre las entradas en el DNS de tal forma que también puedes bloquear determinados servidores con contenido indeseado. Para ello definimos los bloqueos DNS en un archivo que se incluye en el archivo de configuración de bind9:

sudo nano /etc/bind/named.conf

El archivo se añade bajo los demás como entrada nueva y se cierra con punto y coma:

include „/etc/bin/named.conf.blocked“;

En este archivo es donde pueden incluirse aquellos dominios susceptibles de ser bloqueados. Si quieres conocerlos puedes recurrir a diversas listas publicadas. En este ejemplo utilizamos una lista del proyecto DNS-BH que facilita un archivo de zona para BIND que puede descargarse y abrirse con un editor de texto. Todas las entradas que incluye tienen el formato correcto, por lo que pueden copiarse sin problemas en la lista de bloqueos. Este es el formato que han de tener las entradas incluso aunque utilicen una fuente diferente:

zone "malware-example.ga"  {type master; file "/etc/namedb/blockeddomain.hosts";};

Al final de la línea se indica el archivo que ha de ejecutarse cuando se solicita el dominio bloqueado en cuestión. Para crearlo escribe:

sudo nano /etc/namedb/blockeddomain.hosts

Aquí introduces el siguiente código:

$TTL    86400
@       IN      SOA     raspberry.home.lan. hostmaster.home.lan. (
                            2017081401 ; serial
                            8H ; refresh
                            2H ; retry
                            10D ; expire
                            1D ; minimum
)
  NS raspberry.home.lan.
  A 127.0.0.1
* IN      A       127.0.0.1

Pon especial atención en introducir tu dominio correctamente, raspberry.home.lan en este caso. Reinicia bind9 de nuevo y comprueba que tu servidor DNS está bien configurado y listo para funcionar.

Consejo

Con un Raspberry Pi también puedes instalar otros servidores. Aprende a configurar un servidor web o un servidor de correro con este miniordenador.

Utilizamos cookies propias y de terceros para mejorar nuestros servicios y mostrarle publicidad relacionada con sus preferencias mediante el análisis de sus hábitos de navegación. Si continua navegando, consideramos que acepta su uso. Puede obtener más información, o bien conocer cómo cambiar la configuración de su navegador en nuestra. Política de Cookies.