プロキシプロトコルを選ぶときは、ノード名だけを見て判断できません。プロトコルは認証とデータのカプセル化を担い、TLS、Reality、WebSocket、gRPC、TCPなどはセキュリティ層やトランスポート層を担います。どの組み合わせが実際に動作するかは、クライアントのコアが決めます。同じ回線ならVMessとVLESSの速度差は小さい場合がありますが、同じプロトコルでもパケットロスの多いモバイル回線では接続安定性が大きく変わることがあります。
この記事は、v2rayN、v2rayNG、v2flyNGでノードのプロトコルを選んでいるユーザー向けです。4つのプロトコルに固定の順位を付けるのではなく、実行可能な判断手順を整理します。まずクライアントコアの互換性を確認し、次にセキュリティ層とトランスポート設定を照合します。そのうえで、パケットロス、端末性能、サーバー側の条件を踏まえて選択します。
混同しやすい4つの技術レイヤーを分けて考える
VMess、VLESS、Trojan、Shadowsocksはいずれもプロキシ接続の認証とデータ転送を担えますが、設計思想は同じではありません。VMessにはプロトコルレベルの認証と暗号化機能があります。VLESSは主に軽量な認証と転送を扱い、通常はTLSまたはRealityと組み合わせます。TrojanはTLS上で構築する構成が一般的です。Shadowsocksは指定した共通鍵暗号方式でプロキシ通信を保護します。
トランスポート方式は別のレイヤーです。ノードに「VLESS + TCP + Reality」と書かれている場合、VLESSはプロキシプロトコル、TCPは基盤となるトランスポート、Realityはセキュリティとハンドシェイクの方式です。「VMess + WebSocket + TLS」の場合は、WebSocketがデータを運び、TLSが暗号化を担当し、VMessは引き続きプロトコル認証を担います。VMessとVLESSだけを比較して後段の組み合わせを無視すると、有効な結論には通常たどり着けません。
| プロトコル | プロトコル自体の特徴 | よく使われるセキュリティ構成 | 選定時に優先して確認する項目 |
|---|---|---|---|
| VMess | 認証、時刻検証、プロトコルレベルの暗号化に対応 | TCP、WebSocketとTLSの組み合わせ | システム時刻、UUID、トランスポートパラメータ |
| VLESS | 認証とカプセル化は軽量だが、完全な通信暗号化は担わない | TLS、Reality、Vision | コア対応、serverName、flow |
| Trojan | パスワード認証を使用し、TLS上で構築する構成が一般的 | TCP + TLS、gRPC + TLS | 証明書のドメイン、SNI、パスワード、ポート |
| Shadowsocks | 事前共有パスワードと指定した暗号化方式を使用 | AEADまたは2022シリーズの方式 | method、パスワード、コアの方式対応 |
結論:単独の名称ではなく、プロトコルスタック全体を比較する
ノード名を確認したら、少なくとも「プロトコル、トランスポート、セキュリティ層、コア」の4項目を記録しましょう。VLESS + RealityとVLESS + WebSocket + TLSは異なる経路であり、安定性、サーバー要件、利用できるクライアントが変わる可能性があります。
VMess・VLESS・Trojan・Shadowsocksはどんな場面に向いているか
VMess:旧設定や成熟したサブスクリプションとの互換性
VMessは長年V2Ray系の設定で使われており、アドレス、ポート、UUID、トランスポート種別、パス、TLSパラメータなどの項目が一般的です。端末の時刻が正確である必要があり、ローカル時刻が大きくずれると認証に失敗することがあります。そのため、VMessノードが突然すべて使えなくなった一方でネットワーク自体は正常な場合は、まずWindows、macOS、Android、Linuxの日付、時刻、タイムゾーンを自動同期に設定してください。
安定して動作しているVMess + WebSocket + TLSのサブスクリプションなら、新しいプロトコル名が登場したからといってすぐに移行する必要はありません。旧式端末、古いサーバー設定、既存の入口を維持したい場合は、理論上のわずかなカプセル化差よりもVMessの設定互換性が重要になることが多いです。現在の設定では通常UUIDを使用し、alterIdは0にします。サブスクリプションに旧式パラメータが残っている場合は、クライアントで何度も試行錯誤せず、サービス提供者に更新を依頼してください。
VLESS:Xray環境の主力候補
VLESSはプロトコル自身が担う暗号化処理を減らし、通常はTLSまたはRealityに通信の安全性を委ねます。つまり「デフォルトで暗号化済み」の接続ではありません。適切なセキュリティ層がなければ、プロトコル名だけで通信の安全性を判断できません。VLESSとReality、XTLS Visionなどの組み合わせはXrayコアに依存することが多く、UUID、serverName、公開鍵、shortId、fingerprint、flowなど、クライアントとサーバーの項目を厳密に一致させる必要があります。
VLESSの利点は、組み合わせの柔軟性と比較的新しいXray機能への対応にあります。すべてのネットワークで必ず高速になるわけではありません。家庭用回線でパケットロスが少なければ、VLESSも適切に設定した他のプロトコルも、回線が許す帯域を十分に活用できることが多いです。モバイル回線で基地局を頻繁に切り替えたり、Wi-Fiとモバイル通信の間を移動したりする場合、接続復旧のしやすさはトランスポート方式、タイムアウト設定、クライアントのバックグラウンド状態に大きく左右されます。
Trojan:証明書と標準TLSの入口がある環境で管理しやすい
Trojanはパスワード認証を使用し、TLS上で直接動作させる構成が一般的です。クライアントではサーバーアドレス、ポート、パスワード、SNI、証明書のドメインを確認する必要があります。サーバーアドレスにはIPアドレスも使えますが、serverNameには通常、証明書の対象ドメインを指定します。両者が一致せず、SNIも空欄のままだと、証明書名の不一致やハンドシェイク終了が起きやすくなります。
Trojanは、ドメイン、証明書、443ポートの入口がすでに用意されている環境に適しています。設定項目は比較的分かりやすいものの、「項目が少ない」ことは「確認点が少ない」ことを意味しません。証明書の有効期限、端末時刻、SNI、ALPN、トランスポート方式、中間ネットワークがハンドシェイクに影響する場合があります。クライアントのallowInsecureは無効のままにし、証明書エラーは時刻、ドメイン、証明書チェーンを確認して修正してください。
Shadowsocks:軽量端末と明確な暗号化方式に適する
Shadowsocks設定の中心は、サーバー、ポート、パスワード、暗号化方式です。従来のAEAD方式と2022シリーズの方式は自由に置き換えられる別名ではなく、クライアントとサーバーで同じmethodを使う必要があります。サブスクリプションの読み込み後に「サポートされていない暗号化方式」と表示されたら、まずコアのバージョンと方式の対応状況を確認してください。methodを似た値に変更しても、認証は必ず失敗します。
CPUやメモリに余裕がない端末では、適切に設定したShadowsocksは導入と管理が容易なことが多いです。ただし、通信性能は暗号化方式、サーバー実装、ネットワーク品質にも左右されます。利用する際は、サブスクリプションに完全な設定が含まれているかを確認し、実際のネットワークでWebページの接続、継続ダウンロード、長時間接続をテストしてください。一度の遅延値だけで判断するのは避けましょう。
VMess
成熟した設定が多く、既存のWebSocketまたはTCPノードを継続利用したい場合に適しています。トラブル時はまずシステム時刻を確認します。
適している用途:旧サブスクリプション、既存設定、互換性の維持
VLESS
おすすめXrayコアではTLS、Reality、Visionを組み合わせられ、新しい設定の主力候補に適しています。
適している用途:新規構築、デスクトップとAndroidの主回線
Trojan
正しいTLS、証明書ドメイン、SNIが必要です。項目が分かりやすく、標準TLSの入口がある環境に適しています。
適している用途:証明書管理が明確、443ポートの入口
Shadowsocks
設定が簡潔で、暗号化方式を厳密に一致させる必要があります。リソースの限られた端末や、単純な転送構成に適しています。
適している用途:旧式端末、軽量設定、予備接続
ネットワークと端末の状況に応じてプロトコルを選ぶ
家庭用回線は通常、出口アドレスが安定し、パケットロスも少ないため、プロトコル選びでは長期的な保守性を優先します。新しくXrayサーバーを構築するなら、VLESS + RealityまたはVLESS + TLSを検討できます。VMessやTrojanのノードが安定して動作している場合は、切り戻し用の設定を残してください。プロトコル、ポート、トランスポート、セキュリティ層を一度に変更すると、障害発生時に原因を特定しにくくなります。
モバイル回線で問題になりやすいのは、ピーク帯域よりも回線の揺らぎ、スリープ時の接続回収、ネットワーク切り替えです。v2rayNGはXrayコア使用時に、一般的なVMess、VLESS、Trojan、Shadowsocks設定を実行できますが、バックグラウンド接続はAndroidの省電力設定にも影響されます。画面消灯から数分後に切断される場合は、まずv2rayNGをシステムのバッテリー最適化対象外にしてから、プロトコルの違いをテストしてください。
推奨構成:主力プロトコルと互換プロトコルを併用
安定した家庭用回線
- VLESS + TLSまたはRealityを主力にする
- VMessまたはTrojanのノードを1つ切り戻し用に残す
- 443など、サーバー側で実際に開放されているポートを使う
- 変更するプロトコルスタックの項目は毎回1つだけにする
モバイル回線と旧式端末
- まずShadowsocksまたは既存のVMess設定をテストする
- Android端末でクライアントに対するバッテリー制限を解除する
- 初回接続と画面消灯後の復旧結果を記録する
- 複雑なトランスポートと頻繁な再接続を同時に重ねない
サブスクリプションには、個別に検証できる異なるプロトコル構成を少なくとも2つ残しましょう。主回線に障害が出たら、まずノードを切り替え、その後でサーバー設定を確認します。
旧式端末では最新構成だけを追い求めない
低性能端末では、TLSハンドシェイク、暗号化処理、グラフィカルクライアント自体がボトルネックになることがあります。判断するには、複数の小さなリソースを含むWebページを開く、大きなファイルをダウンロードする、10分間長時間接続を維持する、という3種類のテストを連続して行います。遅延は正常でも継続ダウンロード中にCPU使用率が長時間100%近くになるなら、端末の計算能力が制限要因かもしれません。CPU使用率が高くないのに接続が頻繁に再確立される場合は、パケットロスとトランスポートパラメータを確認します。
- 家庭用回線:長期的に保守しやすいVLESSまたはTrojan構成を優先し、互換ノードも保存します。
- モバイル回線:まずバックグラウンド制限とネットワーク切り替えに対処し、その後でプロトコルごとの接続復旧を比較します。
- 旧式端末:項目が少なく、コアが明確に対応している設定を優先し、不要なトランスポート層は重ねません。
- 旧サブスクリプションの移行:元のノードを残し、新しい設定を複製して比較します。唯一使える入口を直接上書きしないでください。
クライアントコアがインポートと実行の可否を決める
v2rayNはデスクトップ向けのグラフィカルクライアントで、一般的な7.xの画面ではXrayコアを使って4種類のプロトコルを実行できます。v2rayNGはAndroid向けのグラフィカルクライアントで、Xrayコアを使用し、VLESSやRealityなどの組み合わせに適しています。v2flyNGはv2flyコアを使用し、V2Flyの設定体系に適しています。Xray専用の項目がある場合、共有リンク名を変更するだけで互換性が得られるとは考えないでください。
サブスクリプションのインポートはノード情報をクライアントに書き込むだけで、現在のコアですべてのノードを実行できることを意味しません。サブスクリプションのリンクには、クライアントが認識できないflow、セキュリティ種別、暗号化方式が含まれる場合があります。同じサブスクリプションがv2rayNとv2rayNGでは使えるのにv2flyNGで失敗するなら、まずプロトコルの拡張項目とコアの機能を比較し、サブスクリプションURLの破損を最初に疑わないようにします。
- v2rayN 7.xで「サブスクリプショングループ」→「サブスクリプショングループ設定」を開き、サブスクリプションURLが完全で、グループが有効になっていることを確認します。
- メイン画面に戻り、「サブスクリプショングループ」→「すべてのサブスクリプションを更新」を実行し、ノード数と更新時刻に変化があるか確認します。
- ノードを選択して「サーバー」→「サーバーの実接続遅延をテスト」を実行します。ICMP系の遅延だけでプロキシの可否を判断しないでください。
- 「設定」→「パラメータ設定」を開き、ローカルSOCKSとHTTPの待受ポートを確認します。一般的な初期値はそれぞれ10808と10809ですが、実際の画面表示を優先してください。
- v2rayNG 1.10.xで左上のメニューから「サブスクリプション設定」を開き、URLを保存してメイン画面に戻り、「サブスクリプションを更新」を実行します。
- 接続前にノード編集画面を開き、アドレス、ポート、ユーザー識別子またはパスワード、トランスポート方式、TLS、SNI、flowを1項目ずつ確認します。
プロトコル設定の例
プロトコル: VLESS
トランスポート: TCP
セキュリティ: Reality
コア: Xray
ポート: サーバー側で実際に開放されているポート
確認項目: UUID / serverName / publicKey / shortId / fingerprint / flow
速度、遅延、偽装性はどのように比較するか
プロトコルの速度テストでは、条件をそろえる必要があります。同じ端末、同じネットワーク、同じサーバー回線、近い時間帯でテストを行い、4つのノードはできるだけ同じ出口を使います。VMessノードがある地域、VLESSノードが別の地域にある場合、結果は主に回線の違いを反映するため、プロトコルの優劣を証明する材料にはなりません。
遅延も種類を分けて考えます。TCP接続確立遅延は、クライアントから対象ポートへの接続完了時間を示すだけです。実接続遅延ではプロキシのハンドシェイクも行われます。Webページの読み込みは、DNS、TLS、同時接続数、対象サイトの応答にも左右されます。v2rayNのテスト結果が80 msでも、ページ内の各リソースが80 ms以内に完了するとは限りません。
再現性のある3段階のテストを行う
- 第1段階・接続確立:各ノードで実接続遅延を5回測定し、最大値と最小値を除いて、中央の3回が安定しているか比較します。
- 第2段階・継続転送:同じ固定テストファイルを60秒間ダウンロードし、速度が頻繁にゼロにならないか確認します。一時的なピーク値だけで結論を出さないでください。
- 第3段階・長時間接続:Webセッションまたはターミナル接続を10分間維持し、再接続の有無や、端末の画面消灯後に切断されるかを記録します。
- 障害時の再テスト:ネットワークを切り替えてもう一度テストします。たとえば家庭用Wi-Fiからモバイル回線へ切り替え、帯域幅だけでなく復旧時間を比較します。
「偽装性」もプロトコルだけに帰属させるべきではありません。VMessをTCPで直接使う場合とVMess + WebSocket + TLSでは外部から見える特徴が異なります。VLESS + RealityとVLESS + 通常のTLSも同様です。Trojanの品質はTLSとサーバー入口の設定に左右されます。プロトコルは完全な通信経路の一層にすぎず、ドメイン、証明書、SNI、トランスポート、サーバーの応答がハンドシェイク全体の挙動を決めます。
結論:速度が近いなら、障害要因の少ない設定を選ぶ
5回の実接続テストと60秒間の継続転送で2種類のプロトコルが近い結果になった場合は、確認しやすい項目、クライアントコアの明確な対応、サーバー側の更新手順を基準に選びます。トランスポート層をさらに重ねる必要はありません。
インポート失敗、ハンドシェイク失敗、接続後に通信できない場合の確認順序
プロトコル選びは、最終的に接続できる状態へつなげる必要があります。インポート失敗は通常、リンク形式またはクライアントの認識に関する問題です。ハンドシェイク失敗は、認証、時刻、セキュリティ層、トランスポート項目に関係することが多く、接続済みなのに通信がない場合は、システムプロキシ、ルーティング規則、DNS、ローカル待受ポートを確認します。3種類の問題を分けることで、無駄な変更を減らせます。
- コアを確認:現在v2rayN、v2rayNG、v2flyNGのどれを使っているか、またノードにそのコアが対応していない拡張項目が含まれていないかを確認します。
- システム時刻を確認:VMessとTLS系の接続はいずれも時刻の誤りに影響される場合があります。日付、時刻、タイムゾーンの自動設定を有効にしてください。
- 認証項目を確認:VMessとVLESSではUUID、Trojanではパスワード、Shadowsocksではパスワードとmethodを確認します。
- セキュリティ項目を確認: TLSではserverNameと証明書ドメイン、Realityでは公開鍵、shortId、fingerprint、flowを確認します。
- トランスポート項目を確認: TCP、WebSocket、gRPCなどの種別に加え、パス、サービス名、Hostがサーバー側と一致しているかを確認します。
- コアログを確認: timeout、connection refused、authentication failed、certificate、unsupported methodを重点的に区別します。
- ローカル出口を確認:システムプロキシが有効で、アプリが使用するポートとv2rayNの現在の待受ポートが一致していることを確認します。
プロトコル選びでよくある質問
VLESSは必ずVMessより速いですか?
必ずしもそうではありません。同じ回線、同じトランスポート、パケットロスの少ない条件なら、差はネットワーク変動より小さい場合があります。それぞれ5回の実接続遅延を測定し、続けて60秒間の継続転送を行ってください。結果が近ければ、サーバーとクライアントの双方で保守しやすい設定を優先します。
Trojanで証明書エラーが出たらallowInsecureを有効にすべきですか?
通常の対処として有効にすべきではありません。まず端末時刻を同期し、ノードのserverNameが証明書の対象ドメインになっているか、接続ポートがサーバーのTLS入口と一致しているかを確認します。証明書チェーンを修正したら、allowInsecureは無効のままにしてください。
Shadowsocksのインポート後に暗号化方式がサポートされていないと表示された場合は?
ノード編集画面を開いてmethod全体を記録し、クライアントコアがその方式に対応しているか確認します。aes-128-gcmなど別の値に勝手に変更しないでください。暗号化方式とパスワードはサーバー側と完全に一致している必要があり、必要ならサブスクリプション提供側に互換設定を配布してもらいます。
同じノードがv2rayNでは使えるのにv2flyNGでは使えないのはなぜですか?
まず、ノードにReality、Vision、その他Xrayに依存する項目が含まれていないか確認します。デスクトップ版でインポートして実行できても、v2flyコアが同じ機能を持つとは限りません。v2flyNGでは、サーバーが正式に提供しているVMess、Trojan、または互換性のあるShadowsocksノードを使用してください。
4種類のプロトコルは、予備としていくつ残すべきですか?
通常は、実際に検証した異なる構成を2つ残せば十分です。たとえばVLESS + Realityを主力にし、VMess + TLSまたはShadowsocksを切り戻し用にします。どちらも接続確立、60秒間の転送、10分間の長時間接続を個別にテストしてください。
最終的な選び方は、次の手順にまとめられます。まずコアの対応を確認し、次にプロトコルスタック全体を確認し、最後に実際のネットワークで安定性をテストします。新しくXray設定を作るならVLESSが一般的な主力候補です。旧サブスクリプションを引き継ぐならVMessを残し、標準的なTLS入口があるならTrojanを使えます。端末リソースが限られている、または簡潔な予備設定が必要ならShadowsocksを検討します。どの場合も、サーバーが実際に提供するパラメータを基準にしてください。