ShadowrocketのVMessとVLESSの違い|サーバー追加時に確認したい基本項目

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

この記事の要点

VMessとVLESSは、Typeを変更するだけで相互に切り替えられるものではありません。プロトコル名だけで速度を判断せず、プロトコルの種類、UUID、通信方式、TLSの設定を確認しましょう。この記事は、iPhone、iPad、Mac、Windows、Android、LinuxでShadowrocketを使う方を対象に、iPhone / iPadのHome → Add Serverを例に説明します。他のプラットフォームでは、対応する項目を確認してください。利用中のサービスと設定情報が手元にあることを前提に、各項目を確認し、認証・通信・ルーティングの問題を切り分ける方法を解説します。

1. VMessとVLESSの基本的な違い:認証と暗号化は別の層

Shadowrocketはクローズドソースの商用アプリです。VMessとVLESSは、Shadowrocketが対応するプロキシプロトコルのうちの2種類で、別々のクライアントではありません。サーバーで使用されているプロトコルに合わせて、クライアントのTypeを選ぶ必要があります。名前が似ていて、どちらもUUIDを使うからといって、設定を共用できるわけではありません。

VMessはユーザー認証に加え、プロトコル層のデータ暗号化方式を設定できます。暗号化の設定はサーバー側と一致させてください。VLESS自体は同様のプロトコル層暗号化を行わず、一般的な構成ではTLSなどの安全な通信方式を組み合わせます。VLESSの暗号化項目がnoneでも、接続全体が平文とは限りません。外側の通信でTLSが使われているかも確認しましょう。

確認項目VMessVLESS
ユーザー識別子通常はUUIDでユーザー認証を行います。サーバー側の設定と一致させてください。こちらもユーザー識別子にUUIDを使いますが、それだけでVMess接続になるわけではありません。
プロトコル層の暗号化対応するデータ暗号化の設定があります。既存の設定に合わせてください。同様のデータ暗号化は行わないため、VMessの暗号化設定をそのまま使うことはできません。
外側のTLSTLSを有効にするかどうかはサーバーの構成によって決まり、プロトコル名だけでは判断できません。一般的にはTLSを組み合わせます。具体的な有効・無効の設定や認証情報は、サーバーの構成に従ってください。
通信方式さまざまな通信方式と組み合わせられます。クライアントの設定をサーバーに合わせてください。こちらも通信方式を一致させる必要があります。アドレスとUUIDだけをコピーしても接続できません。
切り替え条件サーバー側に、該当するVMessの設定が必要です。サーバー側に、該当するVLESSの設定が必要です。Typeを変更してもサーバーの対応状況は変わりません。

要点:先にサーバーの対応プロトコルを確認し、暗号化とTLSを設定する

現在の設定で接続できている場合は、まずそのまま使用してください。別のプロトコルに切り替える場合は、利用中のサービス提供元から新しい設定一式を入手しましょう。既存の記録でTypeだけ変更しないでください。

2. UUID、ポート、通信方式:4種類の設定を分けて確認

UUIDはユーザー識別子であり、サーバーアドレスやサブスクリプションURLではありません。一般的には、ハイフンを含む16進数の文字列で表されます。文字数や形式が正しくても、サーバー上でそのユーザーが有効とは限りません。コピーする際は、空白や改行、チャットアプリで付加された句読点が混ざらないように注意してください。

128 bit
UUIDの識別子の長さは、通信経路の暗号化強度を示すものではありません
36文字
UUIDの一般的なテキスト形式。ハイフンは4つ
443
TLSでよく使われるポートの例。すべての設定で固定されているわけではありません
  1. アドレスとポート:サーバーアドレスにはドメイン名またはIPアドレスを指定します。ポートは設定情報どおりに入力してください。ポートに443を指定してもTLSが自動的に有効になるわけではなく、そのポートで必ずプロキシサービスが動作しているとも限りません。
  2. 認証情報:UUIDが完全に入力されているか、記録がまだ有効かを確認してください。サブスクリプションURLに含まれるtokenをUUID欄に入力しないでください。
  3. 通信設定:実際の通信方式がTCP、WebSocket、gRPCのどれかを確認してください。WebSocket Path、Host、gRPC serviceNameも設定情報に含まれる場合は、それぞれ一致させます。
  4. セキュリティ設定:TLSの有効・無効、サーバー名、証明書の検証要件を確認してください。サーバーが該当の方式を使っている場合にのみ、クライアント側の設定が有効です。

たとえば、設定情報でWebSocket Pathが/tunnelと指定されている場合、独自に/へ短縮してはいけません。大文字・小文字、先頭のスラッシュ、パスの内容をそのまま保持してください。WebSocket Host、TLSのSNI、実際の接続アドレスはそれぞれ役割が異なります。ある設定で3つが同じ値でも、すべての記録を同じ値に変更してよいわけではありません。この記事のexample.comは説明用のドメイン名であり、接続先ではありません。

3. Add Serverへの入力:設定情報を省略せずに反映

利用中のサブスクリプションに設定が一通り含まれている場合は、Homeでインポート済みの記録を使うのが基本です。手動で追加する必要がある場合は、Home → Add Serverを開きます。プラットフォームによって項目の並び順が異なることがあるため、画面上の位置ではなく項目の意味に合わせて入力してください。サブスクリプションURL、UUID、共有リンクにはアクセス情報が含まれる場合があります。公開・共有しないでください。

2つの入力方法:インポート済みのサブスクリプションと手動設定

利用中のサブスクリプションがある場合
  • Homeでサブスクリプションがインポート済みで、記録が表示されていることを確認します。
  • 対象の記録を開き、Type、アドレス、ポート、TLSを確認します。
  • 更新後に対象の記録をもう一度確認し、無効になった古い項目を使い続けないようにします。
  • 変更する前に元の設定を保存し、後から元に戻せるようにします。
設定情報が一通りそろっている場合
  • Home → Add Serverを開き、該当するTypeを選択します。
  • アドレス、ポート、UUIDを入力してから、通信方式を設定します。
  • Path、Host、SNIなどの追加項目は、設定情報どおりに入力します。
  • 保存したらHomeに戻り、対象の記録を選択して接続をテストします。

サブスクリプションの更新によって記録が再生成されることがあります。継続して変更したい設定がある場合は、事前に利用中のサービス提供元へ確認してください。一時的に手動変更しても、サーバー側の設定が変更されたことにはなりません。

VMessの設定情報に追加の認証項目がある場合は、元の値をそのまま使用してください。古い資料に記載された項目が現在のサーバーでも使えるとは限りません。解説記事に載っている数値をそのまま当てはめないでください。VLESSの設定にflowが含まれていても、どの通信方式にもそのまま適用できるわけではありません。説明がない場合は、項目を推測して設定を組み立てず、その接続に合った設定一式を入手してください。

  1. Typeと設定情報に記載されたプロトコル名が一致していることを確認し、VLESSの記録をVMessとして作成しないようにします。
  2. UUID、サーバーアドレス、ポートを1文字ずつ確認し、隣の項目に入力していないことも確かめます。
  3. 通信方式と関連項目を確認してからTLSを確認します。一度に複数の設定を変更しないでください。
  4. 保存後はその記録だけをテストし、エラーが接続、TLSハンドシェイク、Webページのリクエストのどの段階で発生したかを記録します。

4. TLSの設定:速度ではなくサーバーの要件で決める

TLSは通信を保護し、接続先の正当性を確認するための仕組みです。「有効にすると遅く、無効にすると速い」という考え方で設定しないでください。サーバーでTLSが必要なのにクライアント側で無効にすると、通常は接続が正常に完了しません。反対に、通常の通信のみを受け付けるポートにTLSハンドシェイクを送っても失敗します。特にVLESSでは、暗号化項目がnoneだからといって「TLSも無効にする」と判断しないでください。

TLSを有効にしてサーバー名を確認

推奨

利用中のサービス提供元がTLSの設定を指定している場合は、その内容に従ってTLSを有効にし、証明書検証を維持してSNIを確認してください。推奨されるのは、サーバーが実際にその構成を採用している場合です。任意のポートでTLSを強制するという意味ではありません。

適用対象:TLSの設定が明示されたVMessまたはVLESS接続

TLSを無効にして元の通信設定を維持

サーバーの設定情報で明確に指定されている場合に限り、その値に合わせてください。外側の通信がどのように保護されているかも把握する必要があります。TLSを使用する接続と、TLSを使用しないVLESS接続を同じ安全性の条件として扱わないでください。

適用対象:TLSを使わないサーバーに合わせる必要があり、構成が明示されている接続

SNIはTLSハンドシェイクで接続先のサーバー名を示す情報です。証明書検証では、証明書の名前が想定したサーバー名と一致するかも確認します。接続先がIPアドレスで、証明書がドメイン名に対して発行されている場合は、通常、サービス提供元の案内に従って正しいサーバー名を入力します。WebSocket Hostは別の層の設定です。これを変更してもTLSの名前検証が正しくなるわけではありません。

5. 保存後にWebページが開けない:プロトコルとルーティングを切り分ける

Homeで記録を選択して接続を有効にしても、すべてのリクエストがその記録を経由するとは限りません。リクエストの処理方法はGlobal Routingで決まり、Configモードでは設定内のルールも確認する必要があります。リクエストが実際にはDirect経由なら、そのWebページが開くかどうかだけで、入力したVMessやVLESSの設定が使えるかは判断できません。

確認する場所確認のポイント次の手順
Home → Global Routing → ConfigリクエストはConfig内のルールに従って処理され、選択中のプロキシ記録が使われるとは限りません。リクエスト履歴と適用されたポリシーを確認し、対象のリクエストがどの経路を通ったかを調べます。
Home → Global Routing → Proxy一時的な切り分けでは、クライアントが処理するリクエストをプロキシ経由にします。対象の記録が選択されていることを確認してテストし、完了後は普段の設定に戻します。
Home → Global Routing → DirectDirect経由で開けたかどうかは、プロキシプロトコルの設定が正しいことの証明にはなりません。プロキシ記録をテストする場合は、Directのままにしないでください。
Home → Global Routing → Scene設定済みのSceneに従って処理され、結果はSceneの設定によって異なります。現在のSceneで実際に適用されているポリシーを確認してから、接続結果を判断します。
Settings → On Demand条件に応じた接続の開始に影響しますが、UUID、TLS、通信方式の設定を修正する機能ではありません。テスト中は接続状態を確認し、自動接続の動作をプロトコルの不具合と混同しないようにします。

Configモードでは、DOMAIN-SUFFIXはドメインの末尾に基づいて照合し、IP-CIDRはIPアドレスの範囲に基づいて照合します。GEOIPはIPアドレスの地理的な割り当てに基づいて照合し、FINALは前のルールに一致しなかったリクエストを処理します。これらは通信の経路を決めるもので、サーバーにユーザーを作成したり、不足しているUUIDを補ったりするものではありません。各ルールの処理先が、現在の設定内に存在することも確認してください。

  1. Homeで、先ほど確認した記録が選択されていることを確認します。同じ名前の古い記録と間違えないようにしてください。
  2. 切り分けに適したプロキシ経路へ一時的に切り替え、同じリクエストを使って再テストします。記録、モード、ネットワークを同時に変更しないでください。
  3. 接続段階でエラーが出る場合は、アドレス、ポート、認証、TLSを再確認します。接続済みで特定のWebサイトだけ開けない場合は、DNS、ルール、接続先サイトの状態を確認してください。
  4. テスト後は元のモードに戻し、エラーの種類と発生時刻を記録します。利用中のサービス提供元へ問い合わせる際は、UUIDやtokenなどの機密情報を伏せてください。

6. VMessとVLESSの入力に関するよくある質問

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

UUIDは認証情報の一部にすぎません。サーバー側でも、対応するプロトコルと通信方式が動作している必要があります。まず元のTypeに戻してください。VLESSを使う必要がある場合は、利用中のサービス提供元から個別の完全な接続設定を入手し、Add Serverで新しい記録を作成します。唯一使える記録を何度も変更しないでください。

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

まず、どの層の設定を指しているか確認してください。VLESSのプロトコル層の暗号化項目がnoneでも、外側の通信でTLSを使用している場合があります。記録を開き、TLS、サーバー名、証明書検証の設定を確認してください。設定情報に保護方式の記載がない場合は、利用中のサービス提供元に問い合わせ、独自に暗号化方式を追加しないでください。

ポートに443を入力したのに、TLSエラーが表示されるのはなぜですか?

ポート番号だけではTLSが正しく設定されるとは限りません。サーバーがそのポートで実際にTLSを提供しているか、SNIが証明書と一致するか、端末の時刻が正しいか、WebSocketまたはgRPCの追加設定が一致しているかを順に確認してください。こうした確認の代わりに証明書検証を無効にしないでください。

どちらが速いですか?すべてのVMessをVLESSに変更したほうがよいですか?

プロトコル名だけで判断することはできません。サーバーの負荷、往復遅延、パケット損失、通信方式、出口経路などが通信品質に影響します。まずは接続できている記録を維持してください。両方の設定が使える場合は、同じネットワーク、同じ接続先、近い時間帯でそれぞれテストし、結果を記録しましょう。異なる経路の差をすべてプロトコルの違いに結び付けることはできません。

サブスクリプションの更新後、手動で変更した設定が元に戻ります。どうすればよいですか?

サブスクリプションの記録は、サービス提供元から配信された内容をもとに再生成されることがあります。まず更新後の設定に変更が反映されているか確認し、サブスクリプションが有効かも確認してください。継続的に変更が必要な場合は、設定が一致しない具体的な項目を利用中のサービス提供元に伝えます。独立した記録を一時的に作成する場合は、元の設定を保存し、名前を明確に区別して、後から選択を間違えないようにしてください。

この記事では、既存の設定情報の入力方法と確認方法を説明しています。当サイトでは、接続先、サブスクリプション、サービス提供元の提供・販売・推奨は行っていません。アカウントの有効期限、サーバーのポート、証明書の設定に関する問題は、利用者自身のサービス提供元に確認してください。クライアント側の項目を変更しても、サーバー側の修復にはなりません。

Shadowrocketをダウンロード