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.
No se debe diagnosticar todo como "la VPN no conecta".
La secuencia era:
text
DNS/TCP -> OK
TLS -> OK
HTTP upgrade -> OK
autenticacion/protocolo -> falloDecisió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 .-> BEn 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
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 automatizaEste orden reduce muchísimo el tiempo de troubleshooting.
