407 detrás del proxy VPN corporativo: 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 funciona para el navegador, no para npm ni Maven. Cada cliente lee su propia configuración, y una red a la que solo se llega por VPN añade una segunda 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 mientras el de al lado no.
Qué demuestra realmente un 407
Un 407 Proxy Authentication Required viene del proxy, no del registro ni del repositorio. El cliente llegó al proxy y el proxy 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. Puede que el cliente tenga una dirección de proxy equivocada, que no haya ruta al proxy antes de levantar el túnel o que falte una entrada de omisión para un host interno. Lee el texto del error antes de cambiar las credenciales.
Confirma el host y el puerto del proxy, el esquema de autenticación y si el usuario necesita un prefijo de dominio. Después comprueba si la herramienta que falla lee ese valor de un archivo, de una variable de entorno o de ambos. Un usuario cualificado con dominio es una causa habitual de 407. También lo es una contraseña guardada con una 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
Usa npm config list para ver 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 una contraseña personal nunca debería confirmarse en el repositorio. Imprime la ruta de origen junto con el 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 los proxies y los espejos del archivo de ajustes del usuario, no del pom del proyecto. Pon los proxies específicos de la red y los espejos del repositorio interno en ~/.m2/settings.xml, y deja las declaraciones de repositorios públicos en el proyecto, donde corresponden.
El bloque de proxy necesita un id, una marca de activación, el protocolo, el host y el puerto, y una entrada nonProxyHosts para el repositorio interno. Coloca esos campos en el archivo de ajustes del usuario, no en el pom del proyecto, para que un cambio de red no reescriba la compilación de todo el equipo. La entrada de espejo es aparte y apunta Maven al repositorio interno.
Añade el repositorio interno a nonProxyHosts para que Maven se conecte directamente. Sin esa entrada el proxy se vuelve 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 es como un portátil que funciona acaba convertido en un ticket de soporte.
VS Code y los contenedores de desarrollo tienen espacios de nombres distintos
VS Code lee http.proxy de sus ajustes de usuario o de espacio de trabajo, incluidos el esquema y el puerto. Eso cubre las peticiones del editor a extensiones y al marketplace, pero no configura automáticamente 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 del host ni su ruta VPN, 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 dale su propio resolutor y su propia 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 VPN a través del proxy antes de que exista el túnel, la conexión falla de un modo que parece una caída del proxy. Prueba esa omisión con el túnel caído.
Las variables de entorno y los archivos pueden contradecirse. Ejecuta el volcado de configuración de la propia herramienta, no el del shell, y compara los valores que informa. Una variable duplicada en minúsculas, un valor antiguo en un shell padre o un archivo del proyecto pueden imponerse sobre el 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 simplemente no está ahí, mientras el shell del host sí la tiene.
Anota el host y el puerto del proxy, los sufijos de omisión y el archivo o la variable que los aporta para cada herramienta. Cuando un cliente devuelve 407 y otro funciona, ese registro convierte la comparación de cuatro configuraciones distintas en una comprobación breve.