ShadowrocketのVMessとVLESSの違い|暗号化・alterId・flowの確認方法

ShadowrocketでVMessとVLESSを設定する際の違いを解説。UUID、alterId、flow、TLSの意味と、接続情報を提供元の設定に合わせる方法を紹介します。

この記事の要点

この記事は、接続情報を提供するサービスをすでに利用しており、ShadowrocketでVMessまたはVLESSの設定を確認したい方を対象としています。まずプロトコル、認証情報、トランスポート層を区別し、UUID、alterId、flow、TLSを確認しましょう。接続できない場合は、アドレスとポート、認証、トランスポート、ルーティングの順に原因を調べます。プロトコル名だけで速度や安定性を判断することはできません。

VMessとVLESS:プロトコル層とトランスポート層の違い

VMessとVLESSは、クライアントとサーバーの設定を一致させる必要があります。どちらもユーザー認証にUUIDを使うことがよくありますが、データ構造や認証方式は異なります。Add ServerでVMessをVLESSに変更するだけでは切り替えは完了しません。サーバー側にも対応する設定が必要です。

VMessはプロトコル層にデータ暗号化機能を備えており、具体的な方式は双方の設定によって異なります。VLESS自体はペイロードを暗号化しないため、TLSなど外側の保護と合わせて安全性を確認します。そのため、VLESSのencryptionがnoneでも、接続全体が平文だとは限りません。同様に、VMessであってもサーバー認証を確認する必要があります。

確認項目VMessVLESS
認証情報通常はUUIDを使用します。サーバー側のユーザー設定と一致させてください。通常はUUIDを使用します。VMessと同じUUIDだからといって、相互に使えるとは限りません。
プロトコル層の暗号化設定可能なデータ暗号化機能があります。外側のTLSとは区別してください。ペイロードの暗号化機能はありません。一般的な設定ではencryptionがnoneです。
alterId過去の互換性に関する項目です。現在のVMess AEAD設定では通常0を指定します。この項目は使用しません。
flowVLESSではこの種のflowパラメータを使用しません。組み合わせによってはxtls-rprx-visionなどを使用します。サーバー側の設定と一致させてください。
外側の設定TCP、WebSocket、TLSなど、実際の設定も確認してください。トランスポート方式と外側のセキュリティ設定も確認が必要です。

プロトコル名が示すのは、接続スタックの一つの層だけです。接続全体にはサーバーアドレス、待受ポート、トランスポート方式、セキュリティ層も含まれます。どちらもVLESSと表示されていても、トランスポート方式やサーバー名が異なれば、設定項目を流用することはできません。

UUIDとalterId:認証情報を推測で入力しない

UUIDはサーバーが許可したユーザーを識別するためのもので、サーバーアドレスでもサブスクリプションURLのアクセストークンでもありません。コピー時に余分な空白、改行、引用符が入っていないか確認してください。UUIDの形式が正しくても、サーバー側に該当ユーザーが登録されていなければ認証できません。

36文字
UUIDの一般的な文字列表記の長さです。ハイフン4つを含み、形式は8-4-4-4-12です。
0
現在のVMess AEAD設定で一般的に使用されるalterIdの値です。
443
TLSでよく使われるポートの例であり、VMessやVLESSの固定ポートではありません。

alterIdはVMessの過去の設定で使われていた概念です。「予備回線の数」ではなく、数値が大きいほど安全というものでもありません。現在のVMess AEAD設定では通常0を使用します。古い資料にある0以外の値を、現在のサーバーにそのまま適用しないでください。既存の設定に0以外の値がある場合は、数値を試しに変えるのではなく、元の設定の提供元に互換性を確認しましょう。

VMessの認証は時刻にも関係します。最近になって突然認証に失敗する場合は、iPhoneまたはiPadの「設定」→「一般」→「日付と時刻」を開き、時刻とタイムゾーンが正しいか確認してください。時刻の調整は原因調査の一環であり、UUID、サーバーの状態、プロトコルの種類の確認に代わるものではありません。

結論:まず認証情報の入手元を確認し、次に項目の形式を確認

同じ有効な設定を基準に照合してください。UUIDやalterIdが一致しない場合は、再インポートするか元の設定を確認しましょう。形式が正しいだけで認証が有効とは限りません。

flowとTLS:flowの設定とサーバー認証を別々に確認

flowは一部のVLESS構成で使われるフロー設定で、速度の段階を示すものではありません。一般的な値のxtls-rprx-visionを使用するには、クライアントが対応しており、サーバー側のトランスポートとセキュリティ設定も一致している必要があります。サーバー側から指定されていない場合は、画面に項目があるからといって入力しないでください。

TLSは外側の接続を暗号化し、サーバーの身元を検証します。接続先にはドメイン名とIPアドレスのどちらも使えます。TLSのサーバー名は通常、SNIと証明書の検証に使われます。接続先アドレス、TLSのサーバー名、WebSocketのHostは同じ場合もあれば、サーバーの構成によって異なる場合もあるため、それぞれ確認してください。

Add Serverでの確認手順:一度に検証するのは一組の設定

ShadowrocketのHomeからAdd Serverを開き、まず既存の接続情報と一致するプロトコルを選んでから項目を入力します。選んだプロトコルやトランスポート方式によって表示される項目は異なります。以下は確認の手順であり、すべての項目が同じ画面に表示されるとは限りません。

  1. アドレスとポート:元のサーバーアドレスと待受ポートを入力します。example.com:443は例示用の値です。TLSを使うからといって、元のポートを自動的に443へ変更しないでください。
  2. プロトコルと認証情報:VMessかVLESSかを確認し、UUIDを貼り付けます。VMessでは暗号化の設定とalterIdも確認してください。VLESSにVMessのalterIdを流用する必要はありません。
  3. トランスポート方式:元の設定に従ってTCPやWebSocketなどを選びます。Hostやpathなどの追加項目がある場合は一つずつ確認し、パスの先頭にあるスラッシュも残してください。
  4. セキュリティ設定:TLS、サーバー名、証明書の検証を確認します。VLESSにflowが指定されている場合は、その値と関連する条件も確認してください。
  5. 保存してテスト:Homeに戻って対象の設定を選び、VPN構成の許可が完了していることを確認してから接続し、実際の接続先にアクセスします。複数の項目を同時に変更せず、失敗した段階を記録してください。

すでに利用しているサブスクリプションがある場合は、インポート後の項目を基本的にそのまま使ってください。サブスクリプションを更新すると設定が再生成され、手動変更が上書きされることがあります。原因を調べる場合は、先に変更点を記録しましょう。サブスクリプションURLは設定一式を取得するためのもので、Add Serverに入力するサーバーアドレスではありません。URL全体をサーバーアドレス欄に入力しないでください。

Homeでは主に接続先の選択と状態を確認し、Configでは設定ファイルを管理し、Settingsではアプリの設定を行います。サブスクリプションの更新と、Config内のルールファイルの更新は別の操作です。前者はサーバー設定を変更する場合があり、後者は通信の振り分けやポリシーを変更します。互いに代用することはできません。

接続テストとルーティング:ルールの問題をプロトコルの問題と混同しない

Home → Connectivity Testでは接続状態を確認できますが、1回の遅延結果だけでサービスが利用可能とは判断できず、VMessとVLESSの通信速度を直接比較することもできません。テスト方法によって確認できる範囲は異なるため、実際のWebページや接続先サービスでも確認してください。

Config:現在のルールに沿って確認

推奨

Home → Global RoutingでConfigを選ぶと、通信は現在の設定ルールに従って処理されます。対象の通信が実際にプロキシポリシーに一致していることを確認してから、接続状態を判断してください。

適した用途:正しいルールをすでに使っている場合の日常利用や、原因調査後の再確認。

Proxy:通常のルールによる影響を切り分ける

一時的にProxyへ切り替えると、通常の振り分けルールがテストに与える影響を抑えられます。選択中のサーバーを確認し、接続スイッチの状態だけでなく、実際にアクセスして確かめてください。

適した用途:サーバー設定とルール選択のどちらに原因があるか、一時的に切り分ける。

Direct:基本ネットワークを確認

Directは直接接続を使うため、VMessやVLESSが動作するかを判断する用途には向きません。現在のネットワークで基本的な接続ができるかを確認する際に役立ちます。

適した用途:基本ネットワークの状態を比較する。プロキシプロトコルの認証確認には使用しない。

Global RoutingのSceneは、設定したシーンに応じてルーティングを決める機能であり、第三のプロキシプロトコルではありません。テスト条件を一定にするには、現在のルーティング設定を先に確認してください。切断後に接続が自動で再開する場合は、Settings → On Demandも確認します。自動接続の動作はUUID、alterId、flowとは関係ありません。

結論:ルーティング設定だけを変更し、サーバー項目は同時に変更しない

同じ設定がProxyでは利用でき、Configでは失敗する場合は、まずルールの一致状況とポリシーの適用先を確認してください。どちらでも失敗する場合は、アドレス、TLS、認証、トランスポート設定の順に調べましょう。

よくある質問:症状から確認する項目を特定

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

UUIDは認証情報の一部にすぎず、サーバーがどのプロトコルを受け付けるかは決まりません。元のプロトコルに戻し、VLESS用の接続先が別にあるか、元の設定の提供元に確認してください。そのうえでポート、TLS、flowを確認します。プロトコルの種類だけを変更しても切り替えはできません。

VLESSにnoneと表示されています。何らかの暗号化方式に変更すべきですか?

まず、noneがどの項目に表示されているか確認してください。VLESSのプロトコル層のencryptionを示している場合は、一般的な設定です。TLSなど外側の保護を引き続き確認し、VMessの暗号化設定をVLESSに流用しないでください。元の設定で別のセキュリティ方式を使っている場合は、その項目も含めてすべて維持してください。

遅延は表示されるのにWebページが開けません。まず何を確認すればよいですか?

まず現在のサーバーとGlobal Routingを確認し、実際の接続先にアクセスしてください。TLSエラーが出る場合は、サーバー名、デバイスの時刻、証明書を確認します。特定のWebサイトだけ失敗する場合は、ルールとDNSを確認してください。遅延の結果だけを根拠に、UUIDやflowを調査対象から外さないでください。

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

更新前後の項目と設定名を記録し、編集したものが同じ設定か確認してください。サブスクリプションの最新内容と元の設定の提供元による説明を基準にします。個別にテストする場合は別のコピーを用意し、次回の更新でテスト用の設定が再び上書きされないようにしてください。

VMessとVLESSの実際の動作は、ネットワーク経路、サーバーの負荷、外側のトランスポート、接続先サービスにも左右されます。同じ条件で測定しない限り、特定のプロトコルが常に速いとは言えません。原因調査ではエラー表示と項目の差分を記録し、UUID、サブスクリプショントークン、その他の認証情報を公開しないでください。

App Storeで正規アプリを確認購入と復元の案内を見る