프록시 사용 시 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 |
주요 원인 (발생 빈도순)
- 자동화 스크립트에서 인증 정보를 전송하지 않음. Chrome의
--proxy-server플래그는 호스트와 포트만 지원하며 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 가이드에서 적용 가능한 대안을 확인하세요.
- Windows 환경의 Chrome: 로그인 대화상자가 표시되지 않는다면 프록시 확장 프로그램이 이를 차단하고 있는지 확인한 후, 확장 프로그램이 비활성화된 창에서 다시 시도하세요.
- 모바일 기기: 인증 프록시가 필요한 앱의 경우 Android 설정 가이드에 안내된 것처럼 user:pass를 지원하는 프록시 앱을 사용하세요.
단계별 안내
- 1
CONNECT 응답 코드 확인
프록시 정보를 사용해
curl -v -x명령을 실행하거나 프록시 체커에 입력하여 프록시가 407을 반환하는지 502를 반환하는지 확인합니다. - 2
407 오류의 경우: 올바른 인증 정보 전달
스크립트 사용 시
--proxy-server에 user:pass를 직접 포함하지 말고 라이브러리에서 제공하는 인증 훅을 사용하세요. - 3
502 오류의 경우: 다른 사이트 접속 시도
동일한 프록시를 통해 example.com 같은 대형 사이트에 접속해 보세요. 정상 작동한다면 원래 대상 사이트 자체에 문제가 있는 것입니다.
- 4
재실행 및 외부 IP 확인
터널이 정상적으로 열리면 해당 브라우저에서 내 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 인증 방식을 사용합니다.
요금제 보기