ERR_TUNNEL_CONNECTION_FAILED mit einem Proxy beheben
Aktualisiert:
Um eine https://-Seite über einen Proxy aufzurufen, sendet der Browser eine CONNECT-Anfrage und wartet darauf, dass der Proxy einen Tunnel zur Zielseite öffnet. ERR_TUNNEL_CONNECTION_FAILED tritt auf, wenn der Proxy diese Anfrage mit einem Fehler beantwortet, statt die Verbindung aufzubauen. Das Problem: Chrome zeigt nicht an, um welchen Fehler es sich handelt. Der erste Schritt besteht daher darin, den eigentlichen Code zu ermitteln.
Zwei von uns reproduzierte Fälle
Beide Fälle wurden an einem Test-Proxy reproduziert, hier dargestellt mit der Dokumentationsadresse 203.0.113.10:8080 und user123:pass456. In einem regulären Chrome-Fenster führt der 407-Fall nicht zu einem Tunnelfehler; Chrome öffnet stattdessen einen Anmeldedialog für Proxy-Benutzername und -Passwort. Durch 407 verursachte Tunnelfehler treten daher vor allem in Automatisierungs-Tools und Apps auf, die kein Passwort abfragen können.
| Proxy antwortet auf CONNECT mit | Chrome zeigt | curl zeigt |
|---|---|---|
407 ohne Möglichkeit zur Passworteingabe (headless Chrome) | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 407 |
502, weil der Proxy die Zielseite nicht erreichen kann | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 502 |
Ursachen, wahrscheinlichste zuerst
- Ein Automatisierungsskript sendet keine Anmeldedaten. Das Flag
--proxy-servervon Chrome akzeptiert nur Host und Port, kein user:pass. Puppeteer oder Selenium im Headless-Modus erhält einen 407 und meldet einen Tunnelfehler. - Eine Smartphone-App hinter einem passwortgeschützten WLAN-Proxy. Die App hat keinen Login-Dialog, sodass HTTPS fehlschlägt, während der Browser weiterhin funktioniert.
- Der Proxy kann das Ziel nicht erreichen. Er gibt 502 auf CONNECT zurück; die 502 Bad Gateway-Seite behandelt dies ausführlich.
- Nur bestimmte Websites schlagen fehl. Das Ziel blockiert Anfragen oder ist offline, während andere Websites über denselben Proxy erreichbar sind.
Den tatsächlichen Code mit einem curl-Befehl finden
Führen Sie curl -v -x http://user123:[email protected]:8080 https://example.com mit Ihren eigenen Werten aus. Prüfen Sie die Zeile direkt nach > CONNECT example.com:443 HTTP/1.1: Ein 407 bedeutet, dass Sie dem 407-Leitfaden folgen sollten; ein 502 verweist auf das Ziel oder die Route hinter dem Proxy. Wenn Sie kein Terminal nutzen möchten, fügen Sie die Zeile in den Proxy-Checker ein, der für dieselben Situationen auth failed (407) oder HTTP 502 meldet.
Lösungen nach Umgebung
- Puppeteer: Belassen Sie
--proxy-server=http://host:portbeim Start und rufen Sie vor der Navigationpage.authenticate({ username, password })auf. Ein vollständiges Beispiel finden Sie im Puppeteer-Proxy-Leitfaden. - Playwright: Übergeben Sie beim Start des Browsers
proxy: { server, username, password }, damit Playwright den 407 automatisch beantwortet; siehe Playwright. - Selenium: Chrome übernimmt user:pass nicht über die Befehlszeile; funktionierende Optionen zeigt der Selenium-Leitfaden.
- Chrome unter Windows: Wenn das Anmeldefenster nicht erscheint, prüfen Sie, ob eine Proxy-Erweiterung es unterdrückt, und testen Sie es erneut in einem Fenster ohne Erweiterungen.
- Smartphones: Nutzen Sie für Apps, die einen authentifizierten Proxy erfordern, eine Proxy-App mit user:pass-Unterstützung, wie im Android-Einrichtungsleitfaden beschrieben.
Schritt für Schritt
- 1
CONNECT-Antwort identifizieren
Führen Sie
curl -v -xmit Ihrer Proxy-Zeile aus oder fügen Sie sie in den Checker ein, um zu sehen, ob der Proxy 407 oder 502 zurückgibt. - 2
Bei 407: Anmeldedaten korrekt übergeben
Nutzen Sie in Skripten den Authentifizierungs-Hook der Bibliothek, anstatt user:pass in
--proxy-servereinzutragen. - 3
Bei 502: Andere Website testen
Laden Sie eine große Website wie example.com über denselben Proxy. Funktioniert sie, liegt das Problem beim ursprünglichen Ziel.
- 4
Erneut ausführen und Exit-IP prüfen
Sobald der Tunnel steht, rufen Sie Meine IP im selben Browser auf, um sicherzustellen, dass der Datenverkehr über den Proxy läuft.
Häufig gestellte Fragen
Warum laden HTTP-Seiten, während HTTPS-Seiten fehlschlagen?
Einfaches HTTP benötigt kein CONNECT; der Proxy leitet die Anfrage direkt weiter. Nur HTTPS öffnet einen Tunnel, weshalb Tunnelfehler nur dort auftreten.
Was verursacht ERR_TUNNEL_CONNECTION_FAILED unter Android?
Meist eine App, die Benutzername und Passwort nicht an einen WLAN-Proxy übergeben kann. Öffnen Sie dieselbe Seite in Chrome für Android; kann Chrome den Dialog anzeigen und die Seite laden, liegt es an der App.
Kann ich user:pass in --proxy-server übergeben?
Nein. Chrome ignoriert Anmeldedaten in diesem Flag, was zu einem 407 und dem Tunnelfehler führt. Authentifizieren Sie sich stattdessen über Puppeteer, Playwright oder eine Erweiterung.
Behebt der Wechsel zu SOCKS5 den Tunnelfehler?
Nur, wenn Ihre Bestellung SOCKS5 umfasst. VinaProxy bietet sowohl HTTP(S) als auch SOCKS5; wählen Sie das Protokoll, das für Ihren Auftrag im Dashboard angezeigt wird, da Abweichungen zu anderen Fehlern führen.
Proxys, die mit Puppeteer und Playwright funktionieren
VinaProxy-Proxys nutzen den Standard-Login über user:pass, den gängige Automatisierungsbibliotheken direkt unterstützen.
Preise ansehen