VMess와 VLESS 차이: Shadowrocket UUID·암호화·전송 설정 방법

VMess와 VLESS의 암호화 방식, UUID와 alterId, TLS 및 전송 설정을 비교하고 Shadowrocket에서 각 항목을 입력하는 방법을 정리했습니다.

이 글의 핵심 내용

서버 접속 정보나 구독을 보유하고 있으며 Shadowrocket에서 VMess와 VLESS 설정을 확인하려는 사용자를 위한 글입니다. 먼저 프로토콜, 인증 정보, 전송 방식, TLS의 차이를 살펴본 다음 Home → Add Server 순서로 항목을 확인합니다. UUID, alterId, 암호화 옵션, Host, SNI의 역할을 파악하고 오류가 발생한 단계에 따라 연결 문제를 진단할 수 있습니다.

1. VMess와 VLESS 차이: 프로토콜 암호화와 TLS는 별개

Shadowrocket은 서버 항목에 연결 정보를 저장합니다. VMess와 VLESS는 프로토콜 유형이지, Global Routing의 라우팅 모드나 TLS 설정 이름이 아닙니다. 사용할 프로토콜은 기존 서버 설정에 따라 결정해야 합니다. 클라이언트의 Type만 변경한다고 같은 서버가 VMess에서 VLESS로 바뀌지는 않습니다.

VMess는 프로토콜 계층에서 인증과 선택적 데이터 암호화를 지원합니다. 흔히 사용하는 암호화 옵션으로는 auto, aes-128-gcm, chacha20-poly1305가 있습니다. VLESS 자체에는 범용 데이터 암호화 계층이 없습니다. 일반적인 설정의 encryption=none은 이 계층을 가리키며, 바깥 계층의 TLS까지 끄라는 뜻은 아닙니다. 두 프로토콜 모두 서버 요구사항에 맞게 전송 방식과 보안 계층을 설정해야 합니다.

확인 항목VMessVLESS
인증 정보일반적으로 UUID 사용; 서버 설정과 일치해야 함일반적으로 UUID 사용; 서버 설정과 일치해야 함
프로토콜 계층 암호화암호화 방식 설정 가능; 제공된 서버 정보에 맞게 입력일반적인 encryption 값은 none이며, 이 계층에서 데이터 암호화를 제공하지 않음
alterId이전 버전과의 호환을 위한 설정; 최신 VMess AEAD에서는 보통 0이 설정을 사용하지 않음
TLS 및 전송프로토콜 이름만으로 판단하지 말고 별도로 확인프로토콜 이름만으로 판단하지 말고 별도로 확인

VLESS의 flow도 VMess 암호화 방식을 대신하는 항목이 아닙니다. 기존 정보에 flow가 명시되어 있다면 선택한 유형과 전송 및 보안 설정이 해당 조합을 지원하는지 확인하고, 안내된 값 그대로 입력하세요. 일반적인 VLESS 설정에는 임의로 추가하지 마세요. 같은 프로토콜 이름을 사용하더라도 모든 확장 설정을 서로 바꿔 쓸 수 있는 것은 아닙니다.

2. Add Server 순서대로 Address, Port, UUID 확인

Home에서 오른쪽 위의 추가 버튼을 눌러 Add Server로 이동합니다. 먼저 Type에서 VMess 또는 VLESS를 선택한 다음 나머지 항목을 입력하세요. 유형에 따라 표시되는 항목이 다르며, 앱 언어나 버전에 따라 화면의 이름이 달라질 수 있습니다. 비슷한 이름의 설정을 찾으려고 프로토콜 유형을 바꾸지 말고 각 항목의 의미를 확인하세요.

  1. Address: 기존 서비스에서 제공한 도메인이나 IP 주소를 입력합니다. 일반적인 주소 항목에는 https://, 경로, 구독 쿼리 매개변수가 포함되지 않습니다. 전체 구독 링크를 여기에 붙여 넣지 마세요.
  2. Port: 서버가 실제로 수신 대기하는 포트를 입력합니다. 예시의 443은 설명용 값일 뿐이며, TLS를 사용하는 모든 서비스가 같은 포트를 쓴다는 의미는 아닙니다.
  3. UUID: 기존 인증 정보를 한 글자씩 그대로 복사하고 앞뒤 공백과 줄바꿈은 제거합니다. UUID 형식에 맞아 보여도 서버에서 해당 ID를 승인했다는 뜻은 아닙니다.
  4. 프로토콜별 항목: VMess에서는 암호화 옵션과 alterId를 확인합니다. VLESS에서는 기존 정보에 있는 encryption, flow 등을 확인하세요. 해당 항목이 보이지 않으면 값을 메모에 적어 넣지 말고, 먼저 선택한 유형과 지원 여부를 확인합니다.
  5. 전송 및 TLS: 이어서 Transport, TLS와 관련 하위 항목을 확인한 뒤 모두 점검하고 저장합니다. 메모는 서버 항목을 구분하기 위한 것이며 서버 인증에는 사용되지 않습니다.
128 bit
UUID의 길이; 일반적인 텍스트 형식은 하이픈을 포함해 36자
0
최신 VMess AEAD 설정에서 흔히 사용하는 alterId 값
443
TLS에서 자주 쓰는 포트 예시; 실제로는 서버에서 지정한 값을 사용해야 함

예를 들어 123e4567-e89b-42d3-a456-426614174000은 UUID의 텍스트 형식을 보여 주기 위한 예시일 뿐, 사용할 수 있는 인증 정보가 아닙니다. UUID를 구독 URL의 token과 혼동해서도 안 됩니다. UUID는 서버 인증 정보이고, token은 구독 전체를 가져오는 데 쓰이는 인증 정보일 수 있습니다. 문제 해결 정보를 공유할 때는 실제 값을 공개하지 마세요.

3. VMess의 alterId와 암호화 옵션 입력 방법

alterId는 VMess의 이전 설정에서 사용하던 호환 매개변수입니다. 일부 공유 정보에서는 같은 항목을 aid로 표기합니다. 최신 VMess AEAD 설정에서는 보통 0을 사용합니다. 여기서 0은 인증을 끈다는 뜻도, TLS를 끈다는 뜻도 아닙니다. 이전 설정에서 0이 아닌 값이 제공되었다면 기존 서비스 제공자에게 호환 여부를 먼저 확인하세요. 속도를 높이려고 임의로 값을 바꾸지 마세요.

VMess 인증은 시간에도 영향을 받습니다. 설정이 모두 일치하는데도 인증에 계속 실패한다면 Apple 기기의 날짜와 시간이 정확한지 확인하고, 시스템에서 허용하는 자동 시간 설정을 사용하세요. 시간을 바로잡으면 관련 원인을 배제할 수 있지만, 잘못된 UUID나 만료된 권한, 접속할 수 없는 서버 포트까지 해결되지는 않습니다.

4. Transport, TLS, Host, SNI의 역할

Transport는 TCP나 WebSocket처럼 프로토콜 데이터를 전달하는 방식을 정하고, TLS는 보안 연결과 인증서 검증을 담당합니다. Address는 네트워크 연결 대상 주소이고, SNI는 TLS 핸드셰이크에서 사용하는 서버 이름입니다. WebSocket의 Host는 HTTP 요청 헤더 항목입니다. 설정에 따라 값이 서로 같을 수도, 다를 수도 있으므로 서로 대신 입력하면 안 됩니다.

항목 또는 매개변수입력 기준잘못 입력했을 때 나타나는 증상
TransportWebSocket 등 서버의 실제 전송 방식과 일치해야 함포트에는 연결되지만 이후 프로토콜 연결을 맺지 못함
Path예: /edge; 앞의 슬래시, 대소문자, 필요한 쿼리 매개변수를 그대로 유지WebSocket 핸드셰이크 실패, HTTP 404가 표시될 수 있음
Hostedge.example.com처럼 기존 서비스에서 요구하는 HTTP Host잘못된 사이트로 요청이 전달되어 403 또는 404가 표시될 수 있음
TLS / SNI서비스 요구사항에 따라 TLS를 켜고 지정된 서버 이름을 입력인증서 이름이 일치하지 않거나 TLS 핸드셰이크 실패

표에 나온 도메인과 경로는 설명용 예시이며 접속 주소가 아닙니다. HTTP 상태 코드는 문제를 진단하기 위한 단서일 뿐, 403이나 404만으로 어떤 설정이 잘못되었는지 단정할 수 없습니다. 리버스 프록시 설정으로도 같은 결과가 발생할 수 있습니다. 서버에서 요구하는 Host와 Path를 클라이언트의 현재 값과 하나씩 비교하세요.

기존 설정에 따라 TLS를 켜고 인증서를 검증

권장

서비스에서 TLS를 명시적으로 요구하면 TLS를 켜고 올바른 SNI를 입력한 뒤 인증서 검증을 유지하세요. 인증서 오류가 나면 검증을 건너뛰기보다 기기 시간, 도메인, 서버 인증서를 먼저 확인합니다.

적합한 경우: 기존 설정에서 TLS를 명시한 VMess 또는 VLESS 연결

기존 설정에 따라 TLS를 끔

서버에서 비 TLS 전송을 명시적으로 사용하는 경우에만 끈 상태로 둡니다. 클라이언트에서만 TLS를 켜면 핸드셰이크가 일치하지 않습니다. VLESS 자체는 데이터 암호화를 제공하지 않으므로 일반 비 TLS 연결을 동등한 암호화 연결로 간주해서는 안 됩니다.

적합한 경우: 서비스 제공자가 명시한 통제된 테스트 또는 정해진 다른 보안 캡슐화 환경

요약: TLS 오류가 나면 UUID보다 서버 이름을 먼저 확인

오류가 인증서 검증 단계에서 발생했다면 먼저 SNI, 인증서에 포함된 도메인, 기기 시간을 확인하세요. UUID와 전송 설정은 그대로 둔 채 문제를 수정한 다음 다시 테스트해야 어떤 항목이 영향을 주었는지 파악할 수 있습니다.

5. 저장 후 연결 확인: 연결 오류와 라우팅 오류 구분

서버 항목을 저장해도 정보 입력만 완료된 것이며, 해당 항목이 현재 연결에 사용된다는 뜻은 아닙니다. Home에서 대상 서버를 선택해 현재 사용할 항목으로 지정한 다음 연결 스위치를 켜세요. 처음 연결할 때는 시스템 안내에 따라 VPN 구성을 추가하도록 허용합니다. 이어서 Connectivity Test를 실행하고 테스트한 항목, Global Routing 모드, 오류 메시지를 기록하세요.

  1. 먼저 기본 연결 상태 확인: 시간 초과가 표시되면 Address, Port, 현재 네트워크를 먼저 확인하세요. 포트에 연결할 수 없는 경우 UUID나 WebSocket Path를 계속 바꿔도 대개 해결되지 않습니다.
  2. 다음으로 보안 및 인증 확인: 인증서 오류는 TLS와 SNI를 확인하고, 인증 실패는 UUID, VMess의 alterId, 기기 시간을 확인하세요. 오류 이름은 실제 화면에 표시된 내용을 기준으로 합니다.
  3. 그다음 애플리케이션 계층 전송 확인: TCP 연결은 되지만 WebSocket 연결이 실패하면 Transport, Host, Path를 비교하세요. 지연 시간 수치만으로는 프록시 경로 전체가 정상이라고 볼 수 없습니다.
  4. 마지막으로 라우팅 확인: Global Routing의 Direct는 대상 트래픽을 프록시로 테스트하지 않습니다. Config는 설정된 규칙에 따라 연결을 처리합니다. 규칙의 영향을 제외하려면 같은 대상을 Proxy로 잠시 비교 테스트한 뒤 원래 모드로 되돌리세요.

Config 모드에서는 DOMAIN-SUFFIX, GEOIP, IP-CIDR, FINAL 같은 규칙이 연결에 적용할 정책을 결정하며, 프로토콜 인증 실패를 해결하지는 않습니다. 예를 들어 DOMAIN-SUFFIX,example.com,PROXY는 해당 도메인 접미사와 일치하는 연결을 PROXY 정책으로 전달한다는 뜻입니다. 그 정책에서 실제로 선택한 항목이 방금 편집한 서버가 아니라면 현재 요청에는 수정 사항이 적용되지 않습니다.

테스트 시점을 직접 관리하려면 Settings → On Demand의 현재 설정도 확인해 자동 연결 동작이 테스트를 방해하지 않도록 하세요. 문제를 해결하는 동안에는 한 번에 항목 하나만 변경하고 서버나 주요 설정을 바꾼 뒤에는 다시 연결합니다. 프로토콜, TLS, 규칙, DNS를 한꺼번에 바꾸면 정상으로 돌아와도 원인을 파악하기 어렵습니다.

6. UUID, 구독 가져오기, 프로토콜 변경 관련 FAQ

같은 UUID를 사용하면 VMess를 VLESS로 바로 바꿀 수 있나요?

UUID가 같다는 이유만으로 바꿀 수는 없습니다. 먼저 서버에서 실제로 VLESS 접속 정보를 제공하는지 확인하세요. 그런 다음 Home → Add Server에서 해당 유형을 새로 추가하고 그 접속 정보의 주소, 포트, UUID, 전송 및 보안 설정을 입력합니다. 비교할 수 있도록 기존 항목은 남겨 두고, 사용할 수 있는 유일한 설정을 덮어쓰지 마세요.

VLESS의 encryption이 none인데 TLS는 왜 켜야 하나요?

서로 다른 계층의 설정이기 때문입니다. encryption=none은 VLESS 자체에서 이 계층의 데이터 암호화를 제공하지 않는다는 뜻입니다. 서비스에서 TLS를 요구하면 항목에서 TLS를 켜고 올바른 서버 이름을 입력해야 합니다. none이라는 값만 보고 TLS를 자동으로 끄지 마세요.

구독에 서버 항목이 이미 있는데 하나씩 직접 입력해야 하나요?

대개 그럴 필요가 없습니다. 기존 구독을 추가하려면 Home의 추가 메뉴에서 Subscribe를 선택하고 전체 구독 주소를 URL에 입력한 다음 저장하고 업데이트하세요. 가져온 서버 항목을 열어 설정을 확인하면 됩니다. 구독 주소는 서버 항목을 가져오는 데 사용하며 VMess 또는 VLESS의 Address와는 다릅니다.

Host를 수정했는데 구독을 업데이트한 뒤 왜 원래대로 돌아가나요?

구독 항목은 구독 내용에 따라 관리되므로 업데이트할 때 로컬 수정 사항이 덮어써질 수 있습니다. 먼저 비교할 설정을 저장한 뒤 문제 해결용 수동 테스트 항목을 별도로 만드세요. 장기적으로 수정하려면 원본 구독 내용을 확인해야 합니다. 임시로 수정한 값이 구독 원본에도 반영된 것으로 간주하지 마세요.

두 프로토콜 모두 가져올 수 있다면 어떤 항목을 남겨야 하나요?

먼저 인증, TLS, 전송 설정을 각각 확인한 다음 같은 네트워크와 대상, 동일한 라우팅 모드에서 테스트하세요. 기존 서버 설정과 일치하고 테스트를 통과한 항목을 남기면 됩니다. 프로토콜 이름만으로 지연 시간이나 처리량을 보장할 수 없으며 실제 연결 확인을 대신하지도 않습니다.

이 글은 사용자에게 자체 서비스와 구독이 있다는 전제하에 설정 항목과 사용 방법만 설명합니다. 문제를 문의할 때는 프로토콜 유형, 전송 방식, TLS 사용 여부, 오류가 발생한 단계, 민감한 정보를 가린 설정 구조를 제공할 수 있습니다. UUID, 전체 구독 URL 및 기타 인증 정보는 비공개로 유지하세요.

App Store 정식 앱 확인