プロキシ利用時の ERR_TUNNEL_CONNECTION_FAILED の解決方法
更新日:
プロキシ経由で https:// ページを読み込む際、ブラウザは CONNECT リクエストを送信し、プロキシが対象サイトへのトンネルを開くのを待機します。プロキシが接続を確立せずエラーで応答すると、ERR_TUNNEL_CONNECTION_FAILED が表示されます。ただし Chrome には具体的なエラー内容が表示されないため、まずは実際のエラーコードを特定する必要があります。
再現された2つのケース
どちらもテスト用プロキシ(ドキュメント用アドレス 203.0.113.10:8080、user123:pass456 に置き換え)で検証した結果です。通常の Chrome ウィンドウでは、407 の場合トンネルエラーにはならず、プロキシのユーザー名とパスワードを求めるログインダイアログが表示されます。そのため、407 によるトンネルエラーは、主に自動化ツールやパスワード入力ダイアログを表示できないアプリで発生します。
| プロキシの CONNECT 応答 | Chrome の表示 | curl の表示 |
|---|---|---|
パスワード入力手段がない 407(ヘッドレス Chrome) | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 407 |
プロキシがサイトに到達できない場合の 502 | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 502 |
主な原因(可能性が高い順)
- 自動化スクリプトで認証情報が送信されていない: Chrome の
--proxy-serverフラグはホストとポートのみを受け付け、user:pass には対応していません。そのため、ヘッドレス Puppeteer や Selenium は 407 を受け取り、トンネルエラーを報告します。 - パスワード保護された Wi-Fi プロキシ環境下のスマートフォンアプリ: アプリ側に入力ダイアログがないため、ブラウザは動作してもアプリの HTTPS 通信が失敗します。
- プロキシが接続先ターゲットに到達できない: CONNECT に対して 502 を返します。詳しくは 502 Bad Gateway ページ を参照してください。
- 特定のサイトのみ失敗する: 同じプロキシ経由で他のサイトにはアクセスできる場合、接続先サイトがブロックしているかダウンしています。
1行の curl コマンドで実際のエラーコードを特定
実際の値に置き換えて curl -v -x http://user123:[email protected]:8080 https://example.com を実行します。> CONNECT example.com:443 HTTP/1.1 の直後の行を確認してください。407 の場合は 407 ガイド の手順に従います。502 の場合は接続先サイトまたはプロキシ以降の経路に問題があります。ターミナルを使用しない場合は、プロキシチェッカー に貼り付けることで、同様に auth failed (407) や HTTP 502 を確認できます。
環境別の解決策
- Puppeteer: 起動時に
--proxy-server=http://host:portを指定し、ページ遷移前にpage.authenticate({ username, password })を呼び出します。完全な実装例は Puppeteer プロキシ設定ガイド をご覧ください。 - Playwright: ブラウザ起動時に
proxy: { server, username, password }を渡すと、Playwright が自動的に 407 認証を処理します。詳細は Playwright を参照してください。 - Selenium: Chrome はコマンドラインでの user:pass 指定に対応していません。実用的な対処方法は Selenium ガイド に記載されています。
- Windows 版 Chrome: サインインダイアログが表示されない場合は、プロキシ拡張機能がダイアログを抑制していないか確認し、拡張機能を無効化したウィンドウで再試行してください。
- スマートフォン: 認証が必要なプロキシを利用するアプリの場合は、Android 設定ガイド で紹介しているような user:pass に対応したプロキシアプリを使用してください。
手順
- 1
CONNECT 応答を確認する
プロキシ情報を指定して
curl -v -xを実行するか、チェッカーに貼り付けて、プロキシが 407 と 502 のどちらを返しているか特定します。 - 2
407 の場合:認証情報を正しく渡す
スクリプト内では
--proxy-serverに user:pass を含めるのではなく、ライブラリ固有の認証用フックを使用します。 - 3
502 の場合:別のサイトで試す
同じプロキシ経由で example.com などの大手サイトにアクセスしてみます。正常に読み込める場合、元の接続先サイト側に問題があります。
- 4
再実行して出口 IP を確認する
トンネルが開いたら、同じブラウザで my IP にアクセスし、トラフィックがプロキシを経由していることを確認します。
よくある質問
HTTP ページは開けるのに、HTTPS ページが開けないのはなぜですか?
通常の HTTP 通信では CONNECT が不要で、プロキシがリクエストを直接転送します。一方、HTTPS のみがトンネルを開くため、トンネルエラーは HTTPS でのみ発生します。
Android で ERR_TUNNEL_CONNECTION_FAILED が発生する原因は何ですか?
多くの場合、Wi-Fi プロキシにユーザー名とパスワードを渡せないアプリが原因です。Android 版 Chrome で同じページを開いてみてください。Chrome で認証プロンプトが表示され読み込める場合、問題はそのアプリ側にあります。
--proxy-server に user:pass を含めることはできますか?
できません。Chrome はこのフラグ内の認証情報を無視するため、407 が返されてトンネルエラーになります。代わりに Puppeteer、Playwright、または拡張機能経由で認証を行ってください。
SOCKS5 に切り替えればトンネルエラーは解消されますか?
ご注文内容が SOCKS5 の場合のみ有効です。VinaProxy では HTTP(S) と SOCKS5 の両方を提供しています。プロトコルの不一致は別のエラーを引き起こすため、ダッシュボードのご注文に表示されているプロトコルを選択してください。
Puppeteer や Playwright で快適に動くプロキシ
VinaProxy のプロキシは標準的な user:pass 認証を採用しており、主要な自動化ライブラリでも設定不要でそのまま利用できます。
料金を見る