407 detrás del proxy VPN de la empresa: npm, Maven y VS Code
Un 407 significa que el proxy quiere credenciales, no que el registro esté caído. Configura npm, Maven, VS Code y los contenedores, y exime los hosts internos.
Que la página interna cargue en el navegador solo demuestra que el proxy sirve al navegador, no a npm ni a Maven. Cada cliente lee su propia configuración, y una red a la que solo se llega por VPN añade otra pregunta: si el cliente alcanza el proxy. Empieza por el código de estado y sigue la cadena de configuración de la herramienta que falló. Por eso un cliente funciona y el de al lado no.
Qué prueba de verdad un 407
Un 407 Proxy Authentication Required lo emite el proxy, no el registro ni el repositorio. El cliente llegó al proxy y este rechazó la petición, normalmente porque faltaban credenciales, estaban mal formadas o no se aceptaban para ese destino.
Un tiempo de espera agotado cuenta otra historia: dirección de proxy equivocada, ninguna ruta al proxy antes de levantar el túnel o una entrada de omisión que falta para un host interno. Lee el texto del error antes de tocar las credenciales.
Confirma host y puerto del proxy, esquema de autenticación y si el usuario necesita prefijo de dominio. Luego comprueba si la herramienta lee ese valor de un archivo, de una variable de entorno o de ambos. Un usuario con dominio es una causa habitual de 407, igual que una contraseña guardada con codificación incorrecta.
npm lee su propia cadena de configuración
npm acepta las claves proxy y https-proxy en un .npmrc de usuario o de proyecto. Incluye el esquema, porque los valores son URL, y codifica los caracteres reservados de la contraseña para que una arroba no parta el valor.
proxy=http://proxy.example.com:8080
https-proxy=http://proxy.example.com:8080
strict-ssl=true
Con npm config list ves qué archivo aportó cada valor efectivo. Una exportación de shell como npm_config_proxy puede anular el archivo, y un .npmrc de proyecto con contraseña personal nunca debería confirmarse. Imprime la ruta de origen junto al valor.
Mantén strict-ssl activado. Un proxy que inspecciona TLS puede exigir el CA corporativo en el almacén de confianza; desactivar la verificación para sortear el error oculta el problema real de confianza.
Maven separa los proxies de los espejos
Maven lee proxies y espejos del archivo de ajustes del usuario, no del pom del proyecto. Pon los proxies de red y los espejos del repositorio interno en ~/.m2/settings.xml, y deja las declaraciones públicas en el proyecto.
El bloque de proxy necesita un id, una marca de activación, el protocolo, el host, el puerto y una entrada nonProxyHosts para el repositorio interno. Colócalos en el archivo del usuario, no en el pom, para que un cambio de red no reescriba la compilación de todo el equipo.
Añade el repositorio interno a nonProxyHosts para que Maven conecte directo. Sin esa entrada el proxy es un salto innecesario y el fallo parece una caída del repositorio. La entrada de espejo apunta al repositorio interno y no sustituye el ajuste del proxy.
Quien cambia de red puede mantener un archivo de ajustes por red y elegir la copia correcta al arrancar el shell. Editar un solo archivo a mano en cada cambio convierte un portátil que funciona en un ticket de soporte.
VS Code y los contenedores de desarrollo tienen espacios de nombres distintos
VS Code lee http.proxy de los ajustes de usuario o del espacio de trabajo, incluidos esquema y puerto. Eso cubre las peticiones del editor a extensiones y al marketplace, pero no configura una terminal ni un contenedor lanzado desde el editor. Revisa el ámbito del ajuste además del valor; un ajuste de espacio de trabajo puede anular el de usuario para un proyecto.
Un contenedor de desarrollo tiene su propio espacio de nombres de red. No hereda las variables de proxy ni la ruta VPN del host, por eso una llamada al marketplace puede fallar dentro del contenedor mientras la misma llamada funciona en el host.
Dale al contenedor esas variables, o su propio resolutor y su ruta. Cuando los nombres se resuelven dentro pero el proxy nunca responde, lo que falta suele ser la ruta, no la dirección.
Listas de omisión y precedencia del entorno
Añade la puerta de enlace VPN, los registros internos y los sufijos DNS privados a la lista de omisión. Si el cliente intenta llegar a la puerta de enlace a través del proxy antes de que exista el túnel, la conexión falla como si el proxy estuviera caído. Prueba esa omisión con el túnel caído.
Las variables de entorno y los archivos pueden discrepar. Ejecuta el volcado de configuración de la herramienta, no el del shell, y compara los valores. Una variable duplicada en minúsculas, un valor viejo en un shell padre o un archivo del proyecto pueden imponerse al ajuste que acabas de editar.
En CI pasa el proxy como variable secreta y prueba la instalación de un paquete en la misma imagen. Un 407 dentro de un contenedor suele significar que la variable no está ahí, mientras el shell del host sí la tiene.
Anota host y puerto del proxy, sufijos de omisión y el archivo o variable que los aporta para cada herramienta. Cuando un cliente devuelve 407 y otro funciona, ese registro convierte la comparación de cuatro configuraciones en una comprobación breve.