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 つのプロトコルの比較
| VMess | VLESS | Trojan | Shadowsocks | |
|---|---|---|---|---|
| ペイロード自体を暗号化する | はい | いいえ(TLS または REALITY に依存) | いいえ(TLS に依存) | はい |
| 既定での見え方 | 素の TCP 上ではランダムなバイト列 | セキュリティしだい:ランダムなバイト列、TLS、または REALITY | HTTPS | ランダムなバイト列 |
| 自前のドメインと証明書が必要 | 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 も、接続が海外データセンターのアドレスへ向かっているという事実までは隠しません。
何を頼むか
- 制限の厳しいネットワーク(ロシア、イラン、中国など):TCP 上、ポート 443 の VLESS + REALITY + Vision。
- 種類の異なる 2 つ目の設定: Trojan、または WebSocket か gRPC を使った TLS 上の VLESS(CDN の背後に置く方法もあります)。CDN はサーバーの IP アドレスを隠しますが、CDN 自体にあなたの地域から届くこと、そして帯域を絞られていないことが前提になります。
- 制限のないネットワーク: 4 つのどれでも構いません。プロバイダーがすでに対応しているものを使ってください。
- プロバイダーからサブスクリプションをもらった場合: 自分で選ぶことはありませんが、リンクを読めば何を受け取ったのかが分かります。設定リンクの読み方をご覧ください。
- 異なるホストの設定を少なくとも 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 は最速の設定を選び、切り替える前にトンネルが実際に通信できることを確認します。
出典
- REALITY のドキュメントと Xray の設定例
- Trojan プロトコルの説明
- Shadowsocks AEAD 仕様
- Xue, Kallitsis, Houmansadr, Ensafi:Fingerprinting Obfuscated Proxy Traffic with Encapsulated TLS Handshakes, USENIX Security 2024
- Wu et al.:How the Great Firewall of China Detects and Blocks Fully Encrypted Traffic, USENIX Security 2023