· 문제 해결 · 약 10분

v2rayN 커널 시작 오류 해결: 로그로 config.json 설정 오류 찾기

로그에 표시된 포트 충돌, JSON 파싱 오류, 알 수 없는 프로토콜 필드를 확인하고 오류 메시지에 따라 설정을 수정해 커널을 다시 실행하세요.

이 글의 핵심

먼저 커널이 실제로 시작에 실패했는지 확인한 뒤, 같은 실행 로그에서 근본 원인을 찾습니다. v2rayN 메인 창은 열리지만 노드를 활성화하면 커널이 종료되는 경우를 대상으로, 로컬 포트, JSON 문법, 프로토콜과 커널의 호환성, 파일 접근 문제를 차례로 살펴봅니다. 어떤 설정은 화면에서 수정해야 하는지도 안내해, 다시 생성될 config.json을 반복해서 편집하는 일을 방지합니다.

커널 종료와 연결 실패 구분하기

v2rayN은 관리 인터페이스이며, Xray와 V2Fly 같은 커널이 설정을 읽고 로컬 포트를 열어 외부 연결을 담당합니다. 메인 창이 열린다고 커널까지 실행 중인 것은 아닙니다. 웹페이지가 열리지 않는다고 config.json에 문제가 있다고 단정할 수도 없습니다. 로그에서 설정 로드 실패, 포트 바인딩 실패, 프로세스 종료가 있었는지 먼저 확인한 후 해결 방향을 정하세요.

로그에 로컬 인바운드가 정상적으로 대기 중이라고 표시된 뒤 원격 연결 시간 초과, TLS 핸드셰이크 실패, 연결 재설정이 발생한다면 노드 설정과 네트워크 연결을 확인해야 합니다. 이때 로컬 포트를 계속 바꿔도 원격 연결 문제는 해결되지 않습니다. 시스템 프록시는 앱의 요청을 로컬 대기 포트로 전달할 뿐, 이미 종료된 커널을 다시 실행해 주지는 않습니다.

같은 실행에서 발생한 전체 오류 흐름 확인하기

로그에는 상위 오류와 근본 원인이 한 줄에 이어서 표시되는 경우가 많습니다. 앞부분은 ‘설정 로드 실패’를 알리고, 뒷부분에서 문제가 된 필드나 포트를 설명합니다. 마지막의 ‘프로세스 종료’ 메시지만 복사해서는 원인을 찾기 어렵습니다. 현재 설정을 먼저 저장한 뒤 한 번만 실행해 보세요. 여러 테스트나 백그라운드 업데이트가 섞이지 않도록 합니다.

  1. 버전 기록하기

    「도움말」→「정보」에서 v2rayN 버전을 확인하고, 시작 로그에서 실제 커널의 이름과 버전도 기록하세요. 클라이언트 버전과 커널 버전은 각각 확인해야 하며, 클라이언트 버전으로 커널 버전을 대신할 수 없습니다.

  2. 실행 작업 최소화하기

    메인 창 아래쪽의 로그 영역으로 돌아가 현재 시간을 확인하고, 대량 속도 테스트나 구독 업데이트는 잠시 보류하세요. 노드 하나를 선택한 뒤 서버 목록의 마우스 오른쪽 버튼 메뉴에서 「활성 서버로 설정」을 눌러 설정을 불러옵니다.

  3. 오류 흐름 복사하기

    이번 실행의 커널 버전, 설정 파일 경로, 첫 번째 오류와 이어지는 원인을 함께 보관하세요. 화면에 종료 메시지만 표시된다면 이번 실행에 해당하는 로그 파일을 확인하고, 서로 다른 시간대의 로그를 합치지 마세요.

  4. 오류 키워드 표시하기

    먼저 bind, invalid character, unknown config id, Access is denied를 찾아 표시하세요. 오류 흐름을 따라 계속 읽으면 구체적인 포트, 필드 또는 파일 경로가 나오는 경우가 많습니다.

v2rayN 버전에 따라 메뉴 구성과 로그 설정 위치가 다를 수 있습니다. 위 안내는 일반적인 중국어 인터페이스를 기준으로 하며, 필드 이름이 다르면 현재 화면과 시작 로그를 우선 확인하세요. 로그를 다른 사람에게 전달하기 전에는 구독 주소, UUID, 비밀번호, 개인 디렉터리 이름을 가리되 프로토콜 이름, 오류 키워드, 로컬 포트는 남겨 두세요.

bind 오류와 로컬 포트 충돌 해결하기

로컬 포트는 인바운드 설정에 해당합니다. 서로 충돌하는 대기 주소에서 두 프로그램이 같은 TCP 포트를 동시에 사용할 수는 없습니다. v2rayN을 중복 실행했거나 커널 프로세스가 남아 있거나 다른 프로그램이 같은 포트를 사용하면 새 커널이 시작되지 않을 수 있습니다. 아래 포트 번호는 문제 해결을 위한 예시이며 모든 버전의 기본 설정을 뜻하지 않습니다.

10808
이 글의 로컬 프록시 포트 예시
10809
일부 이전 설정에서 별도로 사용하는 HTTP 포트
127.0.0.1
이 컴퓨터에서만 접속할 수 있는 루프백 주소

오류: bind: Only one usage of each socket address

원인 및 해결 방법: Windows에서 대기 주소와 포트가 충돌했다고 알립니다. 먼저 포트를 사용 중인 프로세스를 찾아 정체를 확인한 뒤 중복 인스턴스를 종료하거나 v2rayN의 로컬 대기 포트를 바꾸세요.

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

원인 및 해결 방법: 포트가 시스템 예약 범위나 보안 정책의 제한을 받았을 수 있으며, 일반 프로세스가 사용 중인 것은 아닐 수 있습니다. 예약 포트와 보안 프로그램 기록을 확인하고 제한되지 않은 로컬 포트를 선택하세요.

Windows 터미널에서 아래 두 명령을 실행하세요. 첫 번째 명령으로 10808이 포함된 연결 기록을 찾아 로컬 주소 열과 LISTENING 상태를 확인합니다. 두 번째 명령은 지정한 PID의 정보를 조회합니다. 여기의 4321은 예시 PID이므로 실제로는 첫 번째 명령에서 확인한 숫자로 바꾸세요.

netstat -ano | findstr ":10808"
tasklist /FI "PID eq 4321"

포트를 사용 중인 프로그램이 중복 실행된 v2rayN 또는 남아 있는 커널 프로세스인지 확인한 뒤, 시스템 트레이에서 해당 인스턴스를 정상 종료하고 다시 실행하세요. 정체를 알 수 없는 시스템 프로세스를 강제 종료하지 마세요. 포트를 변경하려면 「설정」→「매개변수 설정」으로 이동해 로컬 대기 포트 항목을 찾으세요. 예를 들어 10808을 10818로 바꿀 수 있습니다. 저장 후 커널을 다시 시작하고 시스템 프록시를 다시 설정하세요. 포트를 수동으로 지정한 앱에서도 포트를 변경해야 합니다.

결론: 대기 포트를 먼저 해결한 다음 노드를 확인하세요

로컬 바인딩 실패가 명확하다면 먼저 대상 포트가 대기 상태가 되도록 해결하세요. 구독 그룹을 바꾸거나 원격 노드를 전환해도 다른 프로세스가 사용 중인 로컬 포트는 해제되지 않습니다.

config.json의 문법 및 데이터 형식 오류 찾기

config.json은 일반적으로 v2rayN이 노드, 라우팅, 매개변수 설정을 바탕으로 생성하는 실행 설정 파일이며 구독 주소 자체가 아닙니다. 시작 로그에 표시된 파일 경로를 기준으로 확인하세요. 이름만 보고 오래된 사본을 찾아 편집하지 마세요. 일반 노드 설정은 먼저 인터페이스에서 수정해야 합니다. 생성된 파일을 직접 편집하면 다음 노드 전환 때 변경 내용이 덮어써질 수 있습니다.

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

원인 및 해결 방법: 객체의 마지막 항목 뒤에 불필요한 쉼표가 들어간 경우가 흔합니다. 파서는 다음 필드 이름을 기다리고 있었던 것입니다. 오류 위치 앞의 쉼표, 따옴표, 괄호를 확인해 실제 JSON 구조에 맞게 수정하세요.

오류: unexpected EOF

원인 및 해결 방법: 파일이 잘렸거나 문자열, 객체, 배열이 닫히지 않았을 수 있습니다. 파일 끝부분과 저장 과정을 확인한 다음, 백업해 둔 완전한 설정 파일로 복구하세요.

오류: cannot unmarshal string into Go struct field

원인 및 해결 방법: 숫자, 불리언 또는 객체가 필요한 필드에 문자열이 입력됐습니다. 오류 메시지에서 필드 경로를 찾아 현재 커널의 설정 형식에 맞는 데이터 형식으로 수정하세요.

다음은 JSON 문법 차이만 설명하는 예시이며, 단독으로 실행할 수 있는 커널 설정이 아닙니다. 첫 번째 줄에는 마지막 속성 뒤에 쉼표가 있습니다. 쉼표를 뺀 두 번째 줄이 올바른 JSON입니다. 포트에 문자열을 사용할 수 있는지는 설정 스키마에 따라 달라지므로, 문법 검사를 통과했다고 해서 올바른 설정이라고 볼 수는 없습니다.

잘못된 예:
{"listen": "127.0.0.1", "port": 10808,}

올바른 예:
{"listen": "127.0.0.1", "port": 10808}

프로토콜 필드와 실제 실행 커널 확인하기

JSON을 파싱할 수 있다고 해서 현재 커널이 해당 프로토콜과 전송 필드를 지원하는 것은 아닙니다. v2rayN은 설정을 입력하는 인터페이스이며, 실제 지원 범위는 이번에 실행된 커널과 버전에 따라 달라집니다. 직접 복사한 아웃바운드, 라우팅, 전송 설정은 서로 다른 커널에서 가져왔을 수 있습니다. 필드 이름이 비슷해도 그대로 바꿔 쓸 수는 없습니다.

오류: unknown config id:

원인 및 해결 방법: Xray 또는 V2Fly가 설정을 구성하는 과정에서 프로토콜이나 구성 요소 식별자를 찾지 못했거나, 이름이 잘못됐거나, 현재 버전에서 지원되지 않을 수 있습니다. 콜론 뒤의 식별자를 확인하고 해당 필드와 커널의 지원 여부를 살펴보세요.

오류: failed to parse outbound detour config

원인 및 해결 방법: 아웃바운드 설정 구성에 실패했다는 상위 메시지입니다. 뒤에 이어지는 원인을 더 읽고 프로토콜 이름, 서버 매개변수, 전송 설정, TLS 또는 REALITY 관련 필드를 확인하세요.

예를 들어 REALITY는 보안 계층 설정이므로 reality를 아웃바운드 프로토콜로 지정하면 안 됩니다. XTLS Vision은 특정 설정 조합에 해당하며, 전송 유형 이름으로 임의 입력하는 항목이 아닙니다. Xray와 V2Fly가 지원하는 설정 범위는 서로 다릅니다. Android용 v2rayNG는 Xray를 사용하고 v2flyNG는 V2Fly를 사용하지만, Android 클라이언트에서 내보낸 설정을 모두 데스크톱 커널에서 사용할 수 있는 것은 아닙니다.

  1. 노드 이름이나 폴더 이름만 보지 말고 시작 로그에서 실제로 어떤 커널이 실행됐는지 확인하세요.
  2. 「설정」→「매개변수 설정」으로 이동해 현재 버전에서 제공하는 커널 선택 항목을 확인하세요. 프로토콜별 커널 선택 설정이 있다면 해당 노드 프로토콜에 맞는 항목을 살펴보세요.
  3. 노드 편집 창으로 돌아가 프로토콜, 전송 방식, TLS, SNI, flow를 확인하세요. 서버에서 제공한 정보를 기준으로 입력하고, 오류를 없애려고 익숙하지 않은 필드를 임의로 채우지 마세요.
  4. 설정에 최신 커널 기능이 필요한 경우 먼저 백업한 뒤 호환되는 클라이언트와 커널 구성 요소를 업데이트하세요. 업데이트 전후 버전을 기록하고 프로토콜과 라우팅을 동시에 변경하지 마세요.

파일 접근 및 커널 프로그램 문제 확인하기

로그가 프로토콜 파싱 단계에 도달하지 않고 설정을 열 수 없거나, 파일을 찾을 수 없거나, 프로세스를 만들 수 없다고 표시한다면 먼저 파일과 실행 환경을 확인하세요. 이런 문제를 노드 오류로 오해하면 구독을 삭제하거나 그룹을 다시 만드는 불필요한 작업으로 이어질 수 있습니다.

오류: The system cannot find the file specified.

원인 및 해결 방법: 설정 파일, 커널 프로그램 또는 참조된 파일이 없을 수 있습니다. 오류에 표시된 전체 경로를 확인하고 압축을 풀지 않았거나 파일을 옮겼는지, 보안 프로그램이 격리했는지 살펴보세요.

오류: Access is denied.

원인 및 해결 방법: 설정을 읽거나 실행 파일을 쓰거나 프로그램을 실행할 권한이 거부됐습니다. 오류에 표시된 경로와 시스템 보안 기록을 확인하고 디렉터리 권한을 수정하세요. 항상 관리자 권한으로 실행하는 것을 일반적인 해결책으로 삼지 마세요.

시작, 포트 대기, 실제 요청 다시 확인하기

원인이 분명한 항목 하나만 수정한 뒤 동일한 순서로 다시 확인하세요. 그래야 포트 수정, 설정 복구, 커널 업데이트 중 어떤 조치로 해결됐는지 파악할 수 있습니다. 여러 항목을 한꺼번에 바꾸면 결과를 재현하기 어렵습니다.

  1. 커널 다시 시작

    설정을 저장하고 현재 노드를 다시 불러온 뒤 새 시간대의 시작 로그를 확인하세요. 예전 로그가 화면에서 밀려난 것만 확인하지 말고, 기존에 나타난 첫 오류가 사라졌는지 살펴보세요.

  2. 대기 포트 확인

    netstat -ano를 사용해 설정된 실제 포트를 확인하고 PID가 이번에 실행한 커널의 것인지 확인하세요. 포트를 10818로 변경했다면 조회할 때도 10818을 사용해야 합니다.

  3. 요청 확인

    시스템 프록시를 다시 설정하고 현재 노드에서 실제 연결 지연 테스트를 실행한 다음 브라우저로 대상 웹사이트에 접속하세요. 접속 로그에서 요청이 실제로 프록시를 통과했는지 확인하고, 필요한 경우 외부 IP도 확인하세요.

config.json을 수정했는데 노드를 바꾸면 왜 원래대로 돌아가나요?

일반 노드의 실행 설정은 보통 v2rayN이 다시 생성합니다. 먼저 로그에서 파일 경로를 확인한 다음 노드 편집 창이나 「설정」→「매개변수 설정」으로 돌아가 설정 원본을 수정하세요. 사용자 지정 설정이 꼭 필요하다면 별도 원본 파일을 관리하고 백업해 두세요.

구독을 업데이트하면 로컬 포트 충돌이 해결되나요?

아니요. 구독 업데이트는 주로 구독 그룹의 노드 정보를 새로 고치며 다른 프로세스가 사용 중인 대기 포트를 해제하지 않습니다. 먼저 포트를 사용 중인 PID를 확인하세요. 노드 정보가 만료됐거나 누락된 경우에만 구독을 업데이트하면 됩니다.

TUN을 켠 뒤 오류가 나면 바로 재설치해야 하나요?

먼저 TUN을 끄고 기존 노드로 비교 테스트를 하세요. 일반 로컬 프록시는 시작할 수 있다면 TUN 권한, 가상 네트워크 어댑터, 라우팅 설정을 우선 확인하세요. 두 모드 모두 같은 JSON 오류가 발생한다면 공통 설정부터 수정해야 합니다.

커널은 더 이상 종료되지 않지만 실제 연결 지연 테스트가 계속 실패하면 어떻게 하나요?

연결 단계 문제로 범위를 좁히세요. 테스트 시간을 기록하고 원격 연결, DNS, TLS 오류를 확인한 다음 노드 주소, 포트, SNI, 라우팅을 살펴보세요. 프록시 진입점을 확인하려면 시스템 프록시 설정과 실제 연결 지연 테스트 안내를 참고하세요.

추가 지원을 요청할 때는 클라이언트 버전, 커널 버전, 시스템 아키텍처, 개인정보를 가린 전체 오류 흐름, 가장 최근에 변경한 항목 하나를 알려주세요. 그러면 처음부터 재설치해 문제의 단서를 잃지 않고 시작 오류를 확인 가능한 필드, 포트 또는 파일 문제로 좁힐 수 있습니다.

v2rayN 다운로드