2026-10-03 · 문제 해결 · 약 12분

v2rayN 코어 실행 오류 해결: Xray 로그로 설정 문제 찾기

로그 단계별로 시작 오류를 분석하고 포트 충돌, JSON 문법 오류, geo 파일 누락, 필드 오타 등 주요 원인과 해결 방법을 안내합니다.

이 글의 핵심 내용

이 글은 Windows에서 v2rayN과 Xray 코어를 사용하다 시작 오류가 발생한 경우에 적합합니다. 먼저 전체 시작 로그를 보관한 뒤 설정 읽기, 로컬 포트, 라우팅 리소스, 필드 호환성을 차례로 확인하고, 설정 테스트와 실제 요청으로 각각 검증합니다. 글에 나오는 포트는 예시이며 설치 환경의 기본값을 의미하지 않습니다.

1. 코어 종료와 네트워크 요청 실패 구분하기

v2rayN은 관리 인터페이스이고, Xray는 프록시 설정을 실행하는 코어입니다. 인터페이스가 열린다고 코어까지 정상 실행된 것은 아닙니다. 반대로 특정 웹사이트의 연결 시간이 초과됐다고 해서 코어 시작에 실패한 것도 아닙니다. 코어 시작 문제라면 로컬 설정과 실행 환경을 확인하고, 요청 실패라면 노드, DNS, 원격 연결 경로를 점검해야 합니다.

화면에 표시된 마지막 메시지만 보고 판단하지 마세요. 먼저 메인 창의 정보 또는 로그 영역을 열어 이전 기록을 지운 다음, 현재 활성 설정을 재시작하거나 다시 실행하고 설정 읽기부터 프로세스 종료까지의 로그를 연속으로 보관하세요. 로그 메뉴 이름은 배포 버전에 따라 다를 수 있으므로 실제 인터페이스를 기준으로 확인해야 합니다.

설정 읽기 필드 분석 리소스 로드 포트 수신 대기 요청 처리

2. 로그 단계와 오류 흐름으로 원인 찾기

Xray 로그 설정에는 보통 debug, info, warning, error, none이 사용됩니다. none은 일반 로그 출력을 끄는 설정이므로 임시 점검에는 적합하지 않습니다. 일반적인 확인에는 info를 사용하고 요청 경로가 불분명할 때만 잠시 debug로 높이세요. 점검이 끝나면 원래 설정으로 되돌려 연결 세부 정보가 과도하게 쌓이지 않도록 합니다.

관련 옵션을 제공하는 v2rayN 버전에서는 「설정」→「매개변수 설정」에서 로그 관련 항목을 찾아 저장한 뒤 현재 설정을 다시 시작할 수 있습니다. 사용자 지정 JSON을 쓰는 경우에는 인터페이스 설정이 JSON을 덮어쓴다고 단정하지 말고 파일의 log 섹션도 확인하세요. 설정을 분석하는 단계에서 발생한 오류는 프로세스 콘솔에만 출력될 수도 있으므로 인터페이스의 코어 출력도 함께 보관해야 합니다.

단계 또는 출력확인할 수 있는 내용다음 조치
debug세부 실행 과정과 라우팅 경로 확인문제를 한 번만 재현해 기록한 뒤 원래 단계로 되돌리기
info시작 및 일반 실행 정보 기록코어 버전, 설정 경로, 시작 과정 확인
warning일회성 연결 또는 실행 오류일 수 있음발생 시점과 프로세스 상태를 함께 확인해 실제 종료 여부 판단
error심각한 처리 오류 기록단계 이름만 복사하지 말고 오류 흐름 전체 확인
콘솔에 표시된 시작 오류설정 초기화가 완료되지 않았을 수 있음경로, 문법, 리소스 로드 실패부터 확인

오류 흐름에서는 여러 문맥이 >로 연결되는 경우가 많습니다. 아래는 전형적인 구조를 보여주는 예시이며, 실제 모듈 접두사와 문구는 코어 버전에 따라 달라질 수 있습니다. 바깥쪽 메시지는 ‘로드 실패’를 설명하고, 안쪽 메시지는 ‘설정 내용을 읽지 못함’을 가리키며, 가장 안쪽에 문법 오류의 직접적인 단서가 나옵니다.

Failed to start: main: failed to load config files: [config.json]
> infra/conf/serial: failed to read config file
> invalid character '}' looking for beginning of object key string

결론: 가장 안쪽의 조치 가능한 오류부터 수정하세요

이런 오류 흐름이 보이면 DNS를 바꾸거나 노드를 전환하기 전에 닫는 중괄호 앞에 쉼표가 남아 있는지 확인하세요. 수정한 뒤 다시 시작하고 새 로그에 나타나는 다음 문제를 처리하면 됩니다.

3. 포트 충돌: 수신 주소와 점유 프로세스 확인

로컬 인바운드는 주소와 포트에 바인딩해야 합니다. 두 프로세스가 같은 수신 지점을 동시에 사용하는 것은 일반적으로 불가능합니다. 중복 실행된 코어, 다른 프록시 프로세스, 같은 설정 안에 중복 정의된 인바운드가 충돌을 일으킬 수 있습니다. 로그에 나온 실제 포트를 확인하고 튜토리얼의 기본값을 추측해 사용하지 마세요.

10808
이 글에서 예시로 사용하는 로컬 인바운드 포트
10809
이 글에서 예시로 사용하는 두 번째 수신 포트
127.0.0.1
이 컴퓨터에서만 접속할 수 있는 루프백 주소

오류: Only one usage of each socket address (protocol/network address/port) is normally permitted.

원인: Windows에서 흔히 볼 수 있는 주소 바인딩 충돌 메시지입니다. 코어가 사용하려는 포트가 이미 점유된 상태입니다.

해결: 해당 포트를 수신 중인 프로세스를 확인하고 용도를 파악한 뒤 중복 프로세스를 정상 종료하세요. 또는 로컬 인바운드 포트를 변경하고 앱의 프록시 설정도 함께 수정하세요.

아래 명령은 PowerShell에서 예시 포트 10808의 TCP 수신 프로세스를 확인합니다. 먼저 프로세스 이름과 경로를 확인한 다음 종료 여부를 결정하세요. 프로세스 번호만 보고 강제 종료하지 마세요.

Get-NetTCPConnection -State Listen -LocalPort 10808 |
  Select-Object LocalAddress, LocalPort, OwningProcess

Get-NetTCPConnection -State Listen -LocalPort 10808 |
  ForEach-Object { Get-Process -Id $_.OwningProcess } |
  Select-Object Id, ProcessName, Path
  1. 점유 프로세스가 이전 Xray 실행 파일이라면 해당 클라이언트에서 정상 종료하세요. 프로세스가 끝난 것을 확인한 뒤 v2rayN을 다시 시작합니다.
  2. 계속 실행해야 하는 다른 프로그램이 포트를 사용 중이라면 로컬 인바운드 설정에서 비어 있는 포트를 선택하세요. 사용자 지정 설정을 쓰는 경우 모든 inbounds도 확인해 포트가 중복 바인딩되지 않았는지 점검해야 합니다.
  3. 포트를 변경한 뒤 브라우저의 수동 프록시 설정과 시스템 프록시가 여전히 이전 포트를 가리키는지 확인하세요. 코어가 정상 시작돼도 앱이 이전 포트에 연결하면 다른 유형의 연결 오류가 발생합니다.
  4. forbidden by its access permissions 메시지가 나와도 포트 충돌이라고 단정할 수는 없습니다. netsh interface ipv4 show excludedportrange protocol=tcp로 시스템 예약 범위를 확인하고 보안 정책도 함께 점검하세요.

4. JSON 문법 오류: 실제 시작 파일부터 테스트하기

노드 편집 화면에서 저장에 성공했다고 사용자 지정 조각까지 모두 유효한 설정으로 합쳐지는 것은 아닙니다. 흔한 오류로는 마지막 항목 뒤의 불필요한 쉼표, 따옴표 대신 입력한 스마트 따옴표, 닫는 따옴표가 빠진 문자열, Windows 경로의 백슬래시를 JSON 문자열에 그대로 입력한 경우가 있습니다. 경로에는 슬래시를 사용하거나 문자열 안의 백슬래시를 \\로 입력하세요.

오류: unexpected EOF

원인: 파서는 예상된 내용이 끝나기 전에 파일 끝에 도달했습니다. 객체, 배열 또는 문자열이 닫히지 않았거나 내보낸 파일이 잘렸을 수 있습니다.

해결: 파일 끝부분과 최근 수정한 위치를 확인하고 구조를 완성한 뒤 다시 테스트하세요. 파일 끝에 중괄호를 기계적으로 덧붙이는 방식으로 해결하려 하지 마세요.

오류: invalid character '}' looking for beginning of object key string

원인: 객체의 쉼표 뒤에 유효한 다음 키 이름이 없습니다. 마지막 필드 뒤에 쉼표가 남아 있을 때 자주 발생합니다.

해결: 불필요한 쉼표를 삭제하고 키 이름을 영문 큰따옴표로 감쌌는지 확인한 뒤 파일 전체의 설정을 테스트하세요.

Xray 실행 파일이 있는 폴더에서 PowerShell을 열고, 이번에 실제로 사용하는 설정 사본의 이름을 config.json으로 지정한 다음 아래 명령을 실행하세요. 파일이 다른 곳에 있다면 실제 전체 경로를 사용해야 합니다. 오래된 백업 파일만 테스트해서는 v2rayN이 방금 생성한 시작 설정을 검증할 수 없습니다.

.\xray.exe version
.\xray.exe run -test -config .\config.json

run -test는 현재 코어가 설정을 불러올 수 있는지 확인하는 명령입니다. 정상적인 포트 수신 테스트나 원격 연결 테스트를 대신하지는 않습니다. 수동 테스트에서는 클라이언트와 동일한 리소스 디렉터리 및 환경 변수를 사용해야 합니다. 그렇지 않으면 테스트에서 geo 파일을 찾지 못해도 클라이언트 시작 시에도 못 찾는다는 뜻은 아닙니다. 자동 생성 파일은 다음 시작 때 덮어써질 수 있으므로 최종 수정은 노드 편집 항목, 라우팅 설정 또는 사용자 지정 설정 원본에 반영하세요.

5. geo 파일 누락: 파일 경로와 규칙 분류 확인

geoip:private와 geosite:cn은 설정에 적었다고 자동으로 적용되는 일반 텍스트가 아닙니다. 관련 규칙을 불러올 때 Xray는 해당 데이터 파일을 읽어야 합니다. 파일 누락, 잘못된 실행 디렉터리, 잘못 지정된 리소스 경로, 존재하지 않는 분류로 인해 설정을 구성하지 못할 수 있습니다. JSON만 다른 디렉터리에 복사하면 필요한 파일을 빠뜨리기 쉽습니다.

오류: failed to load GeoIP

원인: 이 문구가 포함된 오류 흐름은 GeoIP 규칙 로드 실패를 가리킵니다. 데이터 파일이 없거나 읽을 수 없거나 분류가 일치하지 않을 수 있습니다.

해결: 뒤이어 나오는 파일 이름, 시스템 오류 또는 분류 이름을 확인하고 리소스 디렉터리, 읽기 권한, 규칙 내용을 각각 점검하세요.

오류: The system cannot find the file specified.

원인: 같은 오류 흐름에서 geosite.dat 또는 geoip.dat를 명시적으로 가리킨다면 해당 파일을 찾지 못한 것입니다.

해결: 클라이언트에서 사용하는 리소스 디렉터리에 데이터 파일을 복구하고 사용자 지정 실행 환경에서 잘못된 리소스 경로를 지정하지 않았는지 확인하세요.

6. 필드 이름과 구조: 유효한 JSON도 설정 오류일 수 있습니다

JSON 문법 검사를 통과했다는 것은 괄호와 따옴표 등의 구조를 읽을 수 있다는 뜻일 뿐, 필드 위치와 값이 올바르거나 코어 기능과 호환된다는 의미는 아닙니다. 특히 복사한 설정 조각이 어떤 코어의 설정 형식인지 확인하세요. v2rayN 인터페이스 설정과 Xray 기본 JSON은 형식이 다르므로 인터페이스 설정 파일을 그대로 Xray에 전달해 실행할 수 없습니다.

라우팅을 예로 들면 domainStrategy는 routing에 속하며 rules 안의 개별 규칙에 속하지 않습니다. 아래는 라우팅 조각만 보여주는 예시입니다. 전체 설정에 direct라는 이름의 직결 아웃바운드가 정의되어 있고 필요한 geo 데이터를 읽을 수 있다고 가정합니다. 단독으로 시작할 수 있는 완전한 설정은 아닙니다.

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "ip": ["geoip:private"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "domain": ["geosite:cn"],
        "outboundTag": "direct"
      }
    ]
  }
}

결론: 설정을 불러올 수 있는지와 의도대로 작동하는지 따로 검증하세요

먼저 설정 테스트로 구조 오류를 확인하고, 정상적으로 시작해 포트가 수신 대기 상태인지 검증한 다음 요청을 보내 아웃바운드 선택을 확인하세요. 각 단계에서 한 가지씩만 검증해야 필드가 적용되지 않은 문제를 노드 오류로 오해하지 않습니다.

7. 수정 후 검증 및 자주 묻는 질문

한 번에 명확한 문제 하나만 수정한 뒤 다시 시작하고 새 로그를 보관하세요. 코어 업그레이드, 포트 변경, 라우팅 수정, 노드 교체를 동시에 하면 연결이 복구돼도 어떤 조치가 효과가 있었는지 알기 어렵습니다. 복구를 확인한 뒤에는 임시로 높인 로그 단계를 원래대로 되돌리고 정상 작동하는 설정 사본을 저장하세요.

  1. 설정 검증: 현재 코어로 실제 설정을 테스트했을 때 읽기, 필드, 리소스 로드 오류가 더 이상 발생하지 않습니다.
  2. 프로세스 검증: 정상 시작 후 프로세스가 계속 실행되고 예상한 로컬 포트가 수신 대기 상태를 유지합니다. 시작 직후 종료되지 않아야 합니다.
  3. 요청 검증: 앱이 새 포트를 사용해 대상에 접속하도록 설정하고, 로그에서 요청이 코어에 도달했는지 확인한 뒤 새로운 원격 연결 오류가 발생하는지 살펴보세요.
  4. 설정 유지 검증: v2rayN을 종료한 후 다시 열어 수정 내용이 자동 생성 설정에 덮어쓰이지 않았는지 확인하세요.

v2rayN을 다시 설치했는데도 시작 오류가 납니다. 또 설치해야 하나요?

같은 오류 설정을 계속 사용하고 있거나 이전 프로세스가 같은 포트를 점유 중인지 먼저 확인하세요. 기존 설정을 백업하고 사용자 지정 항목을 최소화해 문제를 한 번 재현한 뒤 새 로그에 따라 처리하세요. 반복해서 설치해도 시스템의 포트 충돌은 자동으로 해결되지 않습니다.

관리자 권한으로 실행하니 해결됐는데 계속 이렇게 사용해도 되나요?

일반적인 루프백 프록시 수신에는 보통 관리자 권한이 필요하지 않습니다. 로그를 바탕으로 파일 및 디렉터리 권한과 보안 소프트웨어의 차단 여부를 먼저 확인하세요. 권한이 필요한 TUN 기능을 사용 중이라면 이를 끄고 일반 로컬 인바운드만 테스트한 다음 권한 문제를 별도로 점검하세요.

설정 테스트는 통과했는데 브라우저에서 연결이 거부됩니다. 어떻게 해야 하나요?

코어를 정상적으로 시작한 뒤 실제 수신 포트를 확인하고 브라우저와 시스템 프록시 설정을 점검하세요. 테스트 명령은 프록시 서비스를 계속 실행해 주지 않습니다. 테스트만 실행하고 코어를 시작하지 않았다면 앱이 로컬 포트에 연결할 때 거부됩니다.

로그에 timeout이 있으면 코어가 시작되지 않은 건가요?

아닙니다. 먼저 시간 초과가 시작 단계에서 발생했는지, 앱이 요청을 보낸 뒤 발생했는지 확인하세요. 코어가 계속 수신 대기 중이고 로그에 요청 처리 기록이 있다면 서버 주소 확인, 원격 포트, 전송 매개변수를 점검해야 합니다. 로컬 JSON 문법을 계속 바꾸지 마세요.

클라이언트 다운로드v2rayN / v2rayNG