Skip to content

Guides · Connect and debug

Fix ERR_TUNNEL_CONNECTION_FAILED in Chrome and Edge

ERR_TUNNEL_CONNECTION_FAILED means the browser reached the proxy it is set to use and asked it to open a tunnel to an HTTPS site, but no tunnel opened. The proxy refused the request, asked for a sign-in that was not completed, answered in a way the browser could not read, or could not reach the site itself. The website can be working normally. Find the proxy Chrome is using, then read that proxy’s actual answer with one curl request before you change anything.

By PortproofPublished

Short answers

What does ERR_TUNNEL_CONNECTION_FAILED mean?

It is Chromium’s network error -111: a tunnel connection through the proxy could not be established. For an HTTPS page, Chrome and Edge send the proxy a CONNECT request for the site’s host and port, and this code means that request did not end with an open tunnel. It does not say whether the website is up.

Is it the same as ERR_PROXY_CONNECTION_FAILED?

No. ERR_PROXY_CONNECTION_FAILED means the browser could not resolve the proxy’s name or connect to it at all. ERR_TUNNEL_CONNECTION_FAILED comes one step later, after the proxy has been reached. The earlier failure has its own ERR_PROXY_CONNECTION_FAILED guide.

Why does Chrome not show the proxy’s error page?

Chromium deliberately ignores the body of any CONNECT answer other than 200 or a 407 sign-in challenge, so that a proxy cannot pose as the website. A proxy’s 403, 502 or 503 explanation is discarded and only ERR_TUNNEL_CONNECTION_FAILED is shown. Read the status with curl or a NetLog instead.

Can cancelling the proxy sign-in cause it?

Yes. If you cancel the proxy’s 407 sign-in prompt while an HTTPS page is loading, Chromium ends the request with ERR_TUNNEL_CONNECTION_FAILED. Reload and enter the username and password issued for that proxy, not a website login.

Can the website cause it?

Indirectly. With an HTTP proxy, the proxy resolves the site’s name and connects to it for you. If that fails, the proxy answers CONNECT with an error such as 502 and the browser shows this code. Compare a second HTTPS site through the same proxy to tell a site problem from a proxy problem.

What the error means

Chromium defines ERR_TUNNEL_CONNECTION_FAILED, net error -111, as “A tunnel connection through the proxy could not be established.” Chrome and Microsoft Edge share that network code, so both print the same name. When the browser cannot reach the proxy at all, it reports ERR_PROXY_CONNECTION_FAILED instead. Chromium network error list.

Chrome has no specific text for this code, so it shows its generic page: This site can’t be reached and The webpage at … might be temporarily down or it may have moved permanently to a new web address. Those lines are the same for many failures. The code underneath is the evidence: it places the failure at the tunnel step between the browser and the proxy, before any page was requested from the site. Chromium error page strings.

Browser proxy errors by stage
What the browser showsStage that failedWhere to go
ERR_PROXY_CONNECTION_FAILEDThe proxy’s name did not resolve, or nothing accepted a connection on its port.ERR_PROXY_CONNECTION_FAILED checks
ERR_TUNNEL_CONNECTION_FAILEDThe proxy was reached, but the CONNECT tunnel to the site did not open.This guide
A proxy sign-in dialogThe proxy answered 407 and the browser is asking for that proxy’s credentials.Proxy username and password prompt
ERR_PROXY_AUTH_UNSUPPORTEDThe proxy asked for a sign-in method Chromium does not support.Ask the proxy operator which authentication it offers.
A certificate warning, such as NET::ERR_CERT_AUTHORITY_INVALIDThe tunnel opened; TLS with the site failed inside it.Proxy certificate errors

Common causes

The proxy refused CONNECT
Chromium turns every CONNECT answer other than 200 or a 407 challenge into this code, so 403, 502, 503 and any other refusal look the same in the browser. A 403 often means the proxy’s policy does not allow that host, port or account.
A sign-in that was not completed
The proxy asked for credentials with 407 and the sign-in did not finish, for example because the prompt was cancelled. Chromium ends a cancelled prompt for an HTTPS page as this code. Check the complete username and password with the 407 guide.
Wrong port or protocol
A port that does not run an HTTP proxy, such as a SOCKS5 port typed into the HTTP proxy field, will not answer CONNECT with 200. Chromium reports a reply it cannot read as HTTP/1.x as this code; a port that closes or resets the connection without replying gives another connection error. Portproof’s HTTP proxy port is 7000; 7001 is the SOCKS5 port.
The proxy could not reach the site
If the proxy cannot resolve or connect to the site, it answers with an error such as 502 or 504.
No exit device for the requested country
On Portproof, 502 E_NO_STOCK_COUNTRY means no device is online for the requested pool and country right now. Choose another country or check current locations.
Port or host restrictions
A proxy can refuse tunnels to some hosts or ports by policy, often with 403. An HTTPS site on a non-standard port, such as 8443, is a common case. Ask the proxy’s operator which destinations its policy allows.
A different proxy than you expect
A VPN app, security software, an extension or a work policy can set its own proxy. Its rules, not the proxy you configured, may be refusing the tunnel. The next section shows how to see the proxy Chrome actually uses.

Find the proxy Chrome is using

  1. Open chrome://settings/system. Open your computer's proxy settings means Chrome follows Windows or macOS. Chrome is using proxy settings from an extension or Chrome is using proxy settings from your administrator names the source that takes precedence.
  2. Open chrome://net-internals/#proxy. In Chrome 158 and later it lists the effective proxy settings of the current profile, and the original settings when they differ. Earlier versions, and Edge before 158, show only the Re-apply settings and Clear bad proxies buttons; read the source from step 1, or record a NetLog (below), whose Proxy view shows the settings.
  3. On a managed device, open chrome://policy and look for proxy policies such as ProxySettings. Send what you find to the administrator instead of working around it.
  4. Open chrome://version and read the command line. A --proxy-server switch there overrides the system settings for that launch.

Microsoft Edge uses the same checks with edge:// addresses, such as edge://settings/system, edge://policy and edge://net-export. Microsoft’s Edge proxy support article describes the same configuration sources. The proxy settings guide explains manual, PAC and automatic modes.

Read the proxy’s answer with curl

The browser hides the CONNECT status; curl -v -x prints it. Send the same proxy one HTTPS request from the same computer, to the failing page’s https://host:port/ where you are allowed to test it; the example uses example.com. In an interactive terminal, replace the username with the complete one from the connection builder; curl then asks for the password. With another provider, use the host, port and credentials it issued.

Show the CONNECT exchangesh
curl --disable -sS -v --noproxy '' \
  --connect-timeout 5 --max-time 15 \
  -o /dev/null \
  -x "http://gw.portproof.org:7000" \
  --proxy-user "YOUR_FULL_PROXY_USERNAME" \
  https://example.com/
-v prints the Proxy-Authorization header, which is your username and password in reversible Base64. Read the trace on your own screen; do not paste it into a ticket or chat. For a result you can share, use the --write-out check in the CONNECT tunnel guide.

Lines starting with > are what curl sent to the proxy; lines starting with < are the proxy’s answer. This excerpt comes from a local test proxy that refuses every CONNECT with 403, and no credentials were sent:

Excerpt: a refused CONNECT (curl 8.7.1)text
* Establish HTTP proxy tunnel to example.com:443
> CONNECT example.com:443 HTTP/1.1
> Host: example.com:443
> User-Agent: curl/8.7.1
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 403 Forbidden
< Content-Length: 0
< Connection: close
<
* CONNECT tunnel failed, response 403
* Closing connection
curl: (56) CONNECT tunnel failed, response 403
What the proxy’s answer tells you
Proxy answer in the traceWhat it meansNext step
< HTTP/1.1 200, then a TLS handshakeThe tunnel opens for curl.If curl used the same host and port as the failing page, the two clients are not using the same settings or credentials: compare Chrome’s proxy source, profile and sign-in with this request.
< HTTP/1.1 407The proxy wants valid credentials: none were sent, or it rejected them.Check the complete username and password in the 407 guide.
< HTTP/1.1 403The proxy refused this host, port or account.Check that the destination is allowed; see 403 at the tunnel stage.
< HTTP/1.1 502, 503 or 504The proxy could not reach the site, or is unavailable.Compare a second HTTPS site, then follow the CONNECT tunnel guide.
No < line, then a reset, a closed connection or a timeoutThe port did not answer as an HTTP proxy, or nothing answered in time.Check the host, port and protocol with connection refused and timeouts.
Could not resolve proxy or Failed to connectcurl could not reach the proxy; Chrome would show ERR_PROXY_CONNECTION_FAILED.Use the ERR_PROXY_CONNECTION_FAILED checks.

curl’s own wording, CONNECT tunnel failed, response 4xx, has its own guide, including why the number before the message differs between curl releases. curl and the browser can still disagree if they use different proxies, so confirm that the host and port in your command match what chrome://net-internals/#proxy (Chrome 158 and later) or the NetLog Proxy view shows.

Fixes on Windows, macOS and the Chrome command line

Windows 10 or 11
Open Settings > Network & internet > Proxy. Automatically detect settings, Use setup script and Manual proxy setup can each select a proxy. Correct the address and port of a proxy you use, or turn off an entry you added and no longer need. Leave settings your organisation manages in place.
macOS
Open System Settings > Network, select the active network service, then Details > Proxies. Check Web proxy (HTTP) and Secure web proxy (HTTPS) against your proxy’s details, or turn off an entry you no longer use.
Chrome command-line flags
Proxy flags are launch switches, not settings pages. --proxy-server="http://host:port" overrides the system settings for that launch, and --no-proxy-server makes direct connections. Close every Chrome window first (chrome://quit), then confirm the switch in chrome://version. A proxy policy set by an administrator overrides these switches.
An extension controls the proxy
Turn the extension off or correct its proxy entry, then reload. If it stores the proxy credentials, check them there; the Chrome extension guide covers that setup.
Credentials for an authenticated proxy
Chromium does not use a username or password written into manual proxy settings, and it supports no SOCKS5 authentication. Use the HTTP endpoint and enter the proxy credentials in the browser’s sign-in dialog or a trusted extension. Chromium proxy documentation.
A work or school proxy
Send the administrator the exact code, the time and the proxy source shown in chrome://settings/system. Its policy may refuse the destination by design.

If you never meant to use a proxy, remove the entry from whichever source chrome://settings/system named, then reload one page. After any change, select Re-apply settings in chrome://net-internals/#proxy and test one small HTTPS page before reopening the tabs you need.

Record a NetLog when curl is not enough

When curl succeeds and the browser still fails, record what the browser itself did. Chromium’s instructions use chrome://net-export. The log covers all of Chrome’s network activity while it runs, so close tabs you do not need first.

  1. Open chrome://net-export in a new tab and leave the log mode at its default.
  2. Select Start Logging to Disk.
  3. Reproduce the failing page once, in a different tab. Closing the net-export tab stops logging.
  4. Return to the net-export tab and select Stop Logging.

In the log, the event HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS holds the status line the proxy returned to CONNECT, and the Proxy view shows the settings in effect when the capture ended. Open the file in the NetLog viewer or send it to whoever runs the proxy. The default mode makes a best-effort attempt to strip cookies and credentials, but the log still lists the hostnames and URLs visited and your proxy configuration, so review it before sharing. Chromium NetLog instructions.

What to send support

Send the UTC time, browser name and version, the exact code, the proxy source shown in chrome://settings/system, the proxy host and port without credentials, the destination hostname and the < status line from curl. The CONNECT tunnel guide has a report template you can fill in. Leave out passwords, API keys, verbose traces and URLs that contain tokens.

What is not allowed

Test only sites and proxies you are permitted to use, for work such as QA, price monitoring, ad verification and market research. A working tunnel does not grant access to a website; respect each site’s terms and rate limits. See the acceptable-use policy.

Buy mobile and residential proxy GB

Choose your GB or reserve a mobile device.

Buy pool GB Try 1 GB for EUR 1.49

Once per customer. Cryptocurrency network minimums and fees vary.