커널 시작 실패 문제 해결: 로그 첫 줄에서 설정 오류 찾기

v2rayN과 v2rayNG에서 커널 로그를 열고 포트 충돌, JSON 구문 오류, 필드 오타, 인증서 문제를 로그 키워드로 빠르게 찾아 해결하는 방법을 안내합니다.

클라이언트에 “시작 실패”가 표시되어도 노드 자체가 작동하지 않는 것은 아닙니다. v2rayN, v2rayNG 같은 그래픽 클라이언트는 먼저 노드, 라우팅, 로컬 리스닝 설정을 커널 설정으로 변환한 뒤 Xray 또는 v2fly 커널을 시작합니다. 생성된 설정, 리스닝 포트, 인증서 파일, 필드 구조 중 어느 한 곳에서라도 오류가 발생하면 프록시 연결을 맺기 전에 커널 프로세스가 종료됩니다.

효율적인 점검 방법은 노드를 계속 바꾸는 것이 아니라 이번 시작에 해당하는 첫 번째 오류를 찾는 것입니다. 로그 마지막에는 “failed to start”, “app/proxyman”, 종료 코드 같은 요약 정보가 여러 겹으로 표시될 수 있지만, 실제 원인은 대개 이러한 요약보다 앞에 있습니다. 가장 먼저 나타난 명확한 오류부터 처리한 뒤 한 번 재시작하고 새 로그를 확인하면 연쇄적으로 발생한 후속 오류에 혼동되지 않습니다.

이 글의 핵심 내용

커널이 시작되지 않거나 클라이언트가 즉시 연결을 끊거나 로그에 오류가 계속 표시될 때 유용합니다. 점검 순서는 고정되어 있습니다. 로그 시간을 확인하고 첫 번째 오류를 추출한 다음 포트, JSON, 필드, 인증서 중 해당 유형을 판단합니다. 한 가지 문제만 수정한 뒤 설정을 다시 생성하고 시작하세요.

이번 시작의 전체 로그 먼저 확보하기

로그는 방금 수행한 시작 작업과 일치해야 합니다. 오래된 로그에는 이미 해결한 오류가 남아 있을 수 있으므로 눈에 띄는 빨간색 줄만 검색하면 엉뚱한 문제를 처리하기 쉽습니다. 먼저 커널을 중지하고 현재 시간을 기록한 다음 다시 시작하세요. 이후 시작 시각과 가장 가까운 타임스탬프부터 아래로 읽다가 error, failed, invalid 또는 cannot이 포함된 첫 기록에서 멈춥니다.

커널 중지 시간 기록 다시 시작 첫 오류 확인 한 가지 문제 수정

v2rayN 데스크톱

  1. 메인 창 하단에서 로그 영역을 엽니다. 영역이 접혀 있다면 하단 정보 패널을 펼친 후 “로그”로 전환하세요.
  2. “설정” → “매개변수 설정” → “기본 설정”으로 이동해 로그 수준이 완전히 꺼져 있지 않은지 확인합니다. 일상적인 문제 해결에는 warning을 사용하고, 설정 로딩 과정을 확인할 때는 잠시 info로 변경하세요.
  3. 서비스 중지를 클릭하고 약 2초 기다린 뒤 현재 설정을 다시 시작합니다. 커널 버전이 표시된 줄부터 프로세스 종료 줄까지의 내용을 복사하세요.
  4. 메인 창에 클라이언트 로그와 커널 로그가 함께 표시된다면 Xray, V2Ray, Core 또는 설정 파일 경로가 포함된 기록을 우선 확인하세요.

v2rayNG Android

  1. 현재 연결을 끊은 뒤 메인 화면 오른쪽 상단 메뉴에서 “로그”를 엽니다.
  2. 메인 화면으로 돌아가 대상 설정을 선택해 시작한 다음 즉시 로그 페이지로 돌아갑니다.
  3. 가장 최근의 커널 시작 기록부터 확인합니다. 내용이 너무 빠르게 스크롤되면 먼저 연결을 중지한 뒤 마지막 시작으로 생성된 기록을 복사하세요.
  4. v2rayNG에서 Xray 커널을 사용할 때 설정 검증, VLESS 필드, TLS 오류는 커널이 직접 출력합니다. 클라이언트 상단의 짧은 안내는 상태 확인용일 뿐 상세 로그를 대신할 수 없습니다.
10808
일반적인 SOCKS 로컬 포트
10809
일반적인 HTTP 로컬 포트
2초
중지 후 재시작까지 기다리는 시간
1개
각 점검에서 우선 처리할 첫 번째 오류

포트 충돌: 커널이 로컬 리스닝을 생성하지 못함

프록시 커널은 시작 후 먼저 로컬 컴퓨터에 SOCKS, HTTP 또는 투명 프록시 리스너를 생성합니다. v2rayN에서 흔히 사용하는 조합은 127.0.0.1:10808127.0.0.1:10809입니다. 이전 커널이 종료되지 않았거나 다른 클라이언트가 실행 중이거나 다른 프로그램이 같은 포트를 사용하고 있으면 새 프로세스는 원격 노드를 처리하기 전에 실패합니다.

이 문제는 서버 지연 시간이나 VMess, VLESS 매개변수와 관련이 없습니다. 오류에 listen, bind, address와 포트 번호가 함께 나타나면 먼저 로컬 리스닝을 처리하세요. 모든 노드가 같은 로컬 진입점을 공유하므로 노드를 계속 바꿔도 점유된 포트는 해제되지 않습니다.

오류: failed to listen TCP on 127.0.0.1:10808

원인 및 해결: SOCKS 리스닝 포트를 다른 프로세스가 사용 중입니다. 이전 클라이언트와 남아 있는 커널을 완전히 종료하세요. 그래도 실패하면 “설정” → “매개변수 설정” → “기본 설정”에서 로컬 SOCKS 포트를 11808로 변경하고 저장한 뒤 다시 시작합니다.

오류: bind: Only one usage of each socket address is normally permitted

원인 및 해결: 같은 주소와 포트를 두 프로세스가 동시에 리스닝할 수 없습니다. v2rayN 창을 두 개 중복 실행했는지 확인하고 남아 있는 커널을 종료한 뒤 다시 시작하세요. 두 클라이언트가 10808을 함께 사용하지 않도록 합니다.

오류: bind: address already in use

원인 및 해결: Linux 또는 macOS 환경에서 다른 프로세스가 대상 포트를 사용 중입니다. 해당 프로세스를 종료하거나 SOCKS와 HTTP 리스닝 포트를 각각 11808, 11809로 변경하고 수동 프록시를 사용하는 앱의 설정도 함께 업데이트하세요.

포트를 변경한 뒤 함께 확인할 항목

  • 시스템 프록시는 보통 v2rayN이 자동으로 업데이트하지만 브라우저나 다운로드 도구에 입력한 수동 프록시 설정은 자동으로 바뀌지 않습니다.
  • SOCKS 포트를 10808에서 11808로 변경했다면 앱에 입력한 프록시 주소도 127.0.0.1:11808로 바꿔야 합니다.
  • 포트 값은 1부터 65535 범위여야 하며 SOCKS, HTTP, API, LAN 리스닝 포트가 서로 중복되지 않아야 합니다.
  • 포트만 바꿨는데 같은 오류가 계속되면 로그에 표시된 실제 포트를 확인하세요. 다른 설정 파일이 설정을 생성하고 있어 변경 사항이 현재 커널에 적용되지 않았을 수 있습니다.

결론: bind가 보이면 먼저 로컬 환경을 확인하세요

bind 또는 address already in use가 포함된 시작 오류는 로컬 리스닝 단계에서 발생합니다. 먼저 포트를 해제하거나 변경한 뒤 노드 프로토콜과 원격 서버를 점검하세요.

JSON 구문 오류: 아직 프로토콜 검증 단계에 진입하지 못함

V2Ray 및 Xray 커널은 일반적으로 JSON 설정을 읽습니다. 그래픽 클라이언트가 설정을 자동 생성하더라도 전체 설정을 수동으로 가져오거나 사용자 지정 라우팅을 편집하거나 조각을 병합하거나 고급 매개변수를 붙여 넣는 과정에서 쉼표 누락, 불필요한 쉼표, 잘못된 따옴표, 짝이 맞지 않는 괄호가 생길 수 있습니다. 구문 분석에 실패했다는 것은 커널이 아직 VMess, VLESS 또는 라우팅 규칙의 구체적인 의미를 읽지 못했다는 뜻입니다.

로그의 행 번호와 열 번호는 가장 직접적인 위치 정보입니다. 예를 들어 line 42 column 17은 파서가 42번째 줄 17번째 열에서 더 이상 진행하지 못했다는 의미지만 실제 오류는 바로 앞 줄 끝에 있을 수도 있습니다. 대상 위치와 이전 줄을 함께 확인하고, 특히 배열 요소와 객체 필드 사이의 쉼표를 주의하세요.

{
  "inbounds": [
    {
      "port": 10808,
      "protocol": "socks"
    }
  ],
  "outbounds": [
    {
      "protocol": "vless",
      "settings": {}
    }
  ]
}

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

원인 및 해결: 객체 끝에 불필요한 쉼표가 있거나 필드 이름에 큰따옴표가 빠졌을 수 있습니다. 오류 위치의 이전 줄을 확인하고 끝의 불필요한 쉼표를 삭제한 뒤 설정을 다시 검증하세요.

오류: unexpected end of JSON input

원인 및 해결: 설정이 완전히 끝나기 전에 잘렸습니다. 오른쪽 중괄호나 오른쪽 대괄호가 빠진 경우가 흔합니다. 계층에 따라 {}[]의 짝을 맞추고 파일 끝에 무작정 괄호를 추가하지 마세요.

오류: failed to load config files: invalid character

원인 및 해결: 설정에 JSON에서 허용하지 않는 문자가 있습니다. 중국어 문장 부호, 주석, 잘못된 따옴표가 원인일 수 있습니다. 전각 쉼표와 따옴표를 반각 문자로 바꾸고 표준 JSON에서 지원하지 않는 주석을 삭제하세요.

권장 복구 순서

  1. 현재 사용자 지정 설정이나 라우팅 규칙을 먼저 백업하고 유일한 사본을 바로 덮어쓰지 마세요.
  2. 구독 노드가 생성한 설정에서 오류가 발생했다면 해당 노드를 삭제하고 구독을 다시 업데이트한 뒤 노드를 다시 선택해 시작하세요.
  3. 수동 JSON에서 오류가 발생했다면 먼저 최소 실행 가능 설정으로 되돌린 다음 라우팅, DNS, 전송 설정을 조금씩 추가하세요.
  4. 한 부분을 추가할 때마다 한 번씩 시작하세요. 그러면 파일 전체를 동시에 확인하지 않고 최근 변경 사항으로 오류 범위를 좁힐 수 있습니다.

필드 오타 및 버전 호환성: 구문은 올바르지만 구조가 유효하지 않음

JSON이 파싱된다고 해서 현재 커널의 데이터 구조에 맞는 설정이라는 뜻은 아닙니다. 필드 이름 오타, 대소문자 오류, 잘못된 계층, 새 클라이언트가 생성했지만 이전 커널이 인식하지 못하는 필드 때문에 설정 로딩 단계에서 unknown field, failed to build config, invalid value가 발생할 수 있습니다. 이때 괄호와 쉼표는 대체로 문제가 없으므로 필드 이름, 프로토콜 조합, 커널 버전에 집중해야 합니다.

예를 들어 VLESS의 flow, 전송 계층의 network, TLS 관련 serverName은 각각 정해진 위치가 있습니다. 필드 이름을 비슷하게 입력하거나 아웃바운드 필드를 전송 설정에 넣어도 커널이 자동으로 추측해 주지 않습니다. 구독 파서가 오래된 버전이면 새 매개변수를 무시해 최종 설정이 불완전해질 수도 있습니다.

오류: unknown field "floww"

원인 및 해결: 필드 오타입니다. floww는 유효한 필드가 아닙니다. 노드 편집 화면으로 돌아가 VLESS 흐름 제어 설정을 확인하세요. 임시 생성 파일을 직접 수정하지 마세요. 다음 시작 때 클라이언트가 다시 덮어씁니다.

오류: failed to build config: invalid field rule

원인 및 해결: 사용자 지정 라우팅 규칙의 필드 또는 계층이 현재 커널 구조와 맞지 않습니다. 최근 추가한 규칙을 잠시 비활성화하고 커널이 시작되는지 확인한 다음 도메인, IP, 포트, 아웃바운드 태그를 기준으로 하나씩 복원하세요.

오류: failed to parse transport config

원인 및 해결: 전송 유형과 해당 매개변수가 일치하지 않습니다. 예를 들어 WebSocket을 선택하고 다른 전송 전용 필드를 남겨 둔 경우입니다. 노드를 다시 편집해 전송 방식, 경로, 호스트 이름, 보안 설정이 하나의 조합으로 일치하도록 하세요.

노드 오류, 구독 오류, 전역 오류 구분하기

증상 우선 판단할 내용 처리 방법
노드 하나만 시작되지 않음 해당 노드의 필드 누락 또는 오타 해당 노드를 다시 가져오고 프로토콜, 주소, 포트, 전송 매개변수를 확인
같은 구독의 모든 노드 실패 구독 파싱 결과 또는 클라이언트 버전 문제 구독을 업데이트하고 클라이언트 및 커널 버전을 확인한 뒤 설정을 다시 생성
모든 구독 노드와 수동 노드 실패 전역 라우팅, DNS, 리스닝 또는 커널 파일 문제 전역 설정을 기본값으로 되돌리고 최소 설정으로 시작 테스트
클라이언트 업데이트 후부터 실패 이전 설정 필드와 새 구조가 일치하지 않음 노드와 매개변수를 다시 저장하고 이전 생성 캐시를 계속 사용하지 않기

결론: 단일 노드 실패는 필드부터, 전체 노드 실패는 전역 설정부터 확인하세요

문제 범위에 따라 점검 대상이 바로 좁혀집니다. 노드 하나에서만 오류가 발생했다면 모든 라우팅을 초기화할 필요가 없습니다. 모든 노드가 동시에 실패했다면 서버 주소를 하나씩 수정해서도 안 됩니다.

인증서 및 TLS: 경로, 도메인, 시스템 시간을 나누어 확인

인증서 관련 시작 오류는 주로 로컬 인증서 파일을 불러오거나 TLS 설정을 초기화할 때 발생합니다. 클라이언트가 아웃바운드 연결을 담당하는 경우 대부분의 노드는 사용자가 인증서 파일을 직접 선택할 필요가 없습니다. 설정에 certificateFile, keyFile 또는 로컬 절대 경로가 있다면 해당 파일이 실제로 존재하고 현재 프로세스에 읽기 권한이 있는지 확인하세요.

다른 유형의 오류는 연결이 설정된 후 발생합니다. 인증서 도메인 불일치나 인증서 유효 기간 판정 오류가 그 예입니다. 이런 기록은 커널 프로세스를 즉시 종료시키지 않을 수 있지만 대상 노드 연결은 실패하게 만듭니다. “시작 단계에서 파일을 읽지 못한 경우”와 “연결 단계에서 원격 인증서 검증에 실패한 경우”를 먼저 구분해야 하며, 두 문제의 해결 방향은 다릅니다.

오류: failed to load certificate > open certificate.crt: no such file or directory

원인 및 해결: 설정에서 참조하는 인증서 경로가 존재하지 않거나 상대 경로가 잘못된 작업 디렉터리를 기준으로 지정되었습니다. 실제로 존재하는 파일 경로를 사용하거나 노드 설정에서 필요하지 않은 로컬 인증서 참조를 삭제하세요.

오류: x509: certificate is valid for example.com, not node.example.net

원인 및 해결: TLS 검증에 사용하는 서버 이름과 인증서 도메인이 일치하지 않습니다. 노드가 제공한 주소와 서버 이름 필드를 확인하고 WebSocket Host, 연결 주소, TLS 서버 이름을 임의로 바꾸지 마세요.

오류: x509: certificate has expired or is not yet valid

원인 및 해결: 인증서 유효 기간이 지났거나 기기의 시스템 시간이 크게 잘못되었습니다. 먼저 시스템 자동 날짜와 시간대를 활성화하고 시간을 동기화하세요. 시간이 올바른데도 오류가 계속되면 서버 인증서 설정을 갱신해야 합니다.

오류: failed to parse private key

원인 및 해결: 개인 키 파일의 내용이나 형식이 잘못되었거나 인증서와 짝이 맞지 않습니다. 일반 클라이언트 아웃바운드 노드는 보통 서버 개인 키를 로드하지 않습니다. 서버용 전체 설정을 잘못 가져온 것은 아닌지 확인하세요.

인증서 문제를 판단하는 세 단계

  • 먼저 시간: 시스템 날짜가 몇 달 정도 어긋나면 아직 유효한 인증서도 아직 시작되지 않았거나 이미 만료된 것으로 판단될 수 있습니다.
  • 다음은 이름: 연결 주소는 진입점 도메인일 수 있지만 TLS 서버 이름은 서버 설정 및 인증서 적용 범위와 일치해야 합니다.
  • 마지막은 파일: 로컬 인증서를 명시적으로 사용하는 설정에서만 파일 경로를 확인하면 됩니다. 일반 구독 노드에 인증서나 개인 키 경로를 임의로 추가해서는 안 됩니다.

수정 후 검증: 이전 오류가 새로운 오류로 바뀐 것은 아닌지 확인

한 가지 항목을 수정한 뒤에는 커널을 완전히 중지하고 다시 시작해야 합니다. 인터페이스에서 노드만 전환하면 이전 프로세스나 이전에 생성된 설정을 계속 사용할 수 있습니다. 시작 성공의 최소 기준은 로그에 리스닝 생성 또는 핵심 실행 정보가 나타나고 프로세스가 즉시 종료되지 않으며 로컬 포트가 리스닝 상태이고 이후 요청이 프록시 아웃바운드로 전달되는 것입니다.

첫 번째 오류가 사라졌지만 다른 오류가 나타났다고 해서 수정이 잘못된 것은 아닙니다. 설정 로딩에는 순서가 있어 파서는 이전 단계를 통과한 뒤에야 다음 단계를 검사합니다. 예를 들어 JSON 쉼표를 수정한 후에야 필드 오타가 드러날 수 있고, 10808을 해제한 후에야 인증서 이름 오류가 나타날 수 있습니다. 새로운 첫 번째 오류를 유형별로 계속 처리하면 됩니다.

  1. 커널을 중지하고 약 2초 기다려 새 로그와 이전 로그의 시간대를 명확히 구분하세요.
  2. 같은 노드를 다시 시작하고 포트, 프로토콜, 라우팅, DNS를 동시에 변경하지 마세요.
  3. 로그에 bind, invalid character, unknown field, x509 같은 원래 키워드가 더 이상 나타나지 않는지 확인하세요.
  4. 일반 웹페이지를 하나 연 다음 로그에 새로운 연결 기록이 생성되는지 확인하세요.
  5. 단일 노드가 정상 작동하는 것을 확인한 뒤 사용자 지정 라우팅, TUN, LAN 리스닝 같은 추가 설정을 복원하세요.

로그에 warning이 많이 표시되는데 모두 처리해야 하나요?

그럴 필요는 없습니다. 먼저 프로세스를 종료시킨 첫 번째 error 또는 failed를 처리하세요. 이전 필드, 호환 동작, DNS 폴백에 관한 warning은 시작을 막지 않을 수 있으므로 연결 결과와 함께 판단해야 합니다.

어떤 노드로 바꿔도 10808이 사용 중이라고 표시되면 어떻게 하나요?

중복 실행 중인 클라이언트와 남아 있는 커널을 완전히 종료한 뒤 “설정” → “매개변수 설정” → “기본 설정”에서 SOCKS 포트를 임시로 11808로 변경하세요. 시작에 성공하면 원래 포트를 다른 프로세스가 사용 중이었다는 뜻입니다.

구독 업데이트 후 갑자기 unknown field가 나타나면 어떻게 확인하나요?

먼저 클라이언트와 커널을 업데이트한 다음 구독을 다시 업데이트하고 설정을 생성하세요. 일부 노드만 실패하면 해당 노드만 삭제한 뒤 다시 가져오고, 모두 실패하면 전역 사용자 지정 설정과 라우팅 조각을 확인하세요.

v2rayNG에 시작 실패만 표시되고 자세한 원인이 없으면 어떻게 하나요?

연결을 끊은 뒤 오른쪽 상단 메뉴에서 “로그”로 이동하고, 메인 화면으로 돌아가 한 번 다시 시작한 다음 즉시 최신 기록을 확인하세요. 첫 번째 오류 앞뒤 약 10줄을 복사하고 상태 표시줄 안내만 기록하지 마세요.

v2flyNG의 문제 해결 순서도 다른가요?

기본 순서는 같습니다. 먼저 로그 시간을 확인하고 첫 번째 설정 또는 리스닝 오류를 찾습니다. 다만 v2flyNG는 v2fly 커널을 사용하므로 Xray에만 적용되는 일부 필드를 그대로 사용할 수 없습니다. 현재 커널이 실제로 출력한 내용을 기준으로 판단하세요.

재사용 가능한 문제 기록 양식

클라이언트: v2rayN
커널: Xray
발생 시간: 2026-07-31 14:26
문제 범위: 모든 노드
첫 번째 오류: failed to listen TCP on 127.0.0.1:10808
이번 변경: SOCKS 포트를 11808로 변경
재테스트 결과: 커널이 계속 실행되고 로컬 리스닝이 생성됨

클라이언트, 커널, 발생 시간, 문제 범위, 첫 번째 오류, 한 번의 변경 사항을 기록하면 같은 작업을 반복하는 일을 줄일 수 있습니다. 다음에 비슷한 문제가 발생하면 키워드와 문제 범위를 먼저 비교하고 전체 설정을 재설치하거나 초기화하는 것부터 시작할 필요가 없습니다. 로그 문제 해결의 핵심은 모든 영어 메시지를 외우는 것이 아니라 오류가 어느 단계에서 발생했는지 확인하고 매번 변수 하나만 검증하는 것입니다.

V2Ray 클라이언트 다운로드