Cómo montar un servidor DNS en Linux Debian que servirá para todos los equipos de nuestra red (sean Linux, Windows o MacOS) y que nos permitirá, de forma gratuita, gestionar datos de uso de DNS por cada dispositivo de la red y bloquear la publicidad, entre otras cosas. Usaremos una máquina con Linux Debian 11 y el paquete Pi-Hole para sistema DNS, bloqueador de ADS, acceso a consola web de gestión y supervisión.
- Preparar Linux Debian 11 para hacerlo servidor DNS.
- Instalar Pi-hole en Linux Debian 11.
- Configurar cliente Windows para establecer como servidor DNS el equipo Linux Debian con Pi-hole.
- Acceso a la consola web de Pi-hole para establecer listas negras, listas blancas y revisar las peticiones DNS de los clientes.
Preparar Linux Debian 11 para hacerlo servidor DNS
En primer lugar, dispondremos de un equipo con Linux Debian 11 (es válido para otras distribuciones de Linux). En el siguiente artículo explicamos cómo montar un equipo con Linux Debian 11:
En primer lugar verificaremos que el equipo tiene una IP estática. Será un servidor de DNS por lo que es muy recomendable que tenga la IP estática y no dinámica. Para revisar la configuración de red editaremos el fichero interfaces con:
1 |
nano /etc/network/interfaces |
Y si tenemos una configuración similar a esta:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug ens192 iface ens192 inet dhcp |
La modificaremos a una configuración similar a la siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto ens192 iface ens192 inet static address 192.168.1.26 netmask 255.255.255.0 network 192.168.1.1 broadcast 192.168.1.255 gateway 192.168.1.1 |
En el ejemplo anterior asignaremos la IP 192.168.1.26 a nuestro servidor Linux. Guardaremos los cambios en el fichero pulsando Control + O y cerraremos con Control + X.
Inicialmente estableceremos también los servidores DNS externos del nuestro servidor, editando el fichero /etc/resolv.conf y agregando al final, por ejemplo:
1 2 |
nameserver 1.1.1.1 nameserver 8.8.8.8 |
Quedando algo así como:
1 2 3 4 |
domain home search home nameserver 1.1.1.1 nameserver 8.8.8.8 |
Para aplicar los cambios ejecutaremos:
1 |
systemctl restart networking |
Además, si hemos instalado una versión mínima de Debian 11, necesitaremos disponer del comando curl, para instalarlo ejecutaremos:
1 |
apt-get install curl |
Instalar Pi-hole en Linux Debian 11
Para instalar Pi-hole usaremos el comando curl, debe estar instalado en el equipo (como hemos comentado anteriormente). Instalaremos Pi-hole ejecutando el comando:
1 |
curl -sSL https://install.pi-hole.net | bash |
Conectará a Internet para descargar el paquete de Pi-hole:
Iniciará el asistente de instalación, que es bastante sencillo. En primer lugar nos indicará que el servidor será configurado como un dispositivo network-wide ad blocker (bloqueador de anuncios). Pulsaremos INTRO:
Nos advertirá de la recomendación de que el servidor Debian tenga IP estática y no dinámica (como hemos comentado en el primer punto). Seleccionaremos «Sí» y pulsaremos INTRO:
Elegiremos el servidor de DNS externo que usará, podemos elegir alguno de la lista o bien establecer alguno personalizado (Custom). En nuestro caso elegiremos «Google (ECS, DNSSEC):
Si queremos usar una lista para bloquear anuncios, la seleccionaremos. Por defecto Pi-hole usará «StevenBlack»:
Marcaremos «On» para instalar la consola de administración y gestión web de Pi-hole:
Marcaremos «On» para instalar el servidor lighttpd y los módulos PHP requeridos:
Marcaremos «On» para registrar las consultas (log de peticiones DNS de los clientes):
Elegiremos el modo de privacidad:
- 0 Show everything: para mostrar todos los datos posibles (nombres DNS de los dominios y nombres DNS de los equipos clientes que hacen las peticiones DNS.
- 1 Hide domains: si queremos que no aparezcan los nombres de los dominios (nombre DNS) de las peticiones de los clientes.
- 2 Hide domains and clients: si además de ocultar los nombres de los dominios, también queremos ocultar los nombres DNS de los equipos cliente de nuestra red.
- Anonymous mode: si no queremos mostrar ningún dato adicional.
En nuestro caso elegiremos «0 Show everything» para que muestre toda la información de dominios y clientes (al menos los nombres DNS):
El instalador iniciará la instalación de Pi-hole con la configuración establecida. Una vez concluida la instalación mostrará la siguiente ventana, indicando que ya tenemos disponible el acceso a la consola web de gestión/supervisión de Pi-hole, en la URL:
http://IP_Servidor_DNS/admin
Y también nos mostrará la contraseña de acceso «s6szWlGa»:
En la consola de Linux también indicará los mismos datos:
Configurar cliente Windows para establecer como servidor DNS el equipo Linux Debian con Pi-hole
Para configurar un equipo Windows cliente de nuestra red y que use como servidor DNS el montado anteriormente, únicamente tendremos que acceder a las propiedades de red e indicar en «Servidor DNS preferido» la IP de nuestro servidor DNS Linux Debian, en nuestro caso la 192.168.1.26:
En caso de tener DHCP en nuestra red, podemos modificar el servidor de DHCP para indicarle que propague el DNS 192.168.1.26 (o el que corresponda) a los clientes DHCP:
Acceso a la consola web de Pi-hole para establecer listas negras, listas blancas y revisar las peticiones DNS de los clientes
Tras establecer el servidor DNS a los equipos/dispositivos (Windows, Linux, MacOS, …) de nuestra red, éste empezará a recolectar información. Desde su página inicial (Dashboard) ya tendremos información muy valiosa y sencilla de ver y analizar, como las peticiones totales de DNS que se han hecho en nuestra red, los clientes (equipos/dispositivos que usan nuestro DNS), las consultas bloqueadas, los dominios más pedidos (que más peticiones DNS tienen), los bloqueados,
Podremos consultar los clientes con más peticiones DNS (totales y bloqueadas):
Y ver un log de las peticiones realizadas por cada cliente (tanto las bloqueadas, como el resto):
Como vemos es una herramienta muy sencilla de instalar y configurar y muy útil para agregar un factor de protección más a nuestras conexiones.
Hay que tener en cuenta que Pi-hole NO es un filtrado de contenidos web. Puede filtrar dominios DNS pero no bloqueará tráfico por IP, por ejemplo. Si un usuario accede a una URL bloqueada en Pi-hole (por estar en la lista negra que viene por defecto o por haberla agregado manualmente a la lista negra), el usuario no accederá a esta web si introduce su dirección DNS (url normal), pero sí accederá si conoce la IP.
Pi-hole, por tanto, tampoco tiene categorización de sitios web para poder filtrar por categorías, no es su cometido.
Si queremos bloquear un dominio de Internet (un sitio web), accederemos a «Blacklist» [1], introduciremos el nombre del dominio [2] y pulsaremos «Add to Blacklist» [3]. Pi-hole admite también patrones (desde RegEx filter):
A partir de este momento, cuando los clientes hagan una petición DNS a la URL bloqueada, les mostrará un error en el navegador:
De la misma forma podremos agregar dominios a listas blancas, desde Whitelist, que no serán bloqueados.