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

Add ServerのUUID、alterId、暗号化方式、トランスポート設定を比較し、VMessとVLESSの認証・暗号化の違いや、入力ミスによる接続失敗の典型例を解説します。

この記事の要点

VMessとVLESSは、Typeを切り替えるだけで相互に置き換えられるものではありません。どちらもUUIDでユーザーを識別しますが、認証方式とプロトコル内の暗号化は異なります。TLS、トランスポート方式、Host、Pathもサーバー側の設定と一致させる必要があります。自分で用意したサービス設定やサブスクリプションをShadowrocketに読み込む、または手動入力する方向けに、「Typeの選択→認証情報の確認→トランスポートの確認→段階的なトラブルシューティング」の順で説明します。

まず結論:Typeはサーバー側の設定に合わせる

VMessは認証と任意のペイロード暗号化機能を備えたプロキシプロトコルです。VLESSはより簡潔なプロトコル構造を採用し、プロトコル自体ではペイロードを暗号化しません。そのため通常は外側のセキュリティ機構で通信を保護します。どちらも同じ形式のUUIDを使いますが、同じサーバーの接続先が両方のプロトコルに対応するとは限りません。既存のVMess項目でTypeだけをVLESSに変更し、ほかの項目をそのまま残しても、プロトコルは変換されません。

追加する前に、設定情報がそろっているか確認してください。Address、Port、UUIDに加え、トランスポート方式とセキュリティ設定も必要です。ポート443だからといって、必ずTLSが有効とは限りません。また、VMessかVLESSかをポート番号から判断することもできません。

確認項目VMessVLESS
ユーザー識別子UUIDを使用し、VMessの認証処理に用いるUUIDを使用し、VLESSの認証方式を用いる
alterId旧式の認証方式に関係する項目。最新のAEAD設定では通常0対応するalterId項目はない
プロトコル内の暗号化Security関連の選択肢があり、サーバー側の指定に合わせる必要があるプロトコル自体はペイロードを暗号化しない。リンク内のencryptionは通常none
外側のセキュリティTLSなどの設定を個別に確認するTLSなどの設定を個別に確認する。noneをセキュリティ層の設定とみなさない
トランスポート方式TCP、WebSocketなど、サーバー側の設定に合わせるTCP、WebSocketなど、サーバー側の設定に合わせる

結論:設定情報をすべて確認してからTypeを選ぶ

「アドレス、ポート、UUID」しかない場合は、まず利用中のサービス提供元にトランスポートとセキュリティ設定を確認してください。不足情報を補うためにTypeを切り替えたり、暗号化方式を次々に試したりしないでください。

追加手順:既存設定の項目をできるだけ保持する

Homeの追加メニューからAdd Serverを開き、指定されたTypeを選んで各項目を入力します。手動追加は、設定情報がそろっていて項目を確認しながら入力したい場合に適しています。完全な共有リンクやサブスクリプションがある場合は、読み込むことでHostやPathなどの入力漏れを減らせます。読み込み後も表示名だけで判断せず、項目を開いて確認してください。

既存の完全な設定を読み込む

おすすめ

手元にある共有リンクまたはサブスクリプションを読み込み、その後Type、Address、Port、TLS、トランスポート設定を確認します。入力ミスを減らすための方法であり、入手元を問わず設定を信頼してよいという意味ではありません。

適したケース:サービス提供元から完全なリンクまたはサブスクリプションが提供され、項目数が多い場合

Add Serverに手動で入力

設定表を見ながら各項目を入力します。まずTypeを選択し、プロトコルに応じて表示される項目を確認してください。保存前に、別のプロトコルの設定を流用していないか確認します。

適したケース:設定情報がそろっていて、項目を一つずつ確認したい場合や差異を特定したい場合

  1. Homeで使用する項目を選び、編集画面でTypeを確認します。名前に「VMess」や「VLESS」と書かれているだけで、実際の種類を判断しないでください。
  2. AddressとPortは分けて入力します。Addressには通常、ドメイン名またはIPアドレスを指定します。パスを含む共有リンク全体をAddress欄に入力しないでください。
  3. UUIDを省略せずにコピーし、前後に空白、改行、引用符が入っていないか確認してから、該当するプロトコルの項目を入力します。
  4. TLSとトランスポート設定を確認します。保存後に項目を開き直し、入力漏れがないことを確認してください。

共有リンクは1つの接続項目を表し、サブスクリプションURLは複数の項目を取得・更新するために使います。たとえばhttps://example.com/sub?token=xxxxは使用できないサブスクリプション形式の例であり、Addressの入力例ではありません。サブスクリプションの更新で項目が再生成される場合があります。トラブルシューティングの前に手動変更した箇所を記録しておくと、更新で上書きされたことを「設定が保存されていない」と誤認せずに済みます。

認証項目:UUIDとalterIdを個別に確認

UUIDはユーザー識別子であり、サーバーのドメイン名でもサブスクリプションURLのtokenでもありません。一般的なテキスト形式は、ハイフンを含む36文字です。例:123e4567-e89b-42d3-a456-426614174000。形式を示すための例であり、使用できる認証情報ではありません。見た目が正しくても、そのUUIDがサーバーで認証されるとは限りません。

VMessのalterIdは、遅延や速度を調整する項目ではありません。旧式のVMess認証では0以外のalterIdが使われていましたが、現在のVMess AEAD設定では通常0を使います。古い情報に別の値が記載されている場合は、値を大きくするのではなく、サーバー側の現在の認証方式を確認してください。VLESSに対応するalterIdはないため、別の項目に移し替える必要もありません。

暗号化とトランスポート:noneはTLSの無効化を意味しない

プロトコル内の暗号化と外側のTLSは別の層です。VMessのSecurityには、auto、aes-128-gcm、chacha20-poly1305などの値が使われる場合があります。サーバー側の指定とアプリで実際に選べる項目に合わせてください。VMessの暗号化方式をVLESSの該当欄に入力したり、速度を優先して安易にnoneを選んだりしないでください。

VLESSの共有リンクにあるencryption=noneは、VLESS自体がペイロードを暗号化しないことを示します。外側の接続を保護する必要がないという意味ではありません。元の設定でTLSを使用している場合は、読み込み後もTLSを維持してください。別のセキュリティ機構を使う設定の場合も、専用の項目をすべて一致させる必要があり、通常のTLSを有効にするだけでは代用できません。

確認手順:セキュリティ層とトランスポート層を分けて記録

TLSセキュリティ層
  • ポート番号から推測せず、サーバー側でTLSが必要か確認する。
  • TLSハンドシェイクで使うサーバー名、SNIを確認する。
  • 証明書がカバーするドメインとSNIが一致しているか確認する。
  • 証明書の検証は有効のままにし、エラーに応じてドメイン名や証明書を修正する。
WebSocketトランスポート層
  • トランスポート方式が通常のTCPではなくWebSocketであることを確認する。
  • Hostを確認する。Addressと同じとは限らない。
  • Pathを一文字ずつ確認し、先頭のスラッシュを残す。
  • 大文字と小文字を区別し、設定情報で指定されたパスパラメーターを保持する。

Address、SNI、WebSocket Hostは同じ場合も異なる場合もあります。自動で置き換えず、元の設定に記載された値をそれぞれ使用してください。

たとえば、設定表にAddressがedge.example.com、Portが443、SNIがtls.example.com、WebSocket Hostがweb.example.com、Pathが/connectと記載されている場合は、5つの独立した項目として確認します。いずれも説明用の仮の値で、接続できる設定ではありません。項目どうしの関係を示す例です。

接続できないとき:遅延の数値だけで判断せず、層ごとに確認

遅延テストで数値が返っても、そのテストで確認された手順に応答があったことしか分かりません。UUID、TLS、トランスポート、接続先Webサイトへのアクセスがすべて正常だとは限りません。テスト方法によって確認される層は異なります。トラブルシューティングでは、テスト方法、エラーメッセージ、発生した段階を記録してください。以下の表は、現象と確認項目の対応を示したもので、エラーひとつから原因を特定する診断結果ではありません。

表示された症状最初に確認する項目次に行うこと
サーバーのドメインを名前解決できないAddressの入力ミスと、現在のネットワークでの名前解決状況元のアドレスを確認し、プロトコルの接頭辞やパスが混入していないことを確かめる
接続がタイムアウトする、または拒否されるAddress、Port、ネットワークへの到達性ポートがサーバー側で現在使用されている待受ポートと一致するか確認する
TLS証明書またはハンドシェイクのエラーTLSの有効・無効、SNI、システム時刻、証明書一致していない項目を修正する。通常の対処として証明書検証を無効にしない
WebSocketハンドシェイクで400または404が返るHost、Path、トランスポート方式、サーバー側のルーティングPathを一文字ずつ照合する。ステータスコードだけではUUIDの誤りを示さない
ハンドシェイク後にリクエストが切断されるType、UUID、VMessの認証設定元の設定値に戻し、サーバーがそのユーザーを受け付けているか確認する
テストに応答はあるがWebページが開かないGlobal Routing、選択中の項目、DNSリクエストが実際にその項目を使っていることを確認し、ルールと名前解決を分けて調べる
  1. 元の設定を記録しておきます。UUIDやサブスクリプションtokenを含む情報は、自分の安全な場所だけに保管し、公開しないでください。
  2. Homeでテスト対象の項目を選び、Configのルールによる影響を抑えるため、Global Routingを一時的にProxyに設定します。アプリ内で保持される通信やシステム側の制限も考慮してください。
  3. 同じWebページへのリクエストを実行し、接続、TLS、トランスポート、リクエストのどの段階でエラーが発生するか確認します。一度に変更する項目は1つだけにしてください。
  4. 確認が終わったらGlobal Routingを元の設定に戻します。Proxyでは使えてConfigでは失敗する場合は、Configでルールの適用状況とポリシーを確認してください。UUIDを何度も変更しないでください。

Configモードでは設定ルールに基づいてリクエストの接続先が決まります。たとえばDOMAIN-SUFFIX,example.com,DIRECTは該当するドメインを直接接続させます。Homeで選択中の項目が使える状態でも、そのリクエストが経由するとは限りません。ルールの影響を切り分けることで、「プロトコル設定の誤り」と「リクエストがその項目を使っていない状態」を区別できます。

よくある質問:プロトコルの切り替え、サブスクリプション更新、項目不足

VMessで接続できたのに、VLESSに変更するとすぐ失敗するのはなぜ?

まず元のTypeに戻してください。VLESSの項目を新たに作成するには、サーバー側がVLESSの接続先に対応し、専用のポート、UUID、トランスポート、セキュリティ設定を提供している必要があります。クライアント側で名前を変更したりTypeを切り替えたりしても、サーバーが対応するプロトコルは変わりません。

VLESSにalterIdが見当たりません。入力漏れですか?

いいえ。alterIdはVMessに関連する項目です。Add Serverに戻り、TypeがVLESSになっていることを確認してください。そのうえで元の設定情報に従ってUUID、トランスポート、セキュリティ設定を入力します。alterIdの代わりに入力できる項目を探す必要はありません。

UUIDとポート443しかありません。TLSを有効にすれば接続できますか?

それだけでは判断できません。利用中のサービス提供元にAddress、TLSの要否、SNI、トランスポート方式を確認してください。WebSocketを使う場合はHostとPathも必要です。情報がそろっていないときは、何度も値を試すのをやめておくと、有効なトラブルシューティングの手がかりを残しやすくなります。

サブスクリプションを更新したら、変更したPathが元に戻りました。どうすればよいですか?

Homeで更新後の項目を開き、元のサブスクリプション設定と自分の変更記録を照合してください。サブスクリプションの内容は提供元が管理しています。元の設定の修正をサービス提供元に依頼してください。一時的な検証が必要な場合は手動で別の項目を作成し、一時変更をサブスクリプション側で修正済みと誤認しないようにします。

VMessとVLESSのどちらを使うかは、まずサーバー側の対応状況で決まります。そのうえで、トランスポート方式とセキュリティ設定を確認してください。プロトコル名だけで速度を判断することはできません。Shadowrocketでは、ユーザーが用意した設定を使用します。アプリの購入とネットワークサービスは別々に管理されます。本サイトでは接続先やサブスクリプションの提供、販売、推奨は行っていません。

App Storeの正規アプリを確認