この記事の要点

ShadowrocketのVMessとVLESSは、Typeを変更するだけでは相互に切り替えられません。どちらもユーザーの識別にUUIDを使いますが、プロトコルの暗号化方式は異なり、トランスポートとTLSもそれぞれ確認が必要です。サーバー設定またはサブスクリプションをすでにお持ちの方向けに、プロトコル、ユーザー識別情報、トランスポート、セキュリティ層の順に設定方法を解説し、接続できない場合の確認方法も紹介します。

VMessとVLESSの主な違い

名称や新旧で判断せず、サーバー側の設定に合わせてプロトコルを選びましょう。VMessは認証とプロトコル層の暗号化機能を備えたプロキシプロトコルです。一方、一般的なVLESSの設定ではプロトコル自体にデータ暗号化機能がなく、通常はTLSなどの外部レイヤーで通信を保護します。どちらも複数のトランスポート方式に対応するため、「VMessはWebSocket」「VLESSはTLS」という対応関係は正確ではありません。

VMessとVLESSの設定ポイント比較
確認項目VMessVLESS
ユーザー識別情報通常はUUIDを使用します。サーバー側のユーザー設定と一致している必要があります。通常はUUIDを使用します。サーバー側のユーザー設定と一致している必要があります。
プロトコル層の暗号化プロトコル層の暗号化機能があり、具体的な方式はサーバー側の指定に合わせます。一般的な設定ではEncryptionはnoneです。通信の保護には別途設定が必要です。
TLS別途使用できますが、VMess自体の暗号化とは異なります。一般的な構成ではTLSなどの外部レイヤーで通信を保護します。プロトコル名だけで暗号化の有無は判断できません。
トランスポート方式TCPやWebSocketなど、サーバー側の設定と一致させる必要があります。こちらもサーバー側の設定に合わせます。別のサーバー設定のトランスポート情報をそのまま流用しないでください。
切り替え方法該当するサーバーの設定一式を入手してから、新しい設定を追加またはインポートします。Typeだけを変更する方法では切り替えられません。

VMessのAEAD認証とデータの暗号化は関連していますが、同じものではありません。AEADはTLSのオン・オフを切り替える設定でもありません。以前の設定にAlterIdが含まれていても、互換性を試すために独自の値へ変更せず、利用中のサービスの管理者に現在有効な設定を確認してください。VLESSにFlowなどの追加設定がある場合も、クライアントとサーバーの双方が対応し、設定が正しく一致している必要があります。他の設定から推測して入力するのは避けましょう。

UUIDはユーザー識別情報であり、暗号化方式ではありません

UUIDは、サービスの利用を許可されたユーザーをサーバーが識別するためのものです。書式が同じでも、2つのプロトコルで同じアカウント設定を使えるとは限りません。サーバー側で該当プロトコルのユーザーとして登録されている必要があり、アドレス、ポートなどの設定も一致していなければなりません。UUIDのコピー時に空白が入ったり、文字が欠けたりすると、認証に失敗します。

128 bit
UUIDの標準的な長さ
8-4-4-4-12
一般的なUUIDの表記形式
443
TLSで使われるポートの例。該当ポートでTLSが有効とは限りません

確認方法:ユーザー識別情報、ポート、TLSを個別に確認する

UUIDの書式が正しいことは、文字列の形式が適切に見えることを示すだけです。サーバー側でユーザーが有効か、ポートが現在のプロトコルに対応しているか、TLSが有効かも確認してください。「UUIDが変わっていない」ことを理由に、ほかの設定も流用できると判断しないでください。

プロトコル、Transport、TLSの役割

サーバー設定は、それぞれ独立した複数の層から成ると考えると分かりやすくなります。VMessまたはVLESSはプロキシプロトコル、TCPやWebSocketなどはデータの運び方、TLSは外部レイヤーで保護された接続を確立するかどうかを決めます。WebSocket自体はTLSを意味しません。TLSを有効にしたWebSocketと、無効にしたWebSocketでは、接続先サーバーの要件も異なります。

WebSocketとTLSを使う既存設定を例にすると、サーバーアドレスは接続先を指定し、Portは待ち受けポートを指定します。WebSocketのHostとPathはサーバー側のルーティングに合わせ、TLSのServer Name(SNI)はハンドシェイク時に接続先の名前を示します。これらに同じドメイン名を使う場合もあれば、構成に応じて別々に指定する場合もあります。ドメイン名に関する欄が複数あるからといって、すべてをサーバーのIPアドレスに変更しないでください。

TLSを有効にし、サーバー証明書を検証する

推奨

サーバー側でTLSが提供されている場合は、指定されたServer Nameを入力し、証明書の検証を有効にしてください。証明書エラーが発生した場合は、検証を無効にするのではなく、名前、デバイスの日時、サーバー証明書を先に確認しましょう。

対象:TLSを必須とする設定が明示されたVMessまたはVLESSサーバー

TLSを無効にし、サーバーの明示的な指定に従って接続する

サーバーが該当する接続方式を実際に提供している場合に限り使用してください。TLSを無効にしても、別の保護機能が自動的に有効になるわけではありません。特にVLESSでは、Encryptionのnoneを通信が暗号化されているという意味に解釈しないでください。

対象:保護範囲を確認済みの管理されたネットワークテスト、または明示的に指定された構成

ここで推奨しているのはTLSの設定方法であり、既存のすべての設定でTLSを強制的に有効にするという意味ではありません。サーバーのポートがTLSなしの接続のみを受け付ける場合、クライアントでTLSだけを有効にするとハンドシェイクに失敗します。また、ポート番号が443であることは一般的な構成例にすぎず、使用中のプロトコルや暗号化の状態を示すものではありません。

Add Serverで入力する順序

サブスクリプションや共有設定が一式そろっている場合は、まずインポートしてから各項目を確認しましょう。手入力で設定し直すより、パラメーターを保ちやすくなります。手動で入力する場合は、Homeの右上にある追加ボタンからAdd Serverを開き、先にTypeを選択してから、その種類の画面に表示される項目を入力します。種類やアプリの画面状態によって表示項目は変わります。以下は確認の順序であり、すべての項目が同時に表示されるとは限りません。

  1. Typeを確認します。サーバーがVMessならVMessを、VLESSならVLESSを選択してください。種類が一致しない場合、ほかの項目が同じでも有効な設定とは限りません。
  2. アドレスとPortを入力します。アドレス欄にはホスト名またはIPアドレスを入力し、Webページのパスは付けません。ポートはサーバー側の指定どおりに入力してください。たとえばサーバーの指定が8443の場合、TLSを有効にするからといって443に変更してはいけません。
  3. UUIDを入力します。この設定に対応するユーザー識別情報を使用してください。VMessの暗号化オプションや、VLESSのEncryption、Flowなどの追加項目は、利用中のサービスの設定に従います。
  4. Transportを確認します。サーバーがWebSocketを使用する場合は、HostとPathを確認してください。別のトランスポート方式を使う場合、WebSocket用の項目を流用しないでください。
  5. TLSを確認します。有効・無効の設定、Server Name、証明書の検証設定を確認してください。アドレスにIPアドレスを使う場合でも、サーバー側でドメイン形式のServer Nameが必要なことがあります。
  6. 保存して設定を選択します。Homeに戻り、SERVER一覧から保存したサーバーを選んでから接続を確認してください。以前に選択した別の設定をテストしないよう注意しましょう。

接続できない場合は、症状から原因を絞り込む

まず、実際にどのサーバー設定を使っているかを確認し、どの層で失敗しているかを切り分けます。Homeの接続スイッチがオンになっていることは、端末上で接続処理が始まったことを示すだけです。リモート側の認証、TLSハンドシェイク、接続先Webページへのアクセスがすべて成功したことを意味するわけではありません。Connectivity Testは初期確認に使えますが、1回の結果ですべてのドメイン、ルール、アプリの接続状況を判断することはできません。

UUIDが同じなのに、VMessからVLESSに変更すると接続できないのはなぜ?

元の設定に戻し、Typeだけを変更する操作を続けないでください。利用中のサービスの管理者にVLESSの接続先が提供されているか確認し、ポート、UUID、Transport、TLSの設定を入手しましょう。2つのプロトコルではハンドシェイクが異なります。同じUUIDを使っても、サーバー側のプロトコルが自動で切り替わることはありません。

TLS関連のエラーが出た場合、まず何を確認すればよい?

該当サーバーの編集画面を開き、まずTLSの設定がサーバー側と一致しているか確認します。続いてServer Name、デバイスのシステム時刻、証明書のドメイン名を確認してください。アドレスにIPアドレスを使っていても、元の設定で指定されたSNIが必要な場合があります。問題の切り分けに、証明書検証の無効化を使わないでください。

WebSocketで接続できない場合、UUID以外に何を確認する?

Port、TLS、WebSocketのHostとPathを順に確認してください。接続ログにHTTPステータスコードが表示される場合、404はパスまたはリバースプロキシのルーティングの不一致、403はアクセス制限の可能性を示します。いずれも調査の手がかりにすぎず、ステータスコードだけでUUIDの誤りとは断定できません。

Connectivity Testは成功するのに、Webページが開かない場合は?

まずHome → Global Routingを確認します。選択中のプロキシ経由でWebページにアクセスできるかを確認する場合、Directは適しません。Configではルールが影響します。一時的にProxyに切り替え、対象の設定を選んで同じWebページに再接続してから、元の設定に戻してください。Configでのみ失敗する場合は、ルールとDNSを続けて確認します。

トラブルシューティングでは一度に1項目だけ変更し、変更前後の状況を記録してください。プロトコル、ポート、SNI、Pathを同時に変更すると、接続が復旧しても原因を特定できません。サブスクリプションで管理されている設定の場合は、問題の情報を保存し、更新後のパラメーターを確認してから作業してください。次回のサブスクリプション更新で手動変更が上書きされることがあります。

プロトコル名だけで判断せず、設定と接続を確認する

一般ユーザーが選ぶ際は、まず利用中のサービスがどのプロトコルに対応しているかを確認し、次にShadowrocketの各項目が設定一式と一致するかを確認して、最後に実際の接続結果を比較します。VLESSはより簡潔な設計ですが、どの回線でも速いとは限りません。VMessがプロトコル層の暗号化機能を備えていても、TLS、証明書、サーバーの識別情報を確認しなくてよいわけではありません。遅延、混雑、サーバー負荷、トランスポート方式はいずれも使用感に影響します。

まとめ:設定一式を保ち、接続結果を比較する

VMessとVLESSは別々の設定として保存し、ユーザー識別情報、トランスポート、TLSをそれぞれ確認したうえで、同じ条件で接続をテストしてください。有効な設定が1つしかない場合は、別のプロトコルを推測で試すのではなく、まず現在の設定で安定して接続できる状態にしましょう。