ShadowrocketのVMessとVLESSの違い|手動設定で確認する項目

サービス提供元の設定値をもとに、VMessとVLESSの暗号化、UUID、通信方式、TLSの違いと、入力ミスで起こりやすい症状を解説します。

この記事の概要

VMessまたはVLESSを手動で追加するときは、まず何を確認すればよいでしょうか。最初にTypeを選び、Address、Port、UUID、通信方式、TLSを順番に照合します。この記事では、自分のサービス情報をすでにお持ちの方に向けて、Shadowrocketで互換性のない項目や、トラブルの手がかりとなる症状、既存の設定を変更せずに値を確認する方法を説明します。

VMessとVLESSの違いは?

どちらもUUIDを使うなら、相互に置き換えられるのでしょうか。いいえ。UUIDは認証情報の一部ですが、両プロトコルの認証方式やデータ処理が同じという意味ではありません。サーバーがVMessの場合は、Home → Add Server → TypeでVMessを選択します。VLESSの場合はVLESSを選択してください。Typeだけを変更してほかの値をそのまま残しても、既存のサービスを別のプロトコルに変換することはできません。

暗号化の項目はどのように理解すればよいでしょうか。VMessにはプロトコル層のデータ暗号化機能があり、サービスの設定値に合わせる必要があります。VLESSには同種のデータ暗号化層がなく、一般的にはTLSなどの外側の仕組みで通信を保護します。そのため、VMessの暗号化オプションとTLSの設定は別の層に属し、互いに置き換えることはできません。VLESSの設定にあるencryption=noneも、TLSを必ず無効にするという意味ではありません。

確認項目VMessVLESS
TypeVMessを選択VLESSを選択
UUID該当するVMessサービスのUUIDを入力該当するVLESSサービスのUUIDを入力
プロトコル層の暗号化サービスの設定値に合わせて暗号化方式を確認。他の設定から転記しない同種の暗号化層はなく、VMessの暗号化オプションは適用できない
通信方式サーバー側の設定と一致させるサーバー側の設定と一致させる
TLS有効化の有無と関連ドメインを個別に確認個別に確認し、プロトコル名だけで有効・無効を判断しない

どちらが必ず速いのでしょうか。プロトコル名だけでは判断できません。通信経路、サーバーの負荷、通信方式、TLSの設定はいずれも接続状況に影響します。手動入力では、まず「サーバー側の設定と完全に一致し、正常にリクエストできること」を目標にしてください。そのプロトコルに対応していないサービスの設定を、プロトコル変更のために書き換えないようにしましょう。

Address、Port、UUIDはどう入力する?

Shadowrocketではどこから設定しますか?Homeを開き、追加メニューからAdd Serverに進みます。最初にTypeを選び、サービス提供元から案内されたAddress、Port、UUIDを入力してください。Typeによって表示される追加項目は異なる場合があります。実際にアプリ内に表示される項目を確認してください。既存の設定を編集する前に、元の設定値を控えておくと、変更を元に戻せなくなるのを防げます。

  1. Address:指定されたサーバーのドメイン名またはIPを入力します。ホストアドレスを入力する場合は、https://、パス、クエリパラメーターを付けないでください。これらはそれぞれ別の項目に属します。
  2. Port:指定されたポート番号をそのまま入力します。設定に443とあれば443、8443とあれば8443を入力してください。ポート番号だけでTLSの有効・無効を判断することはできません。
  3. UUID:該当するサービスの値を省略せずにコピーし、先頭や末尾の空白、文字の抜け、改行がないか確認します。UUIDの文字列表記は一般に36文字で、ハイフンを4つ含みます。形式が正しくても、サーバーで認証が許可されているとは限りません。
  4. 保存して選択:保存後にHomeへ戻り、編集した設定を選択してからテストします。設定を保存しただけでは、接続先がその設定に切り替わったとは限りません。
36文字
ハイフンを含むUUIDの一般的な文字数
443
TLSでよく使われるポート。ただし実際の設定値を確認
8443
別のポート番号の例。443に自動で置き換えない

UUIDは複数の設定で使い回せますか?同じUUIDの使用をサーバー側が明示的に許可している場合に限ります。Addressが同じ、メモが似ている、Portが同じといった理由では判断できません。元の情報に必要な認証情報がそろっていない場合は、サービス提供元に確認してください。文字を書き換えて認証を試すのは避けましょう。

通信方式、Host、パス、TLSをどう個別に確認する?

VMessまたはVLESSを選ぶと、通信方式も自動で合うのでしょうか。プロトコル名だけで一致が保証されるわけではありません。サーバー側でWebSocketが指定されている場合は、クライアント側でも該当する通信方式を設定する必要があります。アプリ内で対応している別の通信方式が指定されている場合も、項目ごとに一致させてください。WebSocketを通常のTCPに変更するのは、多くの場合、互換性のある最適化ではなく、サーバーが想定するデータ形式を変えることになります。

項目を分けて確認:接続先とアプリ層のルーティング

接続先と認証情報
  • Addressは、最初に接続するアドレスを指定します。
  • Portは、そのアドレスのどのポートに接続するかを指定します。
  • UUIDは、該当サービスの認証情報と一致させます。
  • Typeは、VMessまたはVLESSに合わせます。
通信方式とTLS
  • WebSocketのHostとパスは、元の設定値どおりに入力します。
  • パスの先頭にあるスラッシュや大文字・小文字を変更しないでください。
  • TLSのSNIは、ハンドシェイク時にサーバー名を指定します。
  • 証明書の検証、SNI、WebSocketのHostはそれぞれ個別に確認します。

要点:Address、Host、SNIは同じ場合も異なる場合もあります。3つの項目を見かけ上そろえるために、値を勝手に上書きしないでください。

AddressがIPでも、TLSでドメイン名が必要になるのはなぜですか?接続先と証明書上の識別名は別のものです。IPで接続しつつ、証明書に対応するドメイン名を使い、SNIで接続先のサービスを指定する設定もあります。サービスの設定で指定されたドメイン名を保持し、機械的にIPへ置き換えないでください。WebSocketのHostはHTTPリクエストヘッダーに属し、サーバー側のルーティングに使われます。証明書の検証に使う名前とは異なります。

パスにスラッシュを1つだけ入力してもよいですか?元の設定が/を指定している場合に限ります。/gatewayが指定されている場合、/に変更したり先頭のスラッシュを省いたりすると、ルーティングが一致しないことがあります。ここでの/gatewayは項目の形式を示す例であり、そのまま使える接続情報ではありません。

TLSは有効にする?それとも無効にする?

VLESSならTLSを有効にすればよいのでしょうか。まずサービスの設定値を確認してください。VLESSではTLSがよく使われますが、プロトコル名だけではすべてのセキュリティ設定を決められません。VMessでもTLSを使用できます。手動で入力するときは、「TLSを有効にするか」と「証明書を検証するか」を別々に確認してください。ドメイン名や証明書の問題を隠すために、証明書の検証を無効にしないでください。

TLSを有効にし、証明書の検証を維持

推奨

サービスの設定でTLSが明示されている場合は、TLSを有効にして指定されたSNIを入力し、証明書の検証を有効のままにします。ハンドシェイクに失敗した場合は、検証を無効にするのではなく、デバイスの日時、ドメイン名、証明書の有効期限、サーバーの設定を確認してください。

適用例:TLSの設定値が案内されており、証明書でサーバーの身元を確認する接続。

TLSを無効にし、通信の保護方法を確認

サービスの説明でTLSを無効にするよう明示されている場合に限り選択します。無効にしたからといって、同等の通信保護が維持されるとは限りません。特にVLESSでは、サービス側でどのようにデータを保護しているか確認してください。TLSの設定を自己判断で暗号化されていない接続に変更しないでください。

適用例:サーバー側でTLSを使用しないことが明示され、通信環境と保護方法を確認済みの設定。

要点:まずサービスの設定値に戻し、その後で証明書を確認

TLSを有効にした後に証明書エラーが出た場合は、エラー情報を記録し、SNIを確認してください。Port、Host、証明書検証の設定を同時に変更しないでください。元の情報に基づく項目を一つずつ修正して再接続すれば、変更の効果を確認できます。

入力後に通信できない場合、どの順番で確認する?

Homeに接続済みと表示されていれば、UUIDやTLSも正しいのでしょうか。必ずしもそうではありません。システムのトンネルが確立しても、接続先サーバーで認証されたことや、Webページへのリクエストが完了したことを意味しません。まず現在選択されているサーバーを確認し、テスト結果とリクエストの状況を調べます。トンネルのスイッチがオンであることだけを、通信全体の成功の証拠と考えないでください。

  1. 選択中の設定を確認:Homeに戻り、現在の設定のType、Address、Portを確認します。再接続して、保存した設定で次のリクエストを送信してください。
  2. テスト結果の意味を確認:アプリ内の接続テストを実行します。TCP接続が可能でも、ポートが接続を受け付けている可能性を示すだけです。UUID、WebSocketのパス、TLSでのサーバー認証は検証できません。
  3. ルールの影響を切り分ける:Home → Global Routingで一時的にProxyを選び、同じ宛先にアクセスします。テスト後は、元のConfigやほかの設定に戻してください。Directではプロキシサービスが正常であることを確認できません。
  4. プロトコル層を確認:UUID、VMessの暗号化設定、VLESSサービスで別途指定されている追加パラメーターを確認します。Flowが関係する場合は、サービスの指定とアプリ内の対応状況に合わせて入力してください。
  5. 通信層を確認:通信方式、Host、パス、TLS、SNIを確認します。接続先との通信はできるのにドメイン名を使ったリクエストが失敗する場合は、その後でDNSを確認してください。最初からDNSと接続設定のすべてを同時に書き換えないでください。

ポートテストに成功しても、Webページがタイムアウトするのはなぜ?

ポートに到達できても、プロトコル認証が成功したとは限りません。まずHomeで該当する設定が選択されていることを確認し、TypeとUUIDを照合します。続いて通信方式とTLSを確認してください。特定の宛先だけ失敗する場合は、そのリクエストのエラー情報を記録し、宛先のサービス、DNS、ルールの問題を切り分けます。

TLSハンドシェイクエラーは、UUIDの入力ミス?

UUIDの誤りとすぐに判断しないでください。まずTLSの有効・無効、Port、SNI、デバイスの日時を確認し、その後に証明書の検証情報を調べます。ハンドシェイクの問題と、その後のプロトコル認証は別の段階です。エラーが発生した段階に応じて確認しましょう。

WebSocketで404が表示されたら、パスの間違い?

404はHTTPのルーティングが一致していない可能性を示す手がかりですが、ステータスコードだけで原因は特定できません。通信方式、Host、パス全体を元の設定と一つずつ照合してください。接続先が正しいAddressとPortかも確認し、必要に応じてサービス提供元にサーバー側のルーティングを確認してもらいましょう。

Proxyでは使えるのに、Configに戻すと失敗する。VLESSに変更すべき?

まずプロトコルを変更しないでください。この結果の場合、Config内で対象リクエストに適用されるポリシーとDNSの動作を優先して確認します。同じサーバーと同じテスト先を使い、該当するルールとFINALのポリシーを確認してから、設定の変更が必要か判断してください。

購読情報がある場合も、手動で入力し直す必要がある?

自分の購読情報がある場合、入力ミスを減らすにはどうすればよいでしょうか。まず元のインポート結果を比較用に残し、手動追加が必要か判断してください。購読情報にはプロトコル、認証情報、通信パラメーターが含まれることがあり、手書きでは追加項目を見落としやすくなります。インポートした設定が常に有効とは限りません。サーバー側の変更後は、更新結果と現在選択中の設定を確認してください。

最終的にどちらのプロトコルを使えばよいでしょうか。自分のサービスが実際に対応し、設定値がそろっていて、接続確認もできたものを使ってください。VMessとVLESSの違いは、正確な設定やトラブル対処に関わるものであり、名前を理由にサービスを切り替える必要はありません。クライアントの購入と接続サービスは別です。当サイトでは接続サービスや購読情報の提供、販売、推奨は行っていません。

App Storeで正規アプリを確認デベロッパ名とアプリID