Как исправить ошибку ERR_TUNNEL_CONNECTION_FAILED при работе с прокси
Обновлено:
Чтобы открыть страницу по https:// через прокси, браузер отправляет запрос CONNECT и ожидает, пока прокси создаст туннель к сайту. Ошибка ERR_TUNNEL_CONNECTION_FAILED возникает, когда в ответ на этот запрос прокси возвращает ошибку вместо подтверждения. Сложность в том, что Chrome не показывает сам код ошибки, поэтому в первую очередь нужно выяснить его значение.
Два воспроизведенных сценария
Оба случая воспроизведены на тестовом прокси с учебным адресом 203.0.113.10:8080 и авторизацией user123:pass456. В обычном окне Chrome статус 407 не приводит к ошибке туннеля: браузер просто выводит диалоговое окно для ввода логина и пароля прокси. Ошибки туннеля из-за статуса 407 возникают преимущественно в скриптах автоматизации и приложениях, которые не могут запросить пароль.
| Ответ прокси на CONNECT | Что отображает Chrome | Что отображает curl |
|---|---|---|
407 без возможности ввода пароля (headless Chrome) | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 407 |
502, так как прокси не может подключиться к сайту | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 502 |
Причины в порядке убывания вероятности
- Скрипт автоматизации не передает учетные данные. Флаг
--proxy-serverв Chrome принимает только хост и порт, без user:pass. При работе в headless-режиме Puppeteer или Selenium получает код 407 и сообщает о сбое туннеля. - Мобильное приложение работает через защищенный паролем прокси для Wi-Fi. В приложении нет формы авторизации, поэтому HTTPS-трафик блокируется, хотя в браузере все работает.
- Прокси не может установить соединение с целевым ресурсом. На запрос CONNECT возвращается код 502; подробно этот случай разобран на странице 502 Bad Gateway.
- Сбой возникает только на определенных сайтах. Целевой ресурс заблокирован или недоступен, тогда как остальные сайты через этот же прокси открываются нормально.
Как узнать точный код с помощью одной команды 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.
- Chrome на Windows: если окно авторизации не появляется, проверьте, не блокирует ли его установленное расширение для прокси, и повторите попытку в окне без расширений.
- Мобильные устройства: для приложений, требующих авторизации на прокси, используйте отдельное прокси-приложение с поддержкой user:pass, как описано в руководстве по настройке для Android.
Пошаговая инструкция
- 1
Определите ответ на запрос CONNECT
Выполните
curl -v -xсо строкой вашего прокси или вставьте ее в чекер, чтобы узнать, какой код возвращается — 407 или 502. - 2
При ошибке 407: настройте корректную передачу данных авторизации
В скриптах используйте встроенные методы аутентификации библиотек вместо передачи user:pass внутри
--proxy-server. - 3
При ошибке 502: проверьте доступность другого сайта
Попробуйте загрузить надежный ресурс (например, example.com) через тот же прокси. Если он открывается, проблема на стороне исходного сайта.
- 4
Повторите проверку и подтвердите выходной IP
Как только туннель откроется, перейдите на страницу мой IP в этом же браузере, чтобы убедиться, что трафик идет через прокси.
Часто задаваемые вопросы
Почему страницы http открываются, а https выдают ошибку?
Для обычного http запрос CONNECT не нужен: прокси сразу перенаправляет трафик. Туннель создается исключительно для https, поэтому ошибки туннелирования возникают только на защищенных сайтах.
Из-за чего возникает ERR_TUNNEL_CONNECTION_FAILED на Android?
Чаще всего дело в приложении, которое не может передать логин и пароль для прокси в сети Wi-Fi. Откройте эту же страницу в Chrome для Android: если браузер запрашивает данные и загружает сайт, проблема кроется в самом приложении.
Можно ли указать user:pass прямо в параметре --proxy-server?
Нет. Chrome игнорирует учетные данные в этом флаге, что вызывает ошибку 407 и сбой туннеля. Настройте авторизацию через Puppeteer, Playwright или специализированное расширение.
Поможет ли переключение на SOCKS5 избавиться от ошибки туннеля?
Только если ваш тарифный план предусматривает SOCKS5. Сервис VinaProxy поддерживает протоколы HTTP(S) и SOCKS5; выбирайте протокол, указанный в панели управления для вашего заказа, так как несовпадение протоколов приведет к другим ошибкам.
Прокси, совместимые с Puppeteer и Playwright
Прокси от VinaProxy поддерживают стандартную авторизацию по user:pass, которая поддерживается популярными библиотеками автоматизации без дополнительной настройки.
Смотреть тарифы