Configuración del servidor DoH autogestionado
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).
sudo apt update && sudo apt upgrade -y && sudo apt install -y docker-compose certbotConfigurar el cortafuegos
Asegure la seguridad del servidor configurando las reglas del cortafuegos para permitir los puertos necesarios (22, 80 y 443).
sudo ufw allow 22sudo ufw allow 80sudo ufw allow 443sudo ufw enableObtener certificado SSL
Utilice Certbot para obtener un certificado SSL. Reemplace <DOMINIO> con su dominio real.
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.
sudo mkdir -p /etc/corednsEscribir archivo de configuración de CoreDNS
Cree y edite /etc/coredns/Corefile:
sudo vim /etc/coredns/CorefileAgregue 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).logyerrors: 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.
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/CorefileExplicació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.pemyv /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.
sudo docker ps | grep corednsDeberí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 corednsConfigurar 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:
sudo crontab -eAgregue el siguiente contenido:
0 2 1 * * certbot renew --quiet && sudo docker restart corednsEsta 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.