VMess와 VLESS는 Type만 바꿔 서로 전환할 수 없습니다. 프로토콜 유형, UUID, 전송 방식, TLS 설정을 확인해야 하며 이름만으로 속도를 판단해서는 안 됩니다. 이 글은 iPhone, iPad, Mac, Windows, Android, Linux에서 Shadowrocket을 사용하는 분을 위한 안내입니다. iPhone/iPad의 Home → Add Server 조작을 예로 들며, 다른 플랫폼에서는 해당 필드에 맞춰 확인하세요. 이미 서비스 제공업체와 구독을 보유한 경우를 전제로 하며, 설정값을 확인하고 인증·전송·트래픽 라우팅 문제를 구분하는 방법을 안내합니다.
1. VMess와 VLESS의 핵심 차이: 인증과 암호화는 서로 다른 계층
Shadowrocket은 유료 상용 앱이며 소스 코드는 공개되어 있지 않습니다. VMess와 VLESS는 Shadowrocket이 지원하는 프록시 프로토콜 두 가지이지, 별개의 클라이언트가 아닙니다. 서버에서 사용하는 프로토콜에 맞는 Type을 선택해야 합니다. 이름이 비슷하고 모두 UUID를 사용하더라도 설정값을 서로 바꿔 쓸 수는 없습니다.
VMess는 사용자 인증과 설정 가능한 프로토콜 계층 데이터 암호화를 제공합니다. 암호화 옵션은 서버 설정과 일치해야 합니다. VLESS 자체에는 같은 방식의 프로토콜 계층 데이터 암호화가 없으며, 일반적으로 TLS 등의 보안 전송 방식과 함께 사용합니다. VLESS의 암호화 항목이 none이라고 해서 연결 전체가 평문이라고 단정할 수는 없습니다. 외부 계층에서 TLS를 사용하는지 함께 확인하세요.
| 확인 항목 | VMess | VLESS |
|---|---|---|
| 사용자 식별자 | 일반적으로 UUID로 사용자를 인증하며, 서버 설정과 일치해야 합니다. | UUID를 사용자 식별자로 사용하지만, 그렇다고 VMess 연결로 간주할 수는 없습니다. |
| 프로토콜 계층 암호화 | 해당 데이터 암호화 옵션을 제공하므로 기존 설정을 그대로 사용하세요. | 자체적으로 같은 방식의 데이터 암호화를 제공하지 않으므로 VMess 암호화 설정을 그대로 적용할 수 없습니다. |
| 외부 계층 TLS | TLS 사용 여부는 서버 구성에 따라 달라지며, 프로토콜 이름만으로 결정되지 않습니다. | 일반적으로 TLS와 함께 사용합니다. 구체적인 활성화 여부와 인증 설정은 서버 구성을 따르세요. |
| 하위 계층 전송 방식 | 다양한 전송 방식과 함께 사용할 수 있으며, 클라이언트 설정을 서버에 맞춰야 합니다. | 전송 방식도 서버와 일치해야 합니다. 주소와 UUID만 복사해서는 안 됩니다. |
| 전환 조건 | 서버에서 해당 VMess 설정을 제공해야 합니다. | 서버에서 해당 VLESS 설정을 제공해야 합니다. Type을 바꿔도 서버 기능은 달라지지 않습니다. |
요점: 서버가 제공하는 프로토콜을 먼저 확인한 뒤 암호화와 TLS를 설정하세요
현재 설정으로 연결된다면 우선 그대로 유지하세요. 다른 프로토콜로 전환하려면 기존 기록에서 Type만 바꾸지 말고, 서비스 제공업체에 문의해 새 설정 전체를 받으세요.
2. UUID·포트·전송 방식: 네 가지 설정을 나눠 확인하기
UUID는 사용자 식별자이며 서버 주소나 구독 주소가 아닙니다. 일반적으로 하이픈이 포함된 16진수 문자열 형식입니다. 문자 수와 형식이 올바르더라도 형식에 맞아 보인다는 뜻일 뿐, 서버에서 유효한 사용자임을 보장하지는 않습니다. 복사할 때 공백, 줄바꿈, 메신저에서 덧붙인 문장 부호가 포함되지 않도록 하세요.
- 주소와 포트: 서버 주소는 도메인이나 IP일 수 있습니다. 설정값에 따라 포트를 입력하세요. 포트가 443이라고 TLS가 자동으로 활성화되는 것은 아니며, 해당 포트에서 반드시 프록시 서비스가 실행된다는 뜻도 아닙니다.
- 인증 설정: UUID가 빠짐없이 입력되었는지, 해당 기록이 아직 유효한지 확인하세요. 구독 링크의 token을 UUID 필드에 입력하지 마세요.
- 전송 설정: TCP, WebSocket, gRPC 등 실제 전송 유형을 확인하세요. 설정에 WebSocket Path, Host 또는 gRPC serviceName이 있다면 각 항목도 맞춰 입력해야 합니다.
- 보안 설정: TLS 사용 여부, 서버 이름, 인증서 검증 요구 사항을 확인하세요. 서버가 해당 방식을 사용할 때만 클라이언트 설정이 유효합니다.
예를 들어 설정 문서에 WebSocket Path가 /tunnel로 표시되어 있다면 임의로 /로 줄여서는 안 됩니다. 대소문자, 앞쪽 슬래시, 경로 내용을 모두 그대로 유지하세요. WebSocket Host, TLS의 SNI, 실제 연결 주소는 각각 역할이 다릅니다. 어떤 설정에서 이 값들이 같더라도 모든 기록에 같은 값을 적용할 수는 없습니다. 이 글의 example.com은 예시 도메인일 뿐, 연결 가능한 서버 주소가 아닙니다.
3. Add Server 설정: 전체 설정값을 우선 그대로 사용하기
기존 구독에 설정값이 모두 포함되어 있다면 Home에서 가져온 기록을 우선 사용하세요. 직접 추가해야 할 때만 Home → Add Server로 이동합니다. 플랫폼에 따라 필드 순서가 다를 수 있으므로, 특정 스크린샷에서 입력란이 몇 번째인지가 아니라 각 필드의 의미에 맞춰 입력하세요. 구독 링크, UUID, 공유 링크에는 접근 정보가 포함될 수 있으니 공개적으로 공유하지 마세요.
두 가지 입력 방법: 기존 구독 사용 또는 설정값 직접 입력
기존 구독이 있는 경우
- Home에서 구독을 가져왔고 기록이 비어 있지 않은지 확인하세요.
- 대상 기록을 열고 Type, 주소, 포트, TLS를 확인하세요.
- 업데이트한 뒤 대상 기록을 다시 확인해 만료된 이전 항목을 계속 사용하지 않도록 하세요.
- 나중에 복원할 수 있도록 수정 전에 기존 설정값을 보관하세요.
전체 설정값이 있는 경우
- Home → Add Server로 이동해 해당 Type을 먼저 선택하세요.
- 주소, 포트, UUID를 입력한 뒤 전송 방식을 설정하세요.
- 원본 설정에 따라 Path, Host, SNI 등의 추가 항목을 입력하세요.
- 저장한 뒤 Home으로 돌아가 해당 기록을 선택하고 연결을 테스트하세요.
구독을 업데이트하면 기록이 새로 생성될 수 있습니다. 장기적으로 변경해야 하는 설정은 먼저 서비스 제공업체에 확인하세요. 일시적으로 직접 수정했다고 해서 서버 설정까지 변경된 것은 아닙니다.
VMess 설정 문서에 추가 인증 옵션이 있다면 원래 값대로 입력하세요. 오래된 자료의 일부 설정은 현재 서버에 적용되지 않을 수 있으므로, 가이드에 나온 숫자를 그대로 따라 해서는 안 됩니다. VLESS 설정에 추가 flow 값이 있더라도 모든 전송 방식에 그대로 적용할 수는 없습니다. 설명이 없다면 항목별로 추측해 설정을 조합하지 말고 해당 연결에 맞는 전체 설정값을 받으세요.
- Type이 설정 문서의 프로토콜 이름과 일치하는지 먼저 확인해 VLESS 기록을 VMess로 만들지 않도록 하세요.
- UUID, 서버 주소, 포트를 한 글자씩 확인하고 인접한 다른 필드에 잘못 붙여 넣지 않았는지 확인하세요.
- 전송 방식과 추가 필드를 확인한 뒤 TLS를 점검하세요. 여러 옵션을 한꺼번에 바꾸지 마세요.
- 저장한 뒤 해당 기록만 테스트하고 오류가 연결, TLS 핸드셰이크, 웹 요청 중 어느 단계에서 발생하는지 기록하세요.
4. TLS 설정 방법: 속도 조절 옵션이 아니라 서버 설정에 따르기
TLS는 전송을 보호하고 상대방의 신원을 확인하는 데 사용됩니다. ‘켜면 느리고 끄면 빠르다’는 기준으로 설정해서는 안 됩니다. 서버에서 TLS를 요구하는데 클라이언트에서 끄면 연결이 정상적으로 완료되지 않을 수 있습니다. 반대로 일반 전송만 지원하는 포트에 TLS 핸드셰이크를 보내도 실패합니다. 특히 VLESS의 암호화 항목 none을 ‘TLS도 꺼야 한다’는 뜻으로 해석하면 안 됩니다.
TLS를 켜고 서버 이름 확인하기
권장서비스 제공업체가 TLS 설정을 제공한다면 원래 설정에 따라 TLS를 켜고, 인증서 검증을 유지하며 SNI를 확인하세요. 서버가 실제로 해당 설정을 사용하는 경우에만 적용합니다. 임의의 포트를 모두 TLS로 바꾸라는 뜻은 아닙니다.
적용 대상: 서비스 제공업체가 TLS 설정을 명확히 안내한 VMess 또는 VLESS 연결
TLS 끄기: 기존 전송 설정 유지
서버 설정에 명시된 경우에만 원래 값대로 설정하세요. 외부 계층의 보호 방식도 함께 확인해야 합니다. 특히 TLS를 사용 중인 연결과 보호 기능이 없는 VLESS 연결을 같은 보안 조건으로 간주하면 안 됩니다.
적용 대상: 배포 안내가 명확하고 TLS를 사용하지 않는 서버 설정에 맞춰야 하는 연결
SNI는 TLS 핸드셰이크에서 대상 서버 이름을 지정하는 정보입니다. 인증서 검증 시에는 인증서 이름이 예상한 서버 이름과 일치하는지도 확인해야 합니다. 연결 주소가 IP이고 인증서가 도메인에 발급된 경우, 일반적으로 서비스 제공업체의 안내에 따라 올바른 서버 이름을 입력해야 합니다. WebSocket Host는 다른 계층의 설정이므로 이를 바꾼다고 TLS 이름 검증 문제가 해결되는 것은 아닙니다.
- 인증서 이름 불일치 오류가 발생하면 먼저 SNI와 서비스 제공업체가 안내한 도메인을 확인하세요. 인증서 검증부터 끄지 마세요.
- 인증서 유효 기간 관련 오류가 발생하면 기기의 날짜, 시간, 시간대가 올바른지 확인하세요.
- 핸드셰이크 시간 초과가 발생하면 먼저 네트워크와 주소·포트에 연결할 수 있는지 확인한 뒤 TLS 및 전송 설정을 점검하세요.
- 오류를 없애기 위해 안전하지 않은 연결을 허용하는 설정을 장기간 사용하지 마세요. 오류가 사라져도 신원 확인 문제가 해결된 것은 아닙니다.
5. 저장 후 웹페이지가 열리지 않을 때: 프로토콜 문제와 트래픽 라우팅 문제 구분하기
Home에서 기록을 선택하고 연결을 켰다고 해서 모든 요청이 해당 기록을 통과하는 것은 아닙니다. Global Routing은 요청을 처리하는 방식을 결정하며, Config에서는 규칙도 확인해야 합니다. 요청이 실제로 Direct로 처리되었다면 해당 웹페이지가 열리는지 여부만으로 방금 설정한 VMess 또는 VLESS의 사용 가능 여부를 판단할 수 없습니다.
| 확인 위치 | 확인할 내용 | 다음 단계 |
|---|---|---|
| Home → Global Routing → Config | 요청은 Config의 규칙에 따라 매칭되므로 현재 선택한 프록시 기록을 사용한다고 보장할 수 없습니다. | 요청 기록과 적용된 정책을 확인해 대상 요청이 실제로 어떤 경로를 거치는지 확인하세요. |
| Home → Global Routing → Proxy | 문제 해결을 위해 잠시 클라이언트가 처리하는 요청이 프록시 경로를 사용하도록 설정하세요. | 대상 기록을 선택했는지 확인한 뒤 테스트하고, 완료되면 평소 사용하던 모드로 되돌리세요. |
| Home → Global Routing → Direct | 직접 연결에 성공해도 프록시 프로토콜 설정이 올바르다는 뜻은 아닙니다. | 프록시 기록을 테스트하려면 Direct 상태로 두지 마세요. |
| Home → Global Routing → Scene | 설정된 시나리오에 따라 처리되며 결과는 시나리오 설정에 따라 달라집니다. | 먼저 현재 시나리오에 적용된 정책을 확인한 뒤 연결 결과를 판단하세요. |
| Settings → On Demand | 조건에 따라 연결을 시작하는 데 영향을 줄 뿐 UUID, TLS, 전송 설정을 수정하지는 않습니다. | 테스트 중 연결 상태를 확인해 자동 연결 동작을 프로토콜 오류로 오해하지 않도록 하세요. |
Config 모드에서 DOMAIN-SUFFIX는 도메인 접미사로, IP-CIDR은 IP 대역으로, GEOIP는 IP의 지리적 위치 조건으로 매칭합니다. FINAL은 앞선 규칙에 매칭되지 않은 요청을 처리합니다. 이 규칙들은 트래픽 경로를 정할 뿐, 서버에 사용자를 생성하거나 누락된 UUID를 채워 주지는 않습니다. 규칙이 지정하는 정책 대상도 현재 설정에 있어야 합니다.
- Home에서 방금 확인한 기록이 선택되어 있는지 확인하세요. 이름만 같은 이전 기록과 혼동하지 마세요.
- 문제 해결에 적합한 프록시 경로로 잠시 전환하고 동일한 대상 요청을 다시 테스트하세요. 기록, 모드, 네트워크를 동시에 바꾸지 마세요.
- 연결 단계에서 오류가 발생하면 주소, 포트, 인증, TLS를 다시 확인하세요. 연결은 되었지만 특정 웹사이트만 실패한다면 DNS, 규칙, 대상 웹사이트 상태를 점검하세요.
- 테스트가 끝나면 원래 모드로 되돌리고 오류 유형과 발생 시간을 기록하세요. 서비스 제공업체에 문의할 때는 UUID, token 등 민감한 정보를 가리세요.
6. VMess·VLESS 설정 관련 자주 묻는 질문
UUID가 같은데 VMess를 VLESS로 바꾸면 왜 연결되지 않나요?
UUID는 인증 설정의 일부일 뿐입니다. 서버에서도 해당 프로토콜과 전송 서비스가 실행 중이어야 합니다. 먼저 원래 Type으로 되돌리세요. VLESS를 사용하려면 서비스 제공업체에 별도의 전체 연결 설정을 요청한 뒤 Add Server에서 새 기록을 만드세요. 사용 가능한 기록 하나만 두고 반복해서 설정을 바꾸지 마세요.
VLESS에 none이라고 표시되는데 암호화가 없는 건가요?
먼저 어느 계층을 가리키는지 확인하세요. VLESS의 프로토콜 계층 암호화가 none이어도 외부 계층에서 TLS를 사용할 수 있습니다. 해당 기록을 열어 TLS, 서버 이름, 인증서 검증 설정을 확인하세요. 설정 문서에 보호 방식이 설명되어 있지 않다면 임의로 암호화 이름을 추가하지 말고 서비스 제공업체에 문의하세요.
포트를 443으로 설정했는데 왜 TLS 오류가 표시되나요?
포트 번호만으로 TLS 설정이 올바른지 보장할 수는 없습니다. 서버가 해당 포트에서 실제로 TLS를 제공하는지, SNI가 인증서와 일치하는지, 기기 시간이 올바른지, WebSocket 또는 gRPC의 추가 설정이 맞는지 차례로 확인하세요. 인증서 검증을 끄는 것으로 이런 점검을 대신하지 마세요.
어느 쪽이 더 빠른가요? 모든 VMess를 VLESS로 바꿔야 하나요?
프로토콜 이름만으로 결론을 내릴 수 없습니다. 서버 부하, 왕복 지연 시간, 패킷 손실, 전송 방식, 외부 연결 경로가 모두 사용 환경에 영향을 줍니다. 먼저 현재 작동하는 기록을 유지하세요. 두 가지 설정 모두 사용 가능하다면 같은 네트워크와 대상, 비슷한 시간대에 각각 테스트하고 결과를 기록하세요. 서로 다른 회선의 차이를 모두 프로토콜 탓으로 돌릴 수는 없습니다.
구독 업데이트 후 직접 수정한 설정이 원래대로 돌아가면 어떻게 해야 하나요?
구독 기록은 서비스 제공업체가 전달한 내용으로 다시 생성될 수 있습니다. 먼저 업데이트 후 설정값이 바뀌었는지, 구독이 여전히 유효한지 확인하세요. 장기적으로 수정해야 한다면 일치하지 않는 항목을 구체적으로 적어 서비스 제공업체에 문의하세요. 별도의 임시 기록을 만들 경우 기존 설정을 보관하고 이름을 명확히 구분해 나중에 잘못 선택하지 않도록 하세요.
이 글은 기존 설정을 입력하고 직접 확인하는 방법만 설명합니다. 이 사이트는 프록시 서버, 구독 또는 서비스 제공업체를 제공·판매·추천하지 않습니다. 계정 유효 기간, 서버 포트, 인증서 배포 문제는 사용자가 이용하는 서비스 제공업체에 확인해야 합니다. 클라이언트 필드를 수정해도 서버 측 문제가 해결되지는 않습니다.