Un contenedor de aplicación que comparte el espacio de nombres de red de un contenedor VPN no tiene interfaz propia, así que es fácil suponer que no puede enviar nada cuando el túnel falla. Esa suposición es errónea en el modo de fallo que importa. Si el proceso VPN muere mientras el espacio de nombres sobrevive, la aplicación conserva sus sockets y el espacio de nombres conserva sus rutas, y el tráfico continúa por el camino que siga instalado. Un kill switch real es una política de filtrado explícita más pruebas del ciclo de vida del runtime, no una dependencia de arranque.

Por qué compartir el espacio de nombres no es un kill switch

Compartir un espacio de nombres significa que la aplicación usa las interfaces, las direcciones y la tabla de rutas del contenedor VPN. Elimina el camino independiente de la aplicación hacia la red mientras el espacio de nombres compartido está intacto, y no dice nada sobre lo que hará ese espacio de nombres cuando el túnel desaparezca.

Las condiciones de dependencia de Compose pueden retrasar el arranque de una aplicación hasta que una dependencia esté sana. Eso cubre un solo momento en el tiempo y ningún fallo posterior, así que es una herramienta de ordenación de arranque y no un cortafuegos de salida continuo.

Qué ocurre realmente cuando el contenedor sale

Distinga tres eventos. El proceso VPN dentro del contenedor puede morir mientras el contenedor sigue en ejecución. El contenedor puede detenerse o eliminarse, lo que destruye el espacio de nombres. El contenedor puede recrearse, lo que construye un espacio de nombres nuevo y reglas nuevas.

En el primer caso el espacio de nombres persiste, la ruta por defecto puede seguir apuntando a la interfaz física y la aplicación sigue enviando directamente. En el segundo caso la aplicación dependiente suele perder la conectividad por completo, porque su espacio de nombres desapareció. En el tercer caso la aplicación puede reconectarse a un espacio de nombres nuevo antes de que el túnel esté listo. Cada caso necesita una prueba distinta, y un diseño que solo cubre la desconexión ordenada cubre el menos interesante.

Construir una política de salida explícita

Escriba la política dentro del espacio de nombres compartido para que se aplique a los paquetes de la aplicación. La forma es un descarte por defecto con excepciones estrechas: loopback, la interfaz del túnel y la dirección y el puerto concretos del punto final que necesita el transporte del túnel.

La excepción del punto final debe estar puesta antes de que el túnel esté levantado, o el cliente VPN no podrá alcanzar su servidor. Por eso el conjunto de reglas permite explícitamente el transporte exterior en lugar de permitir la interfaz física en general. Añada también reglas IPv6 si el espacio de nombres tiene conectividad IPv6, porque una política solo IPv4 deja abierta la otra familia.

El DNS también forma parte de la política. Si la aplicación resuelve nombres mediante un resolutor accesible solo dentro del túnel, la regla de descarte romperá la resolución cuando el túnel esté caído, que es el comportamiento correcto para un kill switch. Decida a propósito si es eso lo que quiere.

Probar el ciclo de vida, no solo la desconexión

Envíe una petición nueva e inocua mientras el túnel está sano, luego mate el proceso VPN y envíe otra. Repítalo tras una parada del contenedor, tras un reinicio y tras una recreación. Una petición nueva importa porque una conexión existente puede sobrevivir a un cambio de reglas que bloquea las nuevas.

No confíe en una comprobación de estado ni en una consulta de IP de salida como mecanismo de bloqueo. Una comprobación observa el estado y lo informa; una política controla el tráfico. Las dos cosas pertenecen al mismo despliegue y no son sustitutas.

Registrar las reglas para que la prueba sobreviva a una actualización

Escriba el resultado esperado de cada caso de fallo en la documentación del despliegue, junto con las reglas que lo implementan. Ese registro permite ejecutar la misma prueba tras una actualización de imagen o del runtime, cuando el comportamiento del espacio de nombres o las rutas por defecto pueden cambiar sin que nadie edite el archivo de Compose.

Mantenga el camino exterior necesario del punto final VPN separado de la salida de aplicación sin restricciones, y mantenga el DNS y el IPv6 dentro de la cobertura prevista. Si la política permite toda la interfaz física por comodidad, el kill switch ha desaparecido. La documentación de redes de Docker describe la disposición de espacio de nombres compartido sobre la que se construye la política, y es la referencia que hay que consultar cuando el comportamiento del runtime está en duda.

Artículos relacionados