v2rayN 시스템 프록시가 작동하지 않을 때: 브라우저와 명령줄 터미널 문제 해결

브라우저와 터미널에서 프록시가 작동하지 않는 원인은 다를 수 있습니다. 시스템 프록시 설정, 브라우저 확장 프로그램 충돌, 터미널 환경 변수를 각각 확인하세요.

이 글의 핵심

먼저 v2rayN의 로컬 포트가 요청을 수신하는지 확인한 다음, 브라우저의 시스템 프록시 설정과 터미널의 프록시 옵션을 따로 점검하세요. 시스템 프록시를 켰는데도 일부 앱이 직접 연결되는 Windows 사용자를 위한 안내입니다. 순서대로 확인하면 포트 미수신, 브라우저의 별도 설정, 명령줄의 프록시 미사용, 클라이언트에 요청이 들어온 뒤 라우팅 규칙에 따라 직접 연결되는 경우를 구분할 수 있습니다.

시스템 프록시, 앱 연결 방식, 라우팅을 구분하세요

현재 노드와 라우팅 설정은 그대로 두고 구독, DNS, 코어를 한꺼번에 바꾸지 마세요. v2rayN 메인 창 하단에서 ‘시스템 프록시’를 열고 ‘시스템 프록시 자동 설정’을 선택합니다. 일부 버전에서는 트레이 아이콘을 마우스 오른쪽 버튼으로 클릭해 같은 메뉴를 열 수 있습니다. 여기서 ‘자동 설정’은 클라이언트가 시스템 프록시 설정을 적용한다는 뜻입니다. 모든 프로그램이 프록시를 사용한다는 뜻도, PAC 스크립트 모드라는 뜻도 아닙니다.

앱에서 프록시 설정 읽기로컬 포트에서 요청 수신라우팅 규칙 적용아웃바운드 연결 설정앱으로 응답 반환

시스템 프록시는 이를 지원하는 앱에 요청을 전달할 로컬 주소를 알려 줍니다. 라우팅은 요청이 코어에 들어온 뒤 프록시를 통해 내보낼지, 직접 연결할지를 결정합니다. 브라우저는 대개 현재 Windows 사용자의 프록시 설정을 읽지만, 명령줄 프로그램은 도구마다 다릅니다. 브라우저에서 확인한 결과를 터미널에도 그대로 적용할 수는 없습니다.

로컬 포트를 확인한 뒤 프록시를 명시해 테스트하세요

‘설정’ → ‘매개변수 설정’을 열고 로컬 수신 포트 항목을 찾으세요. 버전에 따라 ‘로컬 혼합 수신 포트’로 표시되거나 HTTP와 SOCKS 포트가 각각 나뉘어 있을 수 있습니다. 아래에서는 HTTP 프록시를 지원하는 로컬 포트 10808을 예로 듭니다. 명령에는 실제 포트 번호를 입력해야 하며, 예시 포트가 기본값이라고 가정하면 안 됩니다.

10808
예시 로컬 프록시 포트
127.0.0.1
루프백 주소
443
HTTPS 대상에서 주로 사용하는 포트

PowerShell에서 다음 명령을 실행하세요. 첫 번째 명령은 TCP 연결을 확인하고, 두 번째는 수신 중인 프로세스 번호를 표시하며, 세 번째는 curl이 로컬 HTTP 프록시에 연결하도록 합니다. Windows PowerShell 5.1에서 curl 별칭으로 인한 옵션 차이를 피하려면 curl.exe를 사용하세요.

Test-NetConnection -ComputerName 127.0.0.1 -Port 10808
Get-NetTCPConnection -LocalPort 10808 -State Listen |
  Select-Object LocalAddress, LocalPort, OwningProcess
curl.exe -q -v --connect-timeout 10 --max-time 30 --noproxy "localhost,127.0.0.1" --proxy http://127.0.0.1:10808 https://example.com/ -o NUL

-q는 첫 번째 옵션으로 지정해 curl의 기본 설정 파일을 건너뜁니다. --noproxy는 우회 목록을 로컬 주소로 제한해 기존 NO_PROXY 설정 때문에 테스트 도메인에 직접 연결되는 일을 방지합니다. example.com은 연결 확인용 예시입니다. 이후에는 같은 명령으로 실제 문제가 발생하는, 접근 권한이 있는 대상을 테스트하세요.

  1. TcpTestSucceeded가 False라면 먼저 포트 번호가 일치하는지, 코어가 실행 중인지, 시작 로그에 오류가 있는지 확인하세요.
  2. 포트에서 수신 중이라면 OwningProcess로 프로세스를 확인하세요. 필요하면 Get-Process -Id를 실행하고 뒤에 확인한 번호를 입력합니다. 포트에 연결할 수 있더라도 현재 v2rayN 코어가 수신 중이라고 단정할 수는 없습니다.
  3. curl이 127.0.0.1에 연결되었다고 표시하면 앱 요청이 로컬 프록시까지 도달한 것입니다. HTTP 프록시로 HTTPS에 연결하면 보통 CONNECT 터널 협상 정보도 표시됩니다.
  4. 대상 사이트에서 HTTP 응답을 받았다면 적어도 이번 요청이 응답을 반환한 것입니다. 원격 프록시를 통한 아웃바운드였는지는 라우팅 로그로 확인해야 합니다.

요약: 프록시를 명시한 테스트가 성공하면 시스템 설정을 확인하세요

같은 대상에 --proxy를 지정하면 접속되는데 브라우저에서는 실패한다면 노드와 코어 설정은 그대로 두세요. 구독을 다시 가져오기보다 브라우저가 프록시를 읽는 방식을 조정하는 편이 원인을 찾기 쉽습니다.

브라우저에서 프록시가 작동하지 않을 때: Windows 설정과 확장 프로그램 확인

Windows 11에서 ‘설정’ → ‘네트워크 및 인터넷’ → ‘프록시’ → ‘수동 프록시 설정’을 여세요. Windows 10에서는 보통 ‘설정’ → ‘네트워크 및 인터넷’ → ‘프록시’에 있습니다. 프록시 서버 주소와 포트가 v2rayN 설정과 일치하는지 확인하고, 예외 목록에 테스트 중인 도메인이 포함되어 있는지도 살펴보세요.

  1. 설정을 다시 적용하세요. v2rayN에서 ‘시스템 프록시 지우기’를 선택한 다음 ‘시스템 프록시 자동 설정’을 선택합니다. Windows 설정으로 돌아가 주소와 포트가 실제로 바뀌었는지 확인하세요. 클라이언트 메뉴의 상태만 바뀌었는지 확인해서는 안 됩니다.
  2. 프록시 관리 확장 프로그램을 잠시 사용 중지하세요. 브라우저의 확장 프로그램 페이지에서 프록시 설정을 제어하는 확장 프로그램을 끈 다음, 브라우저를 완전히 종료하고 다시 실행하세요. 일부 확장 프로그램은 시크릿 창에서도 실행할 수 있으므로 시크릿 창만으로는 원인을 배제하기 어렵습니다.
  3. 브라우저가 프록시를 가져오는 설정을 확인하세요. Edge와 Chrome은 보통 시스템 설정을 따르지만, 실행 옵션이나 조직 정책이 이를 덮어쓸 수 있습니다. Firefox에서는 ‘설정’ → ‘일반’ → ‘네트워크 설정’ → ‘설정’에서 ‘시스템 프록시 설정 사용’을 선택할 수 있습니다.
  4. 이전 프로세스와 연결을 정리하세요. 페이지를 저장한 뒤 브라우저 창을 모두 닫고 백그라운드 프로세스가 종료되었는지 확인한 다음 대상 페이지를 다시 요청하세요. 기존 탭을 새로고침하기만 하면 이전 연결을 계속 재사용할 수 있습니다.
  5. 설정이 저절로 바뀌는지 기록하세요. 포트를 설정하자마자 값이 되돌아간다면 다른 네트워크 도구, 시작 프로그램, 조직 정책을 확인하세요. 관리되는 기기에서는 관리자에게 정책을 확인하고, 설정을 반복해서 덮어쓰지 마세요.

브라우저에서 일반 웹페이지는 열리는데 특정 사이트만 문제가 있다면 해당 사이트의 라우팅, DNS, 인증서 오류를 확인하세요. 페이지에 403 또는 429가 표시되면 사이트에서 HTTP 응답을 반환한 것입니다. 접근 정책이나 요청 빈도 제한 때문일 수 있으므로 ‘시스템 프록시가 꺼져 있음’으로 단정하지 마세요.

터미널에서 프록시가 작동하지 않을 때: 먼저 프록시를 지정하고 프로세스 환경 변수를 설정하세요

먼저 앞에서 소개한 curl.exe --proxy로 테스트하세요. 성공하면 터미널에 환경 변수를 설정할지 결정합니다. Windows 시스템 프록시는 터미널 프로그램에 일괄 적용되는 스위치가 아닙니다. 일부 도구는 HTTP_PROXY와 HTTPS_PROXY를 읽고, 일부는 자체 설정을 사용하며, 또 다른 도구는 옵션으로 프록시를 명시해야 합니다.

PowerShell: 현재 창과 이후에 실행되는 하위 프로세스에만 적용

먼저 현재 변수 값을 확인해 기록한 다음 임시 설정을 적용하세요. 주소의 http://는 앱이 로컬 프록시에 연결할 때 사용하는 프로토콜을 나타냅니다. 대상 사이트가 HTTPS를 사용하더라도 로컬 HTTP 프록시 주소는 보통 이 형식으로 입력하고, CONNECT를 통해 터널을 만듭니다.

Get-ChildItem Env: |
  Where-Object Name -Match '^(HTTP_PROXY|HTTPS_PROXY|ALL_PROXY|NO_PROXY)$'

$env:HTTP_PROXY = 'http://127.0.0.1:10808'
$env:HTTPS_PROXY = 'http://127.0.0.1:10808'
$env:NO_PROXY = 'localhost,127.0.0.1'

curl.exe -q -v --connect-timeout 10 --max-time 30 https://example.com/ -o NUL

두 번째 테스트에서는 도구가 환경 변수를 읽는지 확인하기 위해 --proxy를 일부러 생략합니다. curl의 HTTP 프록시 변수에는 대소문자 관련 규칙이 있지만, Windows 환경 변수 이름은 대소문자를 구분하지 않습니다. 이 명령을 대소문자를 구분하는 시스템에서 사용하려면 도구 문서를 다시 확인하세요. HTTPS 테스트에서는 HTTPS_PROXY가 적용되는지 확인합니다.

명령 프롬프트: PowerShell 문법 대신 set 사용

set "HTTP_PROXY=http://127.0.0.1:10808"
set "HTTPS_PROXY=http://127.0.0.1:10808"
set "NO_PROXY=localhost,127.0.0.1"
curl.exe -q -v --connect-timeout 10 --max-time 30 https://example.com/ -o NUL

PowerShell의 웹 요청을 확인하려면 Invoke-WebRequest -Uri 'https://example.com/' -Proxy 'http://127.0.0.1:10808'처럼 프록시를 명시할 수 있습니다. 기본 프록시와 환경 변수를 읽는 방식은 PowerShell 및 런타임 버전에 따라 다릅니다. 한 도구에서 명령이 성공해도 다른 도구까지 성공한다고 보장할 수 없습니다.

실제 오류로 원인 찾기: 연결 거부, 터널 실패, 인증서 오류

오류가 브라우저, curl, 코어 로그 중 어디에서 발생했는지 먼저 구분한 다음 실패 지점을 확인하세요. 다음은 자주 보이는 오류의 일부이며, 전체 문구는 버전과 대상 사이트에 따라 달라질 수 있습니다. ‘시간 초과’만으로 구독이 만료되었다고 판단하거나 모든 오류를 DNS 문제로 돌리지 마세요.

ERR_PROXY_CONNECTION_FAILED

원인: 브라우저가 설정된 프록시에 정상적으로 연결하지 못했습니다. 프록시 포트의 수신이 중단되었거나 확장 프로그램이 설정을 바꾼 경우가 흔합니다.

해결: 브라우저에서 실제 사용하는 프록시 주소를 확인하고, 같은 포트에 Test-NetConnection을 실행한 뒤 수신 프로세스도 확인하세요.

curl: (7) Failed to connect

원인: TCP 연결을 설정하지 못했습니다. 오류에 127.0.0.1과 로컬 포트가 표시된다면 프록시에 도달하기 전에 실패한 것입니다.

해결: 코어 시작 로그, 수신 주소, 포트 사용 상태를 확인하세요. 원격 노드의 전송 매개변수부터 바꾸지 마세요.

ERR_TUNNEL_CONNECTION_FAILED

원인: 브라우저가 프록시를 통해 터널을 만들지 못했습니다. 포트 프로토콜이 맞지 않거나 프록시가 대상에 연결하지 못했을 수 있습니다.

해결: 입력한 포트가 HTTP 또는 혼합 수신 포트인지 확인한 다음 curl 상세 출력과 같은 시각의 코어 로그를 함께 살펴보세요.

curl: (60) SSL peer certificate or SSH remote key was not OK

원인: 인증서 또는 신뢰 체인 검증에 실패했습니다. 이 오류만으로 요청이 프록시를 전혀 거치지 않았다고 판단할 수는 없습니다.

해결: 시스템 시간, 대상 인증서, 관리 네트워크의 인증서 정책을 확인하세요. 인증서 검증을 끄는 방법을 장기적인 해결책으로 삼지 마세요.

로컬 포트에는 연결되지만 터널 설정 이후 요청이 진행되지 않는다면 대상 도메인, 노드 연결 상태, TLS 로그를 확인하세요. HTTP 프록시로 HTTPS 사이트에 접속하면 대상 호스트 이름은 프록시에서 처리합니다. SOCKS로 테스트할 때는 socks5://와 socks5h://의 도메인 조회 위치가 다르며, 후자는 프록시 측에서 조회합니다. 비교할 때 어떤 방식을 사용했는지 명확히 하세요. 두 테스트 결과를 완전히 같은 조건으로 간주해서는 안 됩니다.

요청이 v2rayN에 도달했다면 라우팅을 확인하고 연결 방식을 중복 적용하지 마세요

메인 창의 로그 영역을 열고 연결 정보를 표시할 수 있는 로그 수준에서 대상 페이지를 한 번만 새로고침한 뒤, 시각을 기준으로 도메인, 대상 포트, 아웃바운드 정보를 찾으세요. 로그는 선택한 코어가 출력하므로 코어와 버전에 따라 필드 이름이 다를 수 있습니다. 기록이 보이지 않는다고 해서 앱이 클라이언트에 들어오지 않았다고 단정할 수는 없습니다. 로그 수준이 충분하지 않을 수도 있습니다.

요약: 한 번에 연결 방식 하나 또는 규칙 하나만 바꾸세요

먼저 TUN을 끄고 시스템 프록시만 사용해 변수를 하나로 제한해 테스트하세요. 그런 다음 브라우저, 프록시를 명시한 명령, 환경 변수를 사용하는 명령의 결과를 각각 비교합니다. 특정 앱이 프록시를 지원하지 않는다고 확인한 뒤 TUN 사용을 검토하세요. 연결 방식을 여러 개 동시에 켜고 페이지가 열린다는 이유만으로 원인을 찾았다고 판단하지 마세요.

TUN은 가상 네트워크 어댑터, 권한, 라우팅 테이블을 사용할 수 있는 별도의 트래픽 연결 방식입니다. 프록시 설정을 읽지 않는 앱의 트래픽을 연결하는 데 도움이 될 수 있지만, 잘못된 노드 매개변수를 해결하거나 모든 네트워크 트래픽을 처리해 주지는 않습니다. 설정이 필요하면 먼저 TUN 모드 안내를 읽고, 현재 설정을 복구할 수 있도록 유지하세요.

재테스트가 끝나면 임시 변수를 정리하고 문제 해결 기록을 남기세요

먼저 테스트 전 라우팅, 로그 수준, 브라우저 확장 프로그램 상태를 복원하세요. 임시 변수에 원래 값이 없었다면 PowerShell에서 아래 명령으로 정리할 수 있습니다. 기존 값이 있었다면 삭제하지 말고 기록해 둔 원래 값으로 복원하세요. 현재 터미널을 닫으면 이번 프로세스에 설정한 변수는 보통 사라지지만, 이미 시작된 하위 프로세스에는 별도의 환경 값이 남아 있을 수 있습니다.

Remove-Item Env:HTTP_PROXY -ErrorAction SilentlyContinue
Remove-Item Env:HTTPS_PROXY -ErrorAction SilentlyContinue
Remove-Item Env:NO_PROXY -ErrorAction SilentlyContinue
  1. 환경 기록: Windows 버전, v2rayN 버전, 현재 코어와 버전, 로컬 수신 포트.
  2. 세 가지 결과 기록: 브라우저 접속, 프록시를 명시한 curl 접속, 환경 변수를 읽는 curl 접속의 성공 여부.
  3. 실패 단계 기록: 로컬 포트 연결, CONNECT 터널, TLS 검증, HTTP 응답, 코어의 원격 노드 연결 중 어디에서 실패했는지 기록하세요.
  4. 로그를 정리한 뒤 문의하세요: 시각과 오류 전후 맥락은 남기고, 구독 주소, 인증 정보, 공유 링크, 공개하면 안 되는 대상 정보는 가리세요.

클라이언트를 정상 종료할 때는 v2rayN이 시스템 프록시 설정을 정리하도록 하세요. 클라이언트가 비정상 종료된 뒤 브라우저에서 프록시 연결 오류가 발생하면 Windows 프록시 설정이 중지된 로컬 포트를 계속 가리키는지 확인하세요. 설치와 기본 설정은 연결 확인 절차를 참고하세요. 시스템 프록시와 라우팅 개념은 프록시 모드 안내에서 확인할 수 있습니다.

v2rayN 다운로드플랫폼 및 설치 파일 보기