v2rayN에서 서버를 바꾼 뒤 코어 시작 오류가 표시되거나, 업데이트 후 실행되지 않거나, 라우팅 규칙을 켤 때 종료되는 경우에 적용할 수 있습니다. 먼저 ‘프로세스가 시작되지 않음’과 ‘시작 후 연결 실패’를 구분한 다음, 로그 마지막 부분의 구체적인 오류를 바탕으로 수신 대기 포트, 설정 항목, 실행 파일, 규칙 리소스를 확인하세요. 아래 예시는 Windows와 Xray 코어를 중심으로 설명합니다. 포트 번호는 점검용 예시이며 설치 환경마다 기본값이 다를 수 있습니다.
시작 오류와 연결 오류 구분하기
v2rayN은 설정 및 관리 화면이며 실제 연결은 선택한 코어가 처리합니다. 메인 창이 열려도 코어가 실행 중이라는 뜻은 아니고, 브라우저가 열리지 않는다고 코어 시작에 실패한 것도 아닙니다. timeout이 보인다고 클라이언트를 재설치하면 실제 원인을 놓치기 쉽습니다.
| 로그 또는 증상 | 발생 단계 | 우선 확인할 항목 |
|---|---|---|
| 지정된 파일을 찾을 수 없음, 코어 프로세스가 나타나지 않음 | 프로세스 생성 전 | 코어 디렉터리, 압축 파일을 완전히 풀었는지, 보안 소프트웨어 기록 |
failed to load config | 설정 로드 | 이어지는 오류에 표시된 필드, 프로토콜, 규칙 파일 이름 |
failed to listen | 로컬 수신 대기 초기화 | 수신 대기 주소 및 포트 충돌 |
연결 기록이 있고 이후 i/o timeout이 표시됨 | 실행 후 연결 단계 | 서버 주소, 네트워크, DNS, 전송 매개변수 |
메인 화면 아래쪽의 로그 또는 정보 영역을 열고 한 번 실행했을 때 발생한 오류 전체를 확인하세요. 화면 배치는 Desktop과 WPF 버전에 따라 다릅니다. 클라이언트에 표시된 ‘시작 실패’ 알림이 아니라 코어 출력 로그를 찾는 것이 중요합니다. 오류 체인의 >는 상위 원인과 하위 원인을 연결하는 데 쓰이는 경우가 많으며, 대개 마지막 부분에 앞선 요약보다 구체적인 내용이 표시됩니다.
한 번 재현하고 점검 조건 고정하기
서버를 계속 바꾸고 코어를 전환하거나 라우팅을 수정하면 로그가 뒤섞입니다. 먼저 현재 코어, 서버 유형, 로컬 수신 대기 포트를 기록한 다음 한 번만 재현하세요. 아래 경로는 일반적인 중국어 UI를 기준으로 합니다. 메뉴 배치가 다르면 해당 설정 항목을 찾아 이동하고, 다른 버전의 디렉터리 구조를 그대로 적용하지 마세요.
-
현재 설정 기록하기
메인 화면에서 현재 서버와 라우팅 모드를 기록하세요. ‘설정’ → ‘매개변수 설정’에서 로컬 수신 대기 포트를 확인한 다음, ‘Core 유형’ 관련 설정에서 해당 프로토콜에 실제로 선택된 코어를 확인하세요.
-
시스템 프록시 잠시 해제하기
트레이 메뉴의 ‘시스템 프록시’에서 ‘시스템 프록시 해제’를 선택하세요. 이 작업은 시스템 프록시 설정을 취소할 뿐 코어 문제를 해결하지는 않습니다. 다만 점검하는 동안 다른 앱이 작동하지 않는 로컬 포트에 계속 접속하는 것을 막을 수 있습니다.
-
한 번 실행한 로그 보관하기
먼저 기존 오류를 복사한 뒤 로그 표시를 지우거나 시간을 기록하세요. 서버를 다시 활성화하고 새로 시작할 때의 출력을 확인하세요. 구독 업데이트와 일괄 테스트를 동시에 실행하지 마세요.
-
오류에 맞춰 수정하기
한 번에 한 항목만 바꾸세요. 저장한 뒤 코어를 다시 시작하고 첫 번째 구체적인 오류가 달라졌는지 비교하세요. 수신 대기가 정상화되면 시스템 프록시를 다시 설정하고 실제 요청을 테스트하세요.
포트 충돌: 먼저 수신 대기 프로세스 확인하기
로그에 bind, listen tcp 또는 ‘각 소켓 주소는 일반적으로 한 번만 사용할 수 있습니다’가 표시되면 로컬 포트를 먼저 확인하세요. 다른 v2rayN 인스턴스가 포트를 사용 중일 수도 있고, 이전 종료 후 코어 프로세스가 남아 있을 수도 있습니다. 운영체제마다 같은 오류의 표현이 다르므로 문구가 정확히 일치하는지보다 수신 대기 주소와 포트를 기준으로 판단하세요.
Windows 명령 프롬프트에서 다음 명령을 실행하세요. 숫자는 ‘설정’ → ‘매개변수 설정’에 실제로 지정된 포트로 바꿔야 합니다. 출력에서는 로컬 주소 열, LISTENING 상태, 마지막 열의 PID를 확인하세요. 원격 주소에만 해당 숫자가 있다고 로컬 포트가 사용 중인 것은 아닙니다.
netstat -ano -p tcp | findstr ":10808"
netstat -ano -p tcp | findstr ":10809"
- ‘작업 관리자’ → ‘세부 정보’에서 PID로 프로그램을 찾으세요. 필요한 경우 PID 열을 표시하고 실행 파일 위치를 확인하세요.
- 다른 클라이언트 인스턴스가 사용 중이라면 해당 인스턴스를 정상적으로 종료하세요. 알 수 없는 PID에 강제 종료 명령을 실행하지 마세요.
- 다른 프로그램이 해당 포트를 계속 사용해야 한다면 ‘설정’ → ‘매개변수 설정’에서 로컬 수신 대기 포트를 변경하고 저장한 뒤 코어를 다시 시작하세요.
- 포트를 바꾼 뒤 브라우저나 도구에 프록시 포트를 직접 입력해 둔 경우에도 함께 수정한 다음 시스템 프록시를 다시 설정하세요. 모든 앱이 자동으로 변경된 포트를 따라간다고 가정하지 마세요.
설정 항목: 오류 체인에서 구체적인 원인 찾기
failed to load config는 오류가 시작된 지점을 나타낼 뿐 JSON 형식, 사용자 식별자, 프로토콜 호환성 중 무엇이 문제인지는 알려주지 않습니다. 일반 서버는 화면에서 실행 설정을 생성하므로 서버 편집 화면으로 돌아가 수정하세요. 사용자 지정 설정을 쓰는 경우에만 해당 원본 파일을 직접 확인하세요. 실행 중 생성되는 파일은 다음 시작 때 덮어쓸 수 있어 장기적인 수정 위치로 적합하지 않습니다.
오류: invalid character
원인: 설정을 파싱하는 중 유효하지 않은 문자가 발견되었습니다. 이어지는 로그에 문자나 위치가 표시되는 경우가 많습니다.
해결 방법: 사용자 지정 JSON에 중국어 따옴표, 불필요한 후행 쉼표, 복사해 붙여넣은 설명 문구가 포함되지 않았는지 확인하세요. 로그에 표시된 파일 이름만 바꾸지는 마세요.
오류: invalid UUID
원인: UUID가 필요한 필드를 현재 코어의 형식에 맞게 해석할 수 없습니다. 사용자 식별자가 잘렸거나 공유 링크 전체를 붙여 넣은 경우에 자주 발생합니다.
해결 방법: 서버 목록에서 해당 항목을 편집하고 ‘사용자 ID’를 서버 측에서 제공한 값과 대조한 뒤 앞뒤 공백을 제거하세요. 공유 링크는 가져오기 기능으로 불러와야 하며 ID 필드에 넣으면 안 됩니다.
오류: unknown config id
원인: 현재 코어가 설정에서 참조하는 프로토콜이나 설정 유형을 인식하지 못합니다. 바로 뒤에 표시되는 이름까지 확인해야 합니다.
해결 방법: 실제로 실행 중인 코어와 설정 출처를 확인하세요. REALITY 등의 기능을 사용할 때는 해당 기능을 지원하는 Xray 코어가 선택되어 있는지 확인하세요. 오류를 피하려고 프로토콜 이름만 바꾸지 마세요.
코어 종류가 다르면 ‘VLESS’라는 이름이 같다는 이유만으로 호환된다고 볼 수 없습니다. 전송 방식, 보안 계층, flow와 다른 매개변수도 모두 일치해야 합니다. 해당 항목을 직접 수정했다면 먼저 구독에서 받은 원래 설정으로 되돌리고 서버 측 요구 사항을 하나씩 확인하세요. 보안 계층을 암호화되지 않는 방식으로 바꾸는 것은 일반적인 해결책이 아닙니다.
- 일반 서버: 메인 화면에서 현재 서버를 편집하고 주소, 포트, 사용자 ID, 전송 방식, TLS 설정을 확인하세요.
- 사용자 지정 설정: JSON 문법과 필드 계층을 확인하세요. 다른 코어에서 작동한다는 이유만으로 필드 값을 그대로 가져오면 안 됩니다.
- 구독에서 생성된 설정: 필요한 백업을 보관한 뒤 구독을 다시 업데이트하고 문제가 재현되는지 확인하세요. 서버 설정을 직접 수정하면 다음 업데이트 때 덮어쓸 수 있습니다.
코어 파일: 경로와 아키텍처 확인
‘시스템이 지정된 파일을 찾을 수 없습니다’ 오류가 프로세스 생성 단계에서 발생했다면 보통 설정 파싱까지 진행되지 않은 것입니다. 이때 서버 설정을 계속 바꿔도 소용이 없습니다. 먼저 로그에 표시된 실행 파일 경로를 확인하고 선택한 코어 파일이 실제로 있는지 살펴보세요. 특정 버전의 bin 디렉터리 구조를 모든 버전에 적용되는 규칙으로 여기지 마세요.
| 증상 | 확인 위치 | 해결 방법 |
|---|---|---|
| 경로에 해당 파일이 없음 | 로그의 코어 경로, 압축 해제 대상 디렉터리 | 해당 배포 패키지를 빠짐없이 다시 압축 해제하세요. 패키지에 코어가 포함되지 않았다면 클라이언트의 코어 업데이트 기능으로 보충하세요. |
| 파일이 생겼다가 사라짐 | Windows 보안 센터의 ‘바이러스 및 위협 방지’ → ‘보호 기록’ | 차단 사유와 파일 출처를 확인하고 전체 보호 기능을 바로 끄지 마세요. |
| 이 앱을 실행할 수 없음 | 시스템 유형, 패키지 아키텍처 | x64 또는 ARM64 등 실제 아키텍처에 맞는 패키지를 다시 선택하세요. |
| 권한 거부 | 파일 속성, 디렉터리 접근 권한, 보안 정책 | 파일에 실행 권한이 있고 디렉터리를 읽고 쓸 수 있는지 확인하세요. 항상 관리자 권한으로 실행하는 것을 기본 해결책으로 삼지 마세요. |
압축 파일 미리 보기 창에서 프로그램을 바로 실행하지 말고, 실행 파일만 따로 꺼내 다른 디렉터리를 버리지도 마세요. 점검을 시작하기 전에 클라이언트를 종료하고 사용자 설정을 백업한 다음, 전체 프로그램 패키지를 새 별도 디렉터리에 압축 해제해 확인하세요. 새 디렉터리에서는 실행되지만 기존 디렉터리에서는 실행되지 않는다면 전체 사용자 데이터를 바로 덮어쓰기보다 파일과 권한을 비교해야 합니다.
규칙 파일: 누락, 태그, 경로 구분하기
특정 라우팅 모드를 켠 뒤에만 시작에 실패하고 오류에 geoip.dat, geosite.dat, geoip: 또는 geosite:가 표시되면 규칙 리소스를 확인하세요. 규칙 파일은 IP 또는 도메인 분류 정보를 제공합니다. 존재하지 않는 분류 태그를 참조해도 설정 로드 단계에서 시작이 차단될 수 있으므로, 실행 후 트래픽을 분류하지 못하는 문제와는 다릅니다.
오류: failed to open file
원인: 코어에서 리소스를 읽지 못했습니다. 뒤에 표시된 경로가 규칙 파일을 가리키는 경우에만 규칙 파일 문제로 판단하세요.
해결 방법: 로그에 표시된 경로에서 파일이 존재하고 읽을 수 있는지 확인한 다음, 클라이언트의 Geo 파일 업데이트 기능으로 필요한 파일을 보충하세요. 파일을 메인 프로그램 옆에 임의로 복사한다고 적용되는 것은 아닙니다.
오류: failed to load geosite
원인: 도메인 분류 리소스를 불러오지 못했습니다. 파일이 손상되었거나 참조한 태그가 해당 리소스에 없을 수 있습니다.
해결 방법: 오류 마지막 부분에 표시된 파일 이름이나 분류 이름을 확인하세요. ‘설정’ → ‘라우팅 설정’에서 사용자 지정 규칙의 참조를 살펴보고, 해당 리소스를 업데이트한 뒤 규칙을 다시 활성화하세요.
- 현재 라우팅 설정을 먼저 백업한 다음, 최근 추가했고 Geo 분류를 참조하는 사용자 지정 규칙을 잠시 비활성화해 오류가 사라지는지 확인하세요.
- 이름만 다르고 동일한 누락 리소스를 참조하는 라우팅 모드로 바꾸는 데 그치지 마세요. 테스트 설정에서 오류가 난 리소스를 더 이상 사용하지 않는지 확인해야 합니다.
- 외부 규칙 파일의 경로는 로그와 실제 설정을 기준으로 확인하세요. 명령줄에서 코어를 실행할 때와 클라이언트가 코어를 실행할 때는 리소스 검색 환경이 다를 수 있습니다.
- 리소스를 복구한 뒤 원래 규칙을 다시 활성화하고 시작 여부뿐 아니라 대상 트래픽이 예상한 아웃바운드와 일치하는지도 확인하세요.
복구 확인 및 자주 묻는 질문
복구가 완료됐다고 판단하는 기준은 로그 창에 ‘빨간 글씨가 없는 것’이 아닙니다. 코어가 계속 실행되고, 예상한 포트에서 정상적으로 수신 대기하며, 실제 요청이 예상한 경로를 통과해야 합니다. 먼저 앱 하나로 테스트한 뒤 프록시에 의존하는 다른 도구를 다시 설정하세요. 여러 프록시 설정을 동시에 적용하지 마세요.
timeout이 발생하면 시작 오류도 계속 확인해야 하나요?
같은 실행에서 코어가 이미 수신 대기를 시작했는지, 요청이 들어왔는지 먼저 확인하세요. 프로세스가 계속 실행되고 요청이 아웃바운드 단계까지 도달했다면 서버 연결 가능성, DNS, 전송 매개변수를 점검하세요. 실행 중 발생한 시간 초과를 파일 누락 문제로 계속 다루지 마세요.
포트를 바꿨는데도 브라우저가 열리지 않아요.
먼저 새 포트가 LISTENING 상태인지 확인한 다음 시스템 프록시를 다시 설정하세요. 브라우저에 127.0.0.1:10808을 직접 입력해 뒀다면 실제 포트로 바꿔야 합니다. HTTP와 SOCKS 중 입구 유형도 맞는지 확인하세요.
코어를 바꾸니 실행됩니다. 원래 코어가 고장 난 건가요?
바로 결론 내릴 수는 없습니다. 두 코어의 실제 파일 경로, 지원하는 전송 기능, 사용하는 규칙 리소스를 비교하세요. ‘설정’ → ‘매개변수 설정’에서 Core 유형 관련 옵션을 확인한 다음 원래 코어 로그의 구체적인 필드를 점검하세요.
재설치 전에 무엇을 보관해야 하나요?
프로그램을 종료한 뒤 사용자 설정, 구독 그룹 정보, 사용자 지정 라우팅, 전체 실패 로그를 한 번 백업하세요. 먼저 별도 디렉터리에서 실행을 확인하고 설정을 하나씩 복원하세요. 기존 설정을 한꺼번에 모두 가져오면 어떤 항목이 오류를 일으켰는지 알기 어렵습니다.