Contexto

Se disponía de una aplicación o entorno que necesitaba acceder a URLs internas disponibles únicamente a través de una VPN corporativa.

El objetivo final era permitir que otro contenedor, por ejemplo un navegador automatizado con Selenium, utilizara esa conectividad.

Primer intento: cliente VPN compatible

Durante las pruebas apareció una negociación SSL correcta seguida de un desafío de autenticación no esperado.

Esto mostró que:

  • alcanzar el servidor VPN no era el problema;
  • TLS funcionaba;
  • el protocolo posterior no era totalmente compatible con el cliente elegido o con el mecanismo de autenticación.
La distinción es importante.

No se debe diagnosticar todo como "la VPN no conecta".

La secuencia era:

text
DNS/TCP -> OK
TLS -> OK
HTTP upgrade -> OK
autenticacion/protocolo -> fallo

Decisión: utilizar un cliente compatible con Juniper Network Connect

Una vez conseguida la conexión mediante una implementación compatible, el siguiente paso no fue directamente lanzar Selenium.

Primero se verificó:

bash
curl https://url-interna/

desde el contenedor VPN.

Esto es un ejemplo muy claro de reducción del problema.

Si curl no funciona, introducir un navegador añadiría:

  • DNS;
  • Chrome;
  • driver;
  • proxy;
  • certificados;
  • políticas de navegador.

Decisión: compartir el namespace de red

Para que un segundo contenedor utilice la VPN del primero existen distintos patrones.

Uno especialmente directo es compartir el namespace de red del contenedor VPN.

Conceptualmente:

mermaid
flowchart LR
    A[Host] --> B[VPN container]
    B --> C[Corporate network]
    D[Selenium container] -. shared network namespace .-> B

En Docker Compose esto puede diseñarse de forma equivalente a:

yaml
services:
  vpn:
    ...

selenium:
network_mode: "service:vpn"

Ventajas

  • Selenium utiliza exactamente las rutas del contenedor VPN;
  • no es necesario construir un router completo;
  • DNS y gateway pueden quedar alineados;
  • reduce configuración.

Trade-off

Los contenedores comparten networking, por lo que:

  • puertos;
  • aislamiento;
  • ciclo de vida
deben gestionarse cuidadosamente.

Validación por capas

La secuencia adecuada es:

text
1. VPN conectada
2. rutas correctas
3. DNS
4. curl a URL interna
5. TLS
6. Selenium inicia
7. navegador accede
8. aplicación automatiza

Este orden reduce muchísimo el tiempo de troubleshooting.