v2rayN을 두 번 클릭해도 창이 뜨지 않거나 실행 직후 종료되는 경우, Mac에서 앱이 손상되었거나 개발자를 확인할 수 없다는 경고가 표시되는 경우에 해당합니다. 먼저 앱 화면이 뜨지 않는 문제인지, 코어가 실행되지 않는 문제인지, 프록시 연결 문제인지 구분하세요. 이후 Windows 런타임, macOS 보안 경고, Linux 의존성 순으로 점검합니다. 설정 파일을 다루기 전에는 백업하고, 시스템 권한을 변경할 때는 출처가 확인된 해당 앱에만 적용하세요.
먼저 구분하세요: 앱이 종료되나요, 코어가 실행되지 않나요?
v2rayN은 데스크톱 클라이언트입니다. 앱 프로세스가 구독, 노드, 설정을 관리하고, 프록시 연결은 선택한 코어가 처리합니다. 창은 열리지만 로그에 코어 종료가 기록되는 문제와 두 번 클릭해도 창이 전혀 뜨지 않는 문제는 서로 다릅니다. VLESS·VMess 설정이나 구독 주소 오류는 보통 앱 화면을 복구한 뒤 점검하면 됩니다. 처음부터 모든 노드를 삭제하지 마세요.
| 증상 | 먼저 확인할 항목 | 지금은 변경하지 않아도 되는 항목 |
|---|---|---|
| 두 번 클릭해도 창이 뜨지 않음 | 남아 있는 프로세스, 설치 파일 아키텍처, 런타임, 시스템 차단 알림 | 구독 및 라우팅 |
| 창이 뜬 직후 종료됨 | 충돌 기록, 설정 읽기, 데이터 폴더 쓰기 권한 | 노드의 전송 프로토콜 |
| 창은 정상적으로 뜨지만 코어가 실행되지 않음 | 코어 로그, 실행 권한, 로컬 포트 사용 여부 | 앱 런타임 |
| 코어는 실행되지만 웹 페이지가 열리지 않음 | 시스템 프록시, 라우팅, DNS, 노드 연결 상태 | 데스크톱 프로그램 재설치 |
먼저 Windows 작업 관리자나 macOS 활성 상태 보기에서 v2rayN을 검색하세요. 프로세스가 남아 있다면 시스템 트레이나 메뉴 막대에서 창이 숨겨져 있는지 확인합니다. 프로세스를 종료해야 한다면 클라이언트 프로세스임을 확인한 뒤 종료하고 한 번만 다시 실행하세요. 오류 메시지 원문과 발생 시각도 기록해 둡니다.
Windows: .NET 데스크톱 런타임 및 설치 파일 아키텍처 확인
Windows에서 런타임 관련 오류가 표시되더라도 “.NET을 이미 설치했다”는 이유만으로 필요한 구성 요소가 모두 갖춰졌다고 볼 수는 없습니다. .NET Runtime, ASP.NET Core Runtime, .NET Desktop Runtime은 각각 제공하는 구성 요소가 다릅니다. Windows 데스크톱 프레임워크에 의존하는 빌드에는 해당 데스크톱 런타임이 필요합니다. 다른 UI 빌드나 자체 포함 패키지는 요구 사항이 다를 수 있으므로 현재 패키지 안내와 실행 시 표시되는 메시지를 확인하세요.
오류: You must install or update .NET to run this application.
원인: 실행 프로그램이 버전 및 아키텍처 요구 사항을 충족하는 프레임워크를 찾지 못했습니다.
해결: 메시지에 표시된 Framework, Version, Architecture를 확인한 뒤 해당 구성 요소를 설치하세요. 임의의 버전 SDK 하나만 설치해서는 해결되지 않습니다.
오류: This app can't run on your PC
원인: 프로그램 아키텍처, 운영체제 호환성 또는 파일 압축 해제 상태가 맞지 않을 수 있습니다.
해결: 먼저 운영체제 종류와 설치 파일 아키텍처를 확인하세요. 파일 전체를 로컬 폴더에 다시 압축 해제한 뒤 실행 파일을 테스트합니다.
-
운영체제 종류 확인
「설정」→「시스템」→「정보」에서 「시스템 종류」를 확인하세요. x64와 ARM64는 서로 다른 아키텍처입니다. 프로세서 브랜드만 보고 설치 파일을 고르면 안 됩니다.
-
프레임워크 요구 사항 확인
프로그램 폴더에
v2rayN.runtimeconfig.json이 있으면 텍스트 편집기로 열어framework또는frameworks항목을 확인하세요. 예를 들어Microsoft.WindowsDesktop.App의 버전 필드가8.0.0이면 해당 .NET 8 데스크톱 런타임이 필요한지 확인합니다. 이는 요구 사항을 확인하는 예시일 뿐, 모든 버전이 .NET 8에 의존한다는 뜻은 아닙니다. -
설치된 프레임워크 목록 확인
터미널에서 아래 명령을 실행한 뒤 프레임워크 이름과 주 버전을 비교하세요.
dotnet을 찾을 수 없다는 메시지가 나오면 공유 런타임이 설치되지 않았거나 PATH 설정에 문제가 있을 수 있습니다. 자체 포함 패키지는 시스템 런타임에 의존하지 않을 수도 있습니다. -
종료 기록 확인
Win+R을 누르고
eventvwr.msc를 입력해 실행하세요. 「Windows 로그」→「응용 프로그램」에서 같은 시각의 「.NET Runtime」 또는 「Application Error」 이벤트를 찾아 예외 유형과 오류 모듈을 기록합니다.
dotnet --list-runtimes
dotnet --info
압축 파일에서 실행 파일 하나만 꺼내지 마세요. 설정, 의존성, 리소스 폴더가 빠져도 실행에 실패할 수 있습니다. 먼저 프로그램 전체를 현재 사용자에게 쓰기 권한이 있는 로컬 폴더에 두고 테스트하세요. 일반적인 쓰기 실패를 “관리자 권한으로 실행해야 한다”는 문제로 오해하지 않도록 합니다. 시스템 보호 기록에서 파일이 격리된 것으로 확인되면 출처와 탐지 상세 정보를 확인하세요. 보호 기능 전체를 바로 끄지 마세요.
macOS: 격리 경고, 서명 문제, 실행 권한 구분
Mac에서 표시되는 “개발자를 확인할 수 없음”, “손상됨”, “권한 없음” 메시지는 같은 명령으로 처리할 수 없습니다. 먼저 Apple 메뉴의 「이 Mac에 관하여」에서 칩 종류를 확인하고, 그에 맞는 macOS 설치 파일을 선택하세요. 디스크 이미지에서 앱을 「응용 프로그램」으로 복사한 뒤 실행하세요. 읽기 전용 이미지에서 계속 실행하거나 이미지 안에서 업데이트하지 마세요.
오류: 개발자를 확인할 수 없음
원인: 시스템에서 다운로드한 앱의 실행을 아직 허용하지 않은 상태입니다. 표시되는 문구는 macOS 버전에 따라 다를 수 있습니다.
해결: 다운로드 출처를 확인한 뒤 앱을 한 번 실행해 보세요. 그런 다음 「시스템 설정」→「개인정보 보호 및 보안」을 열고 해당 앱에 「그래도 열기」가 표시되면 안내에 따라 확인합니다.
오류: 앱이 손상되어 열 수 없음
원인: 다운로드 또는 압축 해제 오류, 서명 확인 실패, 앱 수정 등이 원인일 수 있습니다. 격리 속성 문제라고 단정할 수는 없습니다.
해결: 아키텍처에 맞는 패키지를 다시 받아 앱을 교체한 뒤 보안 평가 결과를 확인하세요. 서명 확인에 실패했다면 격리 속성을 제거해 문제를 숨기지 마세요.
오류: Permission denied
원인: 실행하려는 프로그램에 실행 권한이 없거나 해당 폴더에 접근할 수 없습니다.
해결: 로그에서 문제가 발생한 파일을 확인하세요. 우선 앱 전체를 다시 설치하고, 출처와 대상이 확인된 파일의 권한만 점검합니다. 폴더 전체에 재귀적으로 권한을 열어 주지 마세요.
아래 명령은 앱이 실제로 /Applications/v2rayN.app에 설치된 경우를 예로 듭니다. Finder에 표시된 앱 이름이 다르면 먼저 실제 경로를 확인하세요. 처음 두 명령은 아키텍처와 확장 속성을 읽고, 나머지 두 명령은 서명 및 시스템 보안 평가를 확인합니다. 앱을 변경하지는 않습니다.
uname -m
xattr -l "/Applications/v2rayN.app"
codesign --verify --deep --strict --verbose=2 "/Applications/v2rayN.app"
spctl --assess --type execute --verbose=4 "/Applications/v2rayN.app"
arm64는 Apple 칩의 네이티브 아키텍처이고 x86_64는 Intel 아키텍처입니다. 보안 평가에서 거부된 이유는 전체 출력 내용을 바탕으로 판단해야 합니다. 공증이 누락된 경우와 앱 파일이 수정된 경우는 같은 문제가 아닙니다. 앱 출처를 확인할 수 없거나 서명 검사에서 리소스 손상이 명확히 표시되면 작업을 중단하고 파일을 다시 받으세요.
xattr -dr com.apple.quarantine "/Applications/v2rayN.app"
명령 실행에 권한이 부족하다는 메시지가 나와도 곧바로 권한 상승 명령을 추가하지 마세요. 다른 계정으로 앱을 설치했는지 먼저 확인하고, 필요하면 권한이 있는 계정으로 다시 복사해 설치합니다. 충돌 기록은 「콘솔」→「충돌 보고서」에서 앱 이름과 발생 시각으로 찾을 수 있습니다. 공유하기 전에는 사용자 이름, 개인 폴더 경로, 로그에 포함될 수 있는 서버 정보를 삭제하세요.
Linux: 터미널에서 실행하고 누락된 의존성 보완
Linux에서 데스크톱 아이콘을 두 번 클릭해도 반응이 없다면 재설치보다 터미널 출력이 더 유용할 수 있습니다. 먼저 uname -m을 실행해 아키텍처를 확인한 다음 배포판과 패키지 형식을 확인하세요. Debian 계열은 보통 DEB를 사용하고, RPM 패키지 관리자를 사용하는 배포판에는 해당 패키지를 선택해야 합니다. 패키지 형식이 맞더라도 운영체제 버전과 런타임 의존성까지 충족된다는 보장은 없습니다.
- 패키지 설치: 배포판의 소프트웨어 설치 프로그램이나 패키지 관리자로 설치하고, 의존성 오류 출력을 보관하세요. Debian 계열에서는
sudo apt --fix-broken install을 실행해 설치된 소프트웨어의 의존성 문제를 해결할 수 있습니다. 실행을 확인하기 전에 설치·삭제 예정 항목을 반드시 검토하세요. - 압축 해제 후 실행: 파일 관리자에서 실행 파일의 실제 이름을 확인하고 해당 폴더로 이동한 뒤 터미널에서 실행하세요. 배포 패키지 안의 파일 이름을 추측하지 말고, 같은 폴더의 의존성을 빼고 실행 파일만 복사하지 마세요.
- 그래픽 세션: 현재 데스크톱 사용자의 터미널에서 실행하세요. 원격 그래픽 환경이 없는 세션에서 실행해 디스플레이 서비스 연결에 실패하더라도 클라이언트 파일이 손상되었다는 뜻은 아닙니다. 이 문제를 피하려고 root로 데스크톱 앱을 실행하지 마세요.
오류: error while loading shared libraries
원인: 동적 링커가 출력에 표시된 공유 라이브러리를 찾지 못했거나, 아키텍처에 맞는 라이브러리를 찾지 못했습니다.
해결: 전체 라이브러리 이름으로 현재 배포판에서 제공하는 패키지를 찾으세요. 다른 시스템에서 같은 이름의 라이브러리를 복사해 이 시스템의 파일을 덮어쓰지 마세요.
오류: Exec format error
원인: 실행 파일 형식이 현재 시스템 아키텍처와 호환되지 않거나 파일이 불완전할 수 있습니다.
해결: uname -m 결과와 설치 파일의 아키텍처를 비교해 올바른 파일을 다시 선택하세요. 실행 권한을 추가해도 아키텍처 문제는 해결되지 않습니다.
uname -m
cat /etc/os-release
dotnet --list-runtimes
journalctl --user -b -n 80 --no-pager
마지막 명령은 이번 실행에 대한 사용자 로그의 마지막 80개 항목만 확인합니다. 클라이언트 오류가 표시되는지는 실행 방식에 따라 다릅니다. 터미널에 직접 출력된 내용도 보관하세요. GLIBC_2.xx not found와 같은 버전 요구 오류가 나오면 시스템의 핵심 C 라이브러리를 수동으로 덮어쓰지 마세요. 호환되는 빌드를 선택하거나 배포판의 절차에 따라 시스템을 업그레이드해야 합니다.
창은 열리지만 연결되지 않는다면 포트·코어·TUN 점검
여기까지 왔다면 데스크톱 프로그램 자체는 실행되고 있습니다. 이제 .NET을 추가로 설치하는 대신 코어 로그를 확인하세요. Xray 설정 오류, 누락된 노드 매개변수, 로컬 수신 포트 사용 중 등의 문제가 “창은 열려 있지만 연결할 수 없음”을 일으킬 수 있습니다. Android용 v2rayNG는 Xray 코어를, v2flyNG는 v2fly 코어를 사용합니다. 설치 방법과 데스크톱 실행 의존성이 다르므로 데스크톱 런타임 해결 방법을 그대로 적용할 수 없습니다.
로그에 TCP 포트 10808 바인딩 실패가 명확히 표시된 경우, Windows에서는 첫 번째 명령을, macOS 또는 해당 도구가 설치된 Linux에서는 두 번째 명령을 사용할 수 있습니다. 이 포트 번호는 예시일 뿐이며 모든 버전의 기본 수신 포트라는 뜻은 아닙니다. 먼저 로그에 표시된 실제 번호를 확인하세요.
netstat -ano | findstr ":10808"
lsof -nP -iTCP:10808 -sTCP:LISTEN
address already in use또는Only one usage of each socket address가 표시되면 먼저 포트를 사용 중인 프로세스를 확인하세요. 중복 실행된 클라이언트라면 불필요한 인스턴스를 종료합니다. 정체를 알 수 없는 시스템 프로세스는 바로 종료하지 마세요.- 수신 포트를 변경한 뒤에는 앱에서 수동으로 입력한 프록시 주소도 함께 확인하세요. 시스템 프록시와 앱 내부 프록시는 별개의 설정입니다. 이전 포트가 남아 있으면 “코어는 정상인데 특정 앱에서 인터넷이 되지 않는” 문제가 생길 수 있습니다.
- TUN을 켠 뒤에만 문제가 생기면 먼저 TUN을 끄고 일반 프록시 모드로 테스트하세요. TUN에는 별도의 네트워크 인터페이스와 권한이 필요합니다. 클라이언트 폴더 전체에 쓰기 권한을 열어도 해결되지 않습니다.
- 로그에서 특정 코어 파일을 실행할 수 없다고 표시되면 해당 파일이 격리되었는지, 온전한지, 아키텍처가 맞는지 확인하세요. 다른 버전의 코어 파일을 임의로 가져와 현재 설치 파일에 덮어쓰지 마세요.
정리: 문제가 발생한 단계에 맞춰 해결 대상을 선택하세요
창이 뜨지 않으면 실행 환경을 확인하고, 창은 정상인데 코어가 종료되면 코어 로그를 확인하세요. 코어가 정상적으로 실행된 뒤에야 시스템 프록시와 라우팅을 점검합니다. 한 번에 한 항목만 변경하고 다시 테스트해야 구독, 포트, 권한을 동시에 바꿔 원인을 놓치는 일을 피할 수 있습니다.
마지막에 설정을 분리하고 복구 가능한 백업을 보관하세요
같은 설치 파일이 초기 설정에서는 실행되지만 기존 설정을 읽을 때 종료되는 경우에만 설정 호환성이나 로컬 데이터 손상을 추가로 확인할 이유가 있습니다. 덮어쓰기 설치로 사용자 데이터가 자동 삭제되는 것은 아닙니다. 따라서 “재설치했는데도 계속 충돌한다”는 사실만으로 설치 파일에 문제가 없다고 단정할 수도, 사용자 폴더 전체를 비워야 한다고 판단할 수도 없습니다.
-
종료 후 백업
클라이언트를 완전히 종료하고 현재 패키지 안내와 오류 로그를 바탕으로 데이터 폴더를 확인한 뒤, 폴더 전체를 백업 위치에 복사하세요. 플랫폼과 설치 방식에 따라 위치가 다를 수 있으므로 일반 경로라고 알려진 곳을 기준으로 파일을 삭제하지 마세요.
-
프로그램 데이터 분리
새 프로그램을 별도 위치에 둡니다. 패키지가 프로그램 폴더 안의 데이터를 사용한다고 명시한 경우에만 별도 압축 해제가 데이터 분리를 의미합니다. 같은 사용자 데이터 폴더를 계속 읽는다면 먼저 백업한 다음 확인된 데이터 폴더의 이름을 바꾸어 보관하세요.
-
설정을 하나씩 복원
먼저 빈 설정으로 앱이 열리고 정상적으로 종료되는지 확인하세요. 그런 다음 구독 그룹 하나를 복원하고, 이어서 라우팅 및 기타 설정을 복원합니다. 기존 폴더 전체를 다시 덮어쓰면 문제를 일으킨 항목도 되살아날 수 있습니다.
-
문제 기록 정리
운영체제 버전, CPU 아키텍처, 설치 패키지 유형, 오류 발생 시각, 오류 메시지 전체를 기록하세요. 로그를 공유하기 전에는 구독 주소, 노드 인증 정보, UUID, 개인 도메인, 개인 경로를 가리고 예외 이름과 스택 위치는 남겨 두세요.
초기 설정에서도 계속 충돌한다면 최소 재현 조건을 유지하세요. 설치만 하고 구독을 가져오지 않으며 TUN도 켜지 않은 상태에서 종료 정보를 기록합니다. 이후 자주 묻는 질문을 참고해 원인을 더 좁혀 보세요. 앱이 안정적으로 실행되면 사용 설명서를 참고해 구독, 시스템 프록시, 라우팅을 복원하면 됩니다. 고급 설정을 한꺼번에 모두 복원할 필요는 없습니다.