Cómo solucionar ERR_TUNNEL_CONNECTION_FAILED con un proxy
Actualizado:
Para cargar una página https:// a través de un proxy, el navegador envía una solicitud CONNECT y espera a que el proxy abra un túnel hacia el sitio. ERR_TUNNEL_CONNECTION_FAILED aparece cuando el proxy responde a esa solicitud con un error en lugar de aceptarla. El problema es que Chrome no indica de qué error se trata, por lo que el primer paso es averiguar el código real.
Dos casos reproducidos
Ambos casos se probaron en un proxy de prueba, representado aquí con la dirección de ejemplo 203.0.113.10:8080 y user123:pass456. En una ventana normal de Chrome, el error 407 no se convierte en un fallo de túnel; en su lugar, Chrome abre un cuadro de diálogo para introducir el usuario y la contraseña del proxy. Por tanto, los errores de túnel causados por un 407 aparecen sobre todo en herramientas de automatización y en aplicaciones que no pueden solicitar credenciales.
| El proxy responde a CONNECT con | Chrome muestra | curl muestra |
|---|---|---|
407 sin posibilidad de introducir contraseña (headless Chrome) | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 407 |
502 porque el proxy no puede acceder al sitio | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 502 |
Causas principales (de mayor a menor probabilidad)
- Un script de automatización no envía credenciales. El parámetro
--proxy-serverde Chrome solo admite host y puerto, no user:pass. Puppeteer o Selenium en modo headless reciben un 407 y reportan un fallo de túnel. - Una aplicación móvil tras un proxy Wi-Fi protegido por contraseña. La aplicación no muestra un cuadro de diálogo de inicio de sesión, por lo que HTTPS falla mientras que el navegador sigue funcionando.
- El proxy no puede conectarse al destino. Devuelve un 502 a CONNECT; la página de 502 Bad Gateway trata esto a fondo.
- Solo fallan algunos sitios. El destino está caído o bloqueando la conexión, mientras que otros sitios funcionan con el mismo proxy.
Identifica el código real con un comando curl
Ejecuta curl -v -x http://user123:[email protected]:8080 https://example.com con tus propios valores. Revisa la línea justo después de > CONNECT example.com:443 HTTP/1.1: un 407 significa que debes consultar la guía de 407; un 502 apunta a un problema en el destino o en la ruta detrás del proxy. Si prefieres no usar la terminal, pega la línea en el verificador de proxies, que reporta auth failed (407) o HTTP 502 en las mismas situaciones.
Soluciones según el entorno
- Puppeteer: mantén
--proxy-server=http://host:portal iniciar y llama apage.authenticate({ username, password })antes de navegar. Tienes el ejemplo completo en la guía de proxy para Puppeteer. - Playwright: pasa
proxy: { server, username, password }al iniciar el navegador y Playwright gestionará el 407 automáticamente; consulta Playwright. - Selenium: Chrome no admite user:pass en la línea de comandos; la guía de Selenium muestra las alternativas viables.
- Chrome en Windows: si la ventana de inicio de sesión no aparece nunca, comprueba si alguna extensión de proxy la está bloqueando y vuelve a intentarlo en una ventana sin extensiones.
- Móviles: para aplicaciones que necesitan un proxy autenticado, utiliza una app de proxy compatible con user:pass, tal como se explica en la guía de configuración para Android.
Paso a paso
- 1
Identifica la respuesta a CONNECT
Ejecuta
curl -v -xcon los datos de tu proxy o pégalos en el verificador para saber si el proxy devuelve 407 o 502. - 2
Para 407: envía las credenciales correctamente
En tus scripts, utiliza el método de autenticación de la librería en lugar de incluir user:pass en
--proxy-server. - 3
Para 502: prueba con otro sitio
Carga un sitio conocido como example.com a través del mismo proxy. Si funciona, el problema está en el destino original.
- 4
Vuelve a ejecutar y confirma la IP de salida
Una vez abierto el túnel, visita mi IP en ese mismo navegador para confirmar que el tráfico pasa por el proxy.
Preguntas frecuentes
¿Por qué se cargan las páginas http pero fallan las https?
El tráfico http plano no necesita CONNECT; el proxy reenvía la solicitud directamente. Solo https abre un túnel, por lo que los errores de túnel solo ocurren en ese caso.
¿Qué provoca ERR_TUNNEL_CONNECTION_FAILED en Android?
Casi siempre se debe a una aplicación que no puede enviar el usuario y la contraseña a un proxy Wi-Fi. Prueba la misma página en Chrome para Android; si Chrome solicita credenciales y carga el sitio, el problema es la aplicación.
¿Puedo poner user:pass dentro de --proxy-server?
No. Chrome ignora las credenciales en ese parámetro, lo que provoca un error 407 y el fallo de túnel. En su lugar, autentícate mediante Puppeteer, Playwright o una extensión.
¿Cambiar a SOCKS5 solucionará el error de túnel?
Solo si tu plan es SOCKS5. VinaProxy ofrece tanto HTTP(S) como SOCKS5; elige el protocolo que indica tu pedido en el panel de control, ya que una discrepancia provocará errores distintos.
Proxies compatibles con Puppeteer y Playwright
Los proxies de VinaProxy utilizan la autenticación estándar user:pass, compatible de forma nativa con las librerías de automatización más populares.
Ver precios