VLESS, VMess, Trojan, Shadowsocks: 어떤 프로토콜을 쓸까

VLESS, VMess, Trojan, Shadowsocks가 네트워크상에서 어떻게 다른지, 제한적인 네트워크에서 무엇이 버티는지, 먼저 무엇을 요청할지 설명합니다. v2rc가 가져올 수 있는 형식도 다룹니다.

마지막 검토:

V2Ray 클라이언트는 프로토콜을 대신 골라 주지 않습니다. 프로토콜은 가져온 설정이 정하며, 그 설정은 제공업체나 직접 운영하는 서버에서 옵니다. 그래서 실제 질문은 무엇을 요청할지, 또는 무엇을 구축할지입니다. 이 글은 중요한 차이를 설명하고 짧은 추천으로 끝납니다.

하나의 선택이 아니라 세 개의 계층

“VLESS냐 VMess냐”는 하나의 결정처럼 들리지만 실제로는 세 가지입니다.

  • 프로토콜: 클라이언트가 어떻게 인증하고 페이로드가 어떤 모습인지(VMess, VLESS, Trojan, Shadowsocks).
  • 전송 방식: 바이트가 어떻게 이동하는지(일반 TCP, WebSocket, gRPC 등).
  • 보안: 연결을 무엇으로 감싸는지(없음, TLS 또는 REALITY).

같은 프로토콜이라도 나머지 두 계층에 따라 거의 보이지 않을 수도, 쉽게 눈에 띌 수도 있습니다. 검열 측에 보이는 모습은 대부분 전송 방식과 보안이 결정합니다.

검열 측이 볼 수 있는 것

  • 무작위처럼 보이는 바이트. 일반 TCP 위의 Shadowsocks와 VMess에는 알아볼 수 있는 헤더가 없습니다. 이것 자체가 신호입니다. 2021년 말부터 만리방화벽(Great Firewall)은 첫 패킷이 완전히 암호화된 데이터처럼 보이는 연결을 차단해 왔습니다. 자세한 내용은 중국 편을 보세요.
  • TLS 핸드셰이크. Trojan, 그리고 TLS 위의 VLESS나 VMess는 HTTPS처럼 보입니다. 그래도 검열 측은 서버 이름, IP 주소, 인증서, 연결이 동작하는 방식을 확인할 수 있습니다.
  • 빌려 온 핸드셰이크. REALITY는 사용자가 고른 실제 웹사이트의 TLS 핸드셰이크를 흉내 냅니다. 키가 없는 탐색 요청은 그 실제 사이트로 넘겨져 실제 페이지를 보게 됩니다. 도메인 이름이나 인증서를 직접 마련할 필요가 없습니다.

네 가지 프로토콜 한눈에 비교

VMessVLESSTrojanShadowsocks
페이로드를 스스로 암호화함예아니요, TLS 또는 REALITY에 의존아니요, TLS에 의존예
기본적으로 보이는 모습일반 TCP 위의 무작위 바이트보안 설정에 따라 다름: 무작위 바이트, TLS 또는 REALITYHTTPS무작위 바이트
직접 소유한 도메인과 인증서 필요TLS를 쓸 때만TLS를 쓸 때만, REALITY에서는 불필요예아니요
시계가 틀리면 실패함예아니요아니요아니요
v2rc로 가져오기가능가능가능가능
  • VMess는 V2Ray의 원래 프로토콜입니다. UUID와 타임스탬프로 인증하기 때문에, 휴대폰이나 서버의 시계가 몇 분만 어긋나도 오류 메시지 없이 실패합니다. alterId는 0(AEAD 모드)을 쓰세요. 0이 아닌 alterId는 구형 방식입니다.
  • VLESS는 더 가벼운 후속 프로토콜입니다. 자체 암호화를 하지 않으므로 그 아래 계층만큼만 안전합니다. TLS나 REALITY와 함께 쓰고, 열린 인터넷에서 보안 none으로는 절대 쓰지 마세요.
  • Trojan은 HTTPS를 그대로 따라 합니다. 평범한 TLS 연결 안에 비밀번호를 담는 방식입니다. 비밀번호를 모르는 클라이언트에게는 대신 평범한 웹 페이지를 보여 줍니다. 실제 도메인의 실제 인증서가 필요하며, 도메인은 차단될 수 있습니다.
  • Shadowsocks는 오랫동안 쓰여 온 암호화 프록시이며 운영하기 가장 간단합니다. AEAD 암호를 쓰세요. rc4-md5나 aes-256-cfb 같은 구형 스트림 암호는 취약합니다. 플러그인이나 래퍼가 없으면 트래픽은 완전히 암호화된 종류입니다.

REALITY와 Vision이 더하는 것

REALITY 설정에는 security=reality, 서버 이름(sni), 공개 키(pbk), 짧은 ID(sid)가 보입니다. 서버 이름은 TLS 1.3과 HTTP/2를 지원하는 실제 웹사이트여야 하며, REALITY 문서가 바로 그것을 요구합니다.

flow=xtls-rprx-vision은 Vision 플로우입니다. 다른 TLS 연결 안에 TLS 연결을 실으면 알아볼 수 있는 패턴이 남으며, 연구 문헌에서는 이를 TLS-in-TLS라고 부릅니다. Xue et al. (USENIX Security 2024)는 이런 패턴이 난독화된 프록시를 드러낼 수 있음을 보였습니다. Vision은 그 자체가 HTTPS인 트래픽에서 이 패턴을 줄이도록 설계되었습니다.

둘 다 만능은 아닙니다. 서버의 IP 주소와 호스팅 네트워크는 여전히 중요하며, REALITY도 연결이 해외 데이터센터 주소로 향한다는 사실까지 숨겨 주지는 않습니다.

무엇을 요청할까

  1. 제한적인 네트워크(러시아, 이란, 중국 등)에서는 443 포트의 TCP 위에서 REALITY와 Vision을 쓰는 VLESS.
  2. 종류가 다른 두 번째 설정: Trojan, 또는 WebSocket이나 gRPC를 쓰는 TLS 위의 VLESS이며, 필요하면 CDN 뒤에 둡니다. CDN은 서버의 IP 주소를 숨겨 주지만, CDN 자체에 접속할 수 있어야 하고 사용자가 있는 곳에서 속도가 제한되지 않아야 합니다.
  3. 열린 네트워크: 네 가지 중 아무거나. 제공업체가 이미 지원하는 것을 쓰세요.
  4. 제공업체가 구독을 준다면: 직접 고를 수는 없지만, 링크를 읽어 무엇을 받았는지 알 수 있습니다. 설정 링크 읽는 법을 보세요.
  5. 서로 다른 호스트의 설정을 최소 두 개 보관하세요. 하나가 실패하면 같은 서버의 다른 설정이 아니라 다른 IP 주소, 가능하면 다른 프로토콜이 필요합니다.

v2rc가 가져올 수 있는 것과 없는 것

v2rc는 링크, V2Ray JSON 파일, 클립보드, 구독 URL에서 VMess, VLESS(REALITY 포함), Shadowsocks, Trojan을 가져옵니다. Hysteria 2, TUIC, WireGuard, AmneziaWG, NaiveProxy는 가져오지 않습니다. 앞의 네 가지는 UDP 위에서 동작하는데, 제한적인 네트워크 중 상당수가 UDP를 차단합니다. NaiveProxy는 HTTPS 위에서 동작하지만 전용 클라이언트가 필요합니다. 이런 프로토콜에는 다른 앱이 필요합니다.

v2rc에는 서버가 포함되어 있지 않으며, 설정은 직접 가져와야 합니다. Smart Connect는 가장 빠른 설정을 고른 뒤 전환하기 전에 터널이 실제로 트래픽을 통과시키는지 확인합니다.

출처

설정만 가져오세요. 추측은 그만.

iPhone, iPad, Mac용 App Store에서 무료.