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.

Proxies compatibles con Puppeteer y Playwright

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 conChrome muestracurl muestra
407 sin posibilidad de introducir contraseña (headless Chrome)ERR_TUNNEL_CONNECTION_FAILEDcurl: (56) CONNECT tunnel failed, response 407
502 porque el proxy no puede acceder al sitioERR_TUNNEL_CONNECTION_FAILEDcurl: (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-server de 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:port al iniciar y llama a page.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. 1

    Identifica la respuesta a CONNECT

    Ejecuta curl -v -x con los datos de tu proxy o pégalos en el verificador para saber si el proxy devuelve 407 o 502.

  2. 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. 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. 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

Artículos relacionados

Errores de proxy
Cómo solucionar el error 407 Proxy Authentication Required
El error 407 Proxy Authentication Required indica que el proxy respondió pero rechazó tus credenciales. Revisa la salida real de curl, las causas probables y cómo solucionarlo en cada aplicación.
Errores de proxy
Errores proxy 502 Bad Gateway: descubre quién lo envió
Un error 502 Bad Gateway a través de un proxy indica que un servidor intermedio no recibió una respuesta válida. Cómo saber si la culpa es del proxy o del sitio web, con salidas reales de curl.
Configuración de proxy
Cómo configurar un proxy con autenticación en Puppeteer (Node.js)
Aprende a configurar proxies HTTP(S) autenticados en Puppeteer para Node.js usando el flag --proxy-server y await page.authenticate().
Configuración de proxy
Cómo configurar un proxy en Playwright (autenticación global y por contexto)
Configura proxies HTTP(S) autenticados en Playwright para Node.js y Python. Ejecuta múltiples IPs estáticas aisladas en distintos BrowserContexts.
Configuración de proxy
Cómo configurar un proxy con autenticación en Selenium WebDriver
Configure proxies HTTP(S) con usuario y contraseña en Selenium WebDriver mediante selenium-wire o una extensión onAuthRequired.
Herramientas gratuitas
Comprobador de proxies: verifica tus proxies online
Comprobador de proxies gratis: pega hasta 100 proxies como ip:port:user:pass y verifica online su estado, IP de salida y latencia. Entiende qué significa cada error.
Configuración de proxy
Cómo configurar un proxy en Google Chrome
Configure proxies HTTP(S) de VinaProxy en Google Chrome sin cambiar la IP de todo el sistema mediante extensiones, flags --proxy-server o perfiles aislados.
Configuración de proxy
Cómo configurar un proxy en Windows 10 y Windows 11
Configure proxies HTTP(S) de VinaProxy en Windows 10 y Windows 11 utilizando la Configuración del Sistema WinINET, variables de entorno de PowerShell o netsh winhttp.