Proxy troubleshooting

ERR_TUNNEL_CONNECTION_FAILED: What the Proxy Refused and How to Fix It

Chrome reached the proxy but the CONNECT tunnel failed. Find which proxy Chrome uses, read the hidden status code with curl, and fix 403, 502 and 407 causes.

ERR_TUNNEL_CONNECTION_FAILED means Chrome reached a proxy, asked it to open a tunnel to the website with an HTTP CONNECT request, and the proxy did not return a usable success response. The proxy itself is reachable; the tunnel request failed. Find out which proxy Chrome is using, read the proxy's actual response outside the browser, and fix that specific refusal. Clearing the cache rarely helps.

This guide is based on Chromium's source code and documentation and on the HTTP specification. It is not an Aerod lab test of a particular proxy service. Error meanings are quoted from Chromium's network error list as of 23 October 2026.

Diagram of where Chrome proxy errors happen: failing to reach the proxy gives ERR_PROXY_CONNECTION_FAILED, a 407 reply leads to proxy authentication, and any other non-200 reply to the CONNECT request gives ERR_TUNNEL_CONNECTION_FAILED
Where each error happens. ERR_TUNNEL_CONNECTION_FAILED appears after Chrome has already reached the proxy.

What the error means, and what it does not

HTTP's CONNECT method asks a proxy to open a tunnel to a host and port, typically example.com:443 for HTTPS. A 2xx response means the tunnel is open. Chromium's own error list separates three nearby failures:

On narrow screens, scroll the table horizontally. Keyboard users can focus the table region and use the arrow keys.

Chrome errorChromium's definitionCheck first
ERR_PROXY_CONNECTION_FAILED (-130)Could not create a connection to the proxy server, either resolving its name or connecting a socket. Excludes failures during the CONNECT request.Proxy address, port, and whether the proxy is running
ERR_TUNNEL_CONNECTION_FAILED (-111)A tunnel connection through the proxy could not be established.The proxy's response to CONNECT: policy, destination, protocol, account
407 / ERR_PROXY_AUTH_UNSUPPORTED (-115)The proxy requested authentication, or requested it with an unsupported method.Proxy credentials and authentication method

So the website is usually not the first suspect. The proxy answered, and its answer was not "tunnel open". It may have refused the destination, failed to reach it, rejected your account or IP address, or not understood the request.

Why Chrome does not show the real reason

In Chromium's HTTP proxy client, a CONNECT response of 200 opens the tunnel and 407 starts proxy authentication. Every other status code is converted to ERR_TUNNEL_CONNECTION_FAILED, and the proxy's response body is deliberately ignored. The code comment explains that showing the body would let a proxy impersonate the target website. It also notes the trade-off: proxies such as Squid can return a 404 page explaining that a domain name does not exist, and Chrome discards it.

Chrome also returns this error when a proxy sends a malformed status line, or extra data after a 200 response. In practice, you need a tool that shows the proxy's raw reply.

Step 1: Find which proxy Chrome is using

According to Chromium's proxy documentation, Chrome's proxy settings can come from four places:

  • Managed policy: check chrome://policy for proxy policies set by an organization.
  • Command-line flags, such as --proxy-server, in a shortcut or launcher.
  • Extensions that use the proxy API. VPN and proxy-switcher extensions are common examples. Disable them one at a time to test.
  • System proxy settings: on Windows, Settings → Network & internet → Proxy; on macOS, the proxy settings for the active network service. Leftover settings from an uninstalled VPN or proxy tool belong here.

Write down the proxy host, port and type. If you never meant to use a proxy, turn off the stray setting and retest. That alone fixes many cases on personal computers.

Step 2: Read the proxy's real response with curl

Send the same CONNECT request with curl, which ships with Windows 10 and later, macOS and most Linux distributions. Use a harmless test destination first, then the site that failed:

curl.exe -v -x http://PROXY_HOST:PORT https://example.com/ -o NUL

Type curl.exe on Windows, because in Windows PowerShell curl can be an alias for a different command. On macOS or Linux, use curl and replace NUL with /dev/null. Add --proxy-user USER if the proxy needs credentials, and remove credentials from any output you share. In the verbose output, find the line after CONNECT example.com:443, such as HTTP/1.1 403 Forbidden. curl reports a failed tunnel as "CONNECT tunnel failed, response 403", which gives you the status code Chrome hid.

Inside Chrome, you can record a NetLog at chrome://net-export and open it in the NetLog viewer. Chromium's proxy documentation recommends this for proxy problems. The capture shows the resolved proxy list and any proxies Chrome marked as bad. It can contain sensitive URLs and cookies, so share it only with people you trust.

What the CONNECT status code usually means

Proxy responseLikely causeWhat to do
403 ForbiddenProxy policy refuses the destination or port, or your IP address is not on the provider's allowlistCheck the provider dashboard's IP allowlist and destination rules, or ask the network administrator
407 repeatedWrong or missing proxy credentialsFollow the 407 Proxy Authentication Required guide
404, 502, 503, 504The proxy could not resolve or reach the destination, or its upstream is down or overloadedTest another destination through the same proxy. If every destination fails, the proxy side is at fault.
400, 405, 501The endpoint does not accept CONNECT. A common cause is a SOCKS port configured as an HTTP proxy.Confirm the protocol and port in the provider's documentation
429Rate, session or concurrency limit (RFC 6585)Reduce parallel connections or check plan limits
No HTTP response, connection resetA firewall, antivirus HTTPS scanning or a middlebox is interrupting the tunnelRetest on another network or with HTTPS scanning paused

These are the usual causes, not guarantees. Proxy products can use status codes differently, so check your proxy's documentation or logs for the exact code you see.

Fixes by situation

You did not intend to use a proxy

  1. Turn off the system proxy and "Automatically detect settings" only if your network does not require them.
  2. Disable proxy or VPN browser extensions one at a time.
  3. Remove --proxy-server from Chrome shortcuts.
  4. Open chrome://net-internals/#proxy and use the buttons that re-apply settings and clear bad proxies. Chromium's documentation notes the page gives no confirmation that bad proxies were cleared.

You use a paid proxy service

  1. Confirm the endpoint type: an HTTP(S) proxy for Chrome's normal proxy setting, not a SOCKS-only port. SOCKS5 vs HTTPS proxies explains the difference.
  2. Check the IP allowlist, username format and any session or country parameters.
  3. Check that the plan still has bandwidth and that the destination or port is permitted.
  4. Read the CONNECT status with curl before contacting support, and include it in your ticket.

You are on a work or school network

A 403 to a CONNECT request usually reflects an intentional policy. Contact the administrator with the time, destination and status code. Do not try to bypass the policy.

What not to do

  • Do not turn off certificate checks or install unknown root certificates to "fix" a tunnel error. The failure happens before TLS reaches the website.
  • Do not switch to a random free proxy list. See free vs paid proxies for the risks.
  • Do not post proxy passwords, NetLogs or verbose curl output publicly without redacting them.

Verify the fix

Reload the page that failed, then check which address websites see using Aerod IP Lookup. If you meant to use the proxy, the IP should be the proxy's exit address. If you removed a stray proxy, it should be your normal connection. If a desktop application has a similar error, the Proxifier troubleshooting guide covers rule and process checks.

FAQ

What is the difference between ERR_TUNNEL_CONNECTION_FAILED and ERR_PROXY_CONNECTION_FAILED?

ERR_PROXY_CONNECTION_FAILED means Chrome could not connect to the proxy at all. ERR_TUNNEL_CONNECTION_FAILED means Chrome reached the proxy, but the proxy did not open the tunnel to the website.

Why does Chrome not show the proxy's error message?

Chromium deliberately ignores the body of any CONNECT response other than 200 or 407, so a proxy cannot impersonate the website. Use curl in verbose mode or a NetLog to see the actual status code.

Can clearing the browser cache fix ERR_TUNNEL_CONNECTION_FAILED?

Rarely. The failure happens between Chrome and the proxy before the website is contacted. Check the proxy settings, credentials, allowlist and the proxy's CONNECT response first.

Does ERR_TUNNEL_CONNECTION_FAILED mean the website is down?

Not necessarily. A 502 or 504 from the proxy can mean it could not reach the site, but a 403 or 407 points to the proxy's policy or your account. Test another destination through the same proxy to tell them apart.