Logo Neurocoda

Configuración del servidor DoH autogestionado

Neurocoda
Neurocoda
2026-07-03 12:44:35 2026-07-03 13:43:13 463 Words 3 Mins ...

CoreDNS

CoreDNS es un servidor DNS flexible y potente que admite múltiples extensiones de complementos. Es ideal para implementar servicios DoH.

Inicialización

Instalar componentes necesarios

Primero, actualice el sistema e instale los paquetes necesarios, incluyendo Docker Compose y Certbot (para obtener certificados SSL).

Terminal window
sudo apt update && sudo apt upgrade -y && sudo apt install -y docker-compose certbot

Configurar el cortafuegos

Asegure la seguridad del servidor configurando las reglas del cortafuegos para permitir los puertos necesarios (22, 80 y 443).

Terminal window
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable

Obtener certificado SSL

Utilice Certbot para obtener un certificado SSL. Reemplace <DOMINIO> con su dominio real.

Terminal window
sudo certbot certonly --standalone -d <DOMINIO>

Nota: Asegúrese de que el dominio se resuelva correctamente a la IP de su servidor y de que el puerto 80 no esté ocupado por otro servicio.

Configurar e implementar CoreDNS

Ejecutaremos CoreDNS mediante Docker.

Crear directorio de configuración de CoreDNS

Cree el directorio para los archivos de configuración.

Terminal window
sudo mkdir -p /etc/coredns

Escribir archivo de configuración de CoreDNS

Cree y edite /etc/coredns/Corefile:

Terminal window
sudo vim /etc/coredns/Corefile

Agregue el siguiente contenido, reemplazando <DOMINIO> con su dominio real:

https://.:443 {
tls /etc/letsencrypt/live/<DOMINIO>/fullchain.pem /etc/letsencrypt/live/<DOMINIO>/privkey.pem
bind 0.0.0.0:443
forward . 1.1.1.1 8.8.8.8
log
errors
cache 300
}

Explicación de la configuración:

  • <DOMINIO>:443: Escucha en el puerto 443 las solicitudes HTTPS del dominio especificado.
  • tls: Especifica la ruta del certificado SSL y la clave privada.
  • bind 0.0.0.0:443: Vincula el puerto 443 a todas las interfaces de red, permitiendo acceso externo.
  • forward . 1.1.1.1 8.8.8.8: Reenvía las solicitudes DNS a los servidores DNS públicos de Cloudflare (1.1.1.1) y Google (8.8.8.8).
  • log y errors: Habilita el registro de solicitudes y errores para facilitar la depuración.
  • cache 300: Habilita el almacenamiento en caché de DNS con un tiempo de 300 segundos para mejorar la velocidad de consulta.

Ejecutar el contenedor de CoreDNS

Ejecute el contenedor de CoreDNS con Docker. Asegúrese de reemplazar <DOMINIO> con su dominio real.

Terminal window
sudo docker run -d \
--name coredns \
--restart unless-stopped \
--network host \
-v /etc/coredns:/etc/coredns \
-v /etc/letsencrypt/live/<DOMINIO>/fullchain.pem:/etc/letsencrypt/live/<DOMINIO>/fullchain.pem \
-v /etc/letsencrypt/live/<DOMINIO>/privkey.pem:/etc/letsencrypt/live/<DOMINIO>/privkey.pem \
coredns/coredns \
-conf /etc/coredns/Corefile

Explicación de ejecución:

  • -network host: Utiliza la pila de red del host, permitiendo que CoreDNS escuche en el puerto 443 del host.
  • v /etc/coredns:/etc/coredns: Monta el directorio de configuración del host en el contenedor para facilitar la gestión de archivos de configuración.
  • v /etc/letsencrypt/live/<DOMINIO>/fullchain.pem y v /etc/letsencrypt/live/<DOMINIO>/privkey.pem: Monta el certificado SSL y la clave privada en el contenedor para que CoreDNS pueda usar HTTPS.

Verificar el estado de ejecución de CoreDNS

Asegúrese de que el contenedor de CoreDNS esté ejecutándose y escuchando en el puerto correcto.

Terminal window
sudo docker ps | grep coredns

Debería ver una salida similar a esta, indicando que el contenedor de CoreDNS se está ejecutando y escuchando en el puerto 443:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<id_contenedor> coredns/coredns "/coredns -conf /etc…" X segundos atrás Up X segundos 0.0.0.0:443->443/tcp coredns

Configurar el cliente para usar DoH

Después de completar los pasos anteriores, su servidor DoH estará listo. Ahora, configure los ajustes DNS en el dispositivo cliente usando https://<DOMINIO>/dns-query como dirección del servidor DoH.

Actualización automática del certificado SSL

Los certificados SSL obtenidos con Certbot tienen una validez de 90 días. Se recomienda configurar una tarea programada para renovar automáticamente los certificados y reiniciar el contenedor de CoreDNS.

Cree una tarea programada que verifique y renueve los certificados diariamente:

Terminal window
sudo crontab -e

Agregue el siguiente contenido:

0 2 1 * * certbot renew --quiet && sudo docker restart coredns

Esta tarea se ejecutará a las 2:00 AM del primer día de cada mes, renovando automáticamente el certificado y reiniciando el contenedor de CoreDNS.

Referencias

Manual de CoreDNS
Certbot
Inicio
DNS sobre HTTPS

Title: Configuración del servidor DoH autogestionado Author: Neurocoda Created at: 2026-07-03 12:44:35 Updated at: 2026-07-03 13:43:13 Link: https://neurocoda.com/es/posts/self-hosted-doh-server-setup-es/ License: This work is licensed under CC BY-ND 4.0.

Comments