VLESS・VMess・Trojan・Shadowsocks:どれを使うべきか

VLESS・VMess・Trojan・Shadowsocks の通信上の違い、制限の厳しいネットワークで通用するもの、まず何を頼むべきかを解説。v2rc が読み込める形式も紹介します。

最終確認日:

V2Ray クライアントがプロトコルを選んでくれるわけではありません。決めるのは読み込む設定で、その設定はプロバイダーか自分のサーバーから来ます。つまり、実際に考えるべきなのは、何を頼むか、あるいは何を構築するかです。この記事では重要な違いを説明し、最後に短い推奨をまとめます。

選択は 1 つではなく 3 層

「VLESS か VMess か」は 1 つの判断に聞こえますが、実際には 3 つあります。

  • プロトコル:クライアントがどう認証し、ペイロードがどんな形になるか(VMess、VLESS、Trojan、Shadowsocks)。
  • トランスポート:バイト列がどう運ばれるか(素の TCP、WebSocket、gRPC など)。
  • セキュリティ:接続を何で包むか(なし、TLS、REALITY)。

同じプロトコルでも、残りの 2 層しだいで、ほとんど見えなくなることもあれば、すぐ見つかることもあります。検閲側に何が見えるかは、主にトランスポートとセキュリティで決まります。

検閲側から見えるもの

  • ランダムに見えるバイト列。 素の TCP 上の Shadowsocks と VMess には、見分けのつくヘッダーがありません。それ自体が目印になります。2021 年後半以降、Great Firewall は、最初のパケットが完全に暗号化されたデータに見える接続をブロックしています。詳しくは中国の記事をご覧ください。
  • TLS ハンドシェイク。 Trojan、および TLS 上の VLESS や VMess は HTTPS に見えます。それでも検閲側は、サーバー名、IP アドレス、証明書、接続の挙動を調べることができます。
  • 借り物のハンドシェイク。 REALITY は、あなたが選んだ実在の Web サイトの TLS ハンドシェイクを模倣します。鍵を持たないプローブは、その実在のサイトに転送され、本物のページを目にします。自前のドメイン名や証明書は必要ありません。

4 つのプロトコルの比較

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 接続の中にパスワードを入れる方式です。パスワードを知らないクライアントには、代わりに普通の Web ページが返されます。実在するドメインの本物の証明書が必要で、ドメインはブロックされる可能性があります。
  • Shadowsocks は昔からある暗号化プロキシで、運用がいちばん簡単です。AEAD 暗号を使ってください。rc4-md5 や aes-256-cfb のような古いストリーム暗号は弱いものです。プラグインやラッパーがなければ、そのトラフィックは完全に暗号化されたデータに見える種類のものになります。

REALITY と Vision が加えるもの

REALITY の設定には、security=reality、サーバー名(sni)、公開鍵(pbk)、ショート ID(sid)が含まれます。サーバー名は、TLS 1.3 と HTTP/2 に対応した実在の Web サイトでなければなりません。REALITY のドキュメントがまさにそれを求めています。

flow=xtls-rprx-vision は Vision フローです。TLS 接続の中に別の TLS 接続を載せると、見分けのつくパターンが残ります。研究文献ではこれを TLS-in-TLS と呼び、Xue et al. (USENIX Security 2024) は、こうしたパターンから難読化されたプロキシが露見しうることを示しました。Vision は、それ自体が HTTPS であるトラフィックについて、このパターンを減らすように設計されています。

どちらも万能ではありません。サーバーの IP アドレスとホスティング先のネットワークは依然として重要で、REALITY も、接続が海外データセンターのアドレスへ向かっているという事実までは隠しません。

何を頼むか

  1. 制限の厳しいネットワーク(ロシア、イラン、中国など):TCP 上、ポート 443 の VLESS + REALITY + Vision。
  2. 種類の異なる 2 つ目の設定: Trojan、または WebSocket か gRPC を使った TLS 上の VLESS(CDN の背後に置く方法もあります)。CDN はサーバーの IP アドレスを隠しますが、CDN 自体にあなたの地域から届くこと、そして帯域を絞られていないことが前提になります。
  3. 制限のないネットワーク: 4 つのどれでも構いません。プロバイダーがすでに対応しているものを使ってください。
  4. プロバイダーからサブスクリプションをもらった場合: 自分で選ぶことはありませんが、リンクを読めば何を受け取ったのかが分かります。設定リンクの読み方をご覧ください。
  5. 異なるホストの設定を少なくとも 2 つ持っておく。 1 つが使えなくなったときに必要なのは、別の IP アドレスと、できれば別のプロトコルです。同じサーバーの別の設定では役に立ちません。

v2rc で読み込めるもの、読み込めないもの

v2rc は、リンク、V2Ray の JSON ファイル、クリップボード、サブスクリプション URL から、VMess、VLESS(REALITY を含む)、Shadowsocks、Trojan を読み込めます。Hysteria 2、TUIC、WireGuard、AmneziaWG、NaiveProxy は読み込めません。最初の 4 つは UDP 上で動作しますが、制限の厳しいネットワークの多くは UDP を破棄します。NaiveProxy は HTTPS 上で動作しますが、専用のクライアントが必要です。これらを使うには別のアプリが必要です。

v2rc にサーバーは付属しません。設定はご自身で用意します。Smart Connect は最速の設定を選び、切り替える前にトンネルが実際に通信できることを確認します。

出典

設定を持ち込むだけ。あとは迷わない。

iPhone・iPad・Mac 向けに App Store で無料。