DNS local para contenedores Docker en desarrollo

DNS local para contenedores: evita CSRF y desalineación de host en desarrollo, mapea nombres a IP de contenedores y facilita OAuth/OpenID con proxy inverso y Keycloak.

9 sept 2025 • 5 min read • Q2BSTUDIO Team

Inteligencia-Artificial-

El reto: descubrimiento de servicios en contenedores. En el desarrollo backend moderno la mayor parte de los sistemas se ejecuta en entornos aislados, habitualmente contenedores. Un backend típico está compuesto por varios servicios que deben comunicarse entre sí. Orquestadores como Kubernetes y Docker Compose ofrecen DNS interno para que los servicios se encuentren por nombre, lo que resulta muy cómodo y casi mágico.

Por qué el DNS interno no basta cuando hace falta una URL publica. ¿Qué ocurre si necesitas acceder a un servicio mediante una URL publica? Imagina un proxy inverso que expone todo, con Keycloak detrás y un oauth2-proxy gestionando la autentificación con Keycloak. El proxy necesita dos parámetros clave: redirect-url que es la URL que alcanza el navegador y oidc-issuer-url que es la URL que usa el proxy para obtener tokens. Para evitar problemas CSRF también se suele activar cookie-secure true. Como los clientes alcanzan Keycloak a través del proxy inverso la redirect-url debe apuntar al proxy; el issuer-url debe apuntar a Keycloak. Usar un nombre DNS interno para el issuer rompe las comprobaciones CSRF: ambas URLs deben compartir el mismo hostname, algo que normalmente es un dominio publico que no tenemos en desarrollo local. Dilema.

Por qué hostnames distintos provocan errores CSRF. Durante el flujo OAuth OIDC el proxy establece un valor efímero state o nonce en una cookie en el host exacto que visita el usuario, por ejemplo auth.local.test. Cuando Keycloak redirige de vuelta el proxy debe comparar el state en la URL de callback con la copia almacenada en la cookie. Esa comparación es la defensa CSRF. Si mezclas hosts, por ejemplo si el navegador visita https://auth.local.test pero el issuer es https://keycloak:8080 el navegador no enviará la cookie al otro host porque el ámbito de la cookie depende del hostname. Además cookie-secure obliga a enviar la cookie solo por HTTPS, así que cualquier salto por HTTP la pierde. Las reglas SameSite modernas también consideran hosts distintos como cross site y bloquean aún más la cookie. El proxy no encuentra la cookie que él mismo puso y la comprobación de state falla generando el error CSRF. Por eso resolver el nombre publico hacia tu contenedor localmente es tan efectivo: todos los pasos ven el mismo host, el navegador envía la cookie correcta y la comprobación CSRF pasa.

Soluciones existentes. Muchas personas recurren a falsificar dominios en el archivo hosts o buscan herramientas que mapeen nombres de contenedores a hostnames. Actualizar hosts en cada inicio de Docker funciona pero es frágil y vulnerable a sobreescrituras. Lo ideal es un comportamiento parecido al DNS real sin tener que editar archivos a mano.

Una mejor aproximación: servidor DNS local para contenedores. Ejecuta un servidor DNS local que vigile los contenedores en ejecución. Si una consulta coincide con el nombre o alias de un contenedor responde con su IP; si no, reenvía la consulta a los servidores DNS habituales. Con las APIs de Docker y bibliotecas de DNS en lenguajes como Go es sencillo montar un servidor pequeño y fiable. El servidor resuelve nombres de contenedores a IPs y reenvía el resto a los upstreams públicos, imitando el comportamiento de producción en el entorno de desarrollo.

Cómo funciona a grandes rasgos. El navegador pregunta por example.com. El resolvedor local comprueba si hay un contenedor llamado o con alias example.com en ejecución. Si existe devuelve la IP del contenedor. Si no existe reenvía la consulta al DNS publico y devuelve esa IP.

Ejemplo práctico con Docker Compose. Si lanzas un servicio con container_name github.com el servidor DNS local responderá github.com con la IP del contenedor. Por ejemplo una consulta dig github.com devolverá en la sección ANSWER la IP 172.21.0.2 que corresponde al contenedor. Puedes verificarlo con el comando docker compose ps -q ubuntu | xargs docker inspect -f {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} que muestra la IP del contenedor.

Configurar el sistema para usar el DNS local. Apunta tu resolvedor al servicio DNS local. Si usas systemd resolved el comando es sudo resolvectl dns INTERFACE 127.0.0.1:5300 sustituyendo INTERFACE por la interfaz adecuada. Este cambio puede ser temporal y reinicializarse al reiniciar el sistema; para volver al comportamiento por defecto basta reiniciar systemd resolved.

Ventajas. Resolver nombres publicos hacia contenedores locales evita desajustes de host que causan problemas de autenticación y cookies. No hace falta editar archivos hosts a mano. Funciona con Docker Compose de forma nativa y es fácil de verificar con herramientas como dig. En resumen un hostname coherente de extremo a extremo reduce sorpresas con auth y cookies y acerca el entorno local a producción.

Sobre Q2BSTUDIO. En Q2BSTUDIO somos una empresa de desarrollo de software y aplicaciones a medida especializada en soluciones personalizadas que integran inteligencia artificial y ciberseguridad, con experiencia en servicios cloud aws y azure, servicios inteligencia de negocio y soluciones como power bi. Ofrecemos desarrollo de aplicaciones a medida y software a medida que incluyen capacidades de ia para empresas y agentes IA para automatizar procesos y mejorar la toma de decisiones. Si te interesa potenciar tu infraestructura y despliegues en entornos locales y cloud podemos ayudar a diseñar la mejor arquitectura y flujo de trabajo, desde la integración con servicios cloud hasta los controles de seguridad. Conoce nuestros servicios de servicios cloud aws y azure y descubre cómo desarrollamos software a medida y aplicaciones a medida adaptadas a tu negocio. También ofrecemos ciberseguridad y pentesting para entornos productivos y de desarrollo y soluciones de inteligencia de negocio con Power BI para explotar tus datos.

Conclusión. Un pequeño servidor DNS local que mapea nombres a contenedores y reenvía el resto a upstreams públicos soluciona de forma elegante el problema de los hostnames desalineados en desarrollo. Menos hacks, menos errores CSRF y un entorno local que imita mejor a producción, facilitando integraciones con autenticación, IA y servicios cloud.

A BREAK?

Play for a moment before you go

OUR SERVICES

How we can help you

Artificial intelligence

AI agents, chatbots, and intelligent assistants that automate tasks and serve your customers 24/7 to improve the efficiency of your business.

More info

Software Development

Web, mobile, and desktop applications, intranets, e-commerce, SaaS, and management platforms designed for your company's specific needs.

More info

Cloud services

Migration, infrastructure, managed hosting, high availability, and security on Microsoft Azure and Amazon Web Services to help your business scale without limits.

More info

Cybersecurity and pentesting

Security audits, penetration testing and protection of applications, data and infrastructure on-premise and cloud, with ethical hacking and regulatory compliance.

More info

Business Intelligence

Dashboards and data analysis with Power BI: we integrate your sources, design dashboards and KPIs and turn your data into decisions.

More info

Process automation

We automate repetitive tasks and connect your applications with n8n, Power Automate, Make, and RPA, eliminating manual work and increasing productivity.

More info

Training for Companies

We train your teams in technology with criteria: web development, databases, Git, best practices and security, automation with n8n, artificial intelligence for companies and creation of AI solutions with Azure AI Foundry.

More info

Code Auditing

We audit the code that you, your team or an AI create: we tell you what is good and what to improve, we secure it and make it ready for production, web or app.

More info

AI Image Generation

We create for you the images that your business needs with artificial intelligence: product, networks, advertising, illustration and avatars. You tell us what you want and we deliver it ready to use.

More info

AI Video Generation

We create videos with artificial intelligence for you: promotional, networking, virtual presenters, dubbing and animations. You tell us the idea and we will deliver it assembled and ready to publish.

More info

AI Conversational Avatars

We create conversational avatars with AI – digital humans with a face and voice – that serve your customers and teams with the knowledge of your company, on your website, interactive monitors, WhatsApp or Teams.

More info

Online Marketing and AI

Google Ads, Meta Ads, LinkedIn Ads and AI Engine Positioning (GEO/AEO): we attract customers and make your brand appear where they search for you, also on ChatGPT, Gemini and Perplexity.

More info

Do you have a project in mind?

Tell us your vision and we'll turn it into a software solution. Whatever the scope, we make your idea real.