v2rayN에서 서버를 선택했지만 브라우저에서는 접속되고 터미널에서는 시간 초과가 발생하거나, 그 반대 상황인 경우에 유용합니다. 먼저 프록시를 명시한 명령어로 로컬 연결 지점을 확인한 다음, 브라우저의 프록시 설정 출처와 터미널 환경 변수를 각각 점검하세요. 마지막으로 라우팅과 로그를 살펴 문제를 찾습니다. 예시는 로컬 혼합 포트 10808을 사용합니다. 실행 전 클라이언트에 표시된 실제 포트로 바꿔야 합니다.
1. 시스템 프록시를 설정해도 모든 연결이 프록시를 거치는 것은 아닙니다
v2rayN에서 ‘시스템 프록시 설정’을 선택하면 운영체제의 관련 설정에 로컬 프록시 주소가 입력됩니다. 이 설정을 읽을지는 각 애플리케이션에 달려 있습니다. 브라우저는 대체로 시스템 프록시 설정을 읽지만, 많은 명령줄 도구는 환경 변수나 자체 설정 파일을 사용합니다. 따라서 브라우저에서 웹사이트가 열리더라도 터미널이 프록시를 거친다고 단정할 수 없습니다.
이 연결 과정에는 서로 독립적인 단계가 세 가지 있습니다. 애플리케이션이 프록시를 사용하는지, 로컬 포트가 요청을 받을 수 있는지, 코어가 어떤 아웃바운드 경로를 선택하는지입니다. V2Ray 또는 Xray는 코어 처리를 담당하고 v2rayN은 데스크톱에서 설정과 관리를 맡습니다. VMess, VLESS 등은 서버 연결 프로토콜이지 브라우저 프록시 유형에서 선택하는 항목이 아닙니다.
| 연결 방식 | 주요 사용 대상 | 주요 점검 항목 |
|---|---|---|
| 시스템 프록시 | 시스템 설정을 읽는 애플리케이션 | 수동 프록시, 자동 구성 스크립트, 우회 목록 |
| 환경 변수 | curl 등 명령줄 도구 | 변수 이름, 프로토콜 접두사, 현재 프로세스의 변수 상속 여부 |
| 애플리케이션별 설정 | 브라우저 확장 프로그램, 개발 도구 | 시스템 설정 또는 환경 변수를 덮어쓰는지 여부 |
| TUN 모드 | 가상 네트워크 어댑터와 라우팅이 처리하는 트래픽 | 시스템 라우팅, DNS, 제외 규칙 |
이 글에서는 먼저 애플리케이션 프록시 설정 문제를 분리해 확인하며, 첫 단계부터 TUN을 켜지는 않습니다. TUN이 이미 활성화되어 있다면 직접 연결 테스트도 TUN이 처리할 수 있습니다. 두 연결 방식을 구분하려면 기존 설정을 기록한 뒤 TUN을 잠시 끄고 결과를 비교하세요.
2. v2rayN의 수신 포트를 확인한 뒤 프록시를 명시해 테스트하세요
먼저 v2rayN 메인 화면에서 로컬 포트 정보를 확인하고, ‘설정’ → ‘매개변수 설정’에서 로컬 수신 설정을 살펴보세요. 버전에 따라 항목 이름과 기본값이 다를 수 있으므로 오래된 안내만 보고 HTTP 포트가 반드시 10809라고 단정하지 마세요. 아래 예시는 127.0.0.1:10808이 HTTP를 지원하는 혼합 연결 지점이라고 가정합니다. 실제 연결 지점이 SOCKS만 지원한다면 뒤에 나오는 SOCKS 명령어를 사용하세요.
-
코어가 실행 중인지 확인
메인 화면에서 사용할 서버를 선택하고, 로그에 시작 실패나 포트 충돌 메시지가 있는지 확인하세요. 구독 업데이트는 서버 정보를 갱신할 뿐, 연결이 정상적으로 수립되었다는 뜻은 아닙니다.
-
로컬 포트 확인
‘설정’ → ‘매개변수 설정’을 열어 실제 수신 포트와 지원하는 연결 유형을 기록하세요. 설정을 변경했다면 코어가 설정을 다시 불러왔는지도 확인합니다.
-
포트 수신 상태 확인
Windows PowerShell에서 아래 명령어를 실행하세요. 수신 중인 포트가 표시되지 않으면 브라우저 설정을 바꾸기 전에 코어 시작 문제부터 해결하세요.
-
프록시를 명시해 테스트
curl의
--proxy옵션으로 연결 지점을 직접 지정하세요. 이렇게 하면 도구가 어떤 프록시 설정을 읽는지에 대한 불확실성을 없앨 수 있습니다.
# Windows PowerShell
Get-NetTCPConnection -State Listen -LocalPort 10808
curl.exe -v --connect-timeout 10 --max-time 25 --proxy http://127.0.0.1:10808 --noproxy "localhost,127.0.0.1" https://example.com/ -o NUL
Windows에서는 이전 버전의 Windows PowerShell이 curl을 다른 명령어로 해석하지 않도록 curl.exe를 사용하세요. Linux와 macOS에서는 curl을 사용하고, 출력 대상을 NUL에서 /dev/null로 바꾸세요. 예시의 우회 목록에는 로컬 주소만 포함되어 있어, 기존 NO_PROXY 설정 때문에 대상 URL이 프록시를 우회하지 않습니다.
결론: 프록시를 명시한 요청이 성공하면 애플리케이션 설정을 점검하세요
로그에서 curl이 로컬 10808 포트에 연결되고 대상 사이트의 응답을 받았다면 터미널 변수나 브라우저의 재정의 설정을 우선 점검하세요. 로컬 포트 연결부터 실패한다면 수신 주소와 포트 또는 코어 시작 문제를 먼저 해결해야 합니다. 웹페이지의 상태 코드만으로 원격 프록시 서버를 통한 아웃바운드 연결 여부를 판단할 수는 없으므로 코어의 라우팅 기록도 확인하세요.
3. 브라우저 점검: 확장 프로그램, 수동 프록시, 자동 구성 확인
브라우저는 정상인데 터미널이 실패한다면 브라우저에만 별도로 프록시가 설정되어 있을 수 있습니다. 반대로 프록시를 명시한 curl은 성공하고 브라우저는 실패한다면 확장 프로그램이 이전 포트를 가리키는 것일 수 있습니다. 먼저 동일한 대상 URL을 정하고 브라우저의 현재 프록시 설정 출처를 기록한 뒤, 한 번에 하나씩 바꿔 비교하세요.
- v2rayN: 트레이 메뉴의 ‘시스템 프록시’에서 ‘시스템 프록시 자동 구성’을 선택한 다음, 운영체제에 실제로 입력된 주소와 포트를 확인하세요. 자동 구성 스크립트를 사용한다면 스크립트 규칙도 함께 점검해야 합니다.
- Windows: ‘설정’ → ‘네트워크 및 인터넷’ → ‘프록시’에서 ‘설정 스크립트 사용’과 ‘프록시 서버 사용’을 확인하세요. 다른 네트워크 도구가 설정을 반복해서 덮어쓰지 않도록 기존 설정을 기록해 두세요.
- Chrome: ‘설정’ → ‘시스템’ → ‘컴퓨터의 프록시 설정 열기’에서 시스템 프록시를 확인하세요. 그런 다음 ‘확장 프로그램’ → ‘확장 프로그램 관리’를 열고 프록시 전환 확장 프로그램을 잠시 사용 중지하세요.
- Firefox: ‘설정’ → ‘일반’ → ‘네트워크 설정’ → ‘설정’에서 ‘시스템 프록시 설정 사용’과 ‘수동 프록시 설정’ 중 어떤 항목이 선택되어 있는지 확인하세요. 수동 설정의 이전 포트는 시스템 설정을 바꿔도 자동으로 갱신되지 않습니다.
자동 구성 스크립트는 URL에 따라 프록시 연결이나 직접 연결을 선택할 수 있으며, 시스템 우회 목록에서 특정 도메인을 제외할 수도 있습니다. 특정 웹사이트 하나만 프록시를 거치지 않는다면 서버를 바꾸기 전에 대상이 이런 규칙에 해당하는지 확인하세요. 브라우저의 보안 DNS 설정은 일부 도메인의 이름 확인 방식에 영향을 주지만 프록시 설정과는 별개입니다.
4. 터미널 점검: http_proxy와 https_proxy 설정
시스템 프록시가 켜져 있어도 명령줄 도구가 로컬 연결 지점을 자동으로 사용하는 것은 아닙니다. 현재 터미널에서 변수를 임시로 설정해 테스트하고, 성공한 뒤에 사용자 설정에 저장할지 결정하세요. 아래 주소는 HTTP 프록시 또는 HTTP를 지원하는 혼합 연결 지점에 사용합니다. 대상이 HTTPS여도 프록시 주소의 접두사는 http://일 수 있습니다.
Windows PowerShell: 현재 세션에만 설정
$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"
Get-ChildItem Env: | Where-Object Name -Match 'proxy'
curl.exe -v --connect-timeout 10 --max-time 25 https://example.com/ -o NUL
$env:로 설정한 변수는 현재 PowerShell과 이후 실행되는 하위 프로세스에 적용되며, 이미 열려 있는 다른 터미널에는 적용되지 않습니다. 개발 도구에 변수를 상속시키려면 이 세션에서 도구를 실행하거나, 환경 변수를 영구 설정한 뒤 도구를 다시 실행하세요.
Linux 및 macOS: 현재 셸에서 변수 내보내기
export http_proxy='http://127.0.0.1:10808'
export https_proxy='http://127.0.0.1:10808'
export no_proxy='localhost,127.0.0.1'
env | grep -i proxy
curl -v --connect-timeout 10 --max-time 25 https://example.com/ -o /dev/null
https_proxy는 HTTPS 대상에 사용할 프록시를 지정하는 변수이며, 프록시 연결 지점이 TLS를 사용해야 한다는 뜻은 아닙니다. 일반 HTTP 연결 지점을https://127.0.0.1:10808로 잘못 입력하면 핸드셰이크 오류가 발생할 수 있습니다.- curl은 HTTP 프록시 변수로 소문자
http_proxy를 사용합니다. 대문자HTTP_PROXY만 설정하지 마세요. 대소문자를 구분하는 환경에서는 값이 서로 다른 변수가 중복 설정되어 있는지도 확인하세요. - 대상 주소가
no_proxy또는NO_PROXY규칙에 해당하면 프록시를 우회합니다. 특히*가 설정되어 있는지 확인하세요. 모든 대상이 직접 연결될 수 있습니다. - 그래픽 데스크톱에서 실행한 프로그램, 관리자 권한 프로세스, 백그라운드 서비스는 현재 셸의 변수를 상속하지 않을 수 있습니다. 일부 도구는 자체 프록시 설정도 사용하므로 실제 설정 우선순위를 확인해야 합니다.
여기서 사용하는 127.0.0.1은 v2rayN과 같은 네트워크 환경에 있어야 합니다. 컨테이너, 원격 SSH 세션, 일부 가상화 환경의 루프백 주소는 데스크톱 컴퓨터가 아니라 해당 환경 자체를 가리킵니다. 따라서 주소를 그대로 복사해서는 안 되며, 문제 해결을 위해 프록시 포트를 공용 네트워크에 개방해서도 안 됩니다.
5. HTTP, SOCKS, DNS 오류 구분
연결 지점이 SOCKS5만 지원하는데 HTTP 프록시로 사용하면 연결이 재설정되거나 프로토콜 오류가 발생할 수 있습니다. 먼저 로컬 연결 지점의 유형을 확인하고 해당하는 명령어를 사용하세요. 아래의 socks5h는 대상 도메인의 이름 확인을 프록시 측에 맡깁니다. 일반적인 socks5는 보통 curl이 로컬에서 도메인을 확인합니다.
# Windows: SOCKS5 연결 지점을 사용해 대상 도메인을 프록시 측에서 확인
curl.exe -v --connect-timeout 10 --max-time 25 --proxy socks5h://127.0.0.1:10808 --noproxy "localhost,127.0.0.1" https://example.com/ -o NUL
# Linux / macOS
curl -v --connect-timeout 10 --max-time 25 --proxy socks5h://127.0.0.1:10808 --noproxy "localhost,127.0.0.1" https://example.com/ -o /dev/null
오류: curl: (7) Failed to connect
원인: 로컬 포트가 수신 중이지 않거나 주소가 잘못되었거나 요청이 다른 네트워크 환경에서 실행된 경우가 많습니다. 해결 방법: 먼저 포트 수신 상태를 확인하고, 명령어의 루프백 주소가 실제로 v2rayN을 실행 중인 컴퓨터를 가리키는지 확인하세요.
오류: curl: (5) Could not resolve proxy
원인: 프록시 서버 주소를 확인할 수 없거나 환경 변수의 주소 형식이 잘못되었습니다. 해결 방법: 변수에 불필요한 문자가 섞였는지 확인하세요. 로컬 테스트에는 전체 주소 http://127.0.0.1:10808를 사용하세요.
오류: curl: (6) Could not resolve host
원인: 현재 이름 확인 경로에서 대상 도메인을 찾지 못했습니다. 요청이 실제로 직접 연결되었거나 SOCKS가 로컬에서 도메인을 확인했을 수 있습니다. 해결 방법: 상세 출력에서 프록시 사용 여부를 확인하고, socks5h로 비교 테스트한 뒤 코어의 DNS 로그를 살펴보세요.
오류: curl: (60) SSL certificate problem
원인: TLS 인증서 검증에 실패했습니다. 시스템 시간, 신뢰할 수 있는 인증서 또는 네트워크에서의 인증서 교체가 원인일 수 있습니다. 해결 방법: 시스템 시간을 맞추고 인증서 체인을 확인하세요. 인증서 검증을 계속 끄는 것은 프록시 문제의 해결책이 아닙니다.
오류 메시지의 마지막 부분에는 대상 주소와 더 구체적인 원인이 표시되는 경우가 많으므로 전체 내용을 보존하세요. HTTP 프록시에서 200 Connection established 응답을 받았다면 CONNECT 터널이 만들어졌다는 뜻일 뿐, 이후 TLS 핸드셰이크와 대상 콘텐츠 요청까지 성공했다는 의미는 아닙니다.
6. 요청이 코어에 도달한 뒤 라우팅과 서버 아웃바운드 확인
애플리케이션이 로컬 연결 지점에 연결되었다고 해서 요청이 반드시 원격 서버를 통해 나가는 것은 아닙니다. v2rayN의 라우팅 규칙에 따라 일부 도메인이나 IP는 직접 연결될 수 있습니다. 브라우저와 터미널이 서로 다른 도메인, 주소 체계 또는 리디렉션된 주소에 접속하면 결과가 달라질 수 있으므로 비교할 때는 전체 URL을 동일하게 유지하세요.
| 확인된 결과 | 우선 점검 항목 | 다음 조치 |
|---|---|---|
| 프록시를 명시하면 성공하지만 일반 curl은 실패 | 환경 변수와 우회 목록 | 현재 세션 변수를 출력하고 no_proxy 및 애플리케이션 설정 확인 |
| curl은 성공하지만 브라우저는 실패 | 브라우저의 독립 프록시 설정 | 프록시 확장 프로그램을 끄고 시스템 모드와 수동 포트 확인 |
| 연결 지점 기록은 있지만 아웃바운드 연결 시간 초과 | 서버 연결 가능 여부와 연결 매개변수 | 노드 주소, 포트, 전송 설정, 원격 서비스 상태 확인 |
| 요청이 직접 연결 아웃바운드 규칙과 일치 | 라우팅 규칙 적용 결과 | 도메인 또는 IP 규칙과 규칙 우선순위 확인 |
| 로컬 포트가 수신 중이지 않음 | 코어 시작 상태와 포트 충돌 | 시작 로그를 확인하고 설정 오류나 수신 포트 충돌 해결 |
테스트 중에는 로그 수준을 일시적으로 높여도 되지만, 유지 시간을 제한하세요. 로그를 공유하기 전에 구독 주소, 사용자 식별 정보, 접속 도메인 등 민감한 내용을 삭제하세요. 로그에 원격 핸드셰이크 또는 인증 실패가 명확히 표시되면 VMess, VLESS 등 노드 설정을 점검하세요. 이런 오류는 터미널이 시스템 프록시를 읽는지 여부와는 별개의 문제입니다.
결론: 연결 지점과 아웃바운드 증거를 함께 확인하세요
동일한 요청의 curl 상세 출력과 코어 로그를 보관하고, ‘어떤 로컬 포트에 연결했는지’와 ‘어떤 아웃바운드 규칙이 적용됐는지’를 각각 확인하세요. 두 가지가 모두 명확해진 뒤 애플리케이션 설정, DNS, 라우팅, 서버 중 어디에 문제가 있는지 판단하면 출구 주소만 보고 설정을 반복해서 바꾸는 일을 피할 수 있습니다.
7. 테스트가 끝나면 임시 설정 복원
터미널에 임시 환경 변수가 남아 있으면 v2rayN을 종료한 뒤에도 명령줄 도구가 이미 닫힌 포트에 연결을 시도할 수 있습니다. 이번 테스트에서 새로 만든 변수라면 아래 방법으로 삭제하세요. 기존에 회사 프록시나 개발 환경 설정이 있었다면 값을 무조건 지우지 말고 기록해 둔 설정으로 복원해야 합니다.
# Windows PowerShell: 현재 세션의 임시 변수 삭제
Remove-Item Env:http_proxy, Env:https_proxy, Env:no_proxy -ErrorAction SilentlyContinue
# Linux / macOS: 현재 셸의 임시 변수 삭제
unset http_proxy https_proxy no_proxy
- 같은 URL로 브라우저와 터미널을 다시 테스트해 결과가 예상과 일치하는지 확인하세요.
- 테스트 전에 사용 중지한 확장 프로그램, TUN, 자동 구성 스크립트를 복원하세요. 항목을 하나씩 다시 활성화하면서 문제가 재발하는지 확인합니다.
- 프록시를 계속 사용해야 한다면 검증을 마친 설정을 해당 사용자 환경이나 애플리케이션 설정에 저장하고 포트를 기록하세요.
- 이후 로컬 수신 포트를 변경할 때는 환경 변수와 브라우저의 수동 설정도 함께 갱신해 이전 설정이 계속 적용되지 않도록 하세요.
클라이언트 및 플랫폼 선택
기기의 운영체제에 맞는 클라이언트를 선택하고 데스크톱에서는 v2rayN을 사용하세요. 설치 후 실제 수신 포트를 확인하고 이 글의 안내에 따라 브라우저와 터미널을 각각 테스트하면 됩니다. 처음 설정한다면 사용 가이드부터 확인하세요.