すでにサブスクリプションを利用している場合は、まずクライアントのコアが完全に認識できるノードを選びましょう。プロトコル名だけで速度を判断するのは避けてください。自分で設定する場合は、認証方式、暗号化レイヤー、通信方式を比較します。VMess・VLESS・Trojan・Shadowsocksの違いを知りたい方に向けて、主要な設定項目やTLSの要否、デスクトップとAndroidでの対応状況を解説します。
プロトコル・通信方式・暗号化レイヤーを区別する
VMess・VLESS・Trojan・Shadowsocksはプロキシプロトコルであり、クライアントの名称ではありません。v2rayNはデスクトップ向けクライアント、v2rayNGはXrayコア、v2flyNGはV2Flyコアを使用します。クライアントは設定の編集・インポート・実行を担い、実際に接続を確立するのは選択したコアです。リンクをインポートできても、その組み合わせすべてをコアがサポートしているとは限りません。
ノードには少なくともサーバーアドレス、ポート、認証情報、通信設定が含まれます。プロトコルは認証方法や宛先アドレスの表現方法を定め、TCPやWebSocketなどの通信方式が接続を運びます。TLSやREALITYなどのセキュリティレイヤーは、該当する通信を保護します。トラブル対処では各レイヤーを分けて確認すると、WebSocketのパスの誤りをプロトコル非対応と誤認するのを防げます。
- プロトコル層:VMess・VLESS・Trojan・Shadowsocksのどれかを確認します。画面上のプロトコル選択だけを変更しても解決しません。
- 認証層:VMessとVLESSでは通常UUIDを使用し、Trojanではパスワードを使用します。Shadowsocksの認証情報は暗号化方式によって異なります。
- 通信層:TCPやWebSocketなどの設定を確認します。WebSocketを使う場合は、パスとリクエストヘッダーもサーバー側の設定に合わせてください。
- セキュリティ層:TLS、サーバー名、証明書の検証を確認します。サーバー側がREALITYなど特定の設定を要求しているかも確認してください。
4つのプロトコルの暗号化とハンドシェイクを比較
プロトコルの認証とデータの暗号化は別のものです。UUIDやパスワードは接続資格を示すもので、通信が暗号化されているかどうかを単独で判断できません。以下は一般的な構成の比較です。利用できる設定項目は、双方のコアの実装とサーバー設定によって異なります。
| プロトコル | 認証・ハンドシェイク | 暗号化とTLSの関係 | 主な確認項目 |
|---|---|---|---|
| VMess | ユーザー認証にUUIDを使用し、現在の構成ではAEAD認証方式を採用します。認証処理にはシステム時刻も関係します。 | プロトコル自体にデータ保護機能があり、一般的なペイロード暗号化方式にはAES-GCMやChaCha20-Poly1305があります。TLSは外側に追加できます。 | UUID、暗号化オプション、システム時刻、通信方式、TLS設定。 |
| VLESS | UUIDで認証し、プロトコルヘッダーは比較的シンプルです。一部の組み合わせではflowの指定も必要です。 | 一般的な基本構成のVLESSはペイロードを暗号化しません。TLSやREALITYなどのセキュリティレイヤーと組み合わせます。拡張機能はコアによって異なります。 | UUID、security、flow、およびTLSまたはREALITYの関連設定。 |
| Trojan | TLSで保護された接続内で、パスワード認証情報と宛先リクエストを送信します。 | 標準的な構成では、認証情報と通信データの保護にTLSを使用します。証明書を正しく検証する必要があります。 | パスワード、サーバー名、証明書の信頼性、通信設定。 |
| Shadowsocks | 選択した方式に応じて共有パスワードまたは所定形式のキーを使用し、プロトコル内で宛先アドレスを扱います。 | AEAD方式では暗号化と認証を行うため、基本構成にTLSは必須ではありません。旧方式と世代の異なる方式を同一視しないでください。 | method、パスワードまたはキー、ポート、双方での方式のサポート状況。 |
設定の複雑さ:項目が少なくても接続しやすいとは限らない
VMessの一般的なインポート情報には、UUID、暗号化オプション、通信パラメーターが含まれます。現在のVMess AEAD構成では通常alterId=0を使用します。「互換性を高める」ために古いチュートリアルのゼロ以外の値をそのまま使わないでください。認証に失敗する場合は、UUIDを何度も変更するのではなく、端末とサーバーの時刻も確認しましょう。
VLESSは基本項目が少ない一方、特定のセキュリティレイヤーを有効にすると、組み合わせの確認が増えます。たとえばVLESSとREALITYを併用する場合、サーバー名、公衆鍵、short IDなどをサーバー側の指定に合わせる必要があります。xtls-rprx-visionは特定のflow値であり、すべてのVLESSノードに設定するものではありません。WebSocketの設定に任意で追加することもできません。
- まずプロトコルを確認:ポートから推測せず、サービス提供元の説明または元のサブスクリプションで確認します。
- 次に認証情報を確認:UUID、パスワード、キーを正確にコピーします。コピー時に紛れ込んだ空白や改行は取り除いてください。
- 続いて通信設定を確認:WebSocketのパスとHost、TLSのサーバー名は個別に確認します。それぞれ異なる場合があります。
- 最後に追加設定を確認:サーバー側で明示的に有効になっているflow、セキュリティレイヤー、方式だけを設定し、無関係な項目を追加しないでください。
Trojanでは、証明書が有効か、サーバー名が証明書と一致しているかを確認します。Shadowsocksでは、暗号化方式を正確に一致させる必要があります。たとえばaes-128-gcmとchacha20-ietf-poly1305は互換性がありません。Shadowsocks 2022の方式を使う場合は、コアの対応状況とキー形式も確認してください。通常のパスワードを、どの方式でも使えるキーとして扱うことはできません。
用途に応じた選び方:サーバーを確認してからクライアントを選ぶ
以下の選び方は「新規に設定する」「Xrayを使用する」「サーバーを管理できる」ことを前提としており、速度ランキングではありません。すでに安定して使えるサブスクリプションがある場合は、積極的に構成を変更するより、現在のプロトコルとの互換性を維持するほうが簡単です。遅延やスループットは回線、混雑、サーバー負荷、通信方式、端末性能にも左右されるため、プロトコル名だけでは判断できません。
VLESS:Xrayで新規構成を作成
おすすめ双方の対応状況が一致し、TLSまたはREALITYを正しく設定できる場合は、新規構成の有力な候補です。まずセキュリティレイヤーと通信方式の組み合わせを決め、その後に認証情報を設定してください。
おすすめのケース:サーバーを管理でき、Xrayを使用し、関連するセキュリティ設定を維持できる場合。
VMess:既存の構成を継続
利用可能なVMessサブスクリプションやサーバーがすでにある場合は、そのまま使い続けるのが手軽です。AEAD設定、システム時刻、既存のWebSocketやTLS設定もあわせて確認してください。
おすすめのケース:VMessサーバーをすでに利用しており、既存の設定との一貫性を保ちたい場合。
Trojan:証明書とドメインを管理できる環境
設定の中心となるのはパスワードとTLSです。証明書の更新、サーバー名、信頼チェーンを継続的に管理する必要があります。証明書検証を無効にしたまま使い続けるのは避けてください。
おすすめのケース:ドメイン、有効な証明書、標準的なTLSサービスを管理できる場合。
Shadowsocks:方式を明確にしたシンプルな構成
基本的な接続に必要なのは、アドレス、ポート、方式、認証情報の一致です。双方が対応する現行のAEAD方式を選び、UDPなどの要件は別途確認してください。
おすすめのケース:暗号化方式と認証情報が明確で、通信層の設定項目を減らしたい場合。
デスクトップとAndroidで同じサブスクリプションを使う際の確認方法
1つのサブスクリプションに複数のプロトコルが含まれることがあります。v2rayNとv2rayNGで同じ配信元を使えますが、利用できるノードが両方で同じになるとは限りません。サブスクリプション形式、クライアントの解析機能、コアの対応範囲にも左右されます。特にflow、REALITY、新しい暗号化方式は、インポート後もノードの詳細を確認してください。
両端末での運用:同じサブスクリプションでも、コアと接続先を個別に確認
デスクトップ版 v2rayN
- 実際に動作しているコアを確認してから、対応するノードを選びます。
- ノードのプロトコル、通信方式、セキュリティレイヤー、flowが揃っているか確認します。
- 「設定」→「パラメーター設定」でローカルの待ち受けポートを確認します。画面構成によって項目名や分類が異なる場合があります。
- システムプロキシが有効かどうかと、リモートノードに接続できるかどうかを分けて確認します。
Android版 v2rayNG / v2flyNG
- v2rayNGはXrayを使用します。Xrayがサポートする組み合わせからノードを選んでください。
- v2flyNGはV2Flyを使用します。Xrayの拡張機能に対応していると推定しないでください。
- インポート後、認証・通信・セキュリティの各設定を確認します。
- システムのVPN権限を許可し、実際のアプリで接続を確認します。
サブスクリプションの配信元は共用できますが、実行時の設定はそれぞれ検証してください。一方で使えるからといって、もう一方でも必ず使えるとは限りません。
サブスクリプションURLにはアクセス認証情報が含まれることがあるため、機密情報として扱ってください。インポート結果の違いを調べる際は、プロトコルや不足している項目を比較し、サブスクリプションURL、UUID、パスワード、キーを公開しないでください。ログを共有する前に、サーバーアドレスや認証情報も削除してください。
ポートと接続確認:接続先を特定して誤判定を防ぐ
ローカルのプロキシポートとリモートサーバーのポートは別物です。以下の10808と10809はローカル接続先の例、443はTLSサーバーでよく使われるポートの例にすぎず、どのノードにも適用される固定値ではありません。まずクライアントの実際の待ち受け設定を確認してから、コマンドを実行してください。
ローカルのSOCKS接続先が127.0.0.1:10808で待ち受けていることを確認できた場合は、次のコマンドでプロキシを明示して利用できます。Windows PowerShellではcurl.exeを使用してください。curlをインストール済みの他のターミナルではcurlを使えます。ここでは例示用に予約されたドメインへアクセスします。テスト方法の説明であり、速度測定の結果を示すものではありません。
curl.exe --head --connect-timeout 10 --max-time 20 --proxy socks5h://127.0.0.1:10808 https://example.com
socks5hは、接続先ドメインの名前解決をプロキシ側で行うことを示します。実際にHTTP接続先を設定している場合は、対応するプロキシアドレスを指定してください。ポート番号だけを変え、プロトコルのプレフィックスを間違えたままにしないよう注意しましょう。
curl.exe --head --connect-timeout 10 --max-time 20 --proxy http://127.0.0.1:10809 https://example.com
- ローカル接続が拒否される:まずコアが動作しているか、待ち受けポートが一致しているかを確認します。この時点ではリモート側のプロトコルに問題があるとは判断できません。
- TLS証明書エラー:サーバー名、端末の時刻、証明書チェーンを確認してください。証明書の検証をそのまま無効にしないでください。
- 接続がタイムアウトする:ログを確認しながら、リモートアドレス、ポート、ネットワーク経路、サーバーの状態を調べます。タイムアウトだけで特定のプロトコルが使えないとは判断できません。
- コマンドでは接続できるのにアプリが失敗する:システムプロキシ、アプリ独自のプロキシ設定、Androidのアプリごとの対象設定を確認してください。
よくある質問:プロトコルを変更する前の確認事項
VLESSのencryptionがnoneの場合、保護されていないということですか?
基本構成のVLESSにあるencryption=noneは、プロトコル層でペイロードを暗号化しないことを意味します。接続全体が保護されていないという意味ではありません。ノードの詳細を開き、TLSまたはREALITYがサーバーの指定どおり有効になっているか確認してください。この項目だけで判断せず、保護されていない基本構成のVLESSを信頼できないネットワークでそのまま使うのは避けてください。
VMessで接続できています。VLESSに変更すれば速くなりますか?
そのまま変更することはできません。サーバー側にVLESSの接続先が用意され、UUID、ポート、通信方式、セキュリティレイヤーが一致している必要があります。有効なノードが2つある場合は、同じ端末から近い時間帯に同じ接続先へ繰り返し接続して比較し、パケットロスやログも確認してください。1回の遅延測定だけで判断しないようにしましょう。
Trojanで証明書エラーが表示されます。検証をスキップしてもよいですか?
まずノードのサーバー名が正しいか、端末の時刻に問題がないか、証明書が期限切れでないかを確認してください。接続先にIPアドレスを使っていても、TLSのサーバー名には証明書に対応するドメイン名が必要な場合があります。検証を長期的にスキップすると重要な相手確認ができなくなるため、設定またはサーバー証明書を修正してください。
Shadowsocksのパスワードが正しいのに接続できないのはなぜですか?
method、ポート、キー形式をあわせて確認し、双方のコアがその方式に対応しているか確かめてください。通常のWebページは表示できても特定のアプリで失敗する場合は、UDPの対応状況、ルーティングルール、接続先の名前解決も確認します。パスワードが一致しているだけでは、設定の問題を除外できません。
プロトコルを変更するとルーティングルールも変わりますか?
プロトコルはリモートへの接続方法を定め、ルーティングルールはトラフィックの送信先となるアウトバウンドを決めます。ノードを変更した後は、ルーティングで参照しているoutboundTagが有効なアウトバウンドに対応しているか確認し、同じ接続先で再テストしてください。Androidではアプリごとの設定も確認し、アプリがプロキシを迂回している状態をノード障害と誤認しないようにしましょう。
選ぶ順序は、まずサーバーが提供するものを確認し、次に使用するコアがどこまで完全にサポートしているかを調べ、最後に運用コストと実際の接続状況を比較することです。既存の設定は互換性を優先し、新規構成ではセキュリティレイヤーと認証要件を明確にしましょう。プロトコル名は判断の出発点にすぎません。完全な設定項目と実行ログを確認することが大切です。