ShadowrocketのVMessとVLESSの違い|手動追加時に確認する項目

VMessとVLESSの暗号化方式、UUID、トランスポート、TLSの項目をわかりやすく比較。Add Serverで入力する各値が、サービス提供元のどの情報に当たるかを解説します。

この記事の要点

VMessとVLESSは、Typeを切り替えるだけでは相互に変換できません。利用中のサービス提供元から設定情報を入手済みのShadowrocketユーザー向けに、プロトコル、認証情報、トランスポート、TLSの4つに分けてAdd Serverの項目を確認します。UUID、Server、Host、SNIの役割を把握し、設定をやみくもに切り替えるのではなく、問題が起きた箇所ごとに確認できます。

1. VMessとVLESSの違いはどこを見る?

まず結論です。速度ではなく、サーバー側で実際に提供されているプロトコルを選びます。VMessはプロトコル層で認証と暗号化の仕組みを備えています。一方、VLESS自体は通信を暗号化しないため、サーバーが指定するセキュリティ層と組み合わせる必要があります。VLESSのプロトコル暗号化欄がnoneでも、接続全体が平文という意味ではなく、TLSを無効にすべきという意味でもありません。

手動設定では、「どのプロトコルでユーザーを識別するか」「どの方式でデータを運ぶか」「接続をどう保護するか」を分けて考えます。WebSocketはトランスポート方式、TLSはセキュリティ層であり、どちらもVMessやVLESSと同じ意味ではありません。同じプロトコルでも組み合わせは異なりますが、クライアントとサーバーの各項目は一致させる必要があります。

確認する層VMessVLESS
プロトコル上の識別UUIDでユーザーを識別し、認証と時刻の確認に関係するUUIDでユーザーを識別するが、VMessと共通で使えるとは限らない
プロトコル暗号化サーバーの指定に従って暗号化設定を選び、推測で決めないプロトコル暗号化はnone。接続の保護方法は別途確認
トランスポート方式TCP、WebSocketなど、具体的な要件を確認実際のトランスポート方式と追加項目も同様に確認
セキュリティ層TLSを別途使用する場合がある。指定された設定に従うTLS、または明示されている他のセキュリティ設定を確認。現在のアプリが対応していることも確認する

したがって、「VMessのUUIDをコピーしてTypeをVLESSに変えれば移行完了」という汎用的な手順はありません。2つの設定で同じUUIDが使われていても、サーバーに対応するプロトコルの接続先、ポート、トランスポート設定が実際に用意されているか確認してください。

2. Add Serverを開く前に設定情報をそろえる

Homeで右上の追加ボタンをタップしてAdd Serverを開き、まずTypeを選んでから表示された項目を入力します。Typeやトランスポートの選択によって、以降の項目は変わります。この記事ではUUIDやSNIなどのプロトコル用語を使って対応関係を説明します。実際の入力項目名や配置は、現在のアプリ画面で確認してください。

  1. 同じ接続先の設定情報か確認します。プロトコル、Server、Port、UUID、トランスポート方式、セキュリティ層をひとまとまりで記録し、古いメッセージのポートと新しい設定のドメインを混在させないでください。
  2. 個別の設定とSubscribeアドレスを区別します。Subscribeアドレスは設定一式を取得するためのもので、ServerやUUIDではありません。Subscribeから取り込んだ項目がある場合は、まずその詳細を確認し、追加項目が欠けた複製を作らないようにします。
  3. 元の設定を残します。手動で確認する前に元の値を記録してください。必要に応じてテスト用の項目を新規作成し、一度に変更するのは1項目だけにします。後でSubscribeを更新すると、サービス提供元が管理する項目が再度書き込まれる場合があります。一時的な変更を恒久的な解決策と考えないでください。
  4. 追加情報も用意します。WebSocketを使う場合はHostとPath、TLSを使う場合はサーバー名と証明書の要件も確認します。VLESSでFlowが明示されている場合は、これも確認し、推測で入力しないでください。

3. Server、Port、UUIDの入力方法

Serverは接続先サーバーのアドレスで、通常はドメイン名またはIPアドレスです。https://、ウェブページのパス、クエリパラメーターは含めません。Portにはサーバーが実際に待ち受けているポートを入力します。443を入力してもTLSが自動的に有効になるわけではなく、ドメイン名を入力しても正しいSNIが自動設定されるわけではありません。

128 bit
UUIDの識別子の長さ。一般的なテキスト形式は8-4-4-4-12
1–65535
接続先サーバーのポート番号の範囲。具体的な値は指定された情報に一致させる
443
TLSでよく使われるサーバーポート。ただし、ポート番号だけではTLSの有効化を意味しない

UUIDはプロトコルの認証情報であり、メモ名でもAppleアカウントでもありません。コピーする際はハイフンを残し、前後の空白や不要な改行を取り除いてください。設定情報にあるid=...全体を、キー名ごと入力しないでください。形式が正しくても、サーバーがその認証情報を現在も受け付ける保証にはなりません。

4. WebSocketのHost・PathとTLSのSNIを混同しない

これらの項目はドメイン名や短い文字列であることが多いものの、使われる段階はそれぞれ異なります。Serverは接続先を決め、SNIはTLSハンドシェイクでサーバー名を指定します。WebSocketのHostとPathは、HTTPのアップグレード要求とサーバー側のルーティングに使われます。同じ値の場合も異なる値の場合もあり、Serverからすべての値を推定することはできません。

2つの項目群をそれぞれ確認:トランスポート方式とセキュリティ層

WebSocketのトランスポート項目
  • 設定情報でトランスポート方式としてWebSocketが指定されているか確認します。ドメイン名が含まれているだけで選ばないでください。
  • Hostは指定された値を入力し、プロトコルの接頭辞は付けません。ポート番号が明記されている場合は、勝手に削除しないでください。
  • Pathは先頭の/、大文字・小文字、クエリパラメーターをそのまま保持します。ウェブページの完全なURLを入力しないでください。
  • たとえば/wsと/WSは異なるルートに対応する場合があり、同じものとして扱えません。
TLSのセキュリティ項目
  • Portだけで判断せず、設定情報に基づいてTLSを有効にするか確認します。
  • SNIには通常、サーバー名を入力します。https://やパスは含めません。
  • 証明書に記載された名前、有効期間、デバイスの時刻を確認し、証明書エラーを無視して解決しようとしないでください。
  • ALPNなどの追加項目が指定されている場合は、その値を確認します。指定がない場合、別の項目の値を流用しないでください。

接続先アドレス、TLSのサーバー名、WebSocketのHostは、それぞれ異なる役割を持ちます。元の設定で同じ値が指定されている場合に限り、同じ値を入力してください。

以下は項目の関係を示す例であり、接続可能な設定ではありません。また、実際のサーバーがこれらの値に対応することを示すものでもありません。入力には利用中の接続先に関する完全な設定情報を使い、指定されていない項目をこの例から補わないでください。

Type: VLESS
Server: edge.example.com
Port: 443
UUID: 利用中の接続先から提供された完全なUUIDを使用
Transport: WebSocket
Host: web.example.com
Path: /ws
TLS: enabled
SNI: web.example.com

5. TLSを有効にするか判断する:プロトコル名ではなく接続先の指定を確認

VMessもTLSと組み合わせられ、VLESSもプロトコル名だけでTLSの有効・無効を決めることはできません。ここでは同じアプリにおけるセキュリティ層の設定方法を比較しており、どちらのプロトコルを優先すべきかを示すものではありません。推奨する設定は、「利用中の設定情報でTLSの有効化が明示されている」場合のものです。サーバーが別のセキュリティ方式を明示している場合は、その方式で必要な項目と現在のアプリの対応状況を確認してください。

元の設定でTLSが指定されている場合:TLSとサーバー名の検証を維持

推奨

対応するTLS設定を有効にし、SNI、証明書、追加項目を一つずつ確認します。サーバー名が一致しない場合は、まず設定情報を確認してください。検証を無効にして問題を回避しないでください。

適用対象:利用中の接続先について、TLSとサーバー名が明示された設定

元の設定でTLSを使わない場合:実際のセキュリティ方式を確認

無理にTLSを有効にしないでください。また、「TLSを使わない」ことを、あらゆる保護を省略してよいという意味に捉えないでください。特にVLESSでは、接続全体がどのように暗号化されるか、必要な項目がそろっているかを確認してください。

適用対象:利用中の接続先について、セキュリティ層の組み合わせが明示され、必要な設定情報がそろっている場合

判断手順:元の設定でセキュリティ層を確認してから、暗号化項目を確認

VLESSのnoneを見ても、TLSを無効にしないでください。まず、プロトコル暗号化と接続のセキュリティ層のどちらを示す値なのかを確認し、該当する設定を変更します。

6. 保存後の確認方法:ルーティングの問題とプロトコルの問題を切り分ける

設定を保存したらHomeに戻り、確認した項目を選んで接続テストを行います。遅延が表示されても、テストに応答があったことしか示しません。UUID、WebSocketのルーティング、TLS、接続先ウェブサイトへのアクセスがすべて正常とは限りません。以下はトラブルの分類例であり、特定のエラー表示を一つに断定するものではありません。

  1. まず、対象の項目を実際に使用しているか確認します。Homeで現在選択されている項目を確認してください。新しい項目を編集したのに、接続時には別の古い項目を使っている場合があります。
  2. 次にGlobal Routingを確認します。Directではプロキシ接続先を検証できません。Configでは、対象の通信がルールによって直接接続に振り分けられる場合があります。ルール選択の影響を切り分けるため、一時的にProxyを使い、テスト後は元の設定に戻してください。
  3. 失敗した段階を記録します。接続タイムアウトならServer、Port、ネットワーク到達性を確認します。TLSの失敗ならセキュリティ層、SNI、証明書、時刻を確認します。接続確立後に失敗する場合は、UUID、トランスポート項目、サーバーの状態を確認してください。
  4. 最後にルールとDNSを確認します。ProxyではアクセスできるのにConfigではできない場合は、現在のConfigで該当するルールとポリシーを確認します。プロトコルの認証情報は変更し続けないでください。

ルールのDOMAIN-SUFFIX,example.com,DIRECTは、一致するドメインをDIRECTに振り分けます。FINALは、それ以前のルールに一致しなかった場合の最終ポリシーです。この場合のアクセス結果はルールによる経路を反映しており、追加したVMessやVLESSの項目が原因とは限りません。一時確認用の全体選択を、恒久的なルーティング設定として使わないでください。

7. VMessとVLESSを手動追加する際によくある質問

UUIDとドメイン名だけで追加できますか?

それだけでは設定を完全に復元できません。少なくともType、Port、トランスポート方式、セキュリティ層の確認が必要です。WebSocketではHostとPathも必要になる場合があります。よく使われるポートやデフォルトのパスで実際の値を代用せず、利用中のサービス提供元に不足項目を確認してください。

VMessをVLESSに変更したら、すぐ接続できなくなったのはなぜですか?

2つのプロトコルは処理方法が異なり、サーバー側にもそれぞれの接続先が必要です。Homeに戻って項目を編集し、元のTypeと設定情報に戻してください。VLESSを使う場合は、UUIDだけを流用するのではなく、その接続先用の完全な設定情報を入手してください。

VLESSにnoneと表示されます。設定が間違っていますか?

VLESSのプロトコル暗号化を示しているのであれば、noneはそのプロトコルの設計どおりです。TLSまたは指定された別のセキュリティ層を引き続き確認してください。この値だけで接続全体が暗号化されていないとは判断できず、TLSを無効にする指示でもありません。

Subscribeから取り込んだ設定は使えるのに、手動追加では接続できない場合は?

Homeで2つの項目の詳細をそれぞれ開き、Type、Server、Port、UUID、トランスポート、セキュリティ層、追加項目を順に比較します。手入力で漏れたPath、SNI、Flowを重点的に確認してください。まずSettingsをリセットする必要はありません。また、認証情報全体を公開の掲示板に投稿しないでください。

ポートが443でもTLSを確認する必要がありますか?

必要です。443はポート番号にすぎず、プロトコルを決めるものではありません。項目の編集画面に戻り、元の設定情報に従ってTLSの有効・無効とサーバー名を確認します。証明書エラーが表示された場合は、まずSNIとデバイスの時刻を確認してください。検証を無効にすることを通常の解決策にしないでください。

一通り確認したら、「元の値」「変更した項目」「結果」の3点を記録します。失敗がアドレスへの接続、TLSハンドシェイク、プロトコル認証、ルール選択のどの段階で起きたかを特定できれば、プロトコル、ポート、トランスポート方式を一度に変えず、該当する層に絞って対処できます。

App Storeで正規品を確認購入と復元について確認