· プロトコル解説 · 約10分

ShadowrocketのVMessとVLESSの違い:暗号化・UUIDと通信設定の入力方法

VMessとVLESSの違いを暗号化、UUID認証、通信方式の観点から解説。Add Serverの各項目の意味を確認し、提供された設定値を正しく入力できます。

この記事の概要

この記事は、利用中のサービス提供元から設定情報を受け取り、ShadowrocketでVMessまたはVLESSを追加・手動設定する方向けです。認証方式、通信の暗号化、トランスポートを区別したうえで、Add ServerのAddress、Port、UUID、TLSを確認します。接続できない場合はプロトコル名を変えて試すのではなく、項目ごとに順番に見直しましょう。

VMessとVLESS:認証・暗号化・通信方式の違い

VMessとVLESSはいずれも通信プロトコルであり、接続サービスそのものではありません。サーバー側で設定されているプロトコルに合わせて、クライアント側でも同じ種類を選びます。Address、Port、UUIDが同じでも、VMessの設定をVLESSに変更するだけでサーバー側のプロトコルが切り替わるわけではありません。

VMessはプロトコル層でデータを暗号化できます。現在よく使われる設定ではAEAD認証方式が採用されています。一方、VLESSの基本プロトコルには同様のペイロード暗号化がなく、通常はTLSなどの外側の仕組みで通信を保護します。そのため、「VLESSのEncryptionがnone」であることと「通信全体が暗号化されていない」ことは同じではありません。外側のセキュリティ設定も確認してください。

2つのプロトコルの設定項目を比較
確認項目VMessVLESS
ユーザー認証UUIDなどの認証情報を使用。現在の設定では通常AEADを採用UUIDでユーザーを識別。これだけで暗号化方式は判断できない
プロトコル層の暗号化サーバーの指定に従う。auto、aes-128-gcm、chacha20-poly1305などが一般的基本プロトコルのEncryptionは通常none。VMessの暗号化設定は適用しない
外側のセキュリティTLSを有効にするかはサーバーの指定による。VMessのプロトコル層の暗号化とは別の層一般的な構成ではTLSなどの外側のセキュリティを利用するため、設定全体の確認が必要
通信方式サーバーの指定に従い、TCPやWebSocketなどを使用こちらもサーバー側の指定による。プロトコル名だけでは判断できない

同じプロトコルでも、異なる通信方式やセキュリティ設定を組み合わせられます。設定の正しさを比べるときは、VMessやVLESSという名称だけでなく、「プロトコル+通信方式+セキュリティ設定」の組み合わせを確認しましょう。プロトコル名だけで実際の速度が決まるわけではなく、利用中のネットワーク、サーバーの負荷、中継経路も影響します。

Add ServerでAddress・Port・UUIDを入力する

Homeの右上にある追加ボタンからAdd Serverを開き、最初にTypeを選択して、手元の設定情報を入力します。Typeによって表示される項目は異なり、画面の言語やアプリの表示によって項目名が変わる場合もあります。下表では各項目の意味を確認します。すべての項目が同じ画面に表示されるとは限りません。

  1. 元の設定情報を保存します。サービス提供元から受け取った設定内容をすべて保管してください。サブスクリプションや共有用の設定がある場合は、先に読み込んでから項目を編集して確認しましょう。記憶を頼りに設定を作り直すのは避けてください。
  2. Addressを入力します。ここにはホスト名またはIPアドレスのみを入力します。例:example.com。Webアドレスのhttps://、パス、クエリパラメーターは含めないでください。
  3. Portを入力します。サーバーから指定されたポート番号を入力します。443はTLSでよく使われるポートですが、すべての設定で使われるわけではありません。TLSを有効にする場合でも、元のポートを443に変更しないでください。
  4. UUIDを貼り付けます。値全体をコピーし、前後の空白や文字の抜け、改行がないか確認してください。UUIDは認証情報です。メモ用の名前でも、サブスクリプションURL内のtokenでもありません。
  5. 通信方式とTLSも確認します。基本項目が正しくても設定が完了したとは限りません。保存する前に、次のセクションで関連項目を確認してください。
36文字
ハイフン付きUUIDの標準的な文字数
1–65535
TCP / UDPのポート番号の範囲
443
TLSでよく使われるポート。必ず入力する値ではない

ポイント:書式が正しくても認証が通るとは限らない

UUIDが36文字の正しい形式でも、現在のサーバーで有効とは限りません。Addressが名前解決でき、Portに接続できても認証に失敗する場合は、元のUUIDとアカウントの状態を確認してください。新しいUUIDを生成しても解決にはなりません。

VMessの設定にはAlterIdが含まれる場合もあります。現在のVMess AEAD設定では通常0を使います。古い説明にある別の数値を、あらゆる設定に当てはめないでください。VLESSにはVMessのAlterIdの仕組みはないため、この項目を引き継ぐことはできません。受け取った古い設定と現在選択できる項目が合わない場合は、値を適当に置き換えず、設定情報の提供元に確認しましょう。

TLS・SNI・Host・Pathはそれぞれどの層の設定?

Addressは接続先を指定し、SNIはTLSハンドシェイクで使うサーバー名です。WebSocketのHostはHTTPリクエストヘッダー、Pathはリクエストパスにあたります。これらの値は同じ場合も異なる場合もあるため、すべてサーバーアドレスに合わせる方法が常に正しいとは限りません。

通信方式とセキュリティ設定の確認表
項目入力のポイントよくある間違い
Transportサーバーの設定に合わせる。例:TCP、WebSocketWebSocketをTCPに変更しながら、元のPortやほかの設定をそのまま使う
TLSサーバーから指定された場合に有効にし、サーバー名と証明書を確認するPortが443という理由だけでTLSを有効にする
SNIサーバー指定の名前を入力する。通常、プロトコルの接頭辞やパスは含めないURL全体を入力する、または証明書と一致しないIPアドレスを使う
HostWebSocketなどでは、サーバー指定のリクエストヘッダーを入力するHostを変更すればTLSのSNIも変わると思い込む
Pathパスの文字、大小文字、必要なクエリ部分をそのまま保持します。例:/ws先頭のスラッシュを付け忘れる、または独自に/へ変更する

たとえば、Portが443、TransportがWebSocket、TLSが有効、Pathが/wsと明記された設定なら、この組み合わせを項目ごとに再現します。ここに記載した値は項目の例であり、利用可能なサービスを示すものではありません。実際の入力には、手元にある設定情報を使ってください。

一部のVLESS設定にはFlowや特定のセキュリティモードに関する追加項目があります。元の設定で指定され、現在のクライアントがその組み合わせに対応している場合に限り入力してください。通常のVLESS設定にFlowを追加したり、別のセキュリティモード用の公開鍵などをTLSのSNIとして使ったりしないでください。

読み込み後はGlobal Routingで設定の問題とルールの問題を切り分ける

サブスクリプションから読み込めば手入力による転記ミスを減らせますが、読み込み後もType、Port、通信方式を確認してください。サブスクリプションは主にサーバー項目を管理するもので、Config内のルールファイルと同じものではありません。更新によって項目の手動変更が上書きされることもあります。テスト前に元の値を記録し、必要に応じてテスト用のコピーを別に保存してください。

Homeでテストする項目を選んだら、Global Routingの設定も確認します。Configは現在の設定にあるルールに従ってリクエストを処理します。Proxyは通常のリクエストをまとめてプロキシ経由にし、Directは直接接続します。Sceneは選択したシーンに従って処理するため、内容を確認せずに固定のテスト条件として扱わないでください。

Config:接続確認後にルールを使う

おすすめ

現在の設定に基づいてリクエストの経路を決定します。ルールに一致すると指定されたポリシーが適用され、先行するルールに一致しないリクエストは通常FINALで処理されます。必ずしも直接接続になるとは限りません。

こんな場合に:接続を確認済みで、普段のリクエストを既存のルールに従って処理したい

Proxy:ルールの影響を一時的に切り分ける

選択したプロキシ経由で対象ページにアクセスできるかをテストし、ルールによってリクエストがDirectに振り分けられる影響を減らします。選択中のサーバーや、ほかに適用される設定も確認してください。

こんな場合に:接続設定とルール選択のどちらが原因かを切り分けたい

Direct:ローカルネットワークの直接接続を確認する

通常のリクエストを直接接続し、現在のネットワークから本来直接アクセスできるWebサイトが開くかを確認します。この方法ではVMessやVLESSの認証が成功するかどうかは確認できません。

こんな場合に:まずローカルのWi-FiまたはCellularの不具合を切り分けたい

ポイント:Proxyでは接続できてConfigで失敗する場合は、まずルールを確認

同じサーバーとテスト用URLを使い、Global Routingだけを切り替えます。Proxyでは開けてConfigでは開けない場合、UUIDやプロトコルの種類を変更する前に、現在のConfigで一致するルール、ポリシー名、FINALの処理先を確認してください。

テスト中は、ネットワークとアクセス先のページをできるだけ固定してください。Settings → On Demandが有効な場合は、その起動条件も記録し、自動接続が手動テストに影響しないようにします。一時停止が必要な場合は、元の設定を保存してから行い、テスト後に戻してください。通信方式、ルール、自動接続条件を同時に変更しないでください。

接続できないときは外側から順番に確認する

「遅延が表示された」だけでは、該当するテスト方法で応答があったことしか分かりません。Webリクエストが認証、TLS、通信全体を正常に通過した保証にはなりません。すぐに証明書エラーが出る、待機後にタイムアウトする、特定のドメインだけ開かないなど、具体的な状況を記録しましょう。「使えない」だけでは原因を特定しにくくなります。

  1. ローカルネットワークを確認します。現在のネットワークで、通常直接アクセスできるWebサイトを開いてみてください。必要に応じてWi-FiとCellularを切り替えて比較します。ほかの設定を変えずに試すことで、比較しやすくなります。
  2. AddressとPortを確認します。Addressに余分な空白やURLの接頭辞が入っていないか、Portを正しく転記したか確認してください。接続タイムアウトはネットワーク経路やサーバーに到達できないことが原因の場合もあり、UUIDの誤りとは限りません。
  3. TLSと通信方式を確認します。TLSの設定、SNI、Transport、Host、Pathを確認してください。証明書エラーが出た場合は証明書を確認し、WebSocketのハンドシェイクに失敗する場合はパス、リクエストヘッダー、サーバー側の接続先を確認します。
  4. プロトコル認証を確認します。TypeとUUIDを確認してください。VMessでは暗号化方式、AlterId、端末の時刻も確認します。VLESSでは元の設定で指定されているEncryptionやFlowなどの項目を確認してください。
  5. 最後にルールとDNSを確認します。Proxyで比較テストを行います。特定のドメインだけ失敗する場合は、関連するリクエストの名前解決とルーティング結果を確認してください。DNS設定を一度にすべて変更するのは避けましょう。

どちらのプロトコルも使える場合でも、1回の速度測定だけで優劣を判断できません。少なくとも測定時刻、ネットワーク、サーバーの条件、アクセス先をそろえて比較してください。設定入力の完了を判断するには、保存後に繰り返し接続できること、対象リクエストが想定した経路を通ること、Configに戻したときもルールどおりに動作することを確認するのが確実です。

よくある質問:UUID・暗号化設定・サブスクリプション更新

2つの項目でUUIDが同じなら、VMessをVLESSに変更できますか?

UUIDが同じという理由だけで変更することはできません。まずサーバー側で利用するVLESSの設定情報を確認してください。そのうえでHome → Add Serverから該当するTypeを新規作成し、Port、通信方式、セキュリティ設定をそれぞれ確認します。利用できる設定を上書きしないよう、元の項目は残しておきましょう。

VLESSの表示がnoneです。aes-128-gcmに変更すべきですか?

VMessの暗号化設定をVLESSに適用しないでください。まずnoneがプロトコル層のEncryptionを示していることを確認し、TLSなど元の設定で指定されている外側のセキュリティも確認します。安全性は設定全体で判断し、1つの項目だけで決めないでください。

サブスクリプションを更新したら、手動で変更したPathが元に戻りました。どうすればよいですか?

まず更新前後の差分を保存し、サブスクリプションに含まれる元の値を確認してください。設定を分けてテストする場合は独立したコピーを使い、更新管理されている同じ項目を繰り返し変更しないようにします。継続的な修正が必要な場合は、設定情報の提供元に確認してください。

Portを443に変更しただけでは、なぜ接続できないのですか?

Port番号を変更してもTLSが自動で設定されるわけではありません。項目の編集画面に戻り、サーバーの実際の待ち受けPort、TLS、SNI、通信方式をそれぞれ確認してください。この組み合わせで接続できるのは、サーバー側に対応する接続先がある場合に限られます。

プロトコルとUUIDは正しいのに、一部のWebページだけ開けません。項目を作り直す必要がありますか?

まずHome → Global RoutingでProxyを一時的に選び、同じURLを再度開いてください。アクセスできるようになった場合は、Configのルールとポリシーを確認します。それでも開けない場合は、そのドメインの名前解決と接続エラーを調べてください。すべての項目をすぐに作り直す必要はありません。

App Storeで正規版を確認