VMess와 VLESS는 Type만 바꿔 서로 전환할 수 없습니다. 두 프로토콜 모두 UUID를 사용자 식별에 사용하는 경우가 많지만, 프로토콜의 암호화 방식은 다르며 외부 전송 계층에 TLS와 WebSocket을 사용할 수도 있습니다. 서비스 제공업체의 접속 정보나 구독을 이미 보유한 사용자를 위해 프로토콜 → 인증 → 전송 방식 → TLS 순서로 항목을 확인하고, Global Routing으로 연결 문제와 규칙 문제를 구분하는 방법을 설명합니다. 구독과 노드는 서비스 제공업체에서 제공받으세요.
1. VMess, VLESS, TLS와 전송 계층 구분하기
Shadowrocket에서 VMess와 VLESS는 서로 다른 프록시 프로토콜이며, 같은 연결의 속도 설정이 아닙니다. 서버가 사용하는 프로토콜과 동일한 Type을 선택해야 합니다. 서버 주소, 포트, UUID가 모두 같더라도 VMess를 VLESS로 바꾸기만 해서는 서버가 다른 프로토콜을 자동으로 받아들이지 않습니다.
접속 정보를 이해할 때는 설정을 여러 계층으로 나눠 살펴보세요. VMess 또는 VLESS는 프록시 프로토콜과 인증 형식을 정하고, TCP나 WebSocket은 연결을 전달하는 방식을 정합니다. TLS는 해당 연결을 암호화하고 서버 신원을 확인합니다. WebSocket 자체가 암호화를 의미하지는 않으며, 포트가 443이라고 해서 TLS가 활성화된 것도 아닙니다.
예를 들어 ‘VLESS + WebSocket + TLS’는 VLESS로 프록시 요청을 처리하고, WebSocket으로 전송하며, TLS 종료 지점까지의 연결을 TLS로 보호한다는 뜻입니다. 세 용어는 서로 다른 항목을 설명하므로 하나를 다른 하나로 대신할 수 없습니다.
2. 암호화와 UUID: VLESS의 none이 연결 전체의 보호 부재를 뜻하지는 않습니다
VMess는 프로토콜 계층에서 데이터를 암호화할 수 있습니다. AEAD를 사용하는 VMess 구현은 해당 프로토콜 데이터에 인증 보호도 적용합니다. 데이터 암호화 방식은 서버와 호환되는 설정을 사용해야 합니다. 클라이언트에 표시되는 auto 등의 옵션은 VMess의 암호화 설정과 관련이 있으므로 VLESS 설정에 그대로 적용하면 안 됩니다.
VLESS는 VMess처럼 프로토콜 계층에서 데이터를 암호화하지 않습니다. 일반적인 설정의 encryption=none은 이 계층의 암호화가 없다는 뜻입니다. 외부에 TLS를 올바르게 설정했다면 연결은 TLS를 통해 전송 중 보호를 받을 수 있습니다. 따라서 ‘VLESS에는 자체 데이터 암호화가 없다’와 ‘VLESS 연결은 반드시 평문이다’는 서로 다른 의미입니다. 서비스 제공업체가 요구하는 TLS를 이 이유만으로 끄지 마세요.
| 확인 항목 | VMess | VLESS |
|---|---|---|
| 사용자 인증 정보 | 일반적으로 UUID를 사용하며 서버의 사용자 설정과 일치해야 합니다. | 일반적으로 UUID를 사용하며 서버의 사용자 설정과 일치해야 합니다. |
| 프로토콜 계층 데이터 암호화 | 프로토콜 계층 암호화를 지원합니다. 서버 요구사항에 맞는 호환 설정을 선택하세요. | 이 계층의 암호화를 제공하지 않습니다. 일반적인 encryption 값은 none입니다. |
| 외부 TLS | TLS와 함께 사용할 수 있으며, 프로토콜 이름만으로 TLS 사용 여부가 정해지지 않습니다. | TLS와 함께 사용할 수 있습니다. none이라는 이유로 TLS를 끄면 안 됩니다. |
| AlterId | 이전 버전과의 호환을 위한 항목입니다. 최신 AEAD VMess에서는 일반적으로 0을 사용하므로 임의로 0이 아닌 값으로 바꾸지 마세요. | VMess의 AlterId를 사용하지 않으므로 값을 그대로 복사하면 안 됩니다. |
| 시간 확인 | 인증 과정이 시간에 영향을 받으므로 기기 시간이 크게 어긋나면 연결에 실패할 수 있습니다. | VMess의 시간 기반 인증 방식은 아니지만, TLS 인증서의 유효기간을 확인하려면 정확한 시간이 필요합니다. |
UUID는 인증 정보이지 서버 도메인이나 구독 주소가 아닙니다. 두 프로토콜에서 같은 형식의 UUID를 사용하더라도 계정을 서로 공유할 수 있다는 뜻은 아닙니다. 복사할 때 따옴표, 공백, 줄바꿈이 포함되지 않도록 하세요. 진단 정보를 다른 사람에게 보낼 때는 UUID, 구독 token 및 기타 인증 정보를 가리세요.
3. Shadowrocket 설정 항목: 공통 항목과 프로토콜별 항목 확인
Home에서 노드를 추가하거나 편집할 때는 먼저 Type을 확인한 다음 항목을 하나씩 입력하세요. 구독을 이미 사용 중이라면 서비스 제공업체가 제공한 가져오기 데이터를 우선 사용해 수동 입력 중 확장 설정이 빠지지 않도록 하세요. 아래 표는 각 항목의 의미를 정리한 것입니다. Type에 따라 표시되는 옵션이 다를 수 있으므로 현재 화면과 서비스 제공업체의 안내를 따르세요.
| 항목 또는 매개변수 | 입력 내용 | 흔한 실수 |
|---|---|---|
| Type | VMess 또는 VLESS를 정확히 선택합니다. | 노드 이름만 보고 프로토콜을 추측합니다. 이름은 임의로 지정할 수 있으므로 판단 근거가 되지 않습니다. |
| 서버 주소 | 서비스 제공업체가 안내한 도메인 또는 IP 주소입니다. | 전체 구독 URL을 주소 입력란에 넣거나 https://를 잘못 추가합니다. |
| Port | 서비스 제공업체가 지정한 정수 포트를 입력합니다. 예: 443 | TLS는 443 포트만 사용한다고 생각해 실제 포트를 임의로 바꿉니다. |
| UUID | 원래 값을 문자 단위로 그대로 입력합니다. | 노드 메모를 계정 정보로 착각하거나 복사 중 일부 문자를 빠뜨립니다. |
| 전송 설정 | 접속 정보에 따라 TCP, WebSocket 등 해당 전송 방식을 선택합니다. | 두 프로토콜 모두 WebSocket을 사용해야 한다고 생각합니다. |
| TLS / SNI | 활성화 여부, 서버 이름, 인증서 요구사항을 확인합니다. | 연결 주소를 그대로 SNI에 복사해 서비스 제공업체가 지정한 도메인을 무시합니다. |
| WebSocket Host / Path | WebSocket을 사용할 때는 서버 요구사항에 따라 입력합니다. | Path 앞의 /를 빠뜨리거나 Host와 SNI를 같은 항목으로 취급합니다. |
서버 주소는 연결을 시작할 대상을 지정합니다. SNI는 TLS 핸드셰이크에서 서버 이름을 전달하며 관련 인증서 검증 설정에도 영향을 줍니다. WebSocket Host는 HTTP 요청의 호스트 정보를 나타냅니다. 값이 서로 같을 때도 있지만 각 항목의 역할은 다릅니다. 서비스 제공업체가 값을 각각 안내했다면 보기 좋게 맞춘다는 이유로 하나로 통일하지 마세요.
- 먼저 원본 접속 정보를 따로 보관하고 Type, 주소, Port, UUID를 확인합니다.
- 그다음 전송 방식을 확인합니다. WebSocket을 사용하는 경우에만 해당 Host와 Path를 설정합니다.
- 마지막으로 TLS, SNI 및 서비스 제공업체가 요구하는 추가 설정을 확인합니다. 인증서 검증을 끄는 것을 기본 해결책으로 삼지 마세요.
- 저장한 뒤 Home으로 돌아가 해당 노드를 선택하고 실제 요청을 테스트합니다. 원인을 파악할 수 있도록 한 번에 하나씩만 변경하세요.
4. 구독 가져오기와 수동 입력: 두 가지 확인 방법
구독은 여러 노드 정보를 한꺼번에 제공하거나 갱신하는 방법이지, VMess나 VLESS 자체를 의미하지 않습니다. 하나의 구독에 서로 다른 프로토콜이 포함될 수 있으며, 업데이트 후 노드 주소, 포트, 전송 설정이 바뀔 수도 있습니다. 가져오기에 성공했다는 것은 클라이언트가 데이터를 읽었다는 뜻일 뿐, 인증 정보가 여전히 유효하거나 서버를 현재 사용할 수 있다는 보장은 아닙니다.
확인 방법: 원본 접속 정보를 보관해 반복적인 수동 수정을 줄이세요
구독을 사용하는 경우
- 구독은 서비스 제공업체에서 제공받으세요. Home에서 구독 추가 기능을 열고 업데이트를 완료합니다.
- 가져온 항목을 펼쳐 Type, 주소, 포트가 서비스 제공업체의 안내와 일치하는지 확인합니다.
- 업데이트 전에 직접 수정한 내용을 기록해 두세요. 구독 업데이트 과정에서 노드 항목이 다시 생성되거나 덮어써질 수 있습니다.
개별 노드 접속 정보만 있는 경우
- Home에서 노드를 추가한 다음 올바른 Type을 선택합니다.
- 항목별 안내에 따라 UUID, 전송 방식, TLS를 입력하고 두 프로토콜의 전용 설정을 혼용하지 마세요.
- 원본 접속 정보를 보관하세요. 값이 바뀌면 설정을 반복해서 추측하지 말고 항목별로 대조합니다.
두 방법 모두 서버 설정을 기준으로 해야 합니다. 구독, 노드 인증 정보, 앱 구매 내역은 각각 별도로 관리됩니다.
구독 주소에는 인증 정보가 포함되는 경우가 많습니다. 예시 주소 https://example.com/sub?token=xxxx는 구조를 설명하기 위한 것이며 가져오기에 사용할 수 없습니다. 실제 주소를 공개 스크린샷, 대화 기록, 로그에 남기지 마세요. 구독 업데이트에 실패하면 주소 만료, 요청에 연결할 수 없는 문제, 응답 내용을 해석할 수 없는 문제를 구분한 뒤 서비스 제공업체에 문의하세요.
5. 연결 테스트: 노드 설정 오류와 Global Routing 선택 구분하기
Home에서는 노드를 선택하고 연결하며, Config에서는 구성 파일과 규칙을 관리하고, Settings에는 앱 설정이 있습니다. 노드 프로토콜을 올바르게 입력해도 모든 요청이 해당 노드를 거치는 것은 아닙니다. Global Routing은 트래픽 처리 방식을 결정하며, Config에 적용된 규칙도 함께 확인해야 합니다.
Config
권장현재 구성의 규칙에 따라 트래픽 처리 방식을 선택합니다. 앞선 규칙에 일치하지 않는 요청은 일반적으로 FINAL로 전달됩니다. 직접 연결 여부는 구성에 따라 달라지며, 나머지 요청이 항상 직접 연결되는 것은 아닙니다.
적합한 경우: 규칙을 확인했고 대상별로 처리 방식을 나눠 일상적으로 사용하려는 경우
Proxy
트래픽을 프록시 경로로 전달해 대상별 규칙 매칭의 영향을 잠시 제외할 수 있습니다. 테스트할 때 선택한 노드와 적용되는 제외 설정도 확인하세요.
적합한 경우: 테스트 대상을 바꾸지 않고 선택한 노드가 요청을 처리할 수 있는지 확인하려는 경우
Direct
직접 연결 경로를 사용합니다. 이 방식으로 웹페이지가 열려도 방금 설정한 VMess 또는 VLESS 노드가 유효하다는 뜻은 아닙니다.
적합한 경우: 같은 대상에 로컬 네트워크로 직접 접속할 수 있는지 비교하려는 경우
Scene을 사용한다면 해당 Scene의 설정도 확인하세요. 이전에 선택한 노드만으로 현재 연결 경로를 판단할 수 없습니다. 문제를 확인할 때는 네트워크와 테스트 대상을 고정하고, 먼저 현재 방식을 기록한 뒤 잠시 전환해 테스트하고 끝나면 원래 설정으로 되돌리세요. On Demand는 조건에 따라 연결을 관리할 뿐 UUID, SNI, WebSocket Path를 수정해 주지는 않습니다.
- Direct에서는 열리지만 Proxy에서는 실패: 규칙을 먼저 바꾸지 말고 선택한 노드, 서버 연결 상태, 인증 정보를 확인합니다.
- Proxy에서는 열리지만 Config에서는 실패: 현재 구성의 DOMAIN-SUFFIX, GEOIP, IP-CIDR 및 FINAL이 지정하는 정책을 확인하고 요청 기록을 통해 실제로 적용된 규칙을 살펴봅니다.
- 연결 시간 초과: 먼저 주소, 포트, 현재 네트워크를 확인하세요. 시간 초과만으로 UUID 오류라고 단정할 수는 없습니다.
- TLS 또는 인증서 관련 오류: 기기 시간, SNI, 인증서 이름, TLS 설정을 확인하세요. 인증서 검증을 건너뛰는 방법을 일반적인 해결책으로 사용하지 마세요.
6. 자주 묻는 질문: 속도, 프로토콜 전환, 가져온 뒤 발생하는 문제
VLESS가 VMess보다 항상 빠른가요?
프로토콜 이름만으로 속도를 판단할 수 없습니다. 같은 네트워크와 비슷한 시간대에 같은 대상을 테스트하고 요청 완료 여부와 지연 시간을 기록한 뒤, 서버 경로, 혼잡도, 외부 전송 방식을 확인하세요. 두 노드의 서버가 서로 다르면 차이를 전부 프로토콜 탓으로 돌릴 수 없습니다. VLESS에 자체 데이터 암호화가 없다고 해서 모든 환경에서 처리량이 더 높은 것도 아닙니다.
Type을 VMess에서 VLESS로 바로 바꿔도 되나요?
Type을 바꾸는 것만으로 프로토콜을 전환할 수는 없습니다. 먼저 서비스 제공업체에서 VLESS에 맞는 접속 정보를 받은 다음 Home에서 별도 노드를 만들어 확인하세요. 서버가 해당 프로토콜로 설정되어 있어야 합니다. UUID가 같아도 서버 지원을 대신할 수 없으므로 기존 VMess 노드는 비교할 수 있도록 유지하세요.
UUID와 포트가 맞는데도 WebSocket에 연결할 수 없는 이유는 무엇인가요?
전송 방식, Host, Path, TLS, SNI를 추가로 확인하세요. 예를 들어 서버에서 요구하는 Path가 /connect라면 connect 또는 /를 입력하는 것은 같은 경로가 아닙니다. HTTP 상태 오류가 발생하면 서비스 제공업체의 안내를 참고해 리버스 프록시 진입점을 확인하고 도메인을 임의로 바꿔가며 테스트하지 마세요. /connect는 경로 예시일 뿐 모든 서버에 적용되는 값이 아닙니다.
구독을 업데이트한 뒤 이전에 작동하던 노드가 실패하면 어떻게 해야 하나요?
먼저 Home에서 현재 선택된 노드를 확인한 다음 업데이트된 Type, 주소, 전송 설정을 비교하고 직접 수정한 값이 덮어써졌는지 확인하세요. 응답 데이터에 필수 항목이 없다면 인증 정보를 가린 오류 설명을 보관해 서비스 제공업체에 문의하세요. UUID나 TLS 설정을 임의로 추측하지 마세요.
7. 앱 출처와 서비스 범위 확인
Shadowrocket은 클로즈드 소스 상용 앱이며, App Store에서만 구매하고 설치할 수 있습니다. 일회성 구매 방식입니다. 확인할 때는 공식 아이콘, 개발자 Shadow Launch Technology Limited, 앱 ID 932747118를 살펴보세요. 주로 iPhone과 iPad에서 사용합니다. 시스템 요구 사항, 가격, 호환성, 구매 가능 범위는 App Store 페이지에 표시된 내용을 따르세요.