2026-08-21 · プロトコル · 約8分

VMessとVLESSの違い|Shadowrocketの設定前に確認したいポイント

VMessとVLESSの暗号化、UUID、Transport、TLSの違いを解説。ShadowrocketのAdd Serverで間違えやすい項目も確認できます。

この記事の要点

VMessとVLESSは、Typeを変更するだけで相互に切り替えられるものではありません。利用するサービスと正規の設定情報をすでにお持ちの方に向けて、プロトコル、UUID、Transport、TLSの役割と、ShadowrocketのAdd Serverで確認すべき項目を解説します。まず既存の設定どおりに入力し、接続ログで動作を確認してください。プロトコル名だけで速度や安全性を判断することはできません。

VMessとVLESSの主な違い

Shadowrocketは複数のプロトコルに対応した接続設定を利用できます。VMessとVLESSはいずれもユーザー識別子としてUUIDを使えますが、認証方式やデータ処理、利用できる組み合わせは異なります。サーバーがVMessならクライアント側もVMessを、VLESSなら対応するTypeを選択してください。Address、Port、UUIDが同じでも、2つのプロトコルを相互に置き換えることはできません。

確認項目VMessVLESS
ユーザー識別情報UUIDなどの認証パラメータを使用。認証には時刻の有効性も関係しますUUIDでユーザーを識別・認証。VMessの認証方式は使用しません
プロトコル内のデータ暗号化プロトコル内でデータを暗号化。方式は暗号化設定によって異なります一般的な設定ではencryptionはnoneで、同種のペイロード暗号化は行いません
外側の通信保護TLSを組み合わせられます。プロトコル内の暗号化とTLSは別のものです通常はTLS、または設定で指定された別のセキュリティ層で通信を保護します
TransportTCPやWebSocketなど、サーバー側のTransport設定と一致させます同様にTransportの設定を合わせる必要があります。プロトコル名だけでは判断できません
移行方法サーバーから提供されたVMessの全パラメータを使用しますサーバーから提供されたVLESSの全パラメータを使用し、既存の項目を直接書き換えないでください

ここでいう「VLESSには同種のペイロード暗号化がない」とは、接続全体が必ず平文になるという意味ではありません。VLESSをTLS上で正しく動作させれば、外側のTLSがクライアントから対応するTLS終端までのデータを保護します。一方、設定にTLSと記載されているだけでは不十分です。証明書の検証、名前の一致、実際の接続結果も確認してください。

プロトコル、Transport、TLSの3層を区別する

1つの接続でVLESS、WebSocket、TLSを同時に使うことがあります。VLESSはプロトコル処理、WebSocketはTransportのカプセル化、TLSは外側の暗号化と証明書検証を担います。これらは互いに排他的な選択肢ではありません。VMessもWebSocketやTLSと組み合わせられるため、WebSocketをVLESS固有の機能と考えないでください。

3層
プロトコル、Transport、TLSを個別に確認し、Typeだけで判断しない
443
TLSでよく使われるPortの例。すべての設定に共通する固定値ではありません
36文字
UUIDの一般的な表記:16進数32文字とハイフン4つ

まとめ:プロトコル名から既定値を推測せず、パラメータ一式を入力する

既存の設定にTransport、TLS、Portの記載がない場合は、まず元のパラメータを確認してください。WebSocketに決めつけたり、TLSを有効にしたり、Portを443に変更したりしないでください。修正の効果を判断しやすくするため、確認済みの誤りがある項目だけを一度に1つ変更します。

UUIDはAddressでもサブスクリプションURLでもありません。一般的には、8-4-4-4-12の形式で5つの16進数グループから構成されます。コピー時は前後の空白や改行、全角記号が混入しないよう注意してください。形式が正しくても、サーバー側でそのUUIDが許可されていなければ認証に失敗します。形式の確認は最初の手順にすぎません。

Add Serverで間違えやすい項目

Homeで追加ボタンをタップしてAdd Serverを開き、まずTypeを選択してから必要な項目を入力します。Type、Transport、アプリ内設定によって、後から表示される項目は異なります。下表では各パラメータの役割を確認します。プロトコルごとに編集画面が同じとは限りません。サブスクリプションを正しく読み込めている場合は、記憶を頼りに作り直さず、まず読み込み結果を維持してください。

項目・パラメータ確認する内容よくある入力ミス
Typeサーバーのプロトコルに合わせ、VMessとVLESSを区別するTypeだけ変更し、別プロトコルのパラメータをそのまま残す
Address / PortAddressと数字のPortをそれぞれ入力するPathを含む完全なURLをAddress欄に入力する
UUID説明文を付けず、ユーザー識別子をすべてコピーする表示名をコピーしたり、文字グループを1つ抜かしたりする
VMessの暗号化設定既存の設定とサーバーの対応範囲に従うVLESSのnoneをそのままVMessに適用する
Transportサーバー側のTCP、WebSocketなどの設定に合わせるPortが443だからWebSocketだと決めつける
WebSocket Host / PathHostには指定されたホスト名を使い、Pathでは先頭のスラッシュと必要なクエリパラメータを維持するSNIをPathとして扱う、またはPath先頭のスラッシュを省略する
TLS / SNITLSが有効か、送信するサーバー名は何かを確認する接続先IPを証明書のドメイン名として扱う
Allow Insecure証明書検証は有効のままにし、証明書、名前、デバイス時刻の問題を優先して修正する検証をスキップする設定を長期的な解決策にする

たとえば既存の設定では、特定のIPに接続しながら、SNIとWebSocketのHostにedge.example.com、Pathに/tunnelを指定する場合があります。この例では3つのパラメータに関連がありますが、それぞれ役割は異なります。Addressは接続先を指定し、SNIはTLSハンドシェイクでサーバー名を通知し、HostはWebSocketのHTTPハンドシェイクで使用します。ドメイン名とPathは項目間の関係を説明する例であり、実際に接続できる設定ではありません。

読み込みから検証まで:まず設定を維持し、ルーティング状態を確認する

プロトコルのパラメータが正しくても、対象の通信がその接続を経由するとは限りません。Homeでの選択、Global Routingのモード、Configのルールによって実際の通信経路が決まります。トラブルシューティングでは、「接続自体が使えるか」と「通信が想定したルールに一致しているか」を分けて確認してください。

  1. 使用する権利のある既存の設定またはサブスクリプションを読み込み、Homeで項目数とTypeを確認します。手動で入力する場合は、前のセクションの項目確認を先に行ってください。
  2. 検証する項目を選択して接続を開始します。初回はシステムの案内に従ってVPN構成の追加を許可してください。
  3. Global Routingで現在選択されているモードを確認してください。DirectのままWebページへのアクセス結果を見ても、プロトコルの接続確認にはなりません。
  4. アクセスする権限があり、繰り返し確認できる対象にリクエストを送り、アプリ内の接続ログで対象、ポリシー、エラー情報を確認してください。
  5. サブスクリプションを更新する場合は、更新後に現在選択されている項目をもう一度確認してください。内容の更新によって手動の変更が上書きされることがあります。重要な変更は事前に安全な場所へバックアップしてください。

Config

推奨

現在有効な設定ルールに従って通信経路を決めます。プロトコルの検証後、確認済みのConfigを復元し、リクエストに実際に適用されたポリシーを確認してください。ルールの転送先が現在のプロキシになっている場合に限り、そのリクエストを接続の検証に使えます。

適した用途:既存ルールを使った日常利用と復元後の確認

Proxy

Shadowrocketが処理するリクエストをプロキシ経由にします。ルール分岐の影響を一時的に減らす場合に使えます。プロトコルを修復する設定ではなく、UUID、Port、TLSの誤りも解決しません。

適した用途:接続パラメータとルール判定の問題を一時的に切り分ける

Direct

直接接続するモードです。この状態で、選択したVMessまたはVLESS接続が正常に通信できるかを判断することはできません。ページが開いても、現在の直接接続環境でその対象にアクセスできたことを示すだけです。

適した用途:直接接続でのネットワークと対象への到達性を比較する

Global RoutingにはSceneもあります。名前だけで通信経路を判断せず、現在のSceneで実際に適用されている設定を確認してください。Settings → On Demandは条件に応じて接続を開始する機能で、VMessやVLESSの認証パラメータを変更するものではありません。自動接続が起きる場合はこの項目を確認し、認証に失敗する場合は該当項目のパラメータを確認してください。

タイムアウト、認証失敗、証明書エラーの調べ方

エラーの症状は原因の範囲を絞る手がかりになりますが、特定の項目の誤りを単独で証明するものではありません。まず現在の値を記録し、「Addressの到達性 → セキュアなハンドシェイク → プロトコル認証 → リクエストのルーティング」の順に確認してください。一度に複数の項目を変更すると、原因を判断しにくくなります。以下のQ&Aはトラブルシューティングの目安であり、すべてのエラーメッセージに当てはまる固定的な解釈ではありません。

UUIDを正しくコピーしたのに接続がタイムアウトするのはなぜですか?

まずHomeで該当項目の編集画面を開き、AddressとPortを確認して、現在のネットワークから接続先に到達できるか調べてください。タイムアウトは認証前に起きることも、その後のハンドシェイクが完了せず発生することもあります。この段階でUUIDを何度も再生成したり、置き換えたりしないでください。以前は使えていた場合は、サーバーの稼働状況とサブスクリプションの更新結果を確認してください。

証明書名が一致しないという警告が出ます。Allow Insecureを有効にすべきですか?

まずTLSのサーバー名とSNIを確認し、デバイスの日付と時刻が正確か、サーバー証明書が有効かを調べてください。AddressがIPでも、証明書がドメイン名に対して発行されている場合は、元の設定に従って正しい名前を入力します。証明書検証をスキップして、名前や証明書の問題を回避しないでください。

VMessの設定を変えていないのに、突然認証エラーが出る場合はどうすればよいですか?

まずデバイスの日付と時刻が正確かを確認し、UUIDが引き続き許可されているか、サーバーのパラメータに変更がないかを調べてください。VMessの認証では時刻の有効性も関係するため、大きな時刻のずれで接続に失敗することがあります。古い設定のAlterIdを任意の数値に変更して試すのではなく、現在有効なパラメータを使用してください。

VLESSは接続済みなのにWebページを開けません。次に何を確認すればよいですか?

まずアプリ内の接続ログを見て、そのWebページへのリクエストに想定したポリシーが適用されたか確認してください。接続先に到達している場合は、Transport、WebSocketのHostとPath、TLS、設定で求められる追加パラメータを確認します。システム上でVPNが接続済みと表示されても、リモート側の認証、DNSの名前解決、個々のリクエストがすべて成功したとは限りません。

遅延テストで数値が返っても、すべてのWebページにアクセスできるとは限りません。テスト方法によって確認できる段階が異なるため、最終的には実際のリクエストを検証してください。調査記録を共有する前に、UUID、サブスクリプショントークン、パスワード、その他のアクセス認証情報を削除してください。Type、Transport、エラーの分類、機密情報を伏せた項目間の関係を残すと、原因の特定に役立ちます。

選択と移行:既存の設定と検証結果を基準にする

現在のVMess設定が正常に動作しているなら、VLESSという別の名称だけを理由に移行する必要はありません。VLESSに同種のペイロード暗号化がないからといって、「必ず速い」とは限りません。外側のセキュリティプロトコル、Transport、ネットワーク品質、サーバー負荷、接続先のサイトが結果に影響します。比較する際は、同じテスト対象と近いネットワーク環境を使い、接続の可否、失敗した段階、繰り返しテストしたときの傾向を記録してください。一度の遅延測定だけで判断しないようにしましょう。

ShadowrocketはAppleプラットフォーム向けのクローズドソースの商用アプリです。主な利用端末はiPhoneとiPadで、入手先はApp Storeのみです。アプリは買い切りで、アプリの購入と接続サービスは別です。この記事は、ご自身が利用するサービスとサブスクリプションをすでにお持ちの方を対象としており、接続サービスの提供、販売、推奨は行いません。システム要件と購入可能な地域はApp Storeの掲載内容をご確認ください。

App Storeの正規アプリを確認