v2rayN 커널 실행 오류 해결: 설정 파일 문법 오류와 로컬 포트 충돌 점검

시작을 누른 직후 커널이 종료되나요? 시작 로그 확인, 오류 필드 찾기, 포트 충돌 점검, 커널 파일 확인 순으로 JSON 문법·필드명·포트 점유 문제를 해결하세요.

핵심 내용

이 글은 v2rayN 창은 열려 있지만 Xray 하위 프로세스가 시작되지 않는 경우를 다룹니다. 먼저 시작 로그 전체를 보존하고, 실제 커널로 실제 설정을 테스트한 다음 수신 포트와 프로그램 파일을 확인합니다. 예시는 Windows PowerShell을 기준으로 하며 설명용 포트로 10808을 사용합니다. 작업하기 전에 숫자를 그대로 따라 쓰지 말고 현재 설정의 포트로 바꾸세요.

1. 시작 로그 확인: 커널 종료와 연결 실패 구분하기

v2rayN은 관리 인터페이스이고 Xray는 연결을 처리하는 커널입니다. 창이 열린다고 커널이 로컬 포트를 정상적으로 열었다는 뜻은 아닙니다. 반대로 웹페이지가 시간 초과되더라도 커널 실행 실패라고 단정할 수 없습니다. 원격 서버에 연결할 수 없거나, 라우팅 규칙이 예상과 다르거나, 앱이 시스템 프록시 설정을 따르지 않는 문제는 커널이 정상 실행된 뒤에도 발생할 수 있습니다.

시작 로그 설정 테스트 포트 사용 프로세스 커널 파일 요청 확인

먼저 v2rayN 메인 창의 정보 또는 로그 영역에서 이번 시작 기록을 찾으세요. 인터페이스 버전에 따라 메뉴 이름이 다를 수 있으므로 현재 화면의 로그 메뉴를 확인하면 됩니다. 시작 시간, 커널 이름, 실행 파일 경로, 설정 파일 경로와 종료 직전에 가장 먼저 나타난 오류를 기록하세요. 마지막의 “시작 실패” 한 줄만 보관하지 마세요. 대개 앞선 원인의 결과일 뿐입니다.

증상 또는 출력먼저 확인할 항목지금은 확인하지 않아도 되는 항목
failed to load config files가 표시됨설정 파일 경로, JSON 문법, 필드 값원격 속도 측정 결과
failed to listen TCP가 표시됨수신 주소, 포트 점유, 시스템 제한구독 업데이트 주기
프로세스는 실행 중이지만 요청 시 i/o timeout 발생원격 연결 가능 여부, DNS, 라우팅 및 전송 설정모든 문제를 시작 실패로 간주하기
시스템에서 프로그램을 실행할 수 없다는 메시지가 표시됨아키텍처, 파일 경로, 접근 권한노드 비밀번호부터 변경하기

2. 실제 설정 테스트: JSON 문법을 확인한 뒤 Xray 필드 점검하기

v2rayN에 저장된 인터페이스 설정과 커널에 전달되는 실행 설정은 서로 다른 계층의 데이터입니다. 시작 로그에서 실제 설정 파일의 위치를 확인하고, 오류를 점검할 복사본을 만드세요. 자동 생성된 실행 파일을 직접 수정하면 노드를 전환하거나 다시 시작할 때 변경 사항이 덮어써질 수 있습니다. 문제를 찾은 뒤에는 사용자 지정 설정, 라우팅 규칙 또는 해당 설정 항목의 원본을 수정해야 합니다.

  1. 실패한 시작 작업을 중단하고 오류 출력을 저장한 뒤, 관련된 현재 설정을 백업합니다.
  2. 시작 인수가 가리키는 파일을 찾으세요. 파일 이름만 보고 추측하거나 구독 내용을 커널용 JSON으로 착각하지 마세요.
  3. v2rayN이 실제로 호출하는 것과 동일한 Xray 실행 파일로 복사본의 설정을 테스트합니다.
  4. 한 번에 한 항목만 수정하고 다시 테스트하세요. 앞선 오류가 사라진 뒤 다음 항목을 점검합니다.

아래 예시는 xray.exe와 테스트할 복사본인 config.json이 있는 테스트 디렉터리에서 실행한다고 가정합니다. 이 파일 이름은 예시용이며 v2rayN이 항상 이 경로를 사용하는 것은 아닙니다. 첫 번째 명령은 실행 중인 프로그램 버전을 확인하고, 두 번째 명령은 전체 프록시 서비스를 시작하지 않고 설정만 테스트합니다.

.\xray.exe version
.\xray.exe run -test -config ".\config.json"
$LASTEXITCODE

테스트 명령이 성공적으로 종료되어도 커널이 해당 단계의 설정 검사를 통과했다는 뜻일 뿐, 포트를 반드시 열 수 있거나 원격 서버에 반드시 연결된다는 뜻은 아닙니다. 현재 커널이 명령 인수를 인식하지 못하면 해당 프로그램의 도움말 출력을 확인해 실행 문법을 파악하세요. 출처가 불분명한 실행 파일로 바꿔 계속 시도하지 마세요.

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

원인: 객체의 마지막 항목 뒤에 쉼표가 남아 있는 등 문법 오류가 있어, 파서가 키 이름을 기다리던 중 닫는 중괄호를 읽었습니다.

해결: 오류 위치 바로 앞 항목을 확인하고 끝에 남은 쉼표를 삭제하세요. 키 이름은 영문 큰따옴표로 감싸야 합니다.

오류: unexpected EOF

원인: 더 읽어야 할 내용이 남았는데 설정 파일이 끝났습니다. 복사 과정에서 내용이 빠졌거나 닫는 괄호가 없거나 문자열의 따옴표가 닫히지 않았을 때 자주 발생합니다.

해결: 편집기에서 중괄호, 대괄호와 큰따옴표가 짝을 이루는지 확인하세요. 완전한 백업이 있다면 먼저 복원하고, 파일 끝에 괄호를 무작정 덧붙이지 마세요.

오류: json: cannot unmarshal string into Go value of type uint16

원인: 숫자가 필요한 필드에 문자열이 입력되었습니다. 전체 오류 메시지에는 구조체 또는 필드 경로가 함께 표시될 수 있습니다.

해결: 전체 오류 메시지에서 해당 필드를 찾고 현재 커널이 요구하는 자료형으로 수정하세요. 모든 숫자에 일괄적으로 따옴표를 추가하거나 삭제하지 마세요.

구조가 올바르더라도 의미상 오류가 있을 수 있습니다. Xray 필드명은 대소문자를 구분합니다. outboundTag와 outboundtag는 서로 다릅니다. 라우팅 필드의 아웃바운드 태그도 실제 정의와 일치해야 합니다. 일부 알 수 없는 필드는 무시되어 시작 오류가 발생하지 않을 수 있으므로, “문법 오류가 없다”는 사실만으로 필드명이 올바르다고 볼 수는 없습니다.

{
  "type": "field",
  "domain": ["full:example.com"],
  "outboundTag": "proxy"
}

3. 로컬 포트 점유 확인: 수신 포트에서 프로세스 찾기

설정 테스트는 통과했는데 시작 중 리스너를 바인딩하는 단계에서 종료된다면 포트를 확인해야 합니다. 실행 설정의 inbounds에서 listen, port와 프로토콜을 먼저 찾으세요. TUN 인터페이스와 일반 로컬 프록시 리스너는 서로 다른 항목입니다. 아래에서는 TCP 10808의 충돌을 가정하며, 모든 설치 환경의 기본값이라고 보는 것은 아닙니다.

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

# 아래의 1234를 앞 단계 출력에 표시된 OwningProcess 값으로 바꾸세요
Get-Process -Id 1234 |
  Select-Object Id, ProcessName, Path

프로세스 경로가 비어 있으면 작업 관리자에서 PID를 확인하세요. 필요한 경우 적절한 권한으로 터미널을 열어 조회합니다. 프로세스의 정체를 확인하기 전에는 종료하지 마세요. 포트를 점유한 프로세스는 다른 v2rayN 인스턴스나 남아 있는 Xray 프로세스일 수도 있고, 전혀 다른 로컬 서비스일 수도 있습니다.

확인 결과의미조치
10808을 다른 프록시 인스턴스가 수신 중두 인스턴스가 같은 주소와 포트를 사용하려고 함사용하지 않는 인스턴스를 정상 종료한 뒤 현재 인스턴스를 시작합니다.
같은 설정에 중복 인바운드가 있음두 리스너가 충돌하는 엔드포인트를 사용함중복 항목을 삭제하거나 포트를 다르게 지정합니다.
수신 기록은 없는데 접근 권한 오류가 발생함예약된 포트 범위 또는 보안 정책의 제한일 수 있음시스템 제한을 확인하고 프로세스를 반복해서 강제 종료하지 마세요.
수신 주소가 0.0.0.0 또는 ::임와일드카드 주소 바인딩은 다른 리스너와 충돌할 수 있습니다.구체적인 주소와 IPv4·IPv6 수신 기록도 함께 확인합니다.

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

원인: Windows가 중복되거나 서로 충돌하는 소켓 바인딩을 거부했습니다. 오류 메시지에는 수신 주소와 포트가 함께 표시되는 경우가 많습니다.

해결: 오류에 표시된 실제 포트로 PID를 조회하고 충돌하는 인스턴스를 종료하세요. 인바운드가 중복된 경우에는 설정 원본을 수정한 뒤 설정을 다시 생성해야 합니다.

오류: An attempt was made to access a socket in a way forbidden by its access permissions.

원인: 시스템이 바인딩 요청을 거부했습니다. 예약 포트, 독점 바인딩 또는 보안 정책과 관련된 문제일 수 있으며, 일반적인 프로세스 포트 점유와는 다릅니다.

해결: 먼저 예약 포트 범위와 보안 기록을 확인한 다음 사용할 수 있는 포트를 선택하세요. 장기간 권한을 높여 실행하는 방법을 일반적인 해결책으로 삼지 마세요.

netsh interface ipv4 show excludedportrange protocol=tcp
netsh interface ipv6 show excludedportrange protocol=tcp

포트를 바꿔야 한다면 v2rayN의 「설정」→「매개변수 설정」에서 현재 버전의 로컬 수신 포트 항목을 찾아보세요. 화면의 그룹 이름은 버전에 따라 다를 수 있으므로 실제 설정 출력을 기준으로 확인해야 합니다. 예를 들어 테스트 포트를 10808에서 10818로 바꾸기 전에 10818이 비어 있고 제한되지 않은 포트인지 확인하세요. 커널을 다시 시작한 뒤에는 수동으로 설정한 브라우저 프록시, 터미널 프록시 환경 변수와 다른 클라이언트 설정도 함께 변경해야 합니다.

확인: 포트를 변경한 뒤에는 클라이언트 설정도 점검해야 합니다

새 포트에서 정상적으로 수신 중인데 앱이 계속 이전 포트에 연결한다면 클라이언트 설정이 동기화되지 않은 것입니다. 새로운 커널 실행 오류가 아닙니다. 먼저 실제 수신 엔드포인트를 확인하고 시스템 프록시와 터미널 환경 변수를 점검하세요. 두 문제를 오가며 설정을 반복해서 바꾸지 마세요.

4. 커널 파일 확인: 경로, 아키텍처와 의존 리소스

설정 테스트조차 실행할 수 없다면 프로그램 파일을 중점적으로 확인해야 합니다. 먼저 로그에 표시된 전체 경로에 파일이 있는지 확인하고, 프로그램이 버전 정보를 직접 출력할 수 있는지 살펴보세요. v2rayN 인터페이스가 있는 폴더가 커널 폴더와 같다는 보장은 없습니다. 다른 폴더에서 이름이 같은 프로그램을 무작정 실행하면 다른 Xray 파일을 테스트할 수 있습니다.

로그에 failed to open file 또는 The system cannot find the file specified.가 표시되면 이어지는 구체적인 파일 이름을 확인하세요. 실행 파일, 설정 파일, 규칙 리소스 중 무엇이 누락됐는지에 따라 해결 방법은 완전히 다릅니다. 상대 경로를 사용한다면 시작 작업 디렉터리와 리소스를 찾는 위치도 점검해야 합니다. 파일이 어느 폴더엔가 있다는 사실만 확인해서는 충분하지 않습니다.

5. 재검증 순서: 설정 통과 후 로컬 요청 확인하기

문제 해결은 화면 상태가 바뀌었다고 멈추는 것이 아니라 같은 절차를 재현할 수 있도록 마무리해야 합니다. 노드, 라우팅과 프록시 모드는 그대로 두고 방금 수정한 항목만 확인하세요. 아래 요청 예시는 10808이 HTTP 프록시 또는 HTTP를 지원하는 혼합 인바운드를 제공하는 것으로 확인된 경우에만 사용할 수 있습니다. 현재 인바운드가 SOCKS만 제공한다면 해당 프록시 프로토콜에 맞는 명령을 사용해야 합니다.

# HTTP 프록시 또는 HTTP를 지원하는 혼합 인바운드
curl.exe --proxy http://127.0.0.1:10808 --connect-timeout 10 --max-time 20 https://example.com/

# SOCKS 인바운드 전용: 대상 도메인 조회를 프록시 서버에서 처리
curl.exe --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 --max-time 20 https://example.com/
  1. 설정 단계: 동일한 실행 설정이 커널 테스트를 통과하는지 확인하고, 수정한 원본 설정을 저장합니다.
  2. 시작 단계: 커널이 즉시 종료되지 않고 시작 로그에 기존 오류가 더 이상 표시되지 않는지 확인합니다.
  3. 수신 단계: 대상 포트를 다시 조회해 이번에 시작한 커널 프로세스가 포트를 사용 중인지 확인합니다.
  4. 요청 단계: 지정한 프록시 엔드포인트로 한 번 요청을 보내고 로그의 대상 및 아웃바운드 기록과 대조합니다.

예시의 연결 시간 초과 10초와 전체 제한 시간 20초는 테스트용 설정일 뿐 성능 기준이 아닙니다. 로컬에서 “연결이 거부됨”이 발생하면 수신 엔드포인트를 다시 확인하세요. 프록시에 연결된 뒤 원격 시간 초과가 발생했다면 노드, DNS와 라우팅을 계속 점검해야 합니다. 한 번 요청이 성공했다고 모든 라우팅이 예상대로 작동한다고 단정할 수는 없지만, “커널이 시작되지 않음”과 “특정 연결 실패”를 구분하는 데 도움이 됩니다.

6. 자주 묻는 질문: 구독, 설정 테스트, 재설치

구독 업데이트 후 갑자기 시작되지 않아요. 구독을 삭제해야 하나요?

먼저 기존 그룹과 오류 기록을 보존하세요. 같은 그룹의 다른 설정으로 전환해 테스트하고, 특정 노드에서만 실패하는지 비교하세요. 새로 추가된 전송 필드와 선택한 커널이 서로 맞는지도 확인해야 합니다. 그룹 전체를 삭제하면 비교에 필요한 정보가 사라지므로 오류 원인을 찾는 방법이 될 수 없습니다.

JSON 검사기에서는 문제가 없다고 하는데 Xray가 종료되는 이유는 무엇인가요?

일반 JSON 검사기는 주로 문법만 확인하며 커널의 모든 필드와 실행 의존성을 이해하지 못합니다. 실제 Xray로 설정 테스트를 실행한 뒤 시작 중 수신 포트 충돌이나 리소스 누락으로 종료되는지 확인하세요. 인증 정보가 포함된 설정을 온라인 검사 서비스에 제출하지 마세요.

수정한 설정이 다시 시작하면 원래대로 돌아갑니다. 어떻게 저장하나요?

임시로 생성된 파일을 수정했을 가능성이 큽니다. 먼저 해당 사용자 지정 설정, 라우팅 규칙 또는 「설정」→「매개변수 설정」의 원본 항목을 찾으세요. 원본을 수정한 뒤 다시 시작하고 새로 생성된 설정에 변경 사항이 반영됐는지 확인합니다.

설치 파일을 다시 다운로드해 설치하면 포트 점유 문제가 해결되나요?

그것만으로는 해결되지 않습니다. 먼저 10808 등 실제 포트의 PID를 확인하세요. 포트를 점유한 프로세스가 계속 실행 중이면 새로 설치한 커널도 포트를 열지 못할 수 있습니다. 파일이 누락됐거나 실행할 수 없거나 아키텍처가 맞지 않는 것이 확인된 경우에만 호환되는 설치 파일을 다시 선택하고, 설정 백업을 보관하세요.

v2rayN 다운로드플랫폼 및 설치 파일 선택