AdGuard en servidor local con Linux Mint

Publicado: 2023-02-17

Después de pasarme algo de tiempo por r/selfhosted en reddit, me di cuenta que hay muchas cosas que se pueden instalar en el servidor local. Dentro del mar de servicios, hubo uno que me llamó mucho la atención: AdGuard.

Resulta que este maravilloso servicio detiene la publicidad gestionando los DNS… y, lo más importante: me permite bloquear los dominios que yo quiera.

Así es: podría tener mi AdBlocker pero para todos los dispositivos de mi red, y sin estar limitado a cinco dominios para bloquear.

Por supuesto, como hice mi desmadre con Traefik, primero tengo que desactivarlo porque también hace uso del puerto :80 y mi entendimiento aún no alcanza para usar etiquetas de middleware…, así que ejecuté:

# Ubicación desde donde levanté mi servicio de Traefik.
cd /opt/containers/traefik/
# Tumbar Traefik en favor de AdGuard.
docker-compose down

Con esto, el puerto :80 está libre y podemos empezar a hacer desmadre con AdGuard:

# Crear directorios para el contenedor de Docker.
sudo mkdir /opt/containers/adguard
sudo mkdir /opt/containers/adguard/conf
sudo mkdir /opt/containers/adguard/work
# Cambiarnos al directorio de la configuración.
cd /opt/containers/adguard

Como de momento no me quiero meter en problemas de la red dentro del contenedor, usaré el valor de network_mode: host (para que la IP de mi DNS sea la misma de mi servidor local). Lo demás viene dado en la guía (archivo /opt/containers/adguard/docker-compose.yml):

version: '3'
services:
  adguard:
    image: adguard/adguardhome:latest
    container_name: adguard
    restart: unless-stopped
    network_mode: host
    volumes:
      - /opt/containers/adguard/work:/opt/adguardhome/work
      - /opt/containers/adguard/conf:/opt/adguardhome/conf

De momento, dado que el modo de red es host, tampoco necesitamos agregar puertos. Eso cambiará después, pero de momento no son necesarios.

Así, estando en el directorio /opt/containers/adguard, con el archivo docker-compose.yml listo, levantamos el servicio:

docker-compose up -d

Por cierto, un paréntesis si es que tuviste un error…

Si hay algo en el puerto 53…

En mi caso, menciona el problema siguiente (mencionado en la guía de instalación):

validating ports: listen tcp 0.0.0.0:53: bind: address already in use

Para resolverlo:

sudo mkdir -p /etc/systemd/resolved.conf.d

Agregar al archivo /etc/systemd/resolved.conf.d/adguardhome.conf el contenido:

[Resolve]
DNS=127.0.0.1
DNSStubListener=no

Ejecutar después:

sudo mv /etc/resolv.conf /etc/resolv.conf.backup
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
sudo systemctl reload-or-restart systemd-resolved

Después de eso no debería haber servicios en el puerto 53:

sudo lsof -i :53

Continuando con AdGuard

Ahora sí, de manera predeterminada se puede configurar el servicio desde el puerto host.ip:3000.

Una vez que tenga contraseña y todo hace falta que el router sepa de dónde tomar el servidor DNS.

En mi caso, cuento con un router TP-Link que tiene DHCP y puedo configurar el servidor DNS, por lo que solo es cuestión de ir al route y poner la IP de mi servidor con AdGuard y listo, el servidor empezará a filtrar contenido para toda la red.

De momento, eso es suficiente, pero poco a poco iremos incluyendo más cosas. El truco es ir incluyendo servicios poco a poco.

¿Tienes algún comentario?

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