Parte 3 – Desplegar Pi-Hole con DoH y Docker Compose

Seguimos con otra, vamos a desplegar un Container de Pi-hole desplegado con compose a ver qué tal se nos da y como construir nuestra propia imagen de Pi-Hole con DoH.

Configurar fichero .yml

Creamos una carpeta para nuestro Container al gusto y creamos un fichero con extensión .yml

mkdir Deploy-PiHole
vi ~/Deploy-PiHole/Pi-hole.yml

Agregaremos los parámetros para el despliegue, aquí podemos agregar la configuración que tendrán nuestros containers de Pi-hole.

GitHub – pi-hole/docker-pi-hole: Pi-hole in a docker container

version: "3"

# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "67:67/udp"
      - "80:80/tcp"
    environment:
      TZ: 'Europe/Madrid'
      WEBPASSWORD: 'MordorWorld'
    # Volumes store your data between container upgrades
    volumes:
      - './etc-pihole/:/etc/pihole/'
      - './etc-dnsmasq.d/:/etc/dnsmasq.d/'
    # Recommended but not required (DHCP needs NET_ADMIN)
    #   https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
    cap_add:
      - NET_ADMIN
    restart: unless-stopped

Arranque Pi-hole

Una vez tengamos nuestro fichero de configuración, podemos iniciar nuestro Docker.

docker-compose -f Pi-hole.yml up -d

Si recibimos error de que el puerto está en uso, necesitaremos deshabilitar el servicio de “systemd-resolved”.

sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

Eliminar compose

Para eliminar el Container, ejecutaremos el siguiente comando.

docker-compose -f Pi-hole.yml down

Validar

Accedemos a la consola http://IP_Dockers/admin, si todo ha ido bien podremos conectarnos a nuestra consola.

Configurar DoH

Ahora vamos a configurar nuestro Pi-Hole con DoH CloudFlare, para ello tendremos que construir nuestra propia imagen de Pi-Hole personaliza, a tope…

cloudflared (DoH) – Pi-hole documentation

Creamos una carpeta para guardar nuestros ficheros para la construcción.

mkdir ~/Deploy-PiHole/build

Dockerfile

Crearmos un fichero llamado “Dockerfile”, aquí agregaremos los parametro de construcción (que instala, que ejecuta, …) .

Dockerfile reference | Docker Documentation

Nuestro fichero tendrá las tareas que nos indica PiHole para instalar DoH.

  • Usaremos la imagen de Pihole
  • Con sus puertos
  • Actualizara ubuntu
  • Instalará cloudflared
  • Copiara el fichero config en el contenedor
  • Creará el servicio
  • Arrancará Cloudflared

DoH Ubuntu

FROM pihole/pihole

EXPOSE 53:53/tcp\ 
       53:53/udp\
       67:67/udp\
       80:80/tcp

RUN apt-get update \
    && apt-get -y upgrade \
    && apt-get -y autoremove --purge \
    && apt-get -y install wget \
    && wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb \
    && apt-get install ./cloudflared-linux-amd64.deb \
    && mkdir -p /etc/cloudflared/ 
    
COPY ./config.yml /etc/cloudflared/config.yml

RUN cloudflared service install --legacy

ENTRYPOINT nohup /s6-init & cloudflared

DoH Raspberry x64

FROM pihole/pihole

EXPOSE 53:53/tcp\ 
       53:53/udp\
       67:67/udp\
       80:80/tcp

RUN apt-get update \
    && apt-get -y upgrade \
    && apt-get -y autoremove --purge \
    && apt-get -y install wget \
    && wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64 \
    && sudo cp ./cloudflared-linux-arm64 /usr/local/bin/cloudflared \
    && sudo chmod +x /usr/local/bin/cloudflared 
    
COPY ./config.yml /etc/cloudflared/config.yml

RUN sudo cloudflared service install --legacy

ENTRYPOINT nohup /s6-init & cloudflared

HEALTHCHECK

Para ver el estado de salud desde Docker, podremos utilizar el parametro HEALTHCHECK le solicitaremos que nos devuelva algo cada cierto tiempo para verificar.

Dockerfile reference | Docker Documentation

Agregaremos los siguiente antes de ENTRYPOINT, para que nos chequee el estado.

HEALTHCHECK --interval=5m --timeout=3s \
        CMD [dig @127.0.0.1 -p 5053 pi.hole || exit 1]

Config CloudFlare

Creamos un fichero “config.yml” para PiHole.

proxy-dns: true
proxy-dns-port: 5053
proxy-dns-upstream:
  - https://1.1.1.1/dns-query
  - https://1.0.0.1/dns-query

Contruir imagen

Construimos la imagen docker build -t ‘<Nombre-imagen>’ . (poner el punto al final con un espacio)

docker build -t 'pihole_mordor:v1' .

Verificamos que existe nuestra imagen.

docker image ls

Configuración Compose file

Editamos el fichero .yml del compose que hicimos al principio

Sustituimos la imagen por la nuestra “pihole_mordor:v1”

Agregamos un nuevo environment DNS1: ‘127.0.0.1#5053’

version: "3"

# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
services:
  pihole:
    container_name: pihole
    image: pihole_mordor:v1
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "67:67/udp"
      - "80:80/tcp"
    environment:
      TZ: 'Europe/Madrid'
      WEBPASSWORD: 'MordorWorld'
      DNS1: '127.0.0.1#5053'
    # Volumes store your data between container upgrades
    volumes:
      - './etc-pihole/:/etc/pihole/'
      - './etc-dnsmasq.d/:/etc/dnsmasq.d/'
    # Recommended but not required (DHCP needs NET_ADMIN)
    #   https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
    cap_add:
      - NET_ADMIN
    restart: unless-stopped

Arrancamos nuestro docker.

docker-compose -f Pi-hole.yml up -d

Verificar DoH

Para revisar el estado de nuestro container, ejecutaremos el comando docker exec -it <Nombre-Docker> comando.

Chequear versión cloudflared

docker exec -it pihole cloudflared -v

Comprobar que podemos resolvemos google.

docker exec -it pihole dig @127.0.0.1 -p 5053 google.com

Tambien importante ver que el container esta Up y no reiniciando en bucle.

docker ps

Troubleshooting

Para ver los logs del container al iniciar con el siguiente comando.

docker logs pihole

Mordor Blog – Parte 1 – Instalar Dockers en Raspberry-Pi

Mordor Blog – Parte 2 – Instalar Docker Compose

Mordor Blog – Parte 4 – Depliegue Docker Swarm

Mordor Blog – Parte 5 – Docker Volumenes

Mordor Blog – Parte 6 – Docker Networking

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *