Pi-hole es una solución que nos permite evitar ver publicidad en las páginas webs que visitamos.
Lo que hace a grandes rasgos es en levantar un servidor de DNS y cuando el DNS recibe una solicitud de un servidor de addserver informa como destino la ip de nuestra Raspberry mostrando una imagen de 1px transparente en lugar de la publicidad.
Ejemplo de funcionamiento:
Así se ve un diario de Argentina en una red con un Pi-Hole andando.
Instalación de Pi-Hole:
Para realizar la instalación se debe ejecutar el siguiente script. La instalación es asistida y no es compleja.
curl -sSL https://install.pi-hole.net | bash
Lo primero que realiza el instalador es verificar si tiene permisos para realizar instalación de dependencias. En caso de que el comando sudo solicite contraseña va a solicitar la misma.
Una vez que consigue los privilegios de administración nos muestra la pantalla de bien venida del instalador.
Como todo proyecto GNU, Pi-Hole necesita del apoyo de la comunidad, si encontrás a esta solución últil por favor colabora con el proyecto.
Pi-Hole necesita para funcionar una IP estática y definir sobre que interfase esta conectada a la red nuestra Raspberry. En este caso yo conecte a mi Rasberry con el puerto RJ45, representado en Raspbian como eth0.
La siguiente pantalla nos consulta que DNS queremos utilizar para resolver los dominios que nuestra Rasberry no tenga en cache. Son de mi preferencia los DNS de OpenDNS y los de Google. (esta parametría puede ser después modificada desde el panel web).
La siguiente pantalla nos permite definir sobre que protocolos va a trabajar nuestro Pi-Hole. Si no sabe que este usando uno solo de los protocolos, marque los dos.
El instalador va a mostrar varias pantallas con información,entre ellas la ip que tiene nuestra Raspberry (copiar este dato porque después vamos a tener que configurar el router para que asigne la ip de nuestro Pi-Hole como DNS para nuestra red).
La última pregunta es si queremos llevar registro de las consultas que se hacen al DNS. Con esta información después se muestran gráficos de consumo. (Se puede activar o desactivar más adelante, la contra de dejar esto vivo es que sumamos otra actividad que escribe rutinariamente en la microSD).
Finalizada la configuración el instalador va a proceder a hacer la descarga y despliegue de las utilidades que necesita para el correcto funcionamiento de Pi-Hole.
Finalizada la instalación de los componentes tenemos como última pantalla la información de configuración de nuestro Pi-Hole, entre ella se destacan la IP donde va a funcionar, la url de la página web de administración y la contraseña de acceso a la consola de administración web.
Para que todo funcione correctamente se debe configurar el Router que corriendo el servicio de DHCP en la red la ip de nuestro Pi-Hole como único DNS. Finalizada esta configuración es necesario reiniciar los clientes de la red para que tomen esta nueva configuración.
Actualización de Pi-hole:
Para actualizar nuestro Pi-Hole se debe ejecutar el siguiente comando:
sudo pihole -up
La actualización es desatendida, mantiene la configuración pero actualiza los componentes.
Pi-hole como DNS de lan.
Este procedimiento es opcional, pero queremos que nuestro Pi-hole resuelva los nombres de los equipos internos podemos ejecutar estos pasos.
El primer paso es crear un archivo de configuración para dnsmasq tome un archivo nuevo como fuente de datos para definir los equipos de nuestra lan.
echo "addn-hosts=/etc/pihole/lan.list" | sudo tee /etc/dnsmasq.d/02-lan.conf
En el archivo /etc/pihole/lan.list cargamos los equipos con el mismo formato que el archivo hosts de nuestros linux.
Para crear o editar este archivo se debe ejecutar el comando:
sudo vi /etc/pihole/lan.list
El siguiente paso es reiniciar reiniciar el servicio de Pi-Hole para que aplique los cambios, esto se consigue con el siguiente comando:
sudo /usr/local/bin/pihole restartdns
Ahora debemos verificar que funcione o si aplicaron los cambios, ejecutamos el siguiente comando desde un equipo de la red consultando al dns por un equipo definido en el archivo lan.list.
Que debería tener una salida así: