Para que los or­de­na­do­res puedan co­mu­ni­car­se entre sí todos los di­s­po­si­ti­vos co­ne­c­ta­dos a Internet poseen una dirección única, una de­no­mi­na­da dirección IP que permite a los clientes saber a qué servidor han de dirigirse. Estas di­re­c­cio­nes, co­m­pue­s­tas por se­cue­n­cias de cifras, son im­po­si­bles 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 pe­ti­cio­nes al servidor de nombres de dominio o DNS Server. Dado que en ocasiones este proceso puede costar un tiempo precioso, co­n­fi­gu­rar un servidor de nombres propio puede agilizar la conexión. El pequeño y versátil Raspberry Pi re­pre­se­n­ta un buen punto de partida en este sentido. A co­n­ti­nua­ción aclaramos cómo funciona un DNS y cómo puedes instalar un servidor DNS en tu Raspberry Pi.

Qué es exac­ta­me­n­te el DNS

El sistema de nombres de dominio es una he­rra­mie­n­ta de orie­n­ta­ción en redes basadas en di­re­c­cio­nes IP. Mientras que los usuarios in­tro­du­cen nombres de dominio como www.example.org en la barra de di­re­c­cio­nes del navegador, los or­de­na­do­res utilizan di­re­c­cio­nes IPv4 o IPv6 para co­mu­ni­car­se. Esto hace que para ga­ra­n­ti­zar el en­te­n­di­mie­n­to mutuo sea necesario traducir este nombre de dominio. Esta llamada re­so­lu­ción de nombres tiene lugar por medio de un servidor DNS, aunque pre­via­me­n­te 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 se­r­vi­do­res DNS. De entre ellos el primer servidor co­n­su­l­ta­do suele ser el del proveedor de Internet, que coteja la petición con su base de datos y entrega un resultado si encuentra coin­ci­de­n­cia. 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 se­r­vi­do­res raíz de nombres de Internet, que albergan todas las di­re­c­cio­nes de la World Wide Web. En relación con el DNS hay que tener en cuenta que la mayor parte de los pa­r­ti­ci­pa­n­tes de Internet, sobre todo los clientes de cualquier usuario, no poseen una dirección IP fija. Dentro de su red, los pro­vee­do­res de Internet suelen asignar las di­re­c­cio­nes IP cada 24 horas. Tra­n­s­cu­rri­do este periodo se produce una brevísima in­te­rru­p­ción de la conexión a Internet y el usuario recibe entonces una nueva dirección. Este pro­ce­di­mie­n­to no suele generar problemas, pues los clientes rara vez reciben pe­ti­cio­nes del exterior de la red local (son ellos los que envían las pe­ti­cio­nes al servidor y no al revés). Hay algunos casos, como un es­cri­to­rio remoto o un servidor de juegos, en que se hace necesario co­n­fi­gu­rar un servidor propio y para ello suele uti­li­zar­se un DNS dinámico, porque el servidor doméstico recibe del proveedor de DDNS un dominio con el cual está siempre di­s­po­ni­ble. Si la cuestión es poder acceder al servidor DNS desde fuera de la red local en cualquier momento cabe co­n­si­de­rar 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 di­re­c­cio­nes IP en otros se­r­vi­do­res pueden ser di­fe­re­n­tes. La in­s­ta­la­ción de un servidor doméstico podría ser una solución co­n­ve­nie­n­te si dentro de una red local acceden a Internet di­fe­re­n­tes personas y di­s­po­si­ti­vos, como puede suceder en una familia numerosa, un piso co­m­pa­r­ti­do 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 se­r­vi­do­res antes de que el contenido so­li­ci­ta­do llegue al usuario y, aunque el tiempo de espera se mueve en el terreno de los mi­li­se­gu­n­dos, si no se tiene que es­ta­ble­cer una conexión nueva con el DNS del proveedor de Internet, todo este proceso puede tra­n­s­cu­rrir incluso más rá­pi­da­me­n­te.
  • Pri­va­ci­dad: el fu­n­cio­na­mie­n­to del sistema de nombres de dominio se fu­n­da­me­n­ta en el envío de pe­ti­cio­nes a se­r­vi­do­res ajenos, generando huellas digitales que muchos usuarios prefieren evitar. Uti­li­za­n­do un servidor DNS propio muchos de los datos pe­r­ma­ne­cen a resguardo.
  • Seguridad: alojando un servidor DNS también se tiene el control sobre los registros. Los ci­be­r­cri­mi­na­les no cejan en el intento de in­te­r­po­ne­r­se en el recorrido de las pe­ti­cio­nes 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 es­pe­cia­l­me­n­te peligroso cuando se usan los servicios de la banca digital porque si se in­tro­du­cen datos sensibles en una copia exacta de la página web de un de­te­r­mi­na­do banco, los cri­mi­na­les no tardan en acceder a la cuenta.
  • Filtro pu­bli­ci­ta­rio: Los blo­quea­do­res de anuncios o ad blockers recurren a una lista de se­r­vi­do­res web su­s­ce­p­ti­bles de ser blo­quea­dos, pero un servidor DNS doméstico también puede hacerlo. De esta forma es posible liberar de pu­bli­ci­dad a todos los di­s­po­si­ti­vos de la red local con un solo gesto sin tener que instalar un programa extra en cada di­s­po­si­ti­vo.
  • Control parental: lo que funciona para la pu­bli­ci­dad, también puede aplicarse a la pro­te­c­ción de los menores de edad. Un servidor DNS au­to­ge­s­tio­na­do permite bloquear se­r­vi­do­res que ofrecen contenido inapro­pia­do para los más jóvenes.
  • Apre­n­di­za­je: muchos usuarios instalan su propio servidor DNS con la mera intención de co­m­pre­n­der mejor el fu­n­cio­na­mie­n­to de Internet pues no se conforman con saber que la ele­c­tri­ci­dad procede del enchufe y las páginas web del navegador. Para entender la te­c­no­lo­gí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 co­n­fi­gu­rar un servidor DNS en un Raspberry Pi

Si quieres instalar un DNS server en tu Raspberry Pi necesitas, además del popular mi­nio­r­de­na­dor, lo siguiente:

  • Una tarjeta SD con el sistema operativo Raspbian instalado
  • Conexión Ethernet al router
  • Ali­me­n­ta­ció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 Co­n­so­r­tium (ISC) para su de­sa­rro­llo.

Antes de nada conviene ase­gu­rar­se de que el Raspberry Pi obtiene una dirección IP estática dentro de la red local. Para ello se abre la co­n­fi­gu­ra­ció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 in­s­ta­la­ción en un Raspberry Pi es casi in­di­s­pe­n­sa­ble.

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 im­pre­s­ci­n­di­bles, contienen he­rra­mie­n­tas útiles para el ma­n­te­ni­mie­n­to 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 ne­ce­sa­rios algunos ajustes antes de poder utilizar el Raspberry Pi como un servidor DNS.

Abre a co­n­ti­nua­ción el archivo de co­n­fi­gu­ra­ción de bind9:

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

Aquí hay que co­n­fi­gu­rar 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 di­fe­re­n­tes (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 li­bre­me­n­te cómo no­m­brar­los, 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 co­rre­s­po­n­den 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 mo­di­fi­car­las.

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 di­s­po­si­ció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 co­n­so­li­da­do el formato YY­Y­Y­M­M­D­D­XX que co­rre­s­po­n­de a la secuencia año-mes-día, a la que se añade un número de serie que va au­me­n­ta­n­do a medida que se van creando versiones en un mismo día.

Crea a co­n­ti­nua­ció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 su­po­si­ció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 co­n­fi­gu­ra­ció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 pe­ti­cio­nes al DNS, pues una vez so­li­ci­ta­da una re­so­lu­ción de dominio, la entrada queda guardada en el servidor. Esto significa que la primera petición se envía también a otros se­r­vi­do­res. 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 “fo­r­wa­r­de­rs”:

sudo nano /etc/bind/named.conf.options 
    forwarders {
      1.2.3.4;
      5.6.7.8;
    };

Aquí puedes in­tro­du­cir, 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 ma­n­te­ne­r­te al margen de los pro­vee­do­res co­me­r­cia­les, puedes optar por los se­r­vi­do­res 208.67.222.222 y 208.67.220.220 de Open DNS, por ejemplo.

Ahora que ya has co­n­fi­gu­ra­do 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 apa­re­cie­ra 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 au­to­má­ti­co 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 pe­ti­cio­nes relativas a la re­so­lu­ción de nombres se envíen al Raspberry Pi. Para ello introduce en la co­n­fi­gu­ra­ción del di­s­po­si­ti­vo, no­r­ma­l­me­n­te di­s­po­ni­ble 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 de­te­r­mi­na­dos se­r­vi­do­res con contenido indeseado. Para ello definimos los bloqueos DNS en un archivo que se incluye en el archivo de co­n­fi­gu­ra­ció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 su­s­ce­p­ti­bles de ser blo­quea­dos. Si quieres co­no­ce­r­los puedes recurrir a diversas listas pu­bli­ca­das. En este ejemplo uti­li­za­mos una lista del proyecto DNS-BH que facilita un archivo de zona para BIND que puede de­s­ca­r­gar­se 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 eje­cu­tar­se cuando se solicita el dominio bloqueado en cuestión. Para crearlo escribe:

sudo nano /etc/namedb/blockeddomain.hosts

Aquí in­tro­du­ces 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 in­tro­du­cir tu dominio co­rre­c­ta­me­n­te, raspberry.home.lan en este caso. Reinicia bind9 de nuevo y comprueba que tu servidor DNS está bien co­n­fi­gu­ra­do y listo para funcionar.

Consejo

Con un Raspberry Pi también puedes instalar otros se­r­vi­do­res. Aprende a co­n­fi­gu­rar un servidor web o un servidor de correro con este mi­nio­r­de­na­dor.

Ir al menú principal