v2rayN 창은 열리지만 노드를 활성화한 뒤 코어가 바로 종료되는 경우에 해당합니다. 먼저 한 번 실행했을 때의 오류 로그 전체를 보관하고, 포트·설정 파싱·코어 호환성·규칙 리소스 순으로 원인을 찾아보세요. 아래에 Windows 포트 조회 명령, JSON 수정 예시와 복구 확인 순서를 정리했습니다. 예시 포트는 10808이며, 실제 작업은 로그에 표시된 수신 주소를 기준으로 해야 합니다.
1. 코어 종료와 연결 시간 초과 구분하기
v2rayN은 그래픽 관리 프로그램이며, 프록시 연결은 호출된 코어가 처리합니다. 메인 창이 열려도 코어가 실행 중이라는 뜻은 아닙니다. 반대로 웹페이지가 열리지 않는다고 해서 코어 시작 오류인 것도 아닙니다. 먼저 메인 화면 아래의 로그 영역을 확인하세요. 실행 후 설정 읽기 오류나 수신 대기 실패가 나타나고 프로세스가 종료됐다면 이 글의 점검 절차를 따라가면 됩니다.
로그에 수신 대기 성공이 표시된 뒤 웹사이트에 접속할 때 i/o timeout이 발생한다면 노드 연결 상태, DNS, 라우팅 분기를 먼저 확인하세요. 실행 중 발생한 요청 오류를 시작 오류로 오인하지 말고, 코어가 정상적으로 시작되기 전에 시스템 프록시를 반복해서 변경하지 마세요. 시스템 프록시는 앱의 트래픽을 어디로 보낼지 정할 뿐, 코어의 JSON 구문 오류를 해결하지 못합니다.
-
현재 상태 기록하기
「도움말」→「정보」에서 v2rayN 버전을 기록하고, 시작 로그에서 실제 코어 이름과 버전을 확인하세요. 메뉴 이름은 UI 버전에 따라 다를 수 있으므로 현재 화면을 기준으로 확인해야 합니다.
-
오류 한 번 재현하기
현재 노드를 선택하고 Enter 키를 눌러 활성 서버로 지정하세요. 이번 실행 시간대의 로그를 확인하고 설정 읽기부터 종료까지 전체 내용을 보관하세요. 마지막의 「시작 실패」 한 줄만 캡처하면 원인을 찾기 어렵습니다.
-
가장 안쪽의 원인 찾기
failed to, 콜론 또는>로 이어지는 오류를 따라가며 포트, 필드 이름, 파일 경로 또는 줄·열 위치를 확인하세요. 상위 단계의 요약 메시지보다 이런 정보가 원인 파악에 더 유용합니다. -
한 번에 한 항목만 수정하기
설정이나 사용자 지정 구성을 먼저 백업한 뒤, 확인된 문제만 하나씩 수정하세요. 노드를 다시 활성화하고 새 로그에서 기존 오류가 사라졌는지 확인한 다음 다음 오류를 처리합니다.
2. 포트 충돌: PID로 수신 프로세스 찾기
오류에 listen tcp, bind 또는 address already in use가 있다면 먼저 로컬 수신 포트를 확인하세요. 아래 오류 문구는 유형을 구분하기 위한 예시이며, 전체 접두어는 시스템과 코어 버전에 따라 달라질 수 있습니다. Windows의 바인딩 오류는 포트 예약이나 보안 정책 때문일 수도 있으므로 bind가 보인다고 특정 프로세스가 포트를 점유했다고 단정하면 안 됩니다.
오류: address already in use
원인 및 해결: 코어가 수신 대기하려는 주소와 포트를 이미 다른 프로세스가 사용 중입니다. 해당 PID를 조회해 중복 실행된 코어인지 확인하세요. 중복 인스턴스를 정상 종료하거나 v2rayN의 인바운드 포트를 사용 가능한 포트로 변경합니다.
오류: Only one usage of each socket address (protocol/network address/port) is normally permitted.
원인 및 해결: Windows에서 흔히 나타나는 소켓 주소 충돌 메시지입니다. 이 메시지 앞에 표시된 주소와 포트를 조회하세요. 기본 포트만 확인해서는 안 됩니다.
Windows 터미널에서 아래 명령 두 개를 실행하세요. 첫 번째 명령은 10808이 포함된 TCP 기록을 찾습니다. LISTENING 행의 맨 오른쪽에서 PID를 확인한 다음, 두 번째 명령의 1234를 실제 PID로 바꾸세요. 원격 포트가 우연히 10808인 연결을 로컬 수신으로 오인하지 않도록 「로컬 주소」 열도 확인해야 합니다.
netstat -ano -p tcp | findstr ":10808"
tasklist /FI "PID eq 1234"
- 중복 프로세스: 먼저 트레이에서 다른 v2rayN 인스턴스를 정상 종료한 뒤 포트를 다시 조회하세요. 프로세스가 남아 있다면 작업 관리자에서 실행 파일 경로를 확인한 후 작업을 종료합니다.
- 다른 프로그램이 포트를 사용 중: 「설정」→「매개변수 설정」에서 로컬 인바운드 수신 포트 항목을 찾으세요. 10818을 사용할 수 있는지 확인한 뒤 기존 10808을 10818로 변경할 수 있습니다. 예시 값이므로 모든 컴퓨터에서 사용 가능하다고 보장할 수는 없습니다.
- 수동 설정도 함께 변경: 브라우저나 다른 프로그램에
127.0.0.1:10808을 직접 입력했다면 수신 포트를 바꾼 뒤 해당 설정도 업데이트해야 합니다. v2rayN의 시스템 프록시 메뉴를 사용하는 앱에는 시스템 프록시 설정을 다시 적용하세요. - 수신 프로세스가 조회되지 않음: 주소 점유가 아니라 접근 권한 거부가 로그에 표시된다면
netsh interface ipv4 show excludedportrange protocol=tcp로 예약 포트 범위를 확인할 수 있습니다. 이 문제 때문에 방화벽을 끄거나 시스템 예약 항목을 삭제하지 마세요.
3. JSON 구문 오류: 형식을 먼저 고친 뒤 프로토콜 필드 확인하기
사용자 지정 설정으로 시작하지 못한다면 먼저 JSON 파싱 단계에서 중단됐는지 확인하세요. 흔한 원인은 마지막에 불필요한 쉼표를 붙인 경우, 문자열에 한글 따옴표를 사용한 경우, 객체 괄호를 닫지 않은 경우, Windows 경로의 백슬래시를 이스케이프하지 않은 경우입니다. 일반 구독 노드는 대개 v2rayN이 실행 설정을 생성합니다. 설정을 직접 편집하지 않았다면 파일 전체를 감으로 다시 작성하기보다 구독 내용과 생성 과정을 확인하세요.
오류: invalid character '}' looking for beginning of object key string
원인 및 해결: 객체를 닫기 전에 불필요한 쉼표가 남아 있을 수 있습니다. 파서는 다음 필드 이름을 기다리는 상태입니다. 오류 위치 바로 앞 줄을 확인하고 마지막 쉼표를 지운 뒤 다시 검사하세요.
오류: unexpected EOF
원인 및 해결: 파일이 중간에 잘렸거나 닫는 따옴표, 중괄호 또는 대괄호가 빠졌을 수 있습니다. 로컬 편집기에서 괄호가 짝을 이루는지 확인하고, 필요하다면 이전 백업을 복원하세요.
아래는일부러 오류를 남긴 예시입니다. "warning" 뒤의 쉼표는 객체의 마지막 필드 뒤에 올 수 없습니다. 구문 설명을 위한 예시일 뿐, 실행 가능한 프록시 설정이 아닙니다.
{
"log": {
"loglevel": "warning",
}
}
이 쉼표를 삭제하면 해당 예시의 JSON 구문은 올바르게 됩니다. 하지만 구문이 맞는다고 코어 설정까지 유효한 것은 아닙니다. 필드 이름과 유형, 프로토콜 지원 범위를 계속 확인해야 합니다. 경로는 "C:\\Tools\\v2rayN\\rules"처럼 작성해야 하며 JSON 문자열에 백슬래시 하나만 그대로 넣으면 안 됩니다.
{
"log": {
"loglevel": "warning"
}
}
4. 알 수 없는 필드: 실제 코어와 설정 출처 확인하기
JSON 파싱은 성공했지만 코어가 특정 필드나 프로토콜을 지원하지 않는다면 설정에 맞는 코어와 버전을 확인해야 합니다. v2rayN 버전과 코어 버전은 별개입니다. 관리 프로그램을 업데이트해도 모든 코어가 함께 업데이트되는 것은 아닙니다. 로그에 표시된 실제 실행 파일과 버전을 기준으로 판단하세요.
Xray와 V2Fly는 설정 체계의 일부를 공유하지만 모든 항목을 서로 바꿔 쓸 수 있는 것은 아닙니다. 예를 들어 REALITY와 XTLS Vision은 Xray 관련 기능이므로 이런 설정이 포함된 구성을 V2Fly에 그대로 전달할 수 없습니다. Xray를 사용하더라도 오래된 코어는 최신 설정 항목을 인식하지 못할 수 있습니다.
| 로그 단서 | 우선 확인할 항목 | 확인 위치 |
|---|---|---|
unknown field | 필드 이름의 오타, 올바른 계층, 현재 코어의 지원 여부 | 노드 편집 창 또는 사용자 지정 설정 원본 파일 |
unknown config id | 인바운드 또는 아웃바운드 프로토콜 이름과 코어 지원 범위 | 설정의 protocol과 코어 선택 |
오류가 realitySettings를 가리킴 | 실제로 Xray를 호출하는지, 버전과 설정이 서로 맞는지 | 「설정」→「매개변수 설정」의 코어 관련 옵션 |
오류가 flow를 가리킴 | 노드 프로토콜, 흐름 제어 값과 서버 요구 사항이 일치하는지 | 노드 편집 창의 흐름 제어 항목 |
판단 순서: 코어를 먼저 확인한 뒤 필드 수정하기
오류가 노드에 필요한 전송 또는 보안 설정을 가리킨다면 코어가 해당 설정을 지원하는지 먼저 확인한 뒤 구성을 수정하세요. 시작 검사를 통과하려고 해당 필드를 바로 삭제하면 코어는 실행되지만 핸드셰이크에 실패할 수 있습니다.
- 「설정」→「매개변수 설정」에서 코어 관련 옵션을 찾아 현재 노드에 사용하는 코어를 확인하세요. UI 배치가 다르다면 시작 로그에 표시된 이름을 최종 기준으로 삼습니다.
- 「업데이트 확인」에서 해당 코어의 업데이트 항목을 사용해 버전 문제를 해결하세요. 업데이트 후 노드를 다시 시작하고 새 버전 로그를 확인해 실제로 업데이트가 적용됐는지 확인합니다.
- 직접 작성한 설정은 먼저 필드가 속한 객체를 확인하고 그다음 값의 유형을 확인하세요. 숫자, 문자열, 배열은 임의로 바꿔 쓸 수 없습니다. 알 수 없는 필드를 처리하는 방식은 파서마다 다를 수 있습니다.
- 구독 노드 중 하나만 실패하고 나머지는 정상적으로 시작된다면 전체 클라이언트를 초기화하지 말고 해당 노드의 프로토콜, 전송 방식과 보안 설정부터 비교하세요.
5. geo 파일 누락: 로그에 표시된 경로에서 규칙 리소스 복구하기
설정의 geoip: 및 geosite: 규칙에는 해당 리소스 파일이 필요한 경우가 많습니다. 규칙 초기화는 시작 단계에서 진행되므로 리소스가 없거나 읽기 권한이 부족하거나 파일 형식이 맞지 않으면 코어가 바로 종료될 수 있습니다. 로그에 파일 이름이 나타나면 실제로 읽으려는 경로를 확인하세요. 다운로드 폴더에 같은 이름의 파일이 있는지만 확인해서는 안 됩니다.
오류: failed to load GeoIP
원인 및 해결: GeoIP 리소스를 읽거나 파싱하지 못했습니다. 뒤에 이어지는 파일 경로와 세부 오류를 확인하고 파일이 있는지 살펴본 다음, 클라이언트의 Geo 파일 업데이트 기능으로 관련 리소스를 복구하세요.
오류: The system cannot find the file specified.
원인 및 해결: 앞부분에 geoip.dat 또는 geosite.dat가 표시됐다면 실제 경로에 해당 파일이 없는 것입니다. 전체 디렉터리 구조를 복원하거나 리소스 경로를 수정하세요. 빈 파일로 대신하면 안 됩니다.
- 읽으려는 대상 확인. 오류 메시지에서 파일 이름과 경로를 적어 두세요. 코어 설정, 규칙 리소스, 실행 파일 중 무엇을 읽으려는지 구분해야 합니다. 「파일을 찾을 수 없음」이라는 메시지가 항상 geo 문제를 뜻하는 것은 아닙니다.
- 디렉터리 구조 복원. 프로그램을 옮긴 직후라면 본 프로그램만 복사한 것은 아닌지 확인하세요. 설정을 백업한 뒤 관련 파일을 복원하고, 출처가 다른 리소스를 임의로 섞지 마세요.
- 리소스 업데이트 실행. 「업데이트 확인」에서 Geo 파일 관련 업데이트 항목을 찾아 업데이트가 끝날 때까지 기다린 다음 코어를 다시 시작하세요. UI에서 리소스 항목이 나뉘어 있다면 각각 업데이트됐는지 확인합니다.
- 항목 이름 확인. 파일이 있는데도 특정 분류를 찾을 수 없다는 메시지가 나타나면 라우팅 규칙의 분류 이름과 현재 데이터 파일의 내용을 비교하세요. 원래 존재하지 않는 분류 이름은 다시 다운로드해도 해결되지 않습니다.
6. 복구 후 확인: 수신 대기부터 요청 테스트까지
복구 여부는 창이 계속 열려 있는지가 아니라 같은 유형의 오류가 사라졌는지로 판단해야 합니다. 노드를 다시 활성화한 뒤 코어가 바로 종료되지 않는지 확인하고, 수신 포트를 점검한 다음 시스템 프록시를 다시 적용해 접속을 테스트하세요. 이 단계에서 TLS, DNS 또는 시간 초과 오류가 나타난다면 연결 단계에 진입한 것이므로 새 오류 유형에 맞춰 계속 점검합니다.
- 프로세스: 시작 후 종료 메시지가 반복되지 않고 코어 프로세스가 계속 실행됩니다.
- 수신 대기:
netstat -ano -p tcp | findstr ":10808"을 실행하세요. 포트 번호를 실제 설정값으로 바꾸고 로컬 주소가 예상대로 수신 대기 중인지 확인합니다. - 앱: 트레이의 「시스템 프록시」에서 「시스템 프록시 자동 구성」을 선택한 다음 브라우저에서 실제 요청을 보내 보세요. 프록시를 직접 설정한 앱은 주소와 포트도 확인해야 합니다.
- 설정 유지: 다른 노드로 전환한 뒤 다시 돌아와 수정 사항이 유지되는지 확인하세요. 오류가 다시 나타나면 자동으로 덮어쓰이는 생성 파일만 수정한 것은 아닌지 살펴봅니다.
매번 관리자 권한으로 실행하면 시작 오류를 해결할 수 있나요?
일반적인 해결책은 아닙니다. 로컬의 일반 고번 포트에서 수신 대기하는 데는 보통 관리자 권한이 필요하지 않습니다. 포트 충돌이나 JSON 오류도 관리자 권한으로 해결되지 않습니다. 먼저 TUN 모드를 끄고 일반 프록시 인바운드로 확인하세요. 로그에서 권한이나 가상 네트워크 어댑터 문제가 명확히 확인될 때만 해당 기능의 요구 사항에 따라 조치합니다.
구독을 업데이트한 뒤 실패합니다. 모든 노드를 삭제해야 하나요?
기존 구독 그룹은 유지하고 이전에 작동했던 노드부터 시도하세요. 새 노드만 실패한다면 프로토콜과 코어 요구 사항을 확인한 뒤 노드 편집 창을 살펴봅니다. 주소나 설정 출처가 잘못된 것을 확인한 경우에만 해당 그룹을 수정하면 됩니다. 모든 설정을 지울 필요는 없습니다.
로그에 구체적인 오류 없이 코어가 종료될 때는 어떻게 하나요?
시작 시간대에 코어 실행 파일 누락이나 보안 소프트웨어 차단 기록이 있는지 확인하고 프로그램 압축이 제대로 풀렸는지도 살펴보세요. 코어를 직접 실행해 진단해야 한다면 먼저 해당 코어의 명령 도움말을 확인한 다음 로그에 표시된 설정 파일로 테스트하세요. 다른 코어의 매개변수를 그대로 적용하지 마세요.
포트를 변경한 뒤 코어는 정상인데 브라우저에서 페이지가 열리지 않나요?
브라우저가 이전 포트를 계속 사용하도록 설정돼 있는지 확인하고 v2rayN의 시스템 프록시 설정을 다시 적용하세요. 요청이 이미 코어 로그에 나타난다면 노드 연결을 점검해야 합니다. 로컬 포트를 계속 바꾸지 마세요.