2026年8月28日 · プロトコル解説 · 約10分

VMessとVLESSの違いとは?Shadowrocketで確認したいプロトコルの違い

VMessとVLESSの違いを、暗号化・UUID・トランスポート・TLSの観点から解説。Add Serverでの設定方法も確認できます。

この記事の概要

この記事は、すでにサービス提供元の設定情報を持ち、ShadowrocketでVMessまたはVLESSのパラメータを確認したい方向けです。認証・データ暗号化・トランスポート・TLSを区別したうえで、Add Serverの入力順に沿って確認します。読み終えると、UUID、Port、Server Name、Host、Pathがそれぞれどの層に属するかを把握でき、Typeを変更すればプロトコルも変換できるという誤解を避けられます。

1. VMessとVLESS:認証と暗号化を区別する

VMessとVLESSはいずれもユーザーの識別にUUIDを使用できますが、プロトコルの仕様は異なります。VMessはプロトコル層で認証とデータ暗号化の仕組みを提供します。一方、VLESSの基本プロトコル自体はデータを暗号化しないため、通常はTLSなどのセキュアなトランスポートと組み合わせます。どちらの設定にもUUIDがあるからといって、相互に置き換えられるわけではありません。

ここでいう暗号化は、クライアントとサーバー間のプロキシ接続を指します。Webページ自体のHTTPSは別の層です。WebページがHTTPSでも、プロキシ接続全体が同じ保護を受けているとは限りません。また、プロキシ接続でTLSを有効にしても、アクセス先のすべてのWebサイトが自動的にHTTPSになるわけではありません。トラブルシューティングでは、この2つの層を分けて確認してください。

確認項目 VMess VLESS
ユーザー認証 UUIDなどの認証パラメータを使用します。サーバー側の設定と一致させてください。 UUIDでユーザーを識別します。サーバー側の設定と一致させてください。
プロトコル層の暗号化 プロトコル層でデータを暗号化できます。具体的な方式は既存の設定に従ってください。 基本プロトコルではデータを暗号化しません。関連するnoneの値を、TLSを必ず無効にする指定と解釈しないでください。
外側のTLS 利用できます。有効にするかどうかはサーバーの構成によります。 通常はTLSなどのセキュアなトランスポートと組み合わせます。実際の構成を確認してください。
トランスポート方式 TCPやWebSocketなどを組み合わせられます。双方の対応状況を確認してください。 同様に、トランスポート方式も一致させる必要があります。プロトコル名だけを確認しても不十分です。
プロトコルの切り替え VLESSに変更する場合は、対応するサーバー設定が必要です。 VMessに変更する場合も、対応するサーバー設定が必要です。

現在のVMess設定では、AEAD認証がよく使われます。古い設定にAlter IDがある場合、UUIDと混同したり、古いパラメータを別の設定にそのまま当てはめたりしないでください。インポートした内容がサービス提供元の最新案内と異なる場合は、その設定が現在もサポートされているか確認してから項目を変更しましょう。

2. UUIDとPort:形式が同じでも接続先は同じとは限らない

UUIDは、123e4567-e89b-42d3-a456-426614174000のように、ハイフンで区切られた5つの16進数グループで表記されます。これは形式を示す例であり、実際に使える認証情報ではありません。入力時は全体をそのまま保持し、空白を加えないでください。また、設定名、サブスクリプション名、アカウントのログインパスワードをUUIDの入力欄に入れないでください。

128 bit
UUIDの文字数。一般的な表記形式は8-4-4-4-12
443
TLSでよく使われるPortの例です。どちらかのプロトコルに固定されたPortではありません。
1–65535
サーバーのPort入力に使用できる数値の範囲

Addressは接続先、Portは接続するサービスの入口、UUIDは認証に使うユーザーを指定します。3つすべてを一致させる必要があります。同じAddressでも443と8443が別々の入口に対応することがあります。よく使われるPortだからといって、もう一方を自己判断で置き換えないでください。

  • Addressを確認:設定で指定されたドメイン名またはIPアドレスだけを入力し、サブスクリプションURL全体をAddress欄に入れないでください。
  • Portを確認:元の設定に記載された数値を入力し、プロトコルの接頭辞やパスを加えないでください。
  • UUIDを確認:コピー時に先頭や末尾が欠けていないか、改行が混入していないか確認してください。
  • 有効な状態か確認:認証情報の期限切れ、無効化、接続制限などがあると、形式が正しくても認証に失敗することがあります。

3. TLS、Server Name、WebSocketを層ごとに確認する

接続を4つの層に分けると、設定を確認しやすくなります。まずAddressとPortに接続し、TLSを有効にしている場合はTLSを確立し、次にWebSocketなどのトランスポートを確立して、最後にVMessまたはVLESSで認証します。これは設定を理解するための簡略化したモデルです。ある層で失敗している場合、その後のUUIDを変更しても、前の層の問題は通常解決しません。

Server Nameは通常、TLSのSNIや証明書名の確認に関係します。WebSocketのHostはHTTPリクエストヘッダー、Pathはリクエストパスです。同じドメイン名が設定されることもあれば、サーバー構成によって異なることもあります。Hostを自動的にAddressへコピーしたり、PathをサブスクリプションURLのパスと同じものだと考えたりしないでください。

TLSを有効にする:サーバーにTLSの接続口が用意されている場合

推奨

既存の設定に従ってTLSを有効にし、Server Nameと証明書を確認してください。ここで推奨するのは、用意されているセキュアな接続口に設定を合わせることです。任意のPortにTLSを無理に追加することではありません。

適用例:サービス提供元がTLSパラメータを明示し、証明書とドメイン名が対応した接続を提供している場合

TLSを無効にする:サーバーがTLSなしの接続口を明示的に求めている場合

既存の構成で指定されている場合に限って使用してください。VLESSの基本プロトコルは暗号化を行いません。TLSを無効にしたら一時的につながったとしても、一般的な設定方法とみなさないでください。

適用例:別のセキュリティレイヤーがある環境、または管理されたテスト環境の設定を確認する場合

まとめ:まずTLSとトランスポートを合わせ、その後に認証を確認

証明書名のエラーが出た場合は、まずServer Name、デバイスの日時、証明書の状態を確認してください。WebSocketのハンドシェイクに失敗する場合は、Host、Path、トランスポートの選択を確認します。証明書の検証を無効にして、設定の不一致を回避しないでください。

たとえば、既存の設定でTLSが指定され、Portが443、WebSocketのPathが/proxyの場合は、それぞれの値をそのまま設定してください。Address、Port、UUIDが同じでも、Pathを/に変更すると、同じサービスに接続できないことがあります。パスの大文字・小文字を区別するか、クエリパラメータを含むかは、元の設定に従ってください。

4. Add Serverに順番に入力する

Homeで追加ボタンをタップしてAdd Serverを開きます。まず、すでに持っているサービス提供元の設定をインポートし、項目を開いて内容を確認してください。手動で入力するのは、必要なパラメータがすべてそろっている場合に限ります。Typeによって表示される項目は異なります。表示されない項目を別のプロトコルに変更して無理に補わないでください。

  1. Typeを選択します。元の設定がVMessならVMess、VLESSならVLESSを選択してください。名前が似ていても、認証形式に互換性があるとは限りません。
  2. 接続先を入力します。AddressとPortをそれぞれ入力し、ドメイン名の後ろにあるパスまでAddress欄に貼り付けていないことを確認してください。
  3. 認証情報を入力します。UUIDを対応する認証欄に入力してください。VMessの暗号化関連パラメータは、自己判断で変更せず、元の設定に従ってください。
  4. トランスポートを設定します。元の設定に合わせてTCPやWebSocketなど、対応する方式を選択してください。WebSocketを使う場合はHostとPathも確認します。
  5. TLSを確認します。元の設定に従ってTLSとServer Nameを設定してください。ほかのセキュリティパラメータも元の設定に合わせる必要があります。「VLESS + TLS」という情報だけで、必要な設定全体を推測することはできません。
  6. 保存して項目を選択します。Homeに戻り、保存したサーバーが選択されていることを確認してから、同じ接続先への接続テストを行ってください。

サブスクリプションからインポートした場合、サーバー項目のパラメータとConfigのルールは別の設定です。サブスクリプションの更新でサーバーのパラメータが再設定されることがあります。トラブルシューティングの前に元の情報を保存し、更新後に一時的な編集内容が上書きされないようにしてください。サブスクリプションURLにはアクセス情報が含まれる場合があるため、スクリーンショットや問い合わせの際はURL全体とUUIDを隠してください。

5. 接続できないとき:プロトコルとルーティングの問題を切り分ける

Homeのスイッチをオンにしただけでは、接続処理が開始したことしか分かりません。選択中のサーバーで認証が完了したことや、現在のWebページがそのサーバー経由で通信していることは確認できません。Global Routingはトラフィックの振り分け方法を決め、サーバーのTypeはサーバーとの通信方式を決めます。両者は別の層の設定です。

確認手順:サーバー接続とConfigのルールを分けてテスト

まずサーバー接続を確認
  • 現在のGlobal Routingと選択中のサーバーを記録します。
  • 一時的にProxyを使って通常のWebリクエストをテストし、Configのルールによる影響を減らします。
  • 同じHTTPSのテスト先を使い、変更するパラメータは一度に1つだけにします。
  • 接続に失敗し続ける場合は、接続先、TLS、トランスポート、UUIDの順に確認します。
次にConfigのルーティングを確認
  • サーバーが使用できることを確認したら、元のGlobal Routingに戻します。
  • Configで現在実際に有効になっている設定を確認します。
  • DOMAIN-SUFFIXなどのルールがFINALより先に一致しているか確認します。
  • 特定のドメインだけ接続できない場合は、DNSと実際に適用されたルールを確認します。

Proxyでのテストは原因を絞り込むためのもので、VMessをVLESSに変換するものではありません。テスト後は普段の設定に戻してください。

Directは直接接続する設定のため、プロキシサーバーが使用できるかどうかの検証には使えません。Sceneは状況に応じて設定を切り替える機能であり、特定のプロトコルを指すものでもありません。接続状態が自動で変わる場合は、Settings → On Demandも確認し、既存の条件を記録してください。元の設定の目的が分からないまま、何度も切り替えないでください。

  • 接続がタイムアウトする:まずアドレスの名前解決、Portへの到達性、現在のネットワーク、サーバーの状態を確認してください。タイムアウトだけでUUIDの誤りとは判断できません。
  • 証明書エラー:Server Name、デバイスの日付と時刻、証明書の有効性、信頼チェーンを確認してください。検証をそのままスキップしないでください。
  • WebSocketのハンドシェイクエラー:トランスポート方式が一致しているか、HostとPathがすべて正しく設定されているか、リバースプロキシがそのPathを引き続き提供しているか確認してください。
  • 認証後すぐに切断される:プロトコルの種類、UUID、サーバー側の制限を確認してください。VMessを使っている場合は、デバイスの時刻も確認します。
  • 一部のWebサイトだけ接続できない:ドメイン名、Global Routing、適用されたルールを記録し、DNS、ルール、接続先サービスのどれに問題があるか確認してください。

6. よくある質問:プロトコルを変更する前に確認すること

TypeをVMessからVLESSに変更すれば、そのまま使えますか?

使えません。まず、すでに利用しているサービス提供元に、対応するVLESSの接続先があるか確認し、必要な設定をすべてそろえてください。Address、Port、UUIDが同じに見えても、サーバー側が該当プロトコルを受け付ける必要があります。元の項目を残し、テスト用に新しい項目を作ると元に戻しやすくなります。

VLESSにnoneと表示されています。TLSを無効にする必要がありますか?

いいえ。VLESSに関連するnoneの値と、外側のTLSは別の層のパラメータです。項目に戻り、元の設定に従ってTLSの有効・無効とServer Nameを確認してください。この値だけを根拠にTLSを無効にしないでください。

同じサーバーなら、VLESSは必ずVMessより速いですか?

プロトコル名だけでは判断できません。ネットワーク、接続先、トランスポート方式、テスト時間をそろえたうえで、接続の可否、遅延、継続的な通信性能を比較してください。サーバー負荷、回線のパケットロス、外側のトランスポートも結果に影響します。1回の速度テストだけでプロトコルの優劣は判断できません。

手動変更後は接続できたのに、サブスクリプションを更新すると失敗する場合は?

更新前後のType、Port、TLS、Host、Pathを比較し、サブスクリプションの内容で再設定されていないか確認してください。必要なパラメータを手元に記録し、サービス提供元にサブスクリプションの出力内容を確認しましょう。変更点を残さずに元の項目を何度も上書きしないでください。

手順は、まず利用中のサービスが提供する設定一式を確認し、次にShadowrocketがその組み合わせに対応しているかを確認してから、同じ条件でテストするのが基本です。プロトコル名は接続方式を示す情報の一つにすぎず、接続できるかどうかはすべてのパラメータが一致するかに左右されます。Home、Config、Settingsの基本操作については、下記のチュートリアルをご覧ください。

App Storeで正規アプリを確認