Certificados TLS para servicios internos: guía con DNS split-horizon

Fuentes: TLS certificates for internal services done right

Este artículo explica una arquitectura para servir aplicaciones internas, como Grafana, sobre HTTPS con certificados TLS válidos emitidos por una autoridad certificadora pública, sin renunciar a la seguridad de la red privada. El autor parte de un problema habitual: usar el TLD .internal obliga a crear certificados autofirmados, lo que requiere instalar esa CA en cada cliente o pedir a los usuarios que ignoren las advertencias del navegador.

La solución propuesta combina tres piezas: DNS de horizonte dividido (split-horizon), una VPN con resolución DNS integrada como NetBird y un proxy inverso con funciones de WAF como Nginx. Con split-horizon, un dominio público como tuxnet.dev resuelve a una IP privada para los clientes conectados a la VPN y a una IP pública para el resto, lo que permite solicitar un certificado a Let's Encrypt mediante el cliente acme.sh. Nginx, a su vez, se vincula exclusivamente a la interfaz de red de la VPN, de modo que cualquier tráfico proveniente de internet público queda rechazado en el segundo nivel de defensa.

El texto incluye la configuración completa de Nginx con soporte para conexiones WebSocket de Grafana Live, un script de cron que renueva los certificados automáticamente, sincroniza los archivos a las rutas correctas y recarga Nginx, y una explicación del uso de CAP_NET_BIND_SERVICE para que acme.sh en modo standalone pueda escuchar en el puerto 80 sin ejecutarse como root. La guía se dirige a administradores de sistemas y DevOps que necesiten proteger servicios internos sin distribuir certificados autofirmados ni sacrificar la experiencia del usuario.