Instala un servidor DNS sobre HTTPS con AdGuard Home.

En este tutorial, explicaré cómo instalar y configurar un servidor DNS sobre HTTPS con Inicio de AdGuard.

Pero antes de entrar en materia, unas cuantas explicaciones y una introducción.

¿Qué es DNS sobre HTTPS?

Las consultas DNS clásicas se envían por el puerto 53 del servidor DNS mediante UDP; por lo tanto, las consultas DNS no son seguras, se pueden ver muy fácilmente monitorizando la red y también se pueden modificar.

Para abordar parcialmente este problema, se creó la tecnología DNS sobre HTTPS (DoH), que permite encapsular las consultas DNS en el protocolo HTTPS y, por lo tanto, beneficiarse del cifrado SSL, lo que dificulta la escucha y la interceptación de las consultas DNS.

Los principales proveedores de DNS públicos, como Cloudflare o Google, ofrecen servidores DoH, pero el problema con estos proveedores de DNS públicos es que no podrán resolver su nombre de dominio interno.

Cómo usar servidores DNS sobre HTTPS en Windows 11

En Windows, existen varias soluciones para configurar la resolución de nombres a través de un servicio DoH.

  • Configuración de servidores DoH directamente en el navegador web
  • Configure la dirección IP de Windows 11, siempre que se hayan declarado los servidores del Departamento de Salud (DoH).

En Windows 11, para mostrar los servidores DoH predeterminados, introduzca el siguiente comando:

Obtener-Dirección-Servidor-Cliente-DNS-DNS

Al configurar manualmente una de las direcciones IP como servidor DNS en Windows 11, tendrá la opción de habilitar la resolución mediante DoH.

¿Qué es AdGuard Home?

AdGuard Home es un «servicio» que le permite configurar un servidor DNS «principal» que filtra las consultas DNS:

  • anuncios
  • Rastreadores
  • Sitios maliciosos
  • Ciertos servicios como Facebook y sitios web para adultos

AdGuard Home también permite disponer de una interfaz web para administrar el servidor DNS con muchas opciones, como la posibilidad de configurar un servicio DNS sobre HTTPS (DoH), que será el tema de este tutorial.

AdGuard Home se puede instalar directamente en una máquina Linux o en un contenedor mediante Docker.

Implementa AdGuard Home con Docker

Antes de simplificar la implementación de AdGuardHome, opté por implementarlo en un servidor dedicado utilizando Estibador e instalar nginx como un proxy inverso.

Como de costumbre, en mi servidor, creé las carpetas /contenedores/adguardhome que contendrá los distintos archivos y volúmenes.

sudo mkdir -p /containers/adguardhome

Ahora crearemos el archivo docker-compose.yml en la carpeta creada anteriormente:

sudo nano docker-compose.yml

Este es el contenido del archivo:

name: doh
services:
    adguardhome:
        container_name: adguardhome
        image: adguard/adguardhome
        restart: unless-stopped
        volumes:
            - ./workdir:/opt/adguardhome/work
            - ./confdir:/opt/adguardhome/conf
        ports:
            - 53:53/tcp
            - 53:53/udp            
            - 3000:3000/tcp

Descarga la imagen:

sudo docker compose pull

Inicie el contenedor:

sudo docker compose up -d

Ahora pasaremos a configurar la página de inicio de AdGuard.

Configuración de inicio de AdGuard

Desde un navegador de internet, vaya a la siguiente URL: http://ip:3000. Cuando se inicie el asistente, haga clic en Vamos 1.

Cambie el puerto de la interfaz web al puerto 3000 1 y luego haga clic en Siguiente 2.

Configure una cuenta de administrador ingresando su nombre de usuario 1 luego su contraseña 2 y haga clic en Siguiente 3.

En esta etapa, el asistente explica cómo configurar AdGuard Home como servidor DNS según su entorno; haga clic en Siguiente 1.

AdGuard Home está instalado, haga clic en Abrir panel de control 1.

Para acceder a AdGuard Home, debe iniciar sesión con la cuenta creada previamente.

Una vez iniciada la sesión, accederá al Panel de control, que actualmente está vacío.

Configuración de inicio de AdGuard

Para empezar, configuraremos el DNS (redireccionador) de nuestro servidor AdGuard Home.

Desde el menú de navegación, haga clic en Configuración 1 y luego en Configuración de DNS 2.

En la sección Servidores DNS ascendentes, especificaremos los demás servidores DNS que realizarán la resolución de nombres. Dado que AdGuard Home está instalado en la empresa, primero especificaré los controladores de dominio que actúan como servidores DNS para mi dominio de Active Directory y, a continuación, un servidor DNS en Internet para realizar otras resoluciones. Lo interesante es que podemos especificar un servicio DoH en Internet que también «protegerá» las resoluciones realizadas en Internet.

La captura de pantalla que aparece a continuación muestra mi configuración:

Para ayudarte con la configuración, tienes varios ejemplos:

Para validar la configuración, haga clic en Probar los enlaces ascendentes 1.

A continuación, haga clic en Aplicar 1 para guardar la configuración del servidor DNS ascendente.

En la configuración de DNS, para evitar problemas, cambie el valor de Límite de velocidad a 0 y, a continuación, haga clic en Guardar.

La configuración mínima para usar Adguard Home como servidor DNS ya está completa.

Prueba la resolución de nombres con AdGuard Home.

En un ordenador, cambie la configuración DNS e introduzca la dirección IP del servidor AdGuard Home, conéctese a Internet o realice la resolución de nombres utilizando PowerShell (Resolver-Nombre-DNS).

Vuelve al panel de control de AdGuard; allí deberías ver las estadísticas.

En el registro de solicitudes, también puede ver todas las solicitudes DNS que se han procesado.

Para cada solicitud, se puede obtener información adicional.

Esta parte de Adguard Home me parece muy interesante porque permite tener información completa sobre el servicio DNS.

Configuración de DoH en AdGuard Home

Ahora pasaremos al tema inicial del tutorial, que es la implementación de un servicio DNS interno sobre HTTPS.

Para esta parte, necesitaremos:

  • Un servidor web que gestionará las solicitudes HTTPS, que será Nginx.
  • Un nombre de dominio con un registro específico para el servicio DOH (doh.dominio.tld)
  • Un certificado SSL (Let’s Encrypt)

Comience instalando Nginx:

sudo apt install nginx -y

Si es necesario, instale certbot para Nginx.

sudo apt install python3-certbot-nginx -y

Si utiliza Certbot, esto implica publicar el servicio web en Internet.

Ahora vamos a crear el host virtual en la carpeta /etc/nginx/sites-available.

sudo nano /etc/nginx/sites-available/doh.domain.tld

Ejemplo 1: Usted tiene un certificado SSL

upstream http_doh-3000{
    server 127.0.0.1:3000;
}

server{
    listen 443 ssl http2;
    #http2 on;
    server_name doh.domain.tld;

    access_log /var/log/nginx/doh.domain.tld_access.log;

    #more_clear_headers Server;
    #more_clear_headers X-Powered-By;

    ssl_certificate /etc/nginx/ssl/domain-tld.cert;
    ssl_certificate_key /etc/nginx/ssl/domain-tld.key;

    location /{
        proxy_pass http://http_doh-3000;
        include proxy_params;
        proxy_ssl_verify off;
    }

}

server{
    listen 80;
    server_name server_name doh.domain.tld;
    
    #more_clear_headers Server;
    #more_clear_headers X-Powered-By;
    
    if ($host = doh.domain.tld) {
        return 301 https://$host$request_uri;
    }
}

Ejemplo 2: Uso de Certbot

upstream http_doh-3000{
    server 127.0.0.1:3000;
}

server{
    listen 80;
     server_name doh.domain.tld;

    access_log /var/log/nginx/doh.domain.tld_access.log;

    #more_clear_headers Server;
    #more_clear_headers X-Powered-By;

    location /{
        proxy_pass http://http_doh-3000;
        include proxy_params;
        proxy_ssl_verify off;
    }

}

Agregue el enlace symbolo para que Nginx cargue el host virtual:

sudo ln -s /etc/nginx/sites-available/doh.domain.tld /etc/nginx/sites-enabled

Pruebe la configuración:

sudo nginx -t

Si no hay errores, recargue la configuración:

sudo systemctl recargar nginx

Si utiliza un certificado de Let’s Encrypt, genere el certificado con el siguiente comando:

sudo certbot

Ahora tendremos que modificar la configuración de AdGuard Home para permitir la conexión desde el proxy inverso y también indicarle que permita DoH desde una conexión que no sea segura (SSL), ya que es nuestro proxy inverso Nginx el que gestionará esta parte.

Abrir archivo AdGuardHome.yaml :

sudo nano confdir/AdGuardHome.yaml

Agregar dirección 0.0.0.0/0 en la parte proxies de confianza: y en la sección TLS: editar permitir_doh_no_encriptado tiene verdadero.

Archivo de configuración de AdGuardHome

Guarda los cambios y reinicia el contenedor:

sudo docker compose restart

La configuración de AdGuard Home para el servicio DNS sobre HTTPS (DoH) se ha completado.

Prueba el servicio del Departamento de Salud con Dog

Si tienes un ordenador con Ubuntu instalado, puedes probar la resolución DNS a través de DoH usando Dog.

Para instalar Dog, introduzca el siguiente comando:

sudo snap install dog

Para iniciar una resolución de nombre:

perro rdr-it.com @https://doh.domain.tld/dns-query --https

Configurar manualmente los servidores DoH en Windows 11.

Ahora veremos cómo configurar manualmente los servidores DNS sobre HTTPS en Windows 11; este paso es necesario para probar el correcto funcionamiento en un despliegue a gran escala.

Desde la configuración de Red e Internet en Windows, haga clic en Editar 1 en la configuración DNS del adaptador de red.

Configure el servidor DNS ingresando la dirección IP <<1>, seleccione Habilitado (modelo manual) <<2 en el campo DNS en HTTPS, ingrese la URL del servicio DoH <<3 y luego haga clic en Guardar <<4.

En la configuración, podemos ver que el DNS está cifrado.

Para verificar el correcto funcionamiento, podemos ver en el registro de solicitudes de AdGuard Home que se está utilizando DNS sobre HTTPS.

Configuración automática de DNS a través de HTTPS

Para configurar automáticamente DNS sobre HTTPS en Windows 11 cuando la configuración se ha realizado a través de un servidor DHCP, debe indicarle a Windows 11 que los servidores DNS admiten DoH.

Para ello, necesitas utilizar un script de PowerShell:

Para ayudarte, aquí tienes un script de ejemplo que puedes ejecutar al iniciar el ordenador.

<#
    Ajout les serveurs DoH sur Windows 11 et plus récent

    Pour cela on test de numero de build qui est supperieure à 22000
#>

# Recuperation du numero de build
$BuildNumber = [System.Environment]::OSVersion.Version.Build

# Liste des serveurs DoH avec leur adresse IP et leur URL DoH
$dnsServers = @(
    @{ IP = "x.x.x.x"; URL = "https://doh-1.domain.tld/dns-query" },
    @{ IP = "y.y.y.y"; URL = "https://doh-2.domain.tld/dns-query" }
)

if ($BuildNumber -lt 22000) {
    Write-Host "Ce script ne peut s'exécuter que sur Windows 11."
    exit 900
}

# Vérifier et ajouter chaque serveur DoH
foreach ($server in $dnsServers) {
    $currentDoH = Get-DnsClientDohServerAddress | Where-Object { $_.ServerAddress -eq $server.IP }

    if (-not $currentDoH) {
        Write-Output "Ajout du serveur DoH : $($server.URL) avec IP $($server.IP)"
        Add-DnsClientDohServerAddress -ServerAddress $server.IP -DohTemplate $server.URL -AllowFallbackToUdp $true -AutoUpgrade $true
    } else {
        Write-Output "Le serveur DoH $($server.URL) avec IP $($server.IP) est déjà configure."
    }
}

# Vérification des serveurs DoH configurés
Write-Output "Liste des serveurs DoH configures :"
Get-DnsClientDohServerAddress

Ahora ya tienes todo lo necesario para implementar tu servidor DNS sobre HTTPS internamente.

Conclusión

AdGuard Home es un servidor DNS que le permitirá ver lo que sucede a nivel DNS en su entorno de TI y también le permitirá implementar fácilmente servidores DoH.

No lo he tratado en este tutorial, pero también podrás activar filtros para limitar el seguimiento de tus usuarios y reducir la huella digital de tu empresa en Internet.

Próximamente explicaré cómo configurar un servicio DoH directamente en navegadores de internet.

Romain Drouche
Arquitecto de sistemas | MCSE: Infraestructura básica
Experto en infraestructura de TI con más de 15 años de experiencia en el sector. Actualmente, como Gerente de Proyectos de Sistemas y Redes y experto en Seguridad de Sistemas de Información (ISS), utilizo mi experiencia para garantizar la fiabilidad y seguridad de los entornos tecnológicos.

Deja un comentario