VMessとVLESSの違い|Shadowrocketの設定前に確認したいポイント

VMessとVLESSの暗号化、UUID、トランスポート設定の違いを解説。サービス提供元の情報をもとに、Add Serverへ正しく入力する方法を紹介します。

この記事の要点

Shadowrocketでは、VMessとVLESSをTypeの切り替えだけで相互変換することはできません。この記事は、利用するサービス提供元から設定情報やサブスクリプションを取得済みの方向けです。認証方式、トランスポート、TLSを確認し、Add Serverの各項目を照合したうえで、接続の問題とルールによる振り分けの問題を切り分けます。サブスクリプションは利用するサービス提供元から取得してください。当サイトではノード、サブスクリプション、サービス提供元の提供・販売・推奨は行っていません。

1. VMessとVLESSの主な違い

結論として、名前だけで速度を判断せず、サービス提供元が実際に設定しているプロトコルを選んでください。VMessには独自の認証とデータ暗号化の仕組みがあります。VLESS自体はデータを暗号化しないため、通信経路の保護は実際のトランスポートやセキュリティ層を確認する必要があります。どちらもUUIDを使うことが一般的ですが、UUIDが同じでも、同一のサーバーポートで両方のプロトコルを受け付けるとは限りません。

確認項目VMessVLESS
認証情報UUIDなどの認証情報を使用します。サーバー側の設定と一致させてください。ユーザー識別子としてUUIDを使用します。サーバー側の設定と一致させてください。
プロトコルのデータ暗号化プロトコル独自の暗号化機能があります。暗号化の設定はサービス提供元の指定に従ってください。プロトコル自体はデータを暗号化しません。外側の通信にTLSがないとは限りません。
トランスポート複数のトランスポート方式に対応します。サーバー側の設定と一致させてください。こちらもサーバーのトランスポート方式と関連パラメーターを一致させる必要があります。
TLSサーバー側でTLSを使用する場合、クライアント側も同じ設定にしてください。TLSの使用有無とパラメーターは、実際のサーバー設定によって決まります。
相互に置き換えられるかTypeだけを変更しても使えません。各プロトコルに対応するサーバー設定一式が必要です。

VMessの現在一般的な認証方式では、通常AEADが使われます。古い設定情報のAlterIdを推測で入力しないでください。過去の情報と現在のインポート結果が異なる場合は、サービス提供元に現行の設定を確認してください。VLESSの設定にencryption=noneとあっても、それはプロトコル層の設定を示すもので、TLSを無効にする指示でも、証明書エラーを無視してよいという意味でもありません。

「VLESSはVMessよりどれくらい速いか」に一律の答えはありません。サーバーの負荷、ネットワークの往復時間、パケットロス、トランスポート方式、接続先のサイトなどが結果に影響します。こうした条件を揃えずにプロトコル名だけを変えても、ほかの環境で再現できる速度の結論は得られません。

2. UUID・トランスポート・TLSを分けて確認

設定前に情報を3つに分けて整理します。接続先、認証方法、接続の運び方です。AddressとPortで接続先を指定し、UUIDで認証します。WebSocketなどのトランスポート方式とTLSは、接続の確立方法を決めます。これらを混同すると、「入力したはずなのに接続できない」という問題につながりやすくなります。

2種類
この記事で比較するプロトコル:VMess / VLESS
36文字
ハイフンを含む標準的なUUIDの文字列表記
443
TLSでよく使われるポートの例であり、プロトコル固有のポートではありません

要点:各層を確認し、すべての項目に同じドメインを使わない

まずAddressとPort、次にUUIDを確認し、最後にトランスポート方式、Host、Path、TLSのサーバー名を一つずつ照合します。サービス提供元が同じ値を明示している場合に限り、同一のドメインを複数の項目に入力してください。

3. Add Serverで設定情報を入力

ここではHomeから手動で追加する方法を説明します。ボタンの位置はプラットフォームによって異なる場合があるため、実際の画面に表示される項目を確認してください。サブスクリプションを利用している場合は、サービス提供元が提供する設定一式をインポートすると、手入力による項目の抜けを減らせます。サブスクリプションのインポートとAdd Serverでの手動追加は、設定情報の取り込み方法が異なるだけで、プロトコルの違いではありません。

  1. 元の設定情報を保存します。VMessとVLESSのどちらに対応する情報かを確認し、Address、Port、UUID、トランスポート方式、TLSのパラメーターを記録します。別の設定のPortやPathを流用して組み合わせないでください。
  2. Home → Add Serverを開きます。まず、設定情報に記載されたVMessまたはVLESSをTypeに指定し、AddressとPortを入力します。Typeを間違えると、その後に表示される項目も異なる場合があります。
  3. UUIDとプロトコルの設定を入力します。VMessの暗号化設定は、提供された情報に従ってください。VLESSにFlowなどの追加パラメーターがある場合も、サーバー側の設定とすべて一致させます。別の設定からコピーしないでください。現在の画面で必須パラメーターを設定できない場合は、その設定が利用可能か先に確認してください。
  4. トランスポートを設定します。サービス提供元からWebSocketを指定された場合に、対応するHostとPathを入力してください。WebSocket以外の場合、手順に合わせるために無理に有効にしないでください。インポートした情報のトランスポート名とクライアントの選択肢が一致するか確認します。
  5. TLSを設定します。設定情報に従って有効・無効を指定し、サーバー名も照合してください。証明書の検証は通常どおり有効にします。証明書エラーが発生した場合は、ドメイン、システム時刻、サーバー設定を先に確認し、検証をスキップして解決しようとしないでください。
  6. 保存して設定を選択します。Homeに戻り、保存した設定が選択されていることを確認してから接続テストを行います。保存できたことは設定が記録されたことを示すだけで、接続先で認証が成功したことを意味しません。

4. サブスクリプションのインポート後も設定確認が必要な理由

サブスクリプションは複数の設定を受け取る方法で、プロトコルは各設定の接続方式です。一つのサブスクリプションに複数のプロトコルが含まれる場合があります。ダウンロードに成功したことから分かるのは、設定情報を取得して解析できたということだけで、各設定で現在接続できることまでは保証されません。

サービス提供元に問い合わせる際は、プロトコルの種類、トランスポート方式、エラーが発生した段階、確認済みの項目を伝えれば十分です。UUID、サブスクリプションのtoken、共有情報の全文は必ず隠してください。これらを問い合わせ内容に公開する必要はありません。

5. 接続できないときは、プロトコルとルーティングの問題を切り分ける

Homeで接続中と表示されていても、特定のWebサイトへの通信が選択中の設定を経由したとは限りません。Global Routingは通信の経路を決めます。ルールでプロキシ対象になっていない通信は、設定情報が正しくてもDirectで接続される場合があります。VMessやVLESSの設定を疑う前に、現在のルーティング状態を確認してください。

Global Routing → Config

推奨

現在のConfigに設定されたルールとポリシーに従って通信を処理します。ルールの順序と最終的に適用されたポリシーを確認してください。すべての通信が選択中のプロキシを経由するわけではありません。

用途:ルールを確認したうえで、普段の通信を振り分ける

Global Routing → Proxy

プロキシ可能な通信を現在のプロキシ経路に送ります。ルールによる振り分けの影響を切り分けるための短時間の比較テストに使えます。ただし、すべてのシステム通信がプロキシで処理されることを保証するものではありません。

用途:Configのルールが問題かどうかを短時間で切り分ける

Global Routing → Direct

直接接続の経路を使います。この状態でWebサイトを開けても、入力したVMessやVLESSの設定が使える証明にはなりません。

用途:ローカルネットワークで直接接続できるかを比較する

Sceneを使用している場合は、そのSceneで実際に適用されるポリシーも確認してください。名前だけで経路を判断することはできません。Config内のDOMAIN-SUFFIX、GEOIP、IP-CIDR、FINALは通信振り分けのルールキーワードであり、プロトコルの設定ではありません。トラブルシューティングでは、まず通信がプロキシに送られているかを確認し、次にプロキシのハンドシェイクが成功しているかを調べます。

  1. 常にタイムアウトする:Addressが正しく名前解決されるか、Portが設定情報と一致しているか、現在のネットワークからサーバーに到達できるかを確認してください。タイムアウトだけではUUIDの誤りとは判断できません。
  2. TLS段階でエラーが出る:システム時刻、SNI、証明書の名前を確認し、そのポートでサーバーが実際に対応するTLSサービスを提供しているかを確かめてください。
  3. WebSocketのハンドシェイクに失敗する:Path、Host、トランスポートの種類を確認してください。HTTP層で拒否された場合とUUIDの認証に失敗した場合では、エラーが発生した段階が異なります。
  4. ハンドシェイク直後に切断される:Type、UUID、プロトコルの追加パラメーターを再確認してください。VMessでは認証が時刻に関係するため、デバイスの時刻が大きくずれていないかも確認します。
  5. 一部のWebサイトだけ開けない:DNS、ルールの適用状況、接続先サイトへの到達性を確認してください。すぐに設定全体をVMessからVLESSへ変更しないでください。

6. 設定前後によくある質問

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

UUIDは認証情報の一部にすぎず、サーバー側も該当するプロトコルを受け付ける必要があります。Homeから設定の編集画面を開き、Typeを元に戻してください。VLESSを使う場合は、UUIDだけを流用せず、サービス提供元からVLESSの設定一式を取得してください。

VLESSの設定にnoneとある場合、TLSを無効にする必要がありますか?

いいえ。まずnoneがどの項目に指定されているか確認してください。プロトコルのencryptionと外側のTLSは別の設定です。設定の編集画面で、元の情報に沿ってTLSとサーバー名を確認してください。ある項目の値を別のスイッチに当てはめないでください。

テストでは遅延が出るのにWebサイトが開きません。まずプロトコルを変更すべきですか?

まず変更せずに確認してください。遅延テストの意味はテスト方法によって異なり、接続先のWebサイトまで正常に通信できることを示すものではありません。Homeで選択中の設定を確認し、次にGlobal Routingを確認してください。必要に応じて短時間だけProxyで比較し、その後は元の状態に戻して、DNSと対象通信に適用されるルールを引き続き確認します。

接続を手動で切ったのに自動で再接続します。設定値の入力ミスでしょうか?

まずSettings → On Demandで、自動接続の条件が有効になっていないか確認してください。On Demandは接続を開始する条件を制御する機能で、UUID、Host、Pathを修正するものではありません。切り分け中は関連する条件を一時的に無効にし、確認が終わったら用途に合わせて元に戻してください。

Shadowrocketの入手方法と設定のインポート手順

iPhone / iPad版はApp Storeで2.99米ドルの買い切りです。Mac(Appleシリコン / Intel)、Windows、Android、Linux版は無料です。当サイトのダウンロードページでプラットフォームを選択してください。iPhone / iPadのシステム要件はApp Storeの掲載情報をご確認ください。App Storeの製品ページに記載された開発者はShadow Launch Technology Limited、アプリIDは932747118です。

アプリの買い切り価格と通信サービスのプランは別です。サブスクリプションは利用するサービス提供元から取得してください。インストール後はクイックスタートの手順に沿ってインポートし、この記事に戻ってプロトコルの設定を項目ごとに確認できます。

Shadowrocketをダウンロード