VMessとVLESSは、Typeを変更するだけで相互に切り替えられるものではありません。どちらもUUIDを使いますが、認証方式とプロトコル内の暗号化設計は異なります。利用者自身が用意した接続情報があることを前提に、Shadowrocketでプロトコル、TLS、伝送設定を確認する方法と、接続の問題をルールの振り分けから切り分ける手順を説明します。
まず結論:プロトコルはサーバー側の設定に合わせる
ShadowrocketでVMessとVLESSのどちらを選ぶかは、新しい名称かどうかではなく、手元の接続情報で指定されているタイプによって決まります。サーバーがVMessを受け付ける場合は、対応するVMessの設定を使います。VLESSを受け付ける場合も、VLESS用の設定が必要です。アドレス、ポート、UUIDが同じに見えても、Typeを変更すると認証やハンドシェイクに失敗することがあります。
プロトコルの選択と通信の振り分けは別の設定です。Homeで選んだサーバーによってプロキシ接続の設定が決まり、Global Routingでリクエストのルーティング方法が決まります。Configでは設定ファイルとルールを管理し、Settingsにはアプリの設定がまとめられています。プロトコルの問題を調べるときに、ルールの変更、サーバーの切り替え、TLSの変更を同時に行うと、どの変更が影響したのか判断しにくくなります。
判断のポイント:まず設定一式を確認し、その後にプロトコルの違いを比較
手元の設定情報にあるType、アドレス、ポート、UUID、TLS、伝送設定を一つずつ照合してください。VMessとVLESSの両方で利用できる設定がサーバー側から提供されている場合に限り、2つの接続を比較できます。
暗号化の違い:VMessのプロトコル内暗号化とVLESSの外部保護
VMessには認証とデータ暗号化の仕組みが定義されています。一般的なVMess AEAD設定では対応する認証方式が使われ、データの暗号化方式もサーバー側の対応状況に合わせる必要があります。VMessにTLSを組み合わせることもできます。プロトコル自体のデータ暗号化とTLSによる保護は別の層で行われるため、一方の設定をもう一方の代わりにすることはできません。
VLESS自体はペイロードを暗号化しないため、通常はTLSなどの外部の仕組みで通信を保護します。そのため、設定情報のVLESSの暗号化項目がnoneでも、接続全体が平文とは限りません。一方、VLESSを選ぶだけでTLSが自動的に有効になるわけでもありません。接続情報で指定されている外部保護の方式と、クライアント側の設定を確認してください。
| 確認項目 | VMess | VLESS |
|---|---|---|
| ユーザー識別子 | UUIDを使用し、プロトコル認証に利用 | UUIDを使用し、サーバー側でユーザーを照合 |
| プロトコル内のペイロード暗号化 | プロトコル内にデータ暗号化機能があり、設定に応じた項目を確認 | ペイロード暗号化機能はなく、外部の保護方式を別途確認 |
| TLS | サーバーの指定に応じて追加。VMessの暗号化設定とは別の項目 | 一般的な外部保護方式。サーバー側の指定に合わせる必要があります |
| Typeだけを変更できるか | 変更だけでVLESSに切り替えることはできません | 変更だけでVMessに切り替えることはできません |
Allow InsecureはTLS証明書の検証に関する設定です。速度を上げるための項目ではなく、UUIDや伝送経路の誤りを解決するものでもありません。証明書エラーが出た場合は、システム時刻、サーバー証明書、TLSで使用するドメインを確認してください。検証を無効にして確認の代わりにするのは避けましょう。表示される項目は、選択中のタイプや伝送設定によって異なります。
UUIDの使い方:形式が同じでも、アカウントを共用できるとは限らない
UUIDはユーザーを識別するための設定値であり、サーバーアドレスやサブスクリプションURLではありません。標準的な文字列表記は、16進数とハイフンで構成されます。例:123e4567-e89b-42d3-a456-426614174000。これは形式の例であり、接続には使えません。実際のUUIDを貼り付けるときは、余分な空白、改行、引用符が含まれていないか、共有用テキスト全体を誤って入力していないか確認してください。
どちらのプロトコルもUUIDを使用しますが、同じUUIDがどのサーバーでも有効という意味ではありません。サーバー側で対応するユーザーと受け入れプロトコルが設定されている必要があります。既存のサブスクリプションに、アドレスが似ていてタイプの異なる設定がある場合は、それぞれの設定一式をそのまま保ってください。別々の設定からUUID、ポート、伝送オプションを寄せ集めないようにしましょう。
- Homeで確認する設定を見つけて編集画面を開き、最初にTypeがVMessかVLESSかを確認します。
- 手元の設定情報と照らし合わせて、アドレスとPortを確認します。アドレス欄には指定されたホスト名またはIPアドレスだけを入力し、プロトコルの接頭辞やパスは付けません。
- UUIDは先頭と末尾だけでなく、全体を照合してください。トラブルの相談時に実際のUUIDを公開しないようにしましょう。
- VMessの設定情報にAlterIdが含まれている場合は、その値を入力します。一般的なVMess AEAD設定では
0を使いますが、他の項目を経験則で置き換えないでください。 - デバイスの日付と時刻が正しいか確認してください。VMessの認証には時刻が関係するため、システム時刻が大きくずれていると接続に影響する場合があります。
伝送方式の組み合わせ:TLS、WebSocket、Hostの役割
VMessとVLESSはプロキシプロトコルです。TCPやWebSocketなどは接続に使う伝送方式を示し、TLSは外部のセキュアな通信路を提供します。これらの設定は連携しますが、同じ意味ではありません。設定情報でWebSocketが指定されている場合、TypeとUUIDだけでなく、Path、Host、TLSの要件も確認してください。
以下は設定の組み合わせを示す例です。設定情報でポートが443、WebSocketのパスが/connect、TLSが有効と指定されている場合は、これらを一組の設定として維持してください。443がHTTPSでよく使われるからといってTLSの確認を省略したり、WebSocketだからといってポートを80に変更したりしないでください。どちらも単なるポート番号であり、実際の待ち受け方はサーバー側で決まります。
階層ごとに確認:接続先と伝送設定
サーバー・ユーザー識別の層
- Typeはサーバー側のVMessまたはVLESSに合わせます。
- アドレスとPortで接続先が決まります。
- UUIDはサーバー側に登録済みのユーザーに対応します。
- VMessの追加認証・暗号化項目は、設定情報どおりに維持します。
外部保護・伝送の層
- TLSの有効・無効はサーバー側の指定に合わせます。
- SNIはTLSハンドシェイクで使用するサーバー名です。
- WebSocketのHostはHTTPリクエストヘッダーに対応します。
- Pathは先頭のスラッシュ、大文字・小文字、設定情報に記載された全文をそのまま保ちます。
SNIとHostは同じ場合も異なる場合もあります。アドレスが同じだからといって、自動的に同じ値に置き換えないでください。
gRPCなど他の伝送方式も、サーバー側の対応と方式ごとの追加設定が必要です。WebSocketのPathを、すべての伝送方式に共通するパスとして扱うことはできません。設定情報が不完全な場合は、何度も試しに入力するのではなく、設定の提供元に不足項目を確認してください。ここで取り上げていない拡張オプションも、設定全体を照合する必要があります。すべての構成を「VLESS + TLS」だけで説明することはできません。
インポートと手動入力:設定一式をそのまま保つ
既存のサブスクリプションには複数の設定と各種パラメーターが含まれるため、手入力による転記ミスを減らせます。インポート後もHomeでタイプや重要な設定を確認し、表示名だけでプロトコルを判断しないでください。名前に説明文が含まれる場合があり、実際の接続動作は設定内部のパラメーターで決まります。サブスクリプションを更新するとリモートの内容を再取得するため、設定に加えたローカルの変更が次回の更新で上書きされることがあります。
既存のサブスクリプションに含まれる設定を一式そのまま保つ
おすすめまず利用者自身が用意したサブスクリプションをインポートし、Type、Port、UUID、伝送オプションを確認します。元の設定を残しておけば、トラブル対応後に元へ戻しやすく、別々の設定の項目を混在させずに済みます。
対象:利用可能なサブスクリプションがあり、VMessとVLESSの違いを確認したい方
設定情報一式を見ながら手動で入力
Home → Add Serverで設定情報に合ったTypeを選び、アドレス、ポート、ユーザー識別情報、伝送設定を順に入力します。アドレスとUUIDしかなく、TLSや伝送情報がない場合は、設定が揃っていると判断しないでください。
対象:接続設定が1件分明確にあり、項目ごとに照合したい方
変更前後の動作を比較する場合は、元の設定を保存し、別の設定で一度に一項目だけ変更して、内容を記録してください。サブスクリプションの更新失敗と、VMessまたはVLESSの設定で認証に失敗する問題も分けて対応しましょう。前者はサブスクリプションの取得、後者は既存の設定でプロキシ接続を確立する処理であり、原因が同じとは限りません。
- インポート後に必要な設定が見当たらない:サブスクリプションを正常に取得できたか、取得内容に該当する設定が含まれているか確認します。
- 更新後に設定が変わった:新しいサブスクリプションの内容と照合し、古い設定のスクリーンショットだけに頼らないでください。
- 手動変更した設定だけ接続できない:まず元の設定に戻して確認し、その後、変更した項目を調べます。
接続トラブルの切り分け:認証・伝送・ルールの振り分けを分けて確認
遅延テストに数値が表示されたからといって、Webページも必ず使えるとは限りません。ポートへの到達、プロトコル認証、TLS、DNS、リクエストに対する想定ルールの適用は、それぞれ別の確認項目です。同じデバイス、同じネットワーク、同じリクエスト先でテストしてください。条件を揃えずに一度の速度だけでVMessやVLESS本来の速さを判断することはできません。
Global RoutingのProxy、Direct、Config、Sceneはルーティング方法を表すもので、プロトコルを変換する機能ではありません。Configは現在の設定に従ってリクエストを処理します。Directではプロキシ設定が使えるか確認できません。Sceneはシーンの設定とあわせて確認してください。ルールの影響を切り分けるには、一時的にProxyを使って選択中のプロキシ接続を確認し、テスト後に元のルーティング方法へ戻します。実際の経路はアプリ内のリクエスト記録も確認してください。
同じUUIDなら、VMessをVLESSに変えるだけで接続できますか?
それだけでは判断できません。Homeで該当設定の編集画面を開き、元のTypeに戻してから、Port、TLS、伝送設定を手元の情報と照合してください。サーバー側から対応するVLESS設定が提供されている場合に限り、その設定一式を使います。
ポートが443なのに、TLSの問題が表示されるのはなぜですか?
443であることは、TLSが設定済みである証明にはなりません。設定情報に沿ってTLSが有効になっているか、SNIが正しいか、デバイスの時刻が正確か、サーバー証明書が有効かを確認してください。Allow Insecureを有効にして、証明書やドメインの不一致を隠さないでください。
Proxyなら接続できるのにConfigでは失敗します。プロトコルを変更すべきですか?
まずサーバー設定は変更せず、Configで現在有効な設定とリクエストに適用されたルールを確認してください。DOMAIN-SUFFIXなどのルールに先に一致していないか、想定したポリシーが適用されているか、どのルールにも一致しないリクエストがFINALでどう処理されるかを確認し、DNS設定もあわせて調べます。
WebSocketに接続できません。UUIDが間違っていますか?
必ずしもそうとは限りません。まずType、アドレス、ポートを確認し、続いてWebSocketのPath、Host、TLSのSNIを確認してください。パスの大文字・小文字の違い、先頭のスラッシュの欠落、誤ったHostなどが原因で、認証の前に接続が失敗することがあります。
実際に使うときは、まずサーバー側と完全に一致する設定で接続できることを確認し、その後、普段使うルール設定に戻します。プロトコル名だけでは、回線品質、サーバー負荷、特定のネットワークでの動作は判断できません。VLESSはプロトコル自体が担う暗号化の範囲が小さいからといって、どの環境でもVMessより速いとは限りません。一般の利用者にとっては、プロトコル名だけで選ぶより、設定一式を保ち、層ごとに確認するほうが実用的です。