ShadowrocketのVMessとVLESSの違い|UUID・暗号化・通信方式の確認方法

VMessとVLESSの暗号化、UUID認証、代表的な通信方式の違いを比較し、Shadowrocketで各種パラメータを入力する際の確認点を解説します。

この記事の概要

すでに利用するサービスやサブスクリプションをお持ちで、VMessまたはVLESSのパラメータを確認したい方に向けた記事です。プロトコルの認証・暗号化、TLS、通信方式を整理したうえで、アドレス、ポート、UUID、サーバー名、通信パラメータを順に確認します。プロトコル名だけを変更して、設定を別のプロトコルとして使うことはできません。

1. VMessとVLESS:プロトコル層と通信層を区別する

ShadowrocketのVMessとVLESSは、異なるプロキシプロトコルです。どちらもユーザー識別子としてUUIDを使用できますが、リクエスト形式と認証処理は異なります。サーバーで有効になっているプロトコルに合わせて、クライアント側でも該当する種類を選択してください。同じアドレス、ポート、UUIDでも、サーバーが両方のプロトコルに対応しているとは限りません。

VMessにはプロトコル独自の認証・データ暗号化機能があり、暗号化オプションはサーバー側とクライアント側の対応状況に合わせる必要があります。VLESSの基本プロトコルにはペイロード暗号化がなく、一般的な構成ではTLSなどのセキュリティ層を組み合わせます。VLESS設定のencryption=noneはプロトコル層の設定を示すもので、接続全体が必ず平文で通信するという意味ではありません。

確認項目VMessVLESS
ユーザー識別子UUIDを使用します。サーバー側のユーザー情報と一致している必要があります。UUIDを使用します。サーバー側のユーザー情報と一致している必要があります。
プロトコルのペイロード暗号化プロトコル独自の暗号化機能があります。暗号化オプションをほかの設定からそのまま流用しないでください。基本プロトコルにはペイロード暗号化がありません。別途セキュリティ層を確認してください。
TLSTLSと組み合わせることがあります。プロトコル暗号化があっても、証明書の検証を省略してよいわけではありません。一般的にはTLSを組み合わせます。プロトコル名だけでは、TLSが有効かどうかは判断できません。
代表的な通信方式TCPやWebSocketなどの組み合わせがあり、サーバー側の設定との一致が必要です。TCP、WebSocket、gRPCなどの組み合わせがあり、サーバー側の設定との一致が必要です。
切り替えの条件対応するサーバー側の接続先とすべてのパラメータが必要です。クライアント側のTypeだけを変更しても使えません。

プロトコル名が示すのは接続の一部分だけです。完全な設定には通信方式とセキュリティ層も含まれます。たとえば「VLESS + WebSocket + TLS」は、プロトコル、通信方式、セキュリティ層の3つを指定しています。接続できない場合は、すべての原因をUUIDに求めず、層ごとに確認してください。

2. UUIDの確認方法:形式が正しくても認証されるとは限らない

UUIDは一般に、16進数の文字とハイフンで構成される36文字のテキストで、8-4-4-4-12の5グループに分かれています。ユーザー識別用のパラメータであり、サーバーアドレスでも、任意に変更できるメモでもありません。形式の正しいUUIDを新しく生成しても、その識別子が登録されていないサーバーでは認証されません。

36文字
ハイフン付きUUIDの一般的な文字数
5グループ
UUIDの一般的なグループ分け:8-4-4-4-12
443
TLSでよく使われるポートの一つ。プロトコル固有のポートではありません
  1. UUIDは、現在お使いのサブスクリプションまたは元のパラメータ記録から取得してください。メモ、ドメイン名、注文番号から推測しないでください。
  2. コピーした内容の前後に空白、改行、日本語の句読点が混入していないか確認してください。説明文全体をユーザー識別子の欄に貼り付けないよう注意します。
  3. サブスクリプション更新後にUUIDが変わった場合は、同じ名前の古い項目ではなく、更新後の項目を編集していることを確認してください。
  4. 問い合わせ時はUUIDとサブスクリプションのトークン全体を隠してください。UUIDは一般的なパスワードとは異なりますが、接続に使う認証情報です。

確認方法:形式を確認したら、取得元を照合する

UUIDの長さとグループ分けが正しければ、文字を手当たり次第に変更しないでください。同じ元データに戻り、プロトコルの種類、アドレス、ポート、ユーザー識別子を照合して、複数の設定の項目を混ぜないようにします。

VMessの認証には時刻も関係します。デバイスの時刻が大きくずれていると、UUIDが正しくても接続に失敗する場合があります。まずiPhoneまたはiPadの日付と時刻が正確か確認してから、再接続してください。デバイスの時刻のずれを暗号化方式の変更で補わないでください。

3. TLS・SNI・Host・Pathの確認ポイント

TLSは接続のセキュリティ層を担い、SNIはTLSハンドシェイクでサーバー名を通知します。一方、WebSocketのHostとPathは、その後のHTTPリクエストに属します。同じドメイン名を使う場合も、サーバーの設計に応じて別の値を使う場合もあります。「ドメイン名のように見える」という理由だけで相互に置き換えないでください。

たとえば、手元の記録にアドレスedge.example.com、ポート443、TLSサーバー名tls.example.com、WebSocket Hostws.example.com、Path/gatewayと明記されている場合は、この5項目をそれぞれ確認します。ここに記載したドメイン名とパスは項目間の関係を説明するための例であり、接続に使える設定ではありません。

4. Shadowrocketでパラメータを読み込み、確認する

サブスクリプションをすでにお持ちの場合は、提供された設定一式を維持したうえで、個別の項目を確認してください。手動入力は、元のパラメータがすべてそろっている場合に適しています。ShadowrocketのHomeでは接続項目の確認と選択、Configでは設定ファイルとルールの管理、Settingsではアプリの設定を行います。プロトコルの認証情報をConfigのルール行に入力しないでください。

サブスクリプションから読み込んだ設定を維持する

おすすめ

有効なサブスクリプションをお持ちの場合は、読み込み後にプロトコル、ポート、TLS、通信パラメータを確認し、UUIDやTypeをむやみに変更しないでください。まず元の項目で接続できることを確認してから、個別に調整します。

おすすめのケース:サブスクリプションを利用中で、手入力によるミスを減らしたい場合

記録された設定一式をもとに手動入力する

サーバーから提供されたパラメータを一つずつ入力します。項目が不足している場合は、初期値を正解とみなさず、先に確認してください。保存後は変更した項目を記録しておくと、元の設定に戻しやすくなります。

おすすめのケース:個別のパラメータがすべてそろっており、問題のある項目を特定したい場合

  1. Homeの右上にある追加ボタンをタップし、Typeで該当する種類を選びます。既存のサブスクリプションを読み込む場合はSubscribeを選択し、URL欄にご自身のサブスクリプションURLを入力してください。
  2. 保存したらHomeに戻り、サブスクリプションのグループを開いて対象項目の編集画面に進みます。まずTypeがVMessかVLESSかを確認してください。
  3. アドレス、ポート、UUIDを順に確認し、続けてTLS、サーバー名、通信パラメータを確認します。種類によって表示される項目は異なるため、現在の画面に表示されている内容を基準にしてください。
  4. 保存してHomeに戻り、確認した項目を選択します。Global Routingの現在の設定を確認してから接続を有効にし、新しいネットワークリクエストを実行してください。
  5. サブスクリプションの更新後は、関連する項目を再確認してください。更新によってローカルの手動変更が上書きされる場合があります。サブスクリプション元の設定と一時的な検証用設定を混同しないでください。

サブスクリプションURLには通常トークンが含まれるため、スクリーンショットやログを共有する前にURL全体を隠してください。この記事はご自身のサブスクリプションをお持ちであることを前提としており、当サイトでは接続先やサブスクリプションを提供・販売・推奨していません。

5. 接続できない場合は層ごとに確認し、プロトコル名から速度を判断しない

「ポートに接続できる」「遅延値が表示される」「目的のWebページを正常に開ける」は、それぞれ異なる検証です。ポートに到達できても、UUID認証、TLS検証、WebSocketのルーティングが成功したとは限りません。以下では観察できる現象ごとに確認するポイントを示します。どの現象も、原因を一つに断定するものではありません。

確認できる現象最初に確認次に行うこと
接続がタイムアウトするアドレス、ポート、現在のネットワークからの到達性ポートの元の値を確認し、ご自身が利用する別のネットワークでも同じリクエストを試してください。
証明書または名前の検証エラーデバイスの時刻、TLSサーバー名、証明書元の記録と照合し、検証のスキップを標準的な対処にしないでください。
接続直後に切断されるType、UUID、VMessの暗号化オプション、時刻元のパラメータに戻し、サーバー側の接続先が一致しているか確認してください。
WebSocketで404または400が表示されるHost、Path、リバースプロキシの設定Pathの大文字・小文字と通信方式を確認してください。ステータスコードだけでUUIDの誤りとは判断できません。
一部のドメインだけアクセスできないDNSとルールの適用結果そのリクエストが実際に現在選択している項目を経由しているか確認してください。

Home → Global Routingでは、Proxyを一時的に使用してルールの影響を切り分けられます。Directはプロキシ項目の動作確認には使えません。Configでは設定されたルールに従って通信が処理されます。Sceneを使用している場合は、そのシーンで実際に適用される設定も確認してください。ルールのDOMAIN-SUFFIX、IP-CIDR、GEOIP、FINALの適用結果によって、リクエストごとに異なるポリシーが選ばれる場合があります。確認が終わったら元の設定に戻し、一時的な検証設定をそのまま使い続けないようにしてください。

確認方法:まずリクエストの経路を確認し、その後に接続状況を比較する

既存の2つの設定を比較する場合は、デバイス、ネットワーク、接続先、テスト方法をそろえ、それぞれの項目を実際に経由していることを確認してください。サーバーの設置場所、混雑状況、通信方式の異なる結果を、VMessとVLESSに固有の速度差として直接結論づけることはできません。

6. UUID・暗号化・サブスクリプション更新に関するよくある質問

VMessのTypeをVLESSに変更して、そのまま使えますか?

Typeだけを変更しても使えません。まず、利用中のサーバーに対応するVLESSの接続パラメータを取得し、新しい項目を作成してアドレス、ポート、UUID、セキュリティ層、通信方式を確認してください。サーバー側で同じUUIDを再利用していても、ほかのパラメータまで同じとは限りません。

VLESSにnoneと表示されています。すべて暗号化されないという意味ですか?

まず、どの項目を示しているのか確認してください。プロトコル層のencryption=noneからTLSの状態は判断できません。対象項目の編集画面を開き、TLSが有効か、サーバー名が正しいか確認したうえで、証明書検証を維持してください。Webサイト自体のHTTPSは別の層であり、プロキシのセキュリティ層の確認に代わるものではありません。

サブスクリプションの更新後、同じ名前の項目で接続できなくなりました。まずUUIDを変更すべきですか?

まずHomeに戻り、実際に選択中の項目が更新後のグループに属しているか確認します。次にType、アドレス、ポート、通信パラメータを照合してください。古い項目を誤って選んでいないことを確認してから、ご自身の元のサブスクリプション記録とUUIDを比較します。代わりの値を無作為に生成しないでください。

一方の設定は使えてもう一方は使えません。VLESSのほうが必ず速いのでしょうか?

1回の成功や失敗だけでは、プロトコルの速度は判断できません。同じ接続先へのリクエストを繰り返し、まずアドレス、ポート、TLS、通信方式の違いを除外してから、遅延や切断の状況と発生条件を記録してください。条件をそろえていない結果はその接続時に限られ、プロトコルの優劣として一般化できません。

7. 設定を保存する前の最終確認

プロトコルは名称で選ぶのではなく、利用中のサーバーの実際の設定に合わせてください。VMessとVLESSに共通する確認順は、接続先への到達性、認証情報、セキュリティ層、通信パラメータ、最後にルールと接続先のリクエストです。一度に変更する項目は一つにし、元の記録を残しておけば、どの変更が結果に影響したか切り分けられます。

App Storeで正規アプリを確認 →