PROTOCOL / CORE / CLIENT

V2Rayプロトコル
とコアの解説

VMess・VLESS・Trojan・Shadowsocks
REALITYのセキュリティ層とXray / V2Flyコア

このページでは設定項目と互換性を整理し、比較・確認に役立つ情報をまとめています。初めてインストールする場合は、まず使い方ガイドのクイックスタートをご覧ください。プロトコル名やコア、サブスクリプションの項目に食い違いがあれば、該当する章に戻って確認できます。例は設定の構造を説明するもので、接続可能なサーバー情報は含みません。

まず接続の階層を確認し、サーバーが提供するプロトコルに合わせて読み進めてください。比較表は横にスクロールできます。

接続の階層と設定項目

クライアントの「プロトコル」だけでは、接続全体を説明できません。一般的なサーバー設定は、プロキシプロトコル、下位のトランスポート、トランスポート層のセキュリティ、クライアント側のルーティングという4つの要素で構成されます。プロキシプロトコルは認証やリクエスト形式を定め、トランスポートはデータの運び方を決めます。セキュリティ層はハンドシェイクと通信経路を保護し、ルーティングはリクエストをどのアウトバウンドに送るかを決めます。VLESS、tcp、realityが同時に設定されていても矛盾ではありません。それぞれ異なる要素を示しています。異なる階層を分けて考えることで、同じ種類ではない項目を比較する誤りを防げます。

サーバー編集画面を階層ごとに確認

v2rayNのサーバー編集画面を開き、まずプロトコルの種類を確認します。次に「アドレス」「ポート」「ユーザーID」または「パスワード」を照合し、「トランスポートプロトコル」、最後に「トランスポート層のセキュリティ」を確認してください。アドレスはクライアントが実際に接続する宛先で、SNIはセキュリティハンドシェイクで使うサーバー名です。両者は異なる場合があります。アドレスにドメイン名を指定した場合は、先にDNSで名前解決されます。SNIをそのままアドレス欄に入力すると、別のホストへ接続するおそれがあります。また、サーバー側の待ち受けポートとローカルの待ち受けポートを取り違えると、接続開始前に失敗します。

一般的なtcpはTCPで通信することを表し、画面によっては新しいトランスポート名が使われます。WebSocketはHTTPのUpgrade機構を介して双方向データを運び、gRPCはHTTP/2の関連機能を利用します。これらは接続経路やリクエストの形式を変えるもので、VMessを自動的にVLESSへ変えるわけではありません。path、Host、serviceNameなどの項目は、対応するトランスポートでのみ意味を持ちます。サーバー側の方式に合わせてクライアント側を設定してください。名前が新しそうだからという理由で置き換えることはできません。

階層主な名称確認する項目
プロキシプロトコルVMess / VLESS / Trojan / Shadowsocks認証方式、ユーザーID、パスワード、暗号化方式
トランスポートTCP / WebSocket / gRPC通信方式、パス、Host、サービス名
セキュリティ層TLS / REALITYサーバー名、検証パラメーター、フィンガープリント設定
クライアント側の設定システムプロキシ / TUN / ルーティングどのアプリをプロキシ経由にするか、ドメインやIPをどう振り分けるか

設定が正しくても、通信がクライアントを経由するとは限らない

サーバー設定が正しいことは、コアがアウトバウンド接続を確立できる条件が整っているという意味にすぎません。ブラウザーがその接続を使うかどうかは、システムプロキシ、ブラウザー独自のプロキシ設定、ローカルの待ち受けポートによって変わります。TUNは別の接続方式で、仮想ネットワークインターフェースを通じて設定に合致する通信を処理します。ルーティングの直接接続ルールにより、一部のリクエストがプロキシサーバーを経由しない場合もあります。そのため、ページが開けるだけでは想定したアウトバウンドが使われているとは限らず、クライアントが起動していてもすべてのアプリがプロキシ経由とは限りません。実際のリクエストとログを合わせて確認してください。

プロトコル名だけからセキュリティ層を判断することもできません。VLESS自体は通信内容を暗号化しないため、通常はTLSやREALITYなどの保護方式と組み合わせます。Trojanは一般にTLSを使って構成され、Shadowsocksは仕様で定められた認証付き暗号化方式を使います。アプリ自体が使うHTTPSは、さらに内側の保護層です。外側のプロキシ通信を暗号化しても、Webサイトの証明書検証の代わりにはならず、接続先サイトの信頼性も保証されません。設定を選ぶ際は、プロトコル名だけでなく組み合わせ全体を確認してください。

元の情報を保ち、階層ごとに確認する

ノードの設定を整理するときは、まずサーバーから提供されたプロトコルの組み合わせと必要なコアを記録し、編集画面で項目が欠けていないか確認します。接続エラーは、アドレスの名前解決、ポートへの接続、ハンドシェイク、認証、リクエスト転送の順に切り分けてください。前の段階が完了していないうちに、後の段階を変更しても通常は解決しません。たとえば接続がタイムアウトする場合は、まずアドレスとサーバーへの到達性を確認します。証明書名の不一致ならSNIを確認します。認証エラーをルーティングモードの変更で解決することはできません。

このページではプロトコルごとに解説した後、性能と用途を取り上げます。現在の設定を階層表に当てはめ、使っているトランスポートに関係しない高度な項目はいったん無視して読み進めてください。クライアントをまだインストールしていない場合、デスクトップではまずダウンロードページからv2rayNを選び、サーバーの設定に合わせてコアとプロトコルを決めます。速そうな組み合わせを先に選び、サーバー側の要件を後から変更するのは避けてください。

VMessの認証とトランスポートの選択

VMessはProject Vのエコシステムで早くから使われているプロキシプロトコルです。ユーザー認証、リクエスト形式、データ保護に関する仕組みを備えています。長く使われてきたため、古いサブスクリプションや構築手順には今もVMessが使われています。VMessが現在も利用できることと、古い解説が今もそのまま通用することは別です。以前の設定にある認証方式や補助項目は、現在のコアに適さない場合があります。選ぶ際はサーバーの実装を確認し、解説の公開時期やノード名だけで互換性を判断しないでください。

ユーザーID、暗号化方式、時刻

「ユーザーID」には通常UUIDを入力します。これは認証に使う値で、自由に付けるメモ名ではありません。クライアントで新しいUUIDを生成しても、サーバーから自動的に許可されるわけではなく、サーバーのユーザー設定と一致させる必要があります。「暗号化方式」にもプロトコル上の意味があり、TLSのオン・オフと混同してはいけません。一般的な自動選択では実装が適切な方式を決めます。アルゴリズムを手動で指定する前に、双方が対応しているか確認してください。CPUのハードウェアアクセラレーションの有無も実際の負荷に影響するため、方式名だけで安定した速度順位を判断することはできません。

VMessの認証では時刻に関するチェックが行われるため、システム時刻が大きくずれていると認証に失敗することがあります。トラブル対処では、まずシステム時刻の自動同期を有効にし、日付・時刻・タイムゾーンが正しいか確認してください。タイムゾーンは表示方法に関係するもので、正確さが必要なのはシステム時刻そのものです。画面上の表示だけを変更して実際の時刻を直していなければ、問題は解消しません。時刻を確認する前にサブスクリプションを何度も作り直したり、暗号化方式を変更したりすると、原因の切り分けが難しくなります。

古い共有情報にはalterIdがよく見られます。現在一般的なVMess AEAD設定では、通常は値を0にするか、クライアントが所定の方法で処理します。値を大きくすれば安全性が増す調整項目ではありません。古い項目が残るサブスクリプションを使う場合は、サーバーが該当する認証方式を採用しているか、クライアントがその項目をどう解釈するか確認してください。何年も前の0以外の値をそのまま使うのは避けましょう。サーバーの説明とインポート結果が一致しない場合は、双方を勘で変更するのではなく、実際のサーバー設定と利用しているコアのドキュメントを基準にしてください。

WebSocketとTLSがよく組み合わされる理由

VMessは複数のトランスポートで通信できます。WebSocketとTLSの組み合わせは、リバースプロキシを使う構成でよく利用されます。クライアントがTLSハンドシェイクを完了し、正しいHTTP Upgradeリクエストを送ると、VMessのセッションが始まります。そのため、ポートに接続できてもパスが正しいとは限りません。WebSocketのpathとHostは構成に合わせる必要があり、リバースプロキシも対応するバックエンドへリクエストを転送しなければなりません。パスの入力ミス、末尾のスラッシュ、接続先サイトの選択間違いは、ハンドシェイク失敗や通常のWebページが返る原因になります。

この組み合わせではラッピングやハンドシェイクの手順が増えますが、アクセスのたびに毎回すべてのコストが発生するわけではありません。長時間接続の再利用、コネクションプール、アプリの通信方法、中間プロキシのタイムアウト設定によって結果は変わります。一方、TCP直結はラッピングが少ないからといって、あらゆる環境でページ表示が速くなるとは限りません。サーバーの場所、回線品質、DNSが異なる2つの構成を比べても、VMess自体の速度差を信頼できる形で判断することはできません。

既存の構成を維持するか移行するか

既存のVMess設定が、保守されているクライアントとサーバーで正常に動作しているなら、プロトコル名が古いというだけで移行する必要はありません。確認すべきなのは、古い認証方式が残っていないか、設定を安定してインポートできるか、トランスポートの設定が明確か、サーバーが継続して保守されているかです。VLESSへ移行するには、サーバー側で対応するインバウンドを作成し、新しい設定情報を用意する必要があります。クライアントのプルダウンメニューでVLESSを選ぶだけでは移行できません。両プロトコルは認証方式とリクエスト形式が異なるため、片側で名前を変更するだけの互換手段はありません。

新しい環境を構築し、XrayのVLESS + REALITY構成が必要な機能に合う場合は、その方式に沿って設定できます。既存のVMessサーバーを引き続き使う場合は、プロトコルとトランスポートをそろえてください。「インポートはできたが接続できない」ときは、元の共有情報と編集画面を見比べ、暗号化方式、トランスポート、セキュリティ層、パスを確認してからログを調べます。一般的なトラブル対処はよくある質問をご覧ください。ローカルのシステムプロキシの問題をVMessの互換性と取り違えないようにしましょう。

VLESSとREALITYの設定項目

VLESSはプロキシプロトコル層をシンプルにし、通信経路の保護を適切な外部の仕組みに委ねる設計です。VMessと同じプロキシプロトコルに分類されますが、VMessの暗号化設定をそのまま当てはめることはできません。REALITYはVLESSと組み合わせて使われることが多いセキュリティ方式で、VLESSの代わりになる独立したプロキシプロトコルではありません。そのため、VLESS + REALITYという設定でも、少なくとも2つの階層が指定されているにすぎません。実際に接続するには、トランスポート、フロー制御、アドレス、ポート、認証情報も必要です。

まず認証情報を、次にハンドシェイクを確認

「ユーザーID」はサーバーで許可されたユーザーと一致させる必要があります。「フロー制御」は速度の設定ではありません。xtls-rprx-visionは特定の処理方式を示し、サーバー、クライアントのコア、トランスポートの組み合わせが対応している必要があります。一般的なVLESS + REALITY + VisionではTCPを使います。VisionをWebSocketなど、対応していない組み合わせに追加することはできません。サーバーから指定されていないフロー制御を他のノードからコピーすると、接続に失敗することがあります。VLESSのencryptionは通常noneですが、これは外側のセキュリティ方式も省略できるという意味ではありません。

REALITYの設定では、「SNI」または「サーバー名」に、サーバー側で許可された名前を指定します。アクセスできるWebサイトなら何でも選べるわけではありません。「Fingerprint」はクライアントのハンドシェイク時の指紋動作を選ぶ項目です。chromeは一般的な例ですが、ブラウザーの本人確認ではなく、ほかの設定項目の代わりにもなりません。クライアントやコアによって表示される項目が異なる場合があります。インポート後に項目が欠けていたら、似た名前の設定を画面で探して入力する前に、実装が対応しているか確認してください。

「PublicKey」にはサーバーが提供した公開鍵を入力します。新しい画面では認証項目の表示名が異なる場合があるため、現在の実装の説明を確認してください。サーバーの秘密鍵をクライアントにコピーしてはいけません。ShortIdもサーバー側で許可された値を使います。通常は指定された長さの範囲にある16進数文字列で、空欄を許可するかどうかはサーバー設定によります。「SpiderX」は関連するアクセスパスの動作に関する項目で、UUIDの代替でも帯域を増やす設定でもありません。サーバーから指定されていない値を独自に入力しないでください。

項目設定元よくある誤用
ユーザーIDサーバーのユーザー設定新しく生成したUUIDを、認証済みユーザーとして扱う
フロー制御サーバー側のプロトコル構成対応していないトランスポートでVisionを無理に有効化する
SNIサーバーが許可したサーバー名アドレス欄に任意のドメインを入力する
公開鍵 / ShortIdサーバーが提供するハンドシェイクパラメーター文字の抜け、空白の混入、誤った鍵の入力

Xrayコアを優先して確認する理由

当サイトで紹介する3つのクライアントから選ぶ場合、VLESS + REALITYにはXrayの対応経路を優先して確認してください。デスクトップではv2rayNを使い、選択中のコアを確認します。Androidではv2rayNGの対応状況を優先して調べてください。近いエコシステムのV2Flyなら同じセキュリティ項目を解析できると決めつけてはいけません。クライアントのメニューにVLESSが表示されても、実行中のすべてのコアがREALITYに対応しているとは限りません。プロトコル名が選べることと、組み合わせ全体を実行できることは別の条件です。

トラブル対処では、まずハンドシェイク項目を一つずつ照合してください。公開鍵、ShortId、SNI、フロー制御のどれか一つが異なるだけでも、接続を完了できないことがあります。コピー時には前後の空白、改行、全角文字に注意してください。サブスクリプション更新後に急に接続できなくなった場合は、新旧の設定を比較し、すぐにローカル設定を一括リセットしないでください。ログに未対応の設定項目が出るなら、コアと生成された設定を確認します。接続要求が送信されてからハンドシェイクに失敗する場合は、サーバー設定とシステム時刻を調べ、順序立てて切り分けてください。

セキュリティ方式は性能を保証しない

REALITYの技術的な特徴を、あらゆるネットワークでの速度向上にそのまま結び付けることはできません。接続の確立には往復遅延、サーバー負荷、実際の通信経路が影響します。Visionによるデータ処理も、設定条件を無視して単独で比較できる機能ではありません。初心者はまず、サーバーが明示的に指定し、クライアントが完全に対応する組み合わせを使って安定した基準を作りましょう。最初からフロー制御、マルチプレクス、TUNを同時に有効にするのではなく、同じ条件で別の組み合わせを比較してください。

既存のTLS構成からREALITYへ移行する場合は、サーバー設定、クライアントのコア、サブスクリプションの出力方式をあわせて検討してください。トランスポート層のセキュリティだけを切り替え、元の証明書設定を残しても、通常は移行できません。まず利用中の設定を保存し、新しい設定を別の記録として追加してテストします。名前解決、ハンドシェイク、宛先へのリクエストがすべて正常に動作してから、日常利用の設定を切り替えてください。用語の意味は用語クイックリファレンスで確認できます。初回接続の手順はクイックスタートを参照してください。

TrojanとShadowsocksの違い

TrojanとShadowsocksもよく使われる選択肢ですが、設計上の重点は異なります。Trojanの一般的な構成はTLS通信とパスワード認証を中心としており、証明書とサーバー名が重要な設定項目です。Shadowsocksは比較的シンプルなプロキシ転送と認証付き暗号化を特徴とし、複数世代の暗号化方式が実装されています。「パスワードだけで使える」からといって、セキュリティ層まで同じとは限りません。また、SSと表示されたノードがすべて同じアルゴリズムや機能の実装だと考えるのも誤りです。

Trojan:パスワードだけでなく証明書とサーバー名も確認

v2rayNまたはv2rayNGにTrojanを追加する場合、通常はアドレス、ポート、パスワード、TLS関連の設定が必要です。パスワードはそのまま入力し、記号が日本語入力などで置き換わっていないか確認してください。メモ名は認証には使われません。サーバー名は構成要件と証明書検証に合わせます。アドレスにIPを使い、検証にはドメイン名を使う構成もありますが、サーバー側がそのように設定されていることが前提です。証明書名が一致しない場合は、パスワードの長さではなくSNIとサーバー証明書を確認してください。

Trojanの初回接続では通常、TCP接続とTLSハンドシェイクが行われます。短いリクエストを大量に送る場合は、接続の再利用が使い心地に影響します。長時間のデータ転送では、通信速度とサーバーリソースがより重要になります。TLSは広く使われている成熟したセキュリティ基盤ですが、実際の性能は実装、証明書の構成、中間プロキシ、ハンドシェイクの再開機能にも左右されます。TLSを使うから必ず遅いとは言えません。また、設定項目が少なく見えても、トラブル対処で確認するのがパスワードだけとは限りません。

Shadowsocks:暗号化方式を正確に一致させる

Shadowsocksの主な設定項目は、サーバー、ポート、パスワード、暗号化方式です。新しいAEAD方式と従来のストリーム方式は異なる世代の設計であり、AEAD方式は暗号化に加えてデータの認証も行います。サーバーが指定した方式をクライアントと実行中のコアがサポートしている必要があります。プルダウンにある似た名前の方式を同等と考えてはいけません。方式を間違えると、パスワードが正しくても正常に通信できません。古い設定をインポートできても、共有情報の形式を認識しただけで、現在のコアが該当するアルゴリズムを受け付けるとは限りません。

AEAD 2022などの方式では、鍵の形式が明確に指定される場合があり、一般的なテキストパスワードと同じ感覚で入力することはできません。複数ユーザー用の鍵など、拡張形式を使う構成では、共有情報を完全な状態で保持する必要があります。そのような設定では、まずサーバー側の方式とクライアントの対応範囲を確認し、鍵を一字ずつ正確にコピーしてください。区切り記号を含む文字列を途中で切ったり、サブスクリプション変換ツールに従来型のパスワードとして再解釈させたりすると、意味が変わるおそれがあります。鍵の形式はプロトコル上の要件であり、自由に選べる表示形式ではありません。

基本的なShadowsocks設定のTCP・UDP対応も、クライアントの接続方式とあわせて判断してください。サーバーがUDPを許可していても、システムのHTTPプロキシ経由でクライアントに接続するアプリが、透過的なUDP転送を利用できるとは限りません。共有リンクによってはプラグイン項目を含むものもあります。当サイトで紹介するクライアントやコアがその拡張に対応していない場合、サーバーとパスワードだけを残しても同等の設定にはなりません。双方が対応する完全な構成を用意してもらい、認識できない項目を削除したまま使い続けるのは避けてください。

確認項目Trojanの一般的な設定Shadowsocksの一般的な設定
認証情報サーバー指定のパスワード方式に対応したパスワードまたは鍵
セキュリティ設定TLS、サーバー名、証明書検証指定された認証付き暗号化方式
主な互換性の境界トランスポート拡張とTLSパラメーター方式の世代、鍵の形式、拡張パラメーター
トラブル対処の確認項目ハンドシェイク、サーバー名、パスワード方式、鍵、ポート、UDPの経路

設定項目の数ではなく、既存の構成に合わせて選ぶ

サーバー側で適切に保守されたTrojan設定が提供され、クライアントがトランスポートとTLSの設定に完全対応しているなら、項目を減らすためだけに別のプロトコルへ変更する必要はありません。Shadowsocksを使う場合は、方式と鍵の形式を正確に確認し、特に世代間の違いに注意してください。どちらも、セキュリティチェックを無効にしたり、不明な項目を削除したりして「互換性を高める」方法は避けましょう。エラーが消えても設定の意味が変わってしまうより、エラーを残したほうがトラブル対処に役立ちます。

実際に選ぶ際は、管理の手間も考慮します。証明書を確実に更新できるか、鍵の変更をサブスクリプションにも反映できるか、利用するコアが必要な拡張に対応しているかを確認してください。既存サーバーに接続する初心者にとって最も重要なのは、自分でプロトコルを再設定することではなく、現在の構成に合わせることです。パスワードやサブスクリプションの内容が漏れた可能性がある場合は、サーバー側で無効化して新しい情報を配布してください。ローカルのメモ名を変更するだけでは不十分です。クライアントのログや共有リンクに機密情報が含まれる場合もあるため、問い合わせる前に認証情報と完全なサブスクリプションURLを削除してください。

V2Fly、Xray、クライアントの役割

このエコシステムを理解するにはProject Vが出発点になります。V2FlyはV2Ray関連の実装とコミュニティによる保守を引き継ぎ、Xrayは関連コードを基盤に独自の機能を発展させてきました。共通の歴史を持つ一方で、プロトコル対応、設定構造、実装の詳細には違いがあります。名称が似ていても実行ファイルを置き換えられるとは限らず、同じ設定を確認なしで両方に使えるとも限りません。「同じ系統だから互換性がある」と考えるのではなく、具体的なプロトコルの組み合わせと設定項目を確認してください。

接続を処理するのはGUIだけではない

v2rayNは当サイトがデスクトップ向けに推奨するGUIクライアントです。サーバー設定、サブスクリプション、ルーティング、コアの起動などを管理します。実際にアウトバウンド設定を解析して通信を転送するのは、起動中のコアです。GUIの更新でメニューや設定の生成方法が変わることがあり、コアの更新では対応項目やプロトコルの動作が変わる場合があります。この2つは分けて考えてください。「コアの切り替え」などで名称を選んだ後は、起動ログに想定した実装が表示されていることも確認しましょう。画面上のラベルだけでは不十分です。

v2rayNGはAndroid向けで、当サイトではXrayを使う場合の第一候補としています。v2flyNGはV2Flyを使う場合の代替候補です。選ぶ基準は画面の見た目ではなく、接続先サーバーが必要とする機能です。一般的なVMessなどの設定でもトランスポートとセキュリティ層を一つずつ確認してください。REALITYやVisionを使う場合は、対応機能を備えたXrayの経路を選ぶ必要があります。スマートフォンのVPN許可はクライアントが通信を受け取るためのもので、コアにプロトコル対応機能を追加するものではありません。

クライアントプラットフォーム選ぶ際のポイント
v2rayNWindows / macOS / Linuxデスクトップ用インストーラーを選び、実行するコアとプロトコルの組み合わせを確認
v2rayNGAndroidXrayを使用。REALITYやフロー制御など、各設定項目を確認
v2flyNGAndroidV2Flyの代替経路。サーバー設定が対応範囲内か確認

似たJSON形式でも機能が同等とは限らない

両方のコアの設定には、inbounds、outbounds、routing、dnsなど似た構造が見られます。しかし外側の項目名が同じなのは、概念が似ていることを示すにすぎません。内部のオブジェクト、使用できる値、既定の動作、新しく追加された項目は異なる場合があります。REALITY関連の設定を、任意のコアで使える汎用TLS項目として扱うことはできません。設定を解析できても、ルーティングの順序、DNSの方針、トランスポートの既定値が違えば、元の構成と異なる動作になることがあります。構文エラーがないだけでは移行完了とは言えません。

GUIクライアントで管理する設定は、通常、内部形式に変換された後、実行用の設定として生成されます。日常的な操作を簡単にする一方で、表現できる範囲には限りがあります。サーバーから提供された複雑なネイティブ設定を、通常のノード編集画面に完全に反映できるとは限りません。カスタム設定としてインポートした場合、GUIの設定の一部を通らないことがあります。その場合、画面のルーティング設定を変えてもカスタム設定には反映されない可能性があります。まず、現在の記録が通常のサーバー設定かカスタム設定かを確認してください。

コアの切り替えは小規模に移行する

切り替える前に、現在動作している設定を保存し、ローカルポート、システムプロキシのモード、DNS、ルーティングの構成を記録します。次に代表的なサーバーを1つだけ選び、コアが起動するか、ハンドシェイクが完了するか、ドメインへのリクエストや必要なUDPアプリが正常に動くかを確認してください。サブスクリプション全体を一度に変換して、古い記録を上書きするのは避けましょう。ログに未対応の項目が出たら、まず互換性のない機能を元に戻します。特定のリクエストだけ別のアウトバウンドに送られる場合は、コアの障害と決めつけず、ルーティングとDNSを確認してください。

コアの更新で、名称だけを理由に「最新」を追い求める必要はありません。まず解決したい問題がその実装に関係するか確認し、元に戻せるよう設定情報を残してください。クライアントとコアには対応関係があり、古いGUIでは新機能に必要な構造を生成できないことがあります。一方、GUIを更新しても古いコアを起動しているとエラーになる場合があります。当サイトのダウンロードページでは、OSとアーキテクチャに応じた配布先を確認できます。起動時のランタイムや権限の問題は、v2rayNの起動時クラッシュ対処メモをご覧ください。

保守状況は具体的に判断しましょう。オープンソースであることは、コードとライセンスを確認できるという意味であり、あらゆる配布ファイルが同じ保守体制にあるという意味ではありません。あるコアが継続して開発されていても、古い設定すべてが自動的に対応するわけではありません。初心者に役立つのは、漠然としたコアのランキングではなく、「サーバー設定に必要な機能は何か」「現在のクライアントで完全に生成できるか」「実行時にその機能が本当に使われているか」という記録です。この3点を明確にすると、端末の変更やトラブル対処が簡単になります。

接続負荷、リソース、モバイルの電池消費

「最速のプロトコル」を比べるには、まず何を測るかを決める必要があります。初回接続では名前解決、接続確立、セキュリティハンドシェイクが関係します。Webページの表示には、接続先、コネクション再利用、リソース数も影響します。継続的なダウンロードではスループット、パケットロス、サーバー容量が重要です。音声通話やリアルタイムアプリではジッターとUDP経路が問題になります。これらの指標は別々に変化することがあります。クライアントに表示される1つの遅延測定だけでは、すべてのアプリの性能を表せません。サーバーが異なる2つの数値から、プロトコル自体の速度差を導くこともできません。

ハンドシェイクの負荷と継続通信は分けて考える

DNS、TCP接続、TLSなどのセキュリティハンドシェイクは、通信開始前の待ち時間になります。WebSocketやgRPCなどのトランスポートにも、それぞれ接続確立の手順があります。一方、コネクション再利用やハンドシェイクの再開によって、繰り返し発生する負荷を抑えられる場合があります。ネットワークの再送が必要になると、失敗時のコストは大きくなることもあります。短い接続を頻繁に確立するアプリでは、不要な往復を減らす価値があります。長時間維持されるデータ通信では、初回のハンドシェイクが全体の所要時間に占める割合は小さくなります。テストではこの違いを保ち、長時間のダウンロードだけで短時間接続の使い心地を判断しないでください。

CPU負荷は暗号化アルゴリズム、CPU命令、データコピー、実装の最適化に左右されます。デスクトップPCで負荷が小さいアルゴリズムでも、異なるアーキテクチャのスマートフォンでは同じとは限りません。メモリ使用量も接続数、バッファー、ルーティングデータ、DNSキャッシュ、ログの量などに影響され、プロトコルだけで決まるわけではありません。クライアントの使用量が増えた場合は、ルールのダウンロード、大量の接続の維持、詳細ログの出力が行われていないか先に確認し、プロトコル変更が必要かどうかを判断してください。

モバイルでは暗号化の負荷だけを比較できない

スマートフォンの電池を消費する主な要因には、無線モジュールの起動、電波が弱い場合の再送、バックグラウンド接続、頻繁な再接続、ほかのアプリの動作があります。プロトコルの暗号化も計算資源を使いますが、主な原因とは限りません。接続が安定して無線の起動回数が少ない構成は、理論上の処理が軽くても何度も再接続する構成より省電力になる場合があります。モバイル回線とWi-Fiでは消費電力の条件も異なります。ネットワークや画面の明るさが違う状態で電池の減りを比べても、XrayやV2Flyが原因とは判断できません。

AndroidでVPNインターフェース経由の通信を受け付ける場合、クライアントはパケットの読み取りと転送も担います。デスクトップのTUNでも仮想ネットワークインターフェース、ルーティング、DNSの処理が加わります。これらは通信を受け入れる範囲や処理経路を変えるもので、サーバープロトコルをアップグレードする機能ではありません。システムプロキシで対象アプリをカバーできているなら、TUNを有効にしても速度が改善するとは限りません。対象アプリがシステムプロキシに従わない場合は、TUNによって通信を取り込める可能性があります。詳しい設定はv2rayNのTUNモード設定をご覧ください。

Mux、キープアライブ、UDPの実際の制約

マルチプレクスは、複数の論理リクエストを少数の通信接続で共有し、特定の短時間接続で確立コストを減らす仕組みです。一方、共有接続で混雑やパケットロスが起きると、複数のリクエストに影響が及ぶこともあります。一部のプロトコルやフロー制御との組み合わせにはMuxの制約があるため、常に有効にするものではありません。キープアライブにもトレードオフがあります。間隔が短すぎるとバックグラウンド通信が増え、長すぎると一部のネットワークでアイドル状態の接続を維持できない場合があります。まず互換性のある既定値を使い、具体的な問題を確認してから調整してください。

リアルタイムアプリでUDPを使う場合は、ローカルの通信受け入れ、コアの転送、サーバー、接続先ネットワークを含む経路全体が対応しているか確認してください。UDPをプロキシ経由にしても、ジッターが下がるとは限りません。サーバー経由で遠回りしたり、回線が混雑したりすると使い心地が悪化することもあります。DNSの名前解決方法は接続先IPとルーティングに影響するため、テスト中は条件をそろえてください。FakeDNSはドメイン名の対応付けやキャッシュの動作に関係するもので、汎用の高速化機能ではありません。仕組みの詳細はFakeDNSの利用場面に関するメモをご覧ください。

測定対象固定する条件避けたい誤判定
初回リクエスト接続先、DNS、キャッシュ、ネットワーク名前解決の差をプロトコルのハンドシェイクの差と考える
継続的なデータ転送サーバー、時間帯、接続先のリソースサーバーの帯域差をアルゴリズムの差と考える
バックグラウンドでの電池消費画面、電波、アプリ、通信の取り込み方式無線通信の再送をコアの処理負荷と考える

比較では毎回1つの条件だけを変え、起動、最初のリクエスト、継続通信、待機時の状態を別々に記録してください。最良の結果だけを残さず、複数回測定します。同じサーバーと条件を用意できない場合は、「現在使っている2つの設定で体感に差があった」と記録し、プロトコルの順位に結び付けないでください。日常利用では小さな測定差より、接続の安定性、必要機能への対応、問題発生時の復旧のしやすさが重要です。まず互換性を確認し、その後に性能を比較する理由もここにあります。

サブスクリプション形式と設定の互換性

サブスクリプションは設定を配布する方法であり、新しいプロキシプロトコルではありません。サブスクリプションURLから取得される内容は、共有リンクの一覧、エンコードされたテキスト、特定のクライアント専用設定などさまざまです。VMess、VLESS、Trojan、Shadowsocksのリンクにも、それぞれ項目の形式があります。サブスクリプションをダウンロードできること、リンクを認識できること、設定を保存できること、コアで実行できることは、別々の段階です。成功の表示がその一部だけを示すこともあり、サーバーで接続確認まで完了したとは限りません。

インポート時に失われやすい情報

クライアントは通常、サブスクリプション形式を解析し、各項目を内部のサーバー設定に変換してから、実行用の設定を生成します。どの段階にも項目を表現できる範囲の制限があります。たとえば、サブスクリプションにREALITYの項目が含まれていても古いパーサーが認識できない、共有リンクにトランスポート拡張が含まれていても編集画面で保存できない、複数のアウトバウンドを含むカスタム設定が1つのサーバー設定として扱われる、といったケースです。どれもパスワードを入力し直すだけでは解決しません。まず元の内容と、インポート後に表示される設定を比較してください。

VMessの共有リンクにはエンコードされたJSON形式、VLESSやTrojanにはURI形式のパラメーター、Shadowsocksには別のエンコード形式やパラメーター規則がよく使われます。同じプロトコル名でも、すべての共有リンクが同一の拡張規則に従うとは限りません。URIに含まれる特殊文字は正しくエンコードする必要があります。特にパスワード、パス、メモ、クエリパラメーターに注意してください。区切り文字が誤って解釈されると、クライアントが項目の一部を切り捨てる場合があります。サーバーが提供する完全なリンクを優先し、手動で分割・再結合しないでください。

「Base64形式のサブスクリプション」は、外側のテキストがエンコードされている可能性を示すだけです。不足した設定項目を補うものでも、暗号化による保護でもありません。デコードできる人は通常、サーバー情報や認証情報を読み取れます。サブスクリプションURL自体を機密情報として扱い、スクリーンショット、ログ、問い合わせ文に完全なURLを載せないでください。URLが使えなくなった場合は、有効期限、再認証の必要性、返された内容が本当にサブスクリプション形式かを確認しましょう。ログインページやエラーページをプロトコル形式の問題と取り違えないようにしてください。

コア間・形式間の変換における制約

形式変換は、ある形式での表現を別の形式に対応付ける処理です。変換先の形式が同じプロトコル、トランスポート、セキュリティ層、認証項目を表現できる場合に限り、意味を保てる可能性があります。表現できない項目は削除されたり、変換先の実装が認識できない拡張として出力されたりする場合があります。特にネイティブJSONのDNS、複数アウトバウンド、ルーティング、特定のトランスポート設定は、1つの共有リンクに収まらないことがあります。変換後はノード数だけでなく、項目ごとに確認してください。

異なるクライアントのネイティブ設定一式を、サブスクリプションと同じように扱うこともできません。ルーティング設定を含むカスタム設定をインポートすると、ローカルの通信ポート、アウトバウンドのタグ、DNSの動作が変わる可能性があります。通常のサーバーサブスクリプションはノード情報を更新するもので、ローカルのルーティングも同期されるとは限りません。更新後にWebページの表示がおかしくなった場合は、変わったのがサーバー設定かローカルのルールか確認してください。一部のドメインだけに問題があるなら、サブスクリプション全体を再インポートするより、ルーティングとDNSを確認するほうが効果的です。

更新後の確認手順

v2rayNでは、まずサブスクリプションのグループにわかりやすいメモを付け、該当するグループを更新します。更新前に、正常に使えることがわかっている設定を独立した記録として残し、サブスクリプションの変更とローカル環境の変更を見分けられるようにしてください。更新後は設定を1つ選び、プロトコル、アドレス、ポート、認証情報、セキュリティ層、トランスポート、フロー制御を確認します。ノード名はサーバー側で変更される場合があるため、同じ設定を示す確実な識別子ではありません。地域名やプロトコルの略称から実際の設定項目を推測しないでください。

更新は完了してもすべてのノードで接続に失敗する場合は、取得した内容、解析結果、実行中のコアに共通の変更がないか確認します。特定のプロトコルだけ失敗するなら、そのプロトコルで追加された項目と対応状況を優先して調べます。古い設定は使えるのに新しい設定が使えない場合は、認証情報とハンドシェイク項目を比較してください。ネットワークには接続できてもサブスクリプションを取得できない場合は、URLだけが到達不能になっているか、アクセス権が失効している可能性もあります。更新の失敗とノードへの接続失敗は分けて考え、最初からTUN、暗号化方式、システムプロキシを変更しないでください。

日常的な管理では、取得元ごとにグループを分け、異なる取得元の同名設定を一緒にしないようにしてください。別の端末へ移行する際は、サーバー情報とローカルの通信ルールを分けて移し、接続に必要な許可設定もあらためて確認します。サブスクリプションの具体的なインポート手順は使い方ガイドをご覧ください。インポート後に接続済みと表示されてもWebページを開けない場合は、システムプロキシ、DNS、ルーティングの確認リストに沿って通信経路を調べ、正しいサブスクリプション項目を何度も変更しないようにしましょう。

用途に応じたプロトコルとコアの選び方

選ぶ際はプロトコルの順位ではなく、必要な条件から考えます。端末のプラットフォーム、サーバーが実際に提供する構成、プロキシ経由にしたいアプリの種類、UDPの必要性を確認してください。そのうえで必要な項目をすべて設定できるクライアントとコアを選び、最後に管理の手間や動作を比較します。サーバー側の協力がなければ、通常はプロトコルを自由に変更できず、提供された設定の中から選ぶことになります。クライアントのプロトコル選択メニューは設定の入口であり、接続先サーバーを自動的に別のプロトコルへ変換する機能ではありません。

デスクトップとAndroidの選び方

デスクトップではv2rayNを第一候補としておすすめします。まずダウンロードページでOSとプロセッサーのアーキテクチャに合ったものを選び、必要なプロトコルに対応するコアを確認してください。Windowsデスクトップ版と従来のWPF版の違いはGUIと実行環境に関するもので、接続先のプロトコルの違いではありません。macOSとLinuxでも、アーキテクチャとシステム要件を確認する必要があります。一般的なブラウザーがシステムプロキシを利用できるなら、まずTUNを使わず少ない条件で動作を確認し、必要に応じて通信を取り込む範囲を広げてください。

Androidではサーバーの対応状況に合わせてv2rayNGを優先してください。特にXray関連機能が必要な場合に適しています。サーバーが明確にV2Fly経路を必要としていて、設定が対応範囲内ならv2flyNGも選択肢になります。初回起動時はシステムのVPN接続を許可し、ほかのVPNが同じ接続枠を使用していないか確認してください。その後、バックグラウンドでの動作制限とネットワーク切り替え時の挙動を調べます。アプリをバックグラウンドにすると切断する場合でも、すぐにプロトコルが原因と決めつけないでください。システムの省電力設定、バックグラウンド権限、電波状況をそれぞれ確認しましょう。

既存サーバー、新規構築、リアルタイムアプリ

既存サーバーを使う場合は、元のプロトコルとトランスポートを維持して、まず設定全体が正しくインポートされるか確認するのが最も確実です。VMess + WebSocket + TLSが正常に動いているなら、名称を変えるだけのために移行する必要はありません。Trojanでは証明書、サーバー名、パスワードを適切に保守し、Shadowsocksでは方式と鍵の形式を正確に合わせます。VLESS + REALITYが必要な場合は、組み合わせ全体に対応するXray経路を選び、フロー制御とハンドシェイク項目にはサーバーから提供された値を使います。他の設定から項目を流用しないでください。

新規構築では、運用できる範囲から構成を選ぶとよいでしょう。証明書とサーバー名を管理できるか、リバースプロキシを使う必要があるか、利用する端末すべてが同じセキュリティ方式に対応しているか、サブスクリプションツールが必要な項目をすべて出力できるかを確認します。こうした項目をチェックリストにするほうが、理論上の処理負荷だけを追うより役立ちます。音声通話などUDPを使うアプリが必要なら、端から端までUDPとルーティングを確認してください。Webページが開けるだけでテストを終わらせてはいけません。アプリの地域設定、接続先の回線、サーバーの場所も使用感に影響します。

用途まず行うこと後回しにする変更
既存サーバーへの初回接続元の組み合わせを維持し、設定全体を確認するプロトコル、DNS、ルーティングを同時に変更する
VLESS + REALITYXray、フロー制御、ハンドシェイク項目を確認する不足した項目を似た設定で代用する
プロキシに対応しないアプリの通信も取り込みたいTUN、権限、ルーティングを確認するTUNをプロトコルの高速化機能として使う
モバイル端末の待機中に接続が不安定再接続、電波状況、バックグラウンド制限を確認する一度の電池消費を根拠にコアを変更する

最小限の設定で、元に戻せる基準を作る

初回の動作確認では、サーバーを1つだけ使い、ルーティングを明確にし、互換性のある既定値を使います。まずコアが起動するか、次にリクエストがローカルポートへ届くかを確かめ、その後サーバーとのハンドシェイクと接続先へのアクセスを確認してください。以下のJSONは、ネイティブ設定のroutingオブジェクトにおける最小限のルール構造を示す例です。プライベートアドレスをdirectという名前のアウトバウンドへ送ります。完全な接続設定ではありません。使用前に該当タグの直接接続アウトバウンドが存在することと、既存ルールの順序を確認してください。GUIクライアントを使う場合は、同様の設定をルーティング画面から行う方法を優先してください。

{
  "routing": {
    "rules": [
      {
        "type": "field",
        "ip": ["geoip:private"],
        "outboundTag": "direct"
      }
    ]
  }
}

このルールからは、プロトコルとは別の要素もリクエストの経路を変えることがわかります。ノードに変更がなくても、ルーティングによってノードを経由するかどうかが変わります。ルールは実装のマッチング方式に従って処理されます。先に広い条件が一致すると、後にある細かいルールが適用されない場合があります。実際の運用では地域データファイルが利用できるかも確認してください。例をそのまま使うためにroutingオブジェクト全体を置き換えるのではなく、既存ルールを理解してから条件を明示して追加し、ローカルネットワークと接続先ネットワークへのアクセスを個別に確認しましょう。

問題が起きたら、根拠を見ながら元に戻す

コアが起動しない場合は、設定の生成とポートの使用状況を確認します。ハンドシェイクに失敗する場合は、認証情報、セキュリティ層、時刻を確認してください。接続が確立しているのにアプリが応答しない場合は、ローカルの通信受け入れ、DNS、ルーティングを調べます。ローカルポートの競合については、ポート使用中エラーと待ち受けポートの変更メモをご覧ください。一度に変更するのは1項目だけにし、直前に使えていた状態を保存します。元に戻すときは、すべてのプロトコル項目を入力し直すのではなく、追加した高度な機能を先に無効にしてください。

選んだ構成は、クライアント、コア、プロキシプロトコル、トランスポート、セキュリティ層、通信の取り込み方式、ルーティングを1行にまとめて記録できます。端末を変える際に項目ごとに確認でき、問題が起きたときも変更点を正確に伝えられます。プロトコル選択の目的は複雑な名前を選ぶことではなく、サーバーの機能、クライアントの実装、実際のアプリの要件を一致させることです。基準となる構成を作った後で、性能の章の方法に沿って条件をそろえて比較してください。日常的な操作はクイックスタートガイドへ、具体的な疑問はよくある質問をご覧ください。