PiHole

Este artículo trata sobre el software PiHole Linux con DNS-over-TLS en Docker. PiHole es una aplicación que permite bloquear la publicidad y los rastreadores de Internet. Actúa a modo de sumidero DNS, ideal para usarse en una red privada. Docker ha añadido soporte para la Raspberry Pi y, por lo tanto, para todos los procesadores ARM.

Hace poco me encontré por casualidad con la imagen Docker DNS-over-TLS (DoT) del repositorio qdm12 (https://github.com/qdm12/cloudflare-dns-server) en GitHub. Un “proxy” DNS que acepta solicitudes DNS y las envía cifradas a Google (8.8.8.8), CloudFlare (1.1.1.1) u otros servidores DoT.

Esto podría implementarse fácilmente en mi ODROID XU4 y Raspberry Pi 3 (dos dispositivos para que, si un dispositivo falla, continúa funcionando internet en casa). El cambio rápido del servidor DNS en el “Fritzbox” (famosa serie de router alemana) por las dos direcciones IP de los dispositivos permite que las consultas DNS de mi red doméstica sean cifradas y no simple texto sin formato. Mientras me ocupaba del tema del DNS, me topé con PiHole (Docker Image). Un servidor DNS que responde a las consultas DNS, a menos que vayan a servidores de publicidad. Así pues, podemos implementar un bloqueador de rastreo y adware de bajo nivel, incluso para los dispositivos en los que no se puedan instalar un bloqueador de publicidad.

Ambos, combinando PiHole con DNS-over-TLS, permiten, a través de la implementación de dos dispositivos, una configuración DNS a prueba de fallos, cifrada, sin publicidad y sin rastreo para toda la familia. En este post me gustaría explicar brevemente cómo implementar todo esto. Este tutorial va dirigido tanto a mi audiencia principal, los fanáticos de ODROID XU4 como a los usuarios de Raspberry Pi porque la configuración es idéntica.

Instalar Docker

Instalar Docker y Docker-Compose es fácil. Abre una conexión SSH y escribe los siguientes comandos:

$ sudo su
# cd ~

curl -fsSL https://get.docker.com -o get-docker.sh # Docker repositories import of Docker, Inc.
sh get-docker.sh # Import repositories

apt install docker-ce python3-pip # install Docker and pip3

systemctl enable docker-ce # start Docker at startup
systemctl start docker-ce # start Docker now

pip3 install docker-compose # install Docker Compose
Docker Compose es responsable de la organización de varios contenedores Docker y simplifica la tarea enormemente.

Instalar PiHole y proxy DoT

Si tenemos Docker y Docker Compose instalados, ya podemos embarcarnos en nuestra tarea. Iniciaremos un servidor PiHole y dos DNS-over-TLS. He dirigido el servidor DoT a diferentes servidores DNS emisores, de modo que uno envía solicitudes a Cloudflare y el otro a Google Public DNS. Ambos tienen una disponibilidad de entre el 99% y el 99,99%. Como ningún sistema de resolución de DNS puede garantizar un tiempo de actividad del 100%, recomendaría utilizar siempre dos proveedores. La imagen Docker de qdm12 ofrece, además de los dos servidores ya mencionados, soporte para quad9, quadrant y cleanbrowsing. De cualquier forma, puedes profundizar en entrypoint.sh tú mismo y añadir tus propios proveedores.

Así que, en primer lugar, clonamos el repositorio Git del servidor DoT y lo configuramos. Si esto funciona, integraremos PiHole a través de acoplable-compose.yml.

apt install git

cd ~ && git clone https://github.com/qdm12/cloudflare-dns-server.git ./dns-server

cd dns-server
En el docker-compose.yml puedes ajustar la configuración. Entre otras cosas, aconsejaría desactivar BLOCK_MALICIOUS, ya que esto bloquea demasiado para mi gusto. VERBOSIty lo he fijado en 0. Y para los proveedores, como he dicho antes, tienes la oportunidad de elegir entre google, cloudflare, quad9, cleanbrowsing y quadrant. Tienes más información sobre las opciones de configuración en el sitio README del repositorio Git. Luego, puede compilar e iniciar compose-stack con docker-compose up –build #optional -d. Si se han realizado cambios en los archivos de configuración, yo siempre iniciaría la pila con –build. De lo contrario, docker-compose up -d sería suficiente para arrancarlo y docker-compose para apagarlo. ¿Cómo podemos ver ahora si el servidor DNS está funcionando o no? Para esto contamos con la pequeña herramienta dig:
apt install dig

dig blaumedia.com @ 127.0.0.1
El comando debería devolver algo como esto:
; << >> DiG 9.11.3-1ubuntu1.3 Ubuntu << >> blaumedia.com @ 127.0.0.1
;; global options: + cmd
;; Got answer:
;; - >> HEADER << - opcode: QUERY, status: NOERROR, id: 42751 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDO SECTION: ; EDNS: version: 0, flags :; udp: 4096 ;; QUESTION SECTION: ; Blaumedia.com. IN A ;; ANSWER SECTION: blaumedia.com. 86400 IN A 159.69.38.130 ;; Query time: 100 msec ;; SERVER: 127.0.0.1 # 53 (127.0.0.1) ;; WHEN: Wed Feb. 13 18:14:59 CET 2019 ;; MSG SIZE rcvd: 58
¿Te las has arreglado hasta ahora? ¡Muy bien! Luego convertimos un servidor DoT en dos y añadiremos PiHole. Para simplificar las cosas, primero voy a mostrarte mi archivo docker-compose.yml y luego te explicaré exactamente lo que he estado haciendo. Mi archivo docker-compose.yml:
version: '2' services: cloudflare-dns-tls: build. restart: always image: qmcgaw / cloudflare-dns-server container_name: cloudflare-dns-tls environment: - VERBOSITY = 0 - VERBOSITY_DETAILS = 0 - BLOCK_MALICIOUS = off - LISTENING PORT = 53 - PROVIDER = cloudflare Networks: dnsbridge: ipv4_address: 10.5.0.2 google-dns-tls: build. restart: always image: qmcgaw / cloudflare-dns-server container_name: google-dns-tls environment: - VERBOSITY = 0 - VERBOSITY_DETAILS = 0 - BLOCK_MALICIOUS = off - LISTENING PORT = 53 - PROVIDER = google Networks: dnsbridge: ipv4_address: 10.5.0.3 pihole: image: pihole / pihole: 4.2.1 dns: - 127.0.0.1 - 192.168.1.1 ports: - "53: 53 / tcp" - "53: 53 / udp" - "80: 80 / tcp" - "443: 443 / tcp" cap_add: - NET_ADMIN Networks: dnsbridge: ipv4_address: 10.5.0.4 environment: ServerIP: DEVICE_IP (eg 192.168.1.100) TZ: Europe / Berlin DNS1: 10.5.0.2 DNS2: 10.5.0.3 WebPassword: PIHOLE_PASSWORD volumes: - '/ etc / pihole /: / etc / pihole /' - '/etc/dnsmasq.d/:/etc/dnsmasq.d/' restart: always Networks: dnsbridge: driver: bridge ipam: config: - subnet: 10.5.0.0/16 gateway: 10.5.0.1
Hay muchos cambios, así que te recomiendo simplemente sobrescribir tu archivo docker-compose.yml por el mío. En primer lugar, debe configurar en la línea 47 la IP de tu dispositivo que ejecutará PiHole. Con ip route get 1.1.1.1 | awk ‘{print $ NF; exit}’ puedes descubrir rápidamente cuál es (Fuente: AskUbuntu.com). En la línea 51, he especificado la contraseña para la interfaz web de PiHole. ¿Qué estamos haciendo aquí exactamente? Para que los dos servidores DoT sean accesibles para PiHole, creamos un puente de red en la parte inferior del archivo. Esto nos permite asignar direcciones IP fijas a los contenedores individuales. Docker normalmente gestiona esto para que los contenedores siempre puedan ser identificados por el nombre del contenedor entre ellos. Pero los servidores DNS como dnsmasq de PiHole no conocen los servidores de nivel superior con sus nombres de dominio, aunque esperan las direcciones IP. ¿Cómo podría resolver estos dominios en todo caso? Así que proporciona a los contenedores direcciones IP fijas; fácil. Esto lo determinamos en la línea 49 y 50 como servidor emisoar para PiHole. En las líneas 34 y 35 configuramos los servidores DNS del contenedor, que se utilizan, por ejemplo, durante el arranque de los procesos. El primero siempre debe ser 127.0.0.1, el segundo puede ser cualquier otra cosa. Pongo aquí la IP de mi Fritzbox (router). En las líneas 53 y 54 montamos la carpeta de configuración de PiHole en nuestro sistema host para que no se elimine en cada proceso de compilación y permanezcan inamovible. Eso es todo, el resto ya deberías conocerlo o es evidente. Con docker-compose up –build -d ahora podemos compilar e iniciarlo todo.

Insertar canales de publicidad PiHole

Accedemos a la interfaz web de PiHole con nuestro navegador simplemente introduciendo la IP de la Raspberry Pi/oDroids. [Figura 02] PiHole WebUI. Siguiendo el enlace llegas a la interfaz. En el lado izquierdo, pincha en “Login” e introduce la contraseña que acaba de definir en la configuración. ¡Voilà! La mejor prueba es que las consultas DNS están funcionado con dig. Si todo funciona perfectamente, ahora podemos añadir listas para PiHole que son las responsables de bloquear la publicidad. Suelo alimentar mis listas exclusivamente desde firebog.net. Puedes añadir las listas a PiHole desde Settings -> Blocklists.

PiHole añade listas de bloqueo

Dado que hay más personas que usa Internet en mi hogar, prefiero bloquear menos direcciones DNS. Es decir, si hay que algo que no funciona debido a los agujeros negros de DNS, es molesto para todos. Por supuesto, al final esto es así para todos. Finalmente, haga clic en save and update y se bloquearán las consultas de DNS incluidas en las listas. Las listas se actualizan automáticamente por la noche a las 00:00.

Para finalizar

Ahora tiene un servidor PiHole que recibe tus solicitudes de DNS cifradas. Si estás seguro de que todo funciona, ahora puede colocar tu servidor PiHole como un servidor DNS en tu router. Nosotros tenemos un “FritzBox” y la configuración se ve así:

Configurar el servidor DNS FritzBox

Introduce la dirección IP interna de tu dispositivo PiHole y guarda la configuración. Como puedes ver, he introducido dos IPs. En primer lugar, el ODROID XU4, luego viene mi PI3 de reserva. De ahora en adelante, las consultas de DNS de toda la red son filtradas a través de PiHole -> DNS-over-TLS -> Cloudflare / Google / Quad9 / …

Referencias

https://blaumedia.com/blog/odroid-raspberry-pi-pihole-dns-over-tls-docker/ https://github.com/qdm12/cloudflare-dns-server

Be the first to comment

Leave a Reply