Guide

ERR_TUNNEL_CONNECTION_FAILED: Why the Proxy Refused the Tunnel and How to Fix It

Chrome reached the proxy and asked it to open an HTTPS tunnel, and the proxy could not. What that says about the proxy, the site, and your settings, with fixes.

HProxy Team··8 min read
HProxy.Guide

Skip the dead lists.

Our free proxy list re-checks every exit every few minutes across 100+ countries, with a live last-checked time, so you copy IPs that worked moments ago, not a stale text dump.

Open the free proxy list

ERR_TUNNEL_CONNECTION_FAILED is the more specific sibling of the error most people know. When Chrome cannot reach a configured proxy at all, it shows ERR_PROXY_CONNECTION_FAILED. This error means Chrome did reach the proxy, the proxy answered, and then the proxy could not do the one thing HTTPS requires of it: open a tunnel to the site. Chromium's network error list files it as error -111, "A tunnel connection through the proxy could not be established", and that sentence contains the whole diagnosis. The proxy is alive. The tunnel is what failed.

That difference points the investigation somewhere else. A proxy that does not answer is a dead proxy or a wrong address, and the fixes are about the address. A proxy that answers and refuses the tunnel is telling you something about its own rules, its own reach, or your credentials, and the fastest way to learn which is to ask it directly, which takes one command.

What a tunnel is, and why only HTTPS needs one

For a plain http:// page, the browser sends the whole request to the proxy, the proxy fetches the page, and hands it back. The proxy sees everything, and it can do everything. For an https:// page that model does not work, because the browser and the site have to negotiate an encrypted connection that no middle party can read. The browser instead sends the proxy a request that reads CONNECT example.com:443 HTTP/1.1, asking it to open a raw connection to that host and port and then relay bytes in both directions without looking at them. If the proxy answers 200 Connection established, the browser starts its TLS handshake through the tunnel and the page loads. Any other outcome, a 403, a 405, a 407, a 502, a 503, or a closed connection, and Chrome reports ERR_TUNNEL_CONNECTION_FAILED.

So the error is the proxy's answer to CONNECT, compressed into one code. The proxy had a reason, and it usually said so in a status line Chrome does not show you.

Where the tunnel error sits: the proxy answered, the CONNECT did not succeed
  1. Chrome

    connects to the proxy

  2. Proxy

    answers; tunnel refused = -111

  3. Site, port 443

    never reached

Source: Chromium net error list: -111 versus -130

Ask the proxy why

Chrome hides the CONNECT response. curl shows it. On any system, with the proxy's address and port and any https:// site:

curl -v -x http://203.0.113.7:8080 https://example.com/ -o /dev/null

Read the lines after CONNECT example.com:443. The proxy's status line is the answer to your whole problem.

What curl shows after CONNECTWhat the proxy is sayingFix
HTTP/1.1 200 Connection establishedThe tunnel works in curlThe problem is Chrome-side: extension, credentials, or a second proxy layer
HTTP/1.1 407 Proxy Authentication RequiredIt wants a username and passwordAdd credentials, or whitelist your IP with the provider
HTTP/1.1 403 Forbidden or 405 Method Not AllowedIt refuses tunnels, or tunnels to that portUse a proxy that supports HTTPS, or the port it allows
HTTP/1.1 502 Bad Gateway or 503 Service UnavailableIt could not reach the siteTry another site; if all fail, the proxy's upstream is broken
Connection reset, or curl error 56It closed the connection without answeringProtocol mismatch, or a half-dead proxy
Nothing, then a timeoutReached but never answeredOverloaded or dying proxy

curl reports a non-200 CONNECT answer as its own error 56, phrased as "Received HTTP code 407 from proxy after CONNECT" (with whatever code applies), which is why the same failure looks different in a script and in a browser. Our guide to curl proxy errors covers the curl side in full.

The causes, and the fix for each

1. The proxy is HTTP-only and does not support CONNECT

With free proxies, this cause leads the list. A great many of the addresses on public lists are HTTP-only: they will fetch a plain http:// page and refuse the CONNECT request that every https:// site needs. Since almost the whole web is HTTPS now, such a proxy fails on nearly everything while a checker that only tests a plain HTTP page reports it alive. If HTTP sites load through the proxy and HTTPS sites fail, this is almost certainly your case.

What you need is a proxy that supports HTTPS tunnelling. Our proxy checker tests each address for HTTP, HTTPS, and SOCKS support separately, so you can see before you configure anything whether the proxy will carry HTTPS at all. The free proxy list shows the same per-protocol verification for every entry.

2. The proxy allows tunnels only to certain ports

Proxies commonly restrict CONNECT to port 443 to stop themselves being used as a general-purpose relay. Squid, the most widely deployed proxy software, ships with a rule that denies CONNECT to anything but its list of SSL ports. If you are tunnelling to a site on an unusual port, https://example.com:8443 for instance, and the proxy answers 403 to the CONNECT, this is why. Use port 443 where the site offers it, or a proxy without the restriction. SOCKS5 proxies have no such rule, because SOCKS tunnels any port by design.

3. The proxy wants credentials, and Chrome did not provide them

A 407 to the CONNECT means the proxy requires authentication. Chrome normally shows a login prompt for this, but when the proxy is set by an extension with stale credentials, or when the proxy is IP-authenticated and your address changed, the exchange fails and the tunnel error is what you see. Update the username and password in whatever configured the proxy, or add your current IP to the provider's whitelist. Everything about this case, including the special-character trap in passwords, is in our guide to 407 Proxy Authentication Required.

4. The proxy cannot reach the site

A 502 or 503 to the CONNECT means the proxy accepted the request and then failed to connect to the site from its side. Its DNS may be failing, its upstream network may be blocking the destination, or the site may be refusing connections from the proxy's IP at the TCP level. Test with two or three different sites. If only one fails, the site is unreachable from that proxy and a different exit is the answer. If everything fails, the proxy's outbound path is broken and the proxy is effectively dead even though it answers; replace it.

5. A filter is refusing tunnels to specific sites

The consumer version of the error, and the one that catches people who never configured a proxy. Antivirus web shields, parental controls, school and office filters, and some ad blockers work as a local or network proxy, and the way they block a site is to refuse the CONNECT to it. The signature is unmistakable: most sites load, a particular category of site fails with the tunnel error, and the proxy address in your settings is 127.0.0.1 or a private network address. The fix belongs in the filtering product's settings, or in a conversation with whoever runs the network. On your own machine, the filter's own uninstaller is the clean way out; just switching the proxy off leaves the product half-working.

6. A leftover proxy that still answers

A VPN client or filter that has been uninstalled badly sometimes leaves a process listening on its old port. The proxy answers, so Chrome gets past the connection step, but nothing behind it works, so every tunnel fails. On Windows, netstat -ano | findstr :PORT (with the port from your proxy setting) shows the process ID holding the port, and Task Manager's Details tab names it. Remove the program properly, then clear the proxy in Settings and in Internet Options as described in how to turn off a proxy.

7. A protocol mismatch

Point Chrome's HTTP proxy setting at a SOCKS server and the server receives a CONNECT line it does not understand. Some SOCKS implementations close the connection, which Chrome reports as this error; others never answer, which Chrome reports as the connection-failed error instead. If port 1080 appears in your proxy setting, the address is almost certainly SOCKS and belongs in a SOCKS field, which in Chrome means an extension or the system's dedicated SOCKS setting rather than the HTTP proxy box.

Chrome-side checks when curl says the tunnel works

If curl gets 200 Connection established through the same proxy and Chrome still fails, the difference is inside Chrome. Go to chrome://extensions, disable every proxy, VPN, and privacy extension, then reload; an extension can be routing Chrome through a second proxy that curl never sees. Check chrome://policy for a ProxyServer or ProxyPacUrl entry, which overrides both the system setting and any extension. And test in a fresh profile or a guest window, which starts with no extensions at all. If the guest window loads the page, the cause is an extension in your main profile.

If you never set a proxy

Most people who meet this error at home did not configure anything. Read the address on the proxy page (Settings, Network & internet, Proxy on Windows; System Settings, Network, Details, Proxies on a Mac) before switching it off. A 127.0.0.1 address is a program on your computer, usually a VPN, an ad blocker, or a security product, and its own settings or uninstaller are where the fix lives. An unfamiliar address on a machine that has never had a paid proxy deserves a look in our IP lookup and, if the setting returns after you clear it, the full treatment in proxy settings that keep turning back on.

The one-minute isolation

  1. Run the curl command above against an https:// site. Read the status line after CONNECT. That single line assigns the cause to one of the seven sections.
  2. If curl says 200 and Chrome fails, the problem is a Chrome extension, policy, or profile.
  3. If curl says 407, add credentials or whitelist your IP.
  4. If curl says 403 or 405, use a proxy verified for HTTPS, or change the port.
  5. If curl says 502 or 503, try another site; if all fail, replace the proxy.
  6. When only certain sites fail and the proxy is local, a filter is doing its job and needs to be reconfigured or removed.

Reliable HTTPS tunnelling is the baseline for any real use of a proxy, not a luxury. Every address in our free proxy list carries a per-protocol result from the last check, and when the job needs a tunnel that holds for hours rather than minutes, an authenticated ISP proxy on a fixed address, or a residential session that holds its exit, is what removes this error from your life entirely.

Frequently asked questions

What does ERR_TUNNEL_CONNECTION_FAILED mean?
Chrome connected to your proxy successfully, asked it to open a tunnel to the HTTPS site you wanted, and the proxy could not or would not open it. Chromium files this as error -111, a tunnel connection through the proxy that could not be established. The distinction from ERR_PROXY_CONNECTION_FAILED matters: there the proxy never answered, here it answered and then failed the request.
Why do only HTTPS sites fail with this error?
Because only HTTPS needs a tunnel. For a plain http:// page the browser sends the request to the proxy and the proxy fetches it. For https:// the browser sends a CONNECT request asking the proxy to open a raw connection to the site's port 443 and then relay bytes blindly. A proxy that does not support CONNECT, restricts it to certain ports, or fails to reach the site, breaks HTTPS while HTTP keeps working.
How do I fix ERR_TUNNEL_CONNECTION_FAILED if I never set a proxy?
Something configured one for you, and it is refusing the tunnel. Open Settings, Network & internet, Proxy on Windows, or System Settings, Network, Details, Proxies on a Mac, switch the proxy off, and reload. If the error affects only certain sites, a filtering product such as an antivirus web shield, parental control, or school filter is refusing tunnels to sites it blocks, and its own settings are where the answer is.
How do I fix it when I set the proxy on purpose?
Test the proxy with curl using the verbose flag and an https:// URL. The line after CONNECT tells you what the proxy said: 407 means it wants credentials, 403 or 405 means it refuses tunnels or that port, 502 or 503 means it could not reach the site. Match the fix to that answer: add credentials, pick a proxy that supports HTTPS, or try a different site to see whether the proxy can reach anything at all.
Can a free proxy cause ERR_TUNNEL_CONNECTION_FAILED?
Often. Many free proxies are HTTP-only: they fetch plain pages but refuse the CONNECT request that HTTPS needs, so almost every modern site fails through them while a checker that only tests HTTP reports them alive. Pick a proxy whose HTTPS support has actually been verified, and expect free proxies to change behaviour or die within hours regardless.
Is ERR_TUNNEL_CONNECTION_FAILED a sign of malware?
Not by itself, but the combination of a proxy you did not configure, an address that means nothing to you, and the error returning after you clear the setting is the pattern to take seriously. Our guide on proxy settings that keep turning back on covers how to find the program writing the setting and how to check for a rogue root certificate.

Get proxies that are alive right now

Our free list re-checks every exit every few minutes and shows a last-checked time, so you copy IPs that worked moments ago, not a stale text dump. When the location has to survive a real check, the paid network holds up.

129M+ proxy checks run · 100+ countries · HTTP / HTTPS / SOCKS · re-checked every few minutes · no signup