시스템 프록시가 작동하지 않을 때: 브라우저는 프록시를 쓰지만 터미널은 직접 연결될 때 단계별 점검

브라우저와 터미널은 프록시를 사용하는 방식이 다릅니다. v2rayN 시스템 프록시, 포트, 환경 변수, TUN 모드를 상황별로 점검하는 방법을 안내합니다.

“웹페이지는 열리는데 터미널 명령은 계속 직접 연결되는” 현상은 대개 노드 자체의 문제가 아니라 애플리케이션마다 프록시 설정을 읽는 방식이 다르기 때문에 발생합니다. v2rayN은 코어를 실행한 뒤 로컬에서 SOCKS, HTTP 또는 혼합 프록시 포트를 수신 대기합니다. 시스템 프록시를 켜면 그중 하나의 진입점을 운영체제 설정에 등록할 뿐, 모든 프로세스의 트래픽을 해당 포트로 강제하지는 않습니다.

브라우저, 데스크톱 애플리케이션, PowerShell, 명령 프롬프트, Linux 셸은 시스템 프록시를 처리하는 방식이 서로 다릅니다. 문제를 점검할 때는 로컬 수신 포트가 존재하는지, 애플리케이션이 프록시 주소를 알고 있는지, 프록시 요청이 올바른 아웃바운드로 라우팅되는지 세 단계로 나눠야 합니다. 노드 지연 시간만 확인해서는 이 세 가지를 모두 점검할 수 없습니다.

이 글 한눈에 보기

이 글은 “브라우저는 정상인데 curl이나 패키지 관리자가 연결되지 않는” 경우와 “시스템 프록시는 켰지만 일부 프로그램이 계속 직접 연결되는” 경우에 적합합니다. 포트 수신, 시스템 프록시, 터미널 환경 변수, TUN 가로채기, 라우팅 로그의 다섯 단계를 따라가면 문제가 클라이언트 진입점, 애플리케이션 설정, 프록시 아웃바운드 중 어디에서 발생했는지 확인할 수 있습니다.

시스템 프록시, 로컬 포트, TUN부터 구분하기

v2rayN의 동작은 “코어 수신”과 “애플리케이션 연결”의 두 단계로 나눌 수 있습니다. 노드를 선택하고 서비스를 시작하면 Xray 또는 v2fly 코어가 먼저 로컬에 인바운드 포트를 만듭니다. 브라우저나 터미널이 이 포트로 요청을 보내야 이후 VMess, VLESS 등의 프로토콜 연결이 이루어집니다. 노드 프로토콜과 로컬 프록시 프로토콜은 같은 개념이 아닙니다. 원격 서버가 VLESS를 사용하더라도 터미널이 VLESS를 이해해야 하는 것은 아니며, 터미널은 보통 로컬 HTTP 또는 SOCKS 진입점에 연결합니다.

애플리케이션 요청 시작 프록시 설정 읽기 로컬 포트 연결 규칙 매칭 및 분기 프록시 아웃바운드

시스템 프록시는 운영체제의 프록시 설정을 적극적으로 읽는 애플리케이션에 주로 영향을 줍니다. 일반적인 브라우저는 이 설정을 읽기 때문에 v2rayN의 시스템 프록시를 켜면 웹페이지가 바로 정상화됩니다. 반면 많은 명령줄 도구는 자체 설정 파일이나 HTTP_PROXY, HTTPS_PROXY, ALL_PROXY 환경 변수만 읽으므로 터미널이 대상 주소에 직접 연결할 수 있습니다.

10808
일반적인 로컬 SOCKS 포트
10809
이전 설정에서 흔한 HTTP 포트
127.0.0.1
기본 로컬 수신 주소
5초
포트 테스트 권장 시간 제한

결론: 먼저 로컬 진입점을 확인한 뒤 원격 노드를 조정하세요

터미널이 127.0.0.1의 프록시 포트에 연결하지 못한다면 문제는 로컬 수신 또는 포트 입력 단계에 있습니다. 이때 VMess나 VLESS 노드를 계속 바꿔도 애플리케이션 연결 문제는 해결되지 않습니다.

v2rayN 시스템 프록시와 수신 포트 확인

먼저 v2rayN 메인 화면에서 현재 서버가 활성 노드로 설정되어 있고 하단 실행 상태에 지속적인 오류가 없는지 확인하세요. 그런 다음 로그를 열어 코어가 정상적으로 시작되었는지 확인합니다. 구독을 가져오거나 목록에서 행을 선택한 것만으로 프록시가 활성화된 것은 아닙니다. 구독은 노드 설정을 제공하고, 시스템 프록시는 해당 설정을 지원하는 애플리케이션을 로컬 진입점으로 연결합니다.

  1. 활성 노드 확인

    서버 목록에서 노드를 하나 선택한 뒤 마우스 오른쪽 버튼 메뉴에서 활성 서버로 설정하세요. 메인 화면 하단에 코어가 실행 중이라고 표시되는지 확인하고, 시작 실패나 설정 구문 분석 오류 상태에 머물러 있지 않은지 살펴보세요.

  2. 로컬 포트 확인

    「설정」→「매개변수 설정」→「기본 설정」을 열고 로컬 수신 주소, SOCKS 포트, HTTP 포트 또는 혼합 포트를 기록하세요. 이후 명령에는 이 화면에 표시된 실제 값을 사용해야 합니다.

  3. 프록시 모드 설정

    「시스템 프록시」를 열고 “시스템 프록시 자동 설정” 또는 현재 버전에 해당하는 활성화 항목을 선택하세요. 이전 수동 프록시 설정이 남아 있다면 먼저 “시스템 프록시 지우기”를 선택한 후 다시 활성화하세요.

  4. 라우팅 모드 확인

    「설정」→「라우팅 설정」에서 현재 규칙 집합을 확인하세요. 테스트 단계에서는 대상 도메인이 잘못된 직접 연결 아웃바운드로 전송되는 상황을 먼저 배제한 뒤, 확인이 끝나면 필요한 분기 설정을 복원할 수 있습니다.

  5. 대상 애플리케이션 재시작

    브라우저나 데스크톱 애플리케이션을 완전히 종료한 뒤 다시 실행하세요. 일부 프로그램은 시작할 때만 시스템 프록시를 읽으므로 실행 중에 v2rayN 스위치를 바꿔도 기존 연결이 즉시 갱신되지 않습니다.

Windows에서는 PowerShell로 포트가 수신 대기 중인지 확인할 수 있습니다. 예시의 포트를 v2rayN 화면에 표시된 값으로 바꾸세요:

Test-NetConnection 127.0.0.1 -Port 10808
Test-NetConnection 127.0.0.1 -Port 10809

결과의 TcpTestSucceededTrue이면 적어도 하나의 프로세스가 해당 포트의 연결을 수락하고 있다는 뜻입니다. 원격 노드가 반드시 정상이라는 의미는 아닙니다. 결과가 False라면 v2rayN으로 돌아가 코어 시작 상태, 포트 충돌, 보안 프로그램 규칙을 확인하세요. 터미널 환경 변수를 계속 설정하는 것은 다음 단계입니다.

브라우저는 정상인데 터미널이 직접 연결될 때의 해결 방법

터미널은 명령을 실행하는 환경일 뿐이며, 실제로 프록시를 읽는지는 각 프로그램이 결정합니다. curl, 패키지 관리자, 스크립트 런타임, 원격 다운로드 도구는 서로 다른 변수를 사용할 수 있습니다. 가장 확실한 방법은 먼저 단일 명령에 프록시를 명시하는 것입니다. 정상 작동을 확인한 뒤 현재 세션, 사용자 환경 또는 도구 자체 설정 파일에 저장할지 결정하세요.

먼저 curl에 프록시를 명시하세요

로컬 진입점이 HTTP 또는 혼합 프록시라면 다음 명령을 실행할 수 있습니다. --connect-timeout 5는 연결 단계의 대기 시간을 5초로 제한해 포트 거부와 원격 응답 지연을 구분하는 데 도움이 됩니다:

curl --proxy http://127.0.0.1:10809 --connect-timeout 5 https://example.com/

화면에서 10808이 SOCKS5 진입점임을 확인했다면 socks5h를 사용하세요. 끝의 h는 도메인 이름 해석도 프록시 측에서 처리한다는 뜻으로, 로컬 DNS 결과와 프록시 경로가 달라지는 문제를 피할 수 있습니다:

curl --proxy socks5h://127.0.0.1:10808 --connect-timeout 5 https://example.com/

현재 터미널 세션에 변수 설정

PowerShell에서 환경 변수는 현재 창과 해당 창에서 시작한 자식 프로세스에만 적용됩니다. 창을 닫으면 설정이 사라지므로 문제 해결이나 임시 작업에 적합합니다:

$env:HTTP_PROXY="http://127.0.0.1:10809"
$env:HTTPS_PROXY="http://127.0.0.1:10809"
$env:ALL_PROXY="socks5h://127.0.0.1:10808"

curl --connect-timeout 5 https://example.com/

macOS 또는 Linux 셸에서는 같은 이름의 변수를 사용할 수 있습니다. 일부 도구는 소문자 형식만 인식하므로 문제를 점검할 때는 대소문자 형식을 모두 설정할 수 있습니다:

export HTTP_PROXY="http://127.0.0.1:10809"
export HTTPS_PROXY="http://127.0.0.1:10809"
export ALL_PROXY="socks5h://127.0.0.1:10808"

export http_proxy="$HTTP_PROXY"
export https_proxy="$HTTPS_PROXY"
export all_proxy="$ALL_PROXY"

결론: 명시적 프록시가 성공하면 노드 경로는 대체로 정상입니다

--proxy 없이 실행한 명령은 실패하지만 프록시 매개변수를 붙이면 성공한다면, 대개 터미널이 프록시 설정을 읽지 않은 것입니다. 이때는 환경 변수나 도구 설정을 확인해야 하며 구독을 다시 가져올 필요는 없습니다.

환경 변수가 계속 적용되지 않을 때 항목별 확인

변수 이름이 올바르다고 해서 모든 도구가 해당 변수를 사용하는 것은 아닙니다. 일부 프로그램은 자체 설정을 우선하고, 일부는 HTTP 프록시만 지원하며, 실행 후 변수 값을 캐시하는 프로그램도 있습니다. 같은 터미널 창에서 변수 값을 확인한 직후 요청을 보내야 “새 창에 상속되지 않은 문제”와 “프록시 서버를 사용할 수 없는 문제”를 혼동하지 않을 수 있습니다.

오류:curl: (7) Failed to connect to 127.0.0.1 port 10809

원인 및 해결: 지정한 포트에서 수신 중인 프로세스가 없거나 v2rayN이 로컬 포트를 변경했습니다. 「설정」→「매개변수 설정」→「기본 설정」으로 돌아가 실제 포트를 확인하고, 코어를 재시작한 뒤 다시 테스트하세요.

오류:curl: (5) Could not resolve proxy: 127.0.0.1:10809

원인 및 해결: 프록시 변수 형식에 불필요한 따옴표, 공백 또는 잘못된 프로토콜 접두사가 포함되었을 수 있습니다. 값을 http://127.0.0.1:10809로 완전히 작성하고 호스트와 포트만 입력하지 마세요.

오류:connection reset by peer

원인 및 해결: 로컬 포트는 연결을 수락했지만 원격 경로, 전송 계층 또는 라우팅 아웃바운드가 중단되었습니다. 정상 작동이 확인된 노드로 전환하고, v2rayN 로그에서 대상 도메인에 해당하는 아웃바운드와 오류 발생 시간을 확인하세요.

오류:proxy CONNECT aborted

원인 및 해결: 도구가 HTTP 프록시 방식으로 호환되지 않는 SOCKS 진입점에 연결했습니다. 클라이언트에 표시된 HTTP 또는 혼합 포트를 사용하거나 명령의 프록시 프로토콜을 socks5h://로 바꾸세요.

현재 세션에서 읽은 값 확인

# PowerShell
Get-ChildItem Env:HTTP_PROXY
Get-ChildItem Env:HTTPS_PROXY
Get-ChildItem Env:ALL_PROXY

# macOS 또는 Linux 셸
env | grep -i proxy

특정 명령 하나만 작동하지 않고 curl --proxy는 이미 성공했다면 해당 도구의 프록시 설정 우선순위를 확인하세요. 시스템 프록시, 환경 변수, 도구 설정에 서로 다른 포트를 동시에 입력하면 요청이 실제로 어느 진입점으로 들어갔는지 로그에서 판단하기 어려워집니다.

더 많은 프로그램을 가로채야 할 때 TUN 모드 사용

TUN 모드는 가상 네트워크 인터페이스를 통해 더 많은 IP 트래픽을 캡처하므로 각 애플리케이션이 시스템 프록시를 직접 읽을 필요가 없습니다. 따라서 대상 프로그램이 시스템 프록시를 명확히 무시하거나 환경 변수를 설정할 수 없거나 여러 명령줄 프로세스를 한꺼번에 제어해야 할 때는 프로그램마다 설정하는 것보다 TUN이 직접적입니다. 다만 TUN이 바꾸는 것은 트래픽 진입점이며 노드 매개변수, 인증서 도메인, DNS, 라우팅 규칙을 자동으로 수정하지는 않습니다.

프로그램 연결 수립 TUN 트래픽 수신 DNS 조회 라우팅 규칙 매칭 아웃바운드 선택
  1. 먼저 일반 HTTP 또는 SOCKS 진입점이 명시적 프록시 요청을 정상적으로 처리하는지 확인하세요.
  2. v2rayN의 TUN 관련 설정에서 가상 네트워크 어댑터 모드를 활성화하고, 시스템 안내에 따라 네트워크 인터페이스 생성에 필요한 권한을 허용하세요.
  3. 라우팅 규칙에서 로컬 네트워크, 루프백 주소, 필요한 로컬 서비스가 직접 연결로 유지되는지 확인하세요.
  4. 터미널 요청을 다시 테스트하면서 로그의 인바운드 유형, 대상 주소, 아웃바운드 태그를 확인하세요.
  5. 전체 네트워크가 끊기면 먼저 TUN을 끄고 시스템 기본 경로가 복구되는지 확인한 뒤 DNS와 가상 인터페이스 상태를 점검하세요.

TUN은 시스템 프록시를 읽지 않는 프로그램을 처리하는 데 적합하지만, 브라우저와 터미널의 동작이 다르다고 처음부터 켤 필요는 없습니다. 명시적 프록시 명령으로 로컬 포트 연결 여부, 프로토콜 접두사, 노드의 아웃바운드 수립 여부를 더 빠르게 확인할 수 있습니다. 이 기본 항목들이 정상이어야 TUN 문제 해결도 명확한 출발점을 갖습니다.

증상에 따라 라우팅, DNS, 구독 문제 확인

브라우저와 터미널이 모두 v2rayN을 거치는데도 결과가 다르면 도메인 조회와 라우팅 매칭을 계속 확인해야 합니다. 브라우저는 자체 캐시를 사용하고 터미널은 시스템 DNS를 호출할 수 있습니다. 두 환경에서 얻은 대상 주소가 다르면 서로 다른 geoip, 도메인 또는 사설 주소 규칙에 매칭될 수도 있습니다.

증상: 도메인은 실패하지만 대상 IP에 직접 접속하면 응답함

원인 및 해결: 먼저 DNS를 확인하세요. socks5h를 사용해 프록시 측에서 도메인을 조회하게 하고, v2rayN 로그에서 도메인이 예상한 주소로 해석되었는지 확인하세요.

증상: 일부 도메인은 정상인데 일부 도메인은 계속 직접 연결됨

원인 및 해결: 현재 라우팅 규칙이 도메인, IP 지역 또는 사설 네트워크 대역에 따라 직접 연결 아웃바운드를 선택할 수 있습니다. 「설정」→「라우팅 설정」을 열고 규칙 순서와 대상 아웃바운드를 확인하세요.

증상: 구독 업데이트 후 포트가 갑자기 바뀜

원인 및 해결: 구독은 일반적으로 서버 항목을 업데이트하며 로컬 수신 포트를 직접 결정하지 않습니다. 클라이언트 설정을 함께 가져왔거나 이전 설정을 복원했는지 확인한 뒤 환경 변수의 포트를 동일하게 수정하세요.

구독 링크는 노드 목록을 제공하므로 구독을 업데이트한 뒤에도 활성 서버를 선택해야 합니다. 노드 목록은 정상적으로 갱신되었지만 코어 로그에 설정을 시작할 수 없다고 표시된다면, 시스템 프록시가 켜져 있어도 브라우저 요청을 정상 작동하지 않는 로컬 진입점으로 보낼 뿐입니다. 먼저 시작 로그에 표시된 첫 번째 설정 오류를 해결하세요.

테스트 결과 우선 확인할 위치 다음 단계
로컬 포트 테스트 실패 코어 상태, 포트 충돌 코어를 재시작하고 로그 확인
명시적 프록시는 성공하지만 일반 명령은 실패 환경 변수, 도구 설정 프록시 주소와 프로토콜 통일
HTTP는 성공하지만 SOCKS는 실패 진입점 유형, 포트 입력 화면에서 SOCKS 포트 확인
도메인은 실패하고 IP는 응답함 DNS와 도메인 라우팅 socks5h 사용 및 로그 확인
모든 진입점 연결은 성공하지만 요청이 중단됨 노드, 전송 계층, 원격 아웃바운드 검증된 노드로 전환해 비교

문제 해결 후 검증 및 복구

문제를 해결한 뒤 웹페이지 하나만으로 결과를 판단하지 마세요. 로컬 포트, 명시적 프록시, 일반 터미널 요청, 브라우저의 네 가지를 모두 확인하고 v2rayN을 종료한 후 시스템 프록시가 정상적으로 제거되는지도 확인하세요. 이렇게 해야 현재 창에서는 정상처럼 보이지만 시스템에 이전 포트가 남아 있는 상황을 피할 수 있습니다.

  1. 수신 포트 재테스트

    Test-NetConnection 또는 이에 준하는 도구로 현재 포트에 연결할 수 있는지 확인하고, 테스트 포트가 매개변수 설정의 값과 완전히 일치하는지 대조하세요.

  2. 명시적 요청 실행

    HTTP 또는 socks5h 진입점을 각각 사용해 curl --proxy를 한 번씩 실행하고, 로컬 진입점과 프록시 경로가 모두 요청을 처리할 수 있는지 확인하세요.

  3. 일반 요청 실행

    명령에서 명시적 프록시 매개변수를 제거하고 현재 세션의 환경 변수를 통해 다시 요청하세요. 성공해야 터미널 프록시 설정이 실제로 적용되었다고 판단할 수 있습니다.

  4. 분기 로그 확인

    같은 시간대의 액세스 로그를 확인해 대상 도메인이 예상한 규칙에 매칭되고 프록시 또는 직접 연결 아웃바운드로 전송되었는지 확인하세요.

  5. 종료 후 복구 테스트

    v2rayN에서 먼저 시스템 프록시를 지운 다음 클라이언트를 종료하세요. 브라우저와 시스템 네트워크가 종료된 127.0.0.1 포트를 계속 가리키지 않는지 확인하세요.

전체 점검 순서는 한 문장으로 줄일 수 있습니다. 먼저 로컬 포트가 수신 중인지 확인하고, 명시적 프록시로 경로를 검증한 다음 터미널 환경 변수를 설정하고, 마지막으로 TUN, DNS, 복잡한 라우팅을 확인하세요. 브라우저가 프록시를 사용한다는 것은 브라우저가 하나의 진입점을 정상적으로 읽었다는 뜻일 뿐, 모든 프로세스가 제어되고 있다는 의미는 아닙니다.

자주 묻는 질문

시스템 프록시를 켰는데 PowerShell은 왜 계속 직접 연결되나요?

PowerShell에서 실행하는 명령이 Windows 시스템 프록시를 반드시 읽는 것은 아닙니다. 먼저 curl --proxy로 확인한 다음 현재 세션에 HTTP_PROXY, HTTPS_PROXY 또는 ALL_PROXY를 설정하세요.

10808과 10809 중 어느 포트를 선택해야 하나요?

일반적인 포트 번호만 보고 추측하지 마세요. v2rayN의 「설정」→「매개변수 설정」→「기본 설정」을 열고 실제 진입점 유형에 따라 선택하세요. HTTP 도구는 HTTP 또는 혼합 진입점에 연결하고, SOCKS 도구는 SOCKS 진입점에 연결해야 합니다.

환경 변수를 영구적으로 저장해야 하나요?

먼저 현재 세션에만 설정하는 것이 좋습니다. 포트가 장기간 고정되고 도구에 실제로 필요한지 확인한 뒤 사용자 환경이나 셸 설정에 저장하고, v2rayN 포트를 변경할 때 함께 업데이트하세요.

TUN 모드를 켠 뒤에도 시스템 프록시가 필요한가요?

실제 트래픽을 가로채야 하는 범위에 따라 다릅니다. TUN은 시스템 프록시를 읽지 않는 트래픽도 더 많이 캡처할 수 있지만, 테스트할 때는 잘못된 포트를 가리키는 환경 변수를 함께 유지하지 않는 것이 좋습니다. 먼저 하나의 진입점만 검증한 뒤 애플리케이션 요구에 따라 조합하세요.

v2rayN 다운로드