Shadowrocketの対応プロトコル一覧|Shadowsocks・VMess・VLESS・Trojan・Hysteria2の違いと使い方

Shadowsocks、VMess、VLESS、Trojan、HTTP/SOCKS5、WireGuard、Hysteria2の通信方式と暗号化を一覧で比較。Shadowrocketではサービス提供元の指定に合わせてプロトコルを選びます。

この記事の概要

ShadowrocketのHome → + → Typeで、利用中のサービス提供元から案内された設定に合わせてプロトコルを選び、アドレス、認証情報、通信パラメータを確認します。設定情報は手元にあるものの、プロトコル名とTLS、TCP、UDPの違いが分からない方に向けた内容です。まず比較表を確認し、手順に沿って入力したら、Global Routingを使ってプロトコルの接続問題とルールの問題を切り分けます。

プロトコル比較:まずTypeを確認し、通信方式と暗号化をチェック

Homeで登録済みの項目を編集するか、右上の+をタップしてTypeを確認します。ここで選ぶのはサーバーとの通信に使うプロトコルで、速度の設定ではありません。Shadowrocketが対応するプロトコルは次の表のとおりです。利用できる拡張フィールドや通信方式の組み合わせは、現在のアプリ画面と利用中のサービス提供元の設定案内に従ってください。

プロトコル 通信方式の特徴 暗号化と認証 入力時の確認項目
Shadowsocks TCP、UDPに対応します。実際にUDPを利用できるかはサーバーとネットワークにも左右されます。 指定された暗号化方式と共有鍵を使用します。一般的なAEAD方式では、暗号化と完全性保護の両方が提供されます。 Address、Port、Password、暗号化方式が一致していることを確認します。
VMess TCPなどで通信するほか、設定に応じてWebSocketやTLSを組み合わせられます。 UUIDでユーザーを識別します。プロトコル自体の暗号化設定と外側のTLSは別の層です。 UUID、暗号化オプション、通信方式、TLSの設定。
VLESS 通信方式と外側のセキュリティ機能はサーバーの設定によって決まります。 UUIDで認証します。VLESS自体はペイロードを暗号化しないため、通常はTLSなど外側の仕組みを利用します。 UUID、通信方式、TLS、サーバーが求める追加フィールド。
Trojan 通常はTLS接続を利用します。UDP転送への対応は実装とサーバーの仕様によります。 Passwordで認証し、TLSで接続を保護するとともにサーバーの身元を確認します。 Password、SNI、証明書の検証、実際の待ち受けポート。
HTTP / SOCKS5 HTTPプロキシではCONNECTでトンネルを確立するのが一般的です。SOCKS5はCONNECTに加え、UDP ASSOCIATEも定義しています。 基本的なHTTPプロキシとSOCKS5は、クライアントからプロキシまでの通信を暗号化しません。ユーザー名とパスワードによる認証は、通信の暗号化とは別です。 プロキシの種類、アドレス、ポート、認証情報、別途TLSを使うかどうか。
WireGuard UDPベースのネットワーク層トンネルです。Peerとアドレスを設定します。 公開鍵・秘密鍵方式を使用し、必要に応じてPre-shared Keyを設定できます。 Private Key、Peer Public Key、トンネルアドレス、Allowed IPs、MTU。
Hysteria2 QUICを利用し、下位層ではUDPを使用します。経路上で該当するUDP通信が許可されている必要があります。 QUICのTLS 1.3セキュリティ機能を使用します。認証はサーバーの指定に従って設定します。 認証情報、SNI、ポート、必要に応じて難読化パラメータ。

サービス提供元の案内にWebSocket、TLS、QUICと記載されていても、すべてをTypeとして選ぶわけではありません。WebSocketは通信のカプセル化方式、TLSはセキュリティ層、QUICはUDPベースの安全な通信プロトコルです。これらはShadowsocksやVMessなどとは分類の階層が異なります。まずプロトコルを確認し、各層のフィールドを順に照合すると、「アドレスとパスワードは正しいのにハンドシェイクできない」といった問題を減らせます。

パラメータを層ごとに確認:アドレス、認証、TLSは別々に設定

編集画面でAddressとPortを入力し、Typeに応じて認証情報を設定します。Addressは接続先、Portはサーバーが実際に待ち受けているポートです。SNIはTLSハンドシェイクでサーバー名を示すために使います。AddressにIPアドレスを入力していても、SNIには証明書に対応するドメイン名が必要な場合があります。両方を機械的に同じ値にしないでください。

443
TLSでよく使われるポートの例です。すべてのプロトコルで固定されているわけではありません。
TCP / UDP
異なる2種類の通信方式。同じポート番号でも通信方式が同じとは限りません。
TLS 1.3
Hysteria2のハンドシェイクに使われるQUICのセキュリティ機能

認証フィールドでは、ShadowsocksのPassword、VMess/VLESSのUUID、WireGuardのPrivate Keyを相互に置き換えることはできません。WireGuardのローカル側のPrivate Keyは、サーバーに登録されたクライアントの公開鍵と対応している必要があります。Peer Public Keyには相手側の公開鍵を入力します。クライアント自身の公開鍵をPeer Public Keyに入力すると、通常は想定どおりのハンドシェイクを確立できません。

要点:名前で推測せず、フィールドを照合する

サーバーの設定情報を「接続先」「認証」「通信方式」「セキュリティ層」の4つに分けてから入力します。案内にないフィールドは、必須かどうかを先に確認し、別の設定から値を流用しないでください。

追加手順:手動入力・インポートのどちらでもTypeを確認

サーバー項目の追加はHome、構成ファイルやルールの管理はConfig、アプリの設定はSettingsで行います。プロトコル項目の追加とルール設定の切り替えは別の操作です。前者はサーバーへの接続方法、後者は各リクエストに適用するポリシーを決めます。以下の手順は、利用するサービス提供元の設定情報をすでにお持ちの場合を前提としています。

  1. Typeを確認

    Home → + → Typeを開き、設定案内に明記されたプロトコルを選びます。TrojanをVLESSに変更しても互換性はありません。Hysteria2も、ポートを変えるだけで別のプロトコルにはなりません。

  2. 接続先を入力

    追加フォームに戻り、案内に従ってAddress、Port、プロトコルの認証情報を入力します。ポートには指定された値を使ってください。設定が8443なら、TLSを有効にしたからといって443に変更しないでください。

  3. 通信方式を合わせる

    選択したTypeに応じて表示されるフィールドで、TLS、SNI、通信方式、追加パラメータを確認します。保存する前に、ドメイン名に空白が入っていないか、Passwordの末尾に改行がないか、UUIDが欠けていないかをチェックしてください。

  4. インポート内容を確認

    サブスクリプションを利用している場合は、Home → + → Type → Subscribeからご自身のサブスクリプションURLを入力して保存できます。インポート後は項目を開き、Typeと重要なフィールドを確認してください。サブスクリプションの更新で手動変更が上書きされる場合があるため、確認用に元の設定情報を保管しておきましょう。

  5. 接続を確認

    Homeに戻り、テストする項目を選んで接続をオンにし、システムの案内に従ってVPN構成を許可します。まず、アクセス可能と分かっている宛先で確認し、実際のリクエストが想定したポリシーを通るかチェックします。1回の遅延測定だけでは、すべての通信が利用できるとは判断できません。

サブスクリプション更新後にプロトコルのフィールドが変わった場合は、まずサーバー側の設定も変更されたか確認してから再テストしてください。サブスクリプションは設定を配布・更新する仕組みであり、各項目のサーバー稼働状況を保証するものではありません。手動で項目を変更する前に元の値を記録しておくと、更新後に「元の設定の誤り」と「ローカルでの変更ミス」を区別しやすくなります。

Global Routing:プロトコルの接続とルールの適用を分けて確認

Home → Global Routingで現在のモードを確認し、リクエストが選択した項目を使わない理由を調べます。Config、Proxy、Direct、Sceneはルーティング制御であり、プロトコル名ではありません。Sceneは場面に応じたルーティング動作を整理する機能です。実際の動作は該当するSceneの設定を確認してください。Sceneを別の暗号化方式と混同しないようにしましょう。

Config

おすすめ

現在の設定にあるルールとポリシーに従ってリクエストを処理します。ルールに一致した結果はDIRECT、プロキシ、その他の指定ポリシーのいずれかです。先行するルールに一致しない場合は、通常FINALで行き先が決まります。

適した用途:ルールを確認済みの日常的な通信の振り分け。

Proxy

プロキシ処理の対象となるリクエストを、選択したプロキシポリシーに渡します。一時的にルール判定の影響を減らしてテストできます。テスト後は元のモードに戻してください。この結果だけで、すべてのアプリの通信を検証できたとは判断できません。

適した用途:サーバーへの接続失敗とルールの不一致を切り分ける。

Direct

直接接続を使います。この状態でWebページを開けても、入力したTrojan、WireGuardなどのプロトコル設定が有効だとは限りません。リクエストが該当サーバーを経由していない可能性があります。

適した用途:ローカルネットワークの基本的な接続状況との比較。

Config内の構成ファイルで、ルールの順序、マッチ対象、ポリシー名を確認します。以下は構文の例であり、完全な設定ではありません。実際の設定では、PROXYが利用可能なポリシーに対応している必要があります。DOMAIN-SUFFIXはドメインの末尾に一致し、IP-CIDRはアドレス範囲に一致します。GEOIPはIPの地理データベースに基づいて判定し、FINALはそれ以前のルールに一致しなかったリクエストを処理します。

DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT
GEOIP,CN,DIRECT
FINAL,PROXY

Settings → On Demandでは、条件に応じて接続を自動的に確立する動作を設定します。プロトコルのパラメータを補う機能ではありません。プロトコルの接続をまだ確認できていない場合は、まず手動で接続して利用できることを確認してからOn Demandを設定してください。自動接続の条件とハンドシェイクの問題を分けて調べられます。ルール判定の詳細は使用ガイドのルーティング章をご覧ください。

よくある質問:症状からプロトコルの確認箇所を絞り込む

Homeでテストする項目を選び、接続の確立、TLSハンドシェイク、接続先サイトの表示のどの段階で失敗したかを記録してから、接続ログを確認します。タイムアウトは、いずれかの処理が時間内に完了しなかったことを示すだけです。これだけでパスワードの誤りやプロトコルの非対応とは断定できません。以下の手順は原因を一つずつ絞るためのもので、似た症状がすべて同じ原因とは限りません。

Hysteria2がタイムアウトする一方、ほかの項目は使える場合、何が違う?

まずHysteria2のAddress、Port、認証情報、SNIを確認し、現在のネットワークからサーバーへのUDP通信が許可されているか調べます。信頼できる別のネットワークでも同じ設定を試して比較できます。TCPベースの接続に成功しても、同じ宛先のUDPポートに到達できるとは限りません。

Trojanで証明書エラーが出た場合、Allow Insecureを有効にすればよい?

まず項目の編集画面で、SNIが証明書のドメイン名と一致しているか確認します。次にデバイスのシステム設定で日付と時刻を確認し、利用中のサービス提供元に証明書チェーン全体を問い合わせてください。Allow Insecureはサーバーの身元確認を弱めるため、常時有効にする設定には適しません。

VLESSのUUIDが正しいのに接続できないのはなぜ?

Homeに戻って該当項目を開き、通信方式、TLS、SNI、サーバーが要求するHost、Pathなどの追加フィールドを順に確認してください。UUIDが解決するのは認証の一部だけです。通信のカプセル化方式やセキュリティ層の不一致は補えません。

WireGuardでハンドシェイクできるのに、一部のページが読み込み中のままになる場合は?

まずAllowed IPsが想定する宛先をカバーしているか確認し、次にDNSとMTUを確認します。MTUをむやみに大きくせず、サーバーの推奨値と通信経路の状態に応じて調整してください。一度に変更する項目は1つにし、結果を記録すると、ルートの不足とパケットサイズの問題を区別しやすくなります。

必ず最速のプロトコルはある?すぐに1つ選べる?

まずサーバーが対応するプロトコルを確認し、同じネットワーク、同じ宛先、近い時間帯で接続成功率、応答時間、継続的な通信状況を比較してください。プロトコル名だけでは通信経路の品質を判断できません。Shadowsocksだけを提供するサーバーに、Trojanで接続することもできません。

問題の情報を共有する前に、サブスクリプションURLのtoken、認証情報、鍵を伏せ、Type、通信方式、ポート、エラーが発生した段階、ネットワーク切り替え後の状況だけを残してください。詳しく調べる場合は、接続トラブルシューティングの章の手順に沿って記録を整理すると、すべての設定を何度も切り替えるより原因を特定しやすくなります。

App Storeの正規ページデベロッパ名とアプリIDを確認