この記事は、v2rayN、v2rayNG、v2flyNGを設定しているものの、VMess、VLESS、Trojan、Shadowsocksのどれを選ぶべきか迷っている方に向けた内容です。重要なのはプロトコル名の新旧ではなく、サーバー側のコア、トランスポート層、セキュリティ層、端末性能、ネットワークの変動が合っているかどうかです。用途ごとに候補を絞り込み、実際の通信性能に影響するサブスクリプションの主要項目も確認できます。
プロトコル・セキュリティ層・トランスポート層を切り分ける
VMess、VLESS、Trojan、Shadowsocksが主に担うのは、クライアントとサーバー間での認証、トラフィックのカプセル化、転送です。TCP、WebSocket、gRPCなどはトランスポート方式、TLSとREALITYは接続の安全性やハンドシェイクの方式に当たります。これらの層を混同すると、「特定のプロトコルは特定のポートに向いている」「WebSocketにすれば必ず見つかりにくくなる」といった誤った判断につながります。
たとえば、VLESS自体は通信データを暗号化しないため、通常はTLSまたはREALITYと組み合わせます。Trojanは一般的にTLSを前提として構成し、VMessは認証と暗号化の仕組みを内蔵しながらTLSを追加することもできます。Shadowsocksは事前共有鍵と対称暗号方式を使用します。同じプロトコルでもトランスポート層が異なれば、接続確立までの時間、追加ヘッダー、障害時の挙動が変わる場合があります。
ポート番号はサービスの待ち受け位置を示すだけで、プロトコルの優劣を決めるものではありません。443がTLSサービスでよく使われるのは、標準的なHTTPSポートの慣例に合うためです。Shadowsocks、VMessなどの設定でも別のポートを使用できます。v2rayNのローカルポートも変更できるため、確認時は「設定」→「パラメーター設定」に表示される現在値を基準にし、10808や10809を機械的に当てはめないでください。
| プロトコル | 認証と暗号化のポイント | よくあるセキュリティ構成 | 主な注意点 |
|---|---|---|---|
| VMess | ユーザーID、時刻の検証、プロトコル独自の認証・暗号化を使用 | VMess + TCP + TLS、または VMess + WebSocket + TLS | クライアントとサーバーの時刻差が大きいと、認証に失敗することがあります |
| VLESS | 認証とデータ転送を簡潔に保ち、データ暗号化は内蔵しない | VLESS + TLS、または VLESS + REALITY + Vision | security、flow、トランスポート関連の項目を正しく理解する必要があります |
| Trojan | パスワードで認証し、TLSで接続を保護 | Trojan + TCP + TLS | 証明書、ドメイン、システム時刻がTLSハンドシェイクに影響します |
| Shadowsocks | 事前共有鍵とAEADまたは2022シリーズの暗号方式 | AES-GCM、ChaCha20-Poly1305、または2022方式 | 双方で完全に同じ、かつ対応済みの方式を使用する必要があります |
4種類のプロトコルにおける主な違い
VMessはV2Rayエコシステムで早くから普及したプロトコルで、現在も成熟したサブスクリプションでよく使われています。認証、時刻検証、暗号化の処理を備え、サーバーとクライアントは通常UUIDでユーザーを識別します。既存設定の対応範囲が広く、v2rayN、v2rayNG、v2flyNGで一般的な構成を扱える点が利点です。一方、VLESSよりプロトコルのロジックやカプセル化が複雑です。
VLESSは認証と転送を簡潔に設計したプロトコルで、ユーザー識別子には通常UUIDを使用し、バイナリ長は16バイトです。VLESSはデータ層を独自に暗号化しないため、導入時にセキュリティ設計を省略できません。Xrayコアでよく使われるVLESS + REALITY + XTLS Vision構成では、「VLESS」という名前だけに頼るのではなく、安全なハンドシェイクとフロー制御を連携させることが重要です。
VMess
既存のV2Rayサブスクリプションや従来のWebSocket、TCP設定と互換性があり、古いサービスからの移行でも変更を抑えられます。
適しているケース:安定したVMessノードがあり、既存設定との互換性が必要な場合
VLESS
おすすめプロトコル層が簡潔で、XrayのREALITYやXTLS Visionなどと組み合わせやすく、パラメーターの境界も明確です。
適しているケース:新たにXrayサービスを構築する場合、デスクトップやAndroidで日常的に使う場合
Trojan
TLSを基盤とし、ドメイン、証明書、パスワード、サーバーの待ち受け設定が主な確認ポイントです。
適しているケース:標準的なTLS構成があり、設定構造を分かりやすく保ちたい場合
Shadowsocks
プロトコル実装が比較的コンパクトで、対応する暗号方式を選べば低性能端末の処理負荷を抑えられます。
適しているケース:シンプルな転送、リソースに制約のある端末、双方のバージョンを明確に管理できる場合
Trojanは一般的に標準TLS接続の上に構築され、認証情報はTLSで保護された接続内部に置かれます。トラブルシューティングの手順も比較的明確です。まずドメイン解決、次に証明書の有効性とシステム時刻を確認し、その後パスワード、ポート、トランスポート設定を照合します。TLSハンドシェイクが完了していない場合、ルーティングルールを調整し続けても問題は解決しません。
Shadowsocksの性能は、選択した暗号方式、プロセッサの命令セット、実装バージョンに直接左右されます。AESのハードウェアアクセラレーションに対応したデスクトップCPUではAES-GCMが適していることが多く、対応アクセラレーションのない端末ではChaCha20-Poly1305を比較できます。2022シリーズは鍵管理とリプレイ対策をさらに規格化していますが、クライアントとサーバーの双方が対応している必要があり、片側だけ変更することはできません。
結論:プロトコル名だけでは完全な設定を判断できない
VLESSを見たらsecurity、flow、network、serverNameを確認し、Shadowsocksを見たらmethodと鍵を確認してください。サブスクリプションで重要な項目が1つでも欠けていると、プロトコル自体の理論上の負荷より接続結果に大きく影響する場合があります。
固定回線・モバイル回線・低性能端末での選び方
固定回線は接続が安定し、パケットロスも少ないため、選択肢が最も広くなります。サーバー側がXrayで、パラメーターがそろっているなら、まずVLESS + REALITY + XTLS Visionを検討できます。既存のVMess + TLSノードが長期間安定しているなら、名前を変えるためだけに再構築する必要はありません。ドメインとTLSサービスを適切に管理できる環境ではTrojanが適しており、Shadowsocksは構成が簡潔で、双方のバージョンを管理しやすい転送に向いています。
モバイル回線では基地局の切り替え、アドレス変更、一時的な揺らぎが発生します。この場合は、まず不要なトランスポート層の多重化を減らしてからプロトコルを比較します。WebSocketは既存のHTTPインフラを通して転送しやすい一方、HTTPヘッダーとフレームのカプセル化が増えます。直接TCPは構造が簡単ですが、サーバーの入口とネットワーク環境で安定した接続が許可されているか確認が必要です。あらゆるモバイル回線で有利になる固定的な正解はありません。
おすすめ構成:安定したネットワークと変動するネットワークでテストグループを分ける
固定回線のデスクトップ
- v2rayNでXrayコアを使用
- VLESSと既存のVMessを優先的に比較
- システムプロキシのポートはパラメーター設定を基準にする
- 回線差を排除するため同じサーバーを固定して使用
Androidのモバイル回線
- v2rayNGでXrayコアを使用
- 無線LANとモバイル回線を分けてテスト
- 構造が簡単な予備設定を1つ残す
- ネットワーク切り替え後に接続ログを再確認
プロトコルを比較するときは、サーバー、出口回線、テスト時間帯をそろえる必要があります。そうしないと、測定しているのはプロトコル差ではなく、主に回線差になってしまいます。
低性能端末では、暗号計算とカプセル化の層数が重要です。プロセッサがAES命令のアクセラレーションに対応しているなら、ShadowsocksのAES-128-GCMを出発点として評価できます。対応していない場合は、双方の実装が対応していることを前提にChaCha20-Poly1305を比較できます。VLESSのプロトコル層は軽量ですが、TLS、REALITY、複雑なトランスポートを重ねると計算資源が必要になるため、プロトコル層が簡潔というだけでチェーン全体の負荷が最も低いとは判断できません。
- まずサーバー側のプロトコル、コア、セキュリティ層、トランスポート方式、ポートを記録し、ノード名だけで管理しないでください。
- 同じネットワーク、同じサーバーで候補設定を個別に接続し、異なる回線を比較に混ぜないようにします。
- 初回接続が安定するか、連続アクセスが途切れないか、端末に明らかな発熱やバッテリー消費の変化がないかを確認します。
- モバイル回線のテストでは、少なくとも1回はネットワークを切り替え、切り替え後にクライアントが接続を復旧できるか確認します。
- 動作確認済みの設定を1つフォールバック用に残し、そのうえでパラメーターを1つずつ調整します。
v2rayN、v2rayNG、v2flyNGで設定を確認する
デスクトップでv2rayNを使う場合は、まずサブスクリプションを更新してノード編集画面を開き、アドレス、ポート、ユーザーIDまたはパスワード、トランスポートプロトコル、セキュリティ方式、SNIまたはserverNameを確認します。続いて「設定」→「パラメーター設定」で、ローカルSOCKSとHTTPの待ち受けポートを確認します。ブラウザーや他のアプリで10808を手動指定している場合は、クライアントのポート変更に合わせて呼び出し側も変更してください。
VLESS + REALITYの設定では、publicKey、shortId、serverName、fingerprint、flowも確認します。よくあるflowの値はxtls-rprx-visionですが、有効化するかどうかはサーバー側と一致させる必要があります。REALITYは従来のWebサイト証明書ファイルを使う同じ導入手順ではないため、Trojanの証明書トラブルシューティングをそのまま適用できません。
- v2rayNで対象サーバーを選び、編集画面を開いて、サブスクリプションの解析によってプロトコル項目が別の種類になっていないことを確認します。
- VMessではUUID、alterId、security、network、TLSを重点的に確認します。現代的な設定ではalterIdは通常0です。
- VLESSではUUID、encryption、flow、security、network、serverNameを重点的に確認します。よくあるencryptionの値はnoneです。
- Trojanではパスワード、ポート、TLS、serverName、証明書に対応するドメインを重点的に確認します。
- Shadowsocksではmethod、パスワード、ポートを重点的に確認し、方式名がサーバー側と完全に一致していることを確認します。
プロトコルのトラブルシューティング記録例
プロトコル: VLESS
アドレスとポート: サーバー側と確認済み
トランスポート: tcp
セキュリティ層: reality
flow: xtls-rprx-vision
serverName: サーバー側と確認済み
ローカルSOCKS: 10808
ローカルHTTP: 10809
AndroidでXrayのREALITYとVisionを利用する必要がある場合は、Xrayコア搭載のv2rayNGを使用し、インポート後に関連項目が失われていないことを確認します。v2flyNGはv2flyコアを採用しており、そのコアが対応するVMess、VLESS、Trojan、Shadowsocksの設定に適していますが、Xray専用の組み合わせは共有リンクの名前だけでは利用可否を判断できません。
サブスクリプションのインポートに成功したことは、クライアントがテキストを認識したことを示すだけで、サーバー側のパラメーターが正しいとは限りません。接続に失敗したらクライアントのログを開き、DNS解決失敗、接続拒否、TLSハンドシェイク失敗、認証失敗、ローカルポートの競合を切り分けてください。エラーごとに確認すべき層は異なるため、プロトコルを何度も切り替えるだけでは本当の原因を隠してしまいます。
よくある選択の疑問と具体的な対処法
固定回線ならVLESSを選べばよい?
まずサーバー側がXrayを使用し、VLESSのパラメーターをすべて提供していることを確認します。既存のVMessノードが安定しているなら、プロトコル名だけを理由に移行する必要はありません。新しい設定を作る場合は、VLESS + REALITY + XTLS Visionを優先的に検討できます。
VMessをインポートした後、認証失敗が表示され続ける場合は?
まずシステムの自動時刻合わせを有効にし、UUID、alterId、securityを確認します。VMessの認証は時刻に依存するため、端末と標準時刻の差が大きいと、アドレスとポートが正しくても失敗する場合があります。
Trojanのパスワードは正しいのにTLSハンドシェイクに失敗する場合は?
ドメイン解決、443または実際の待ち受けポート、serverName、証明書に対応するドメイン、端末の時刻を順に確認します。TLSが確立していない段階では、Trojanのパスワードを変更しても証明書やドメインの問題は解決しません。
ShadowsocksはAESとChaCha20のどちらを選ぶ?
デスクトップCPUがAESハードウェアアクセラレーションに対応しているなら、まずAES-128-GCMを試せます。低性能端末ではChaCha20-Poly1305を比較してください。最終的な方式はサーバー側が提供するものを使い、クライアントのコアが明確に対応していることを確認します。
プロトコルを変更しても速度が変わらないのは正常?
正常です。帯域幅のボトルネックは、サーバーの出口、ネットワーク間の経路、ローカルの無線ネットワークにあることが多いからです。同じサーバー、同じ時間帯でプロトコル設定だけを置き換えて、初めてカプセル化や暗号化による差を判断できます。
プロトコル選択チェックリスト
新しいXray設定を作り、デスクトップではv2rayN、Androidではv2rayNGを使う場合は、まずVLESSとXrayが対応するセキュリティ構成を検討できます。VMess設定が多数あり安定して動作しているなら、正しいパラメーターを維持して使い続けるほうが現実的です。標準的なTLSのドメインと証明書を管理できる環境ではTrojanの構造が分かりやすく、端末のリソースが限られ、サーバー側が一致する方式に対応している場合はShadowsocksを個別に試す価値があります。
- 古いサブスクリプションとの互換性を優先:VMessを選び、既存のUUID、トランスポート、TLSパラメーターを維持します。
- 新しいXrayの主要設定を構築:VLESS + REALITY + XTLS Visionを検討し、flowと公開鍵のパラメーターを項目ごとに確認します。
- 標準的なTLSサービスがある:Trojanを検討し、ドメイン、証明書、パスワード、待ち受けポートを重点的に管理します。
- リソースに制約があり、双方のバージョンを管理できる:Shadowsocksを検討し、プロセッサ性能に応じてサーバー側が対応する暗号方式を選びます。
- モバイル回線の変動が大きい:余分なカプセル化を減らし、予備設定を残したうえで、ネットワーク切り替え後の復旧性をテストします。
- ボトルネックの位置が分からない:まずコアのログとシステムプロキシのポートを確認し、プロトコル変更を検討するのはその後にします。
最終判断:理論上の順位より、安定して再現できることを優先
同じプロトコルでも、回線、コア、トランスポートの組み合わせが異なれば結果は大きく変わります。パラメーターを完全に記録し、同じサーバーで項目ごとに比較したうえで、日常のネットワーク環境で安定して復旧でき、トラブルシューティングもしやすい構成を選んでください。