ShadowrocketのHysteria2とは?QUICベースの通信が速い理由と適したネットワーク環境

QUICとUDPの仕組みをもとに、高遅延・高パケットロス環境でのHysteria2の特徴と、Shadowrocketで追加する際の確認項目を解説します。

この記事の要点

Hysteria2はQUICベースのプロキシプロトコルです。利用中のサービス設定があり、UDP経路が使えるか確認したい場合に役立ちます。この記事では通信の仕組み、利用条件、設定の確認手順を解説します。読み終えると、ネットワークによる遮断、認証エラー、ルールによる振り分けの問題を切り分けられます。1回の速度測定だけでプロトコルを変更する必要はありません。

Hysteria2・QUIC・UDPの関係

Shadowrocketでは、利用者がすでに持っているHysteria2のサービス設定を使用できます。Hysteria2はプロキシプロトコル、QUICはその基盤となるトランスポート、UDPは外側のデータグラムを運びます。それぞれ役割の階層が異なります。Hysteria2を選ぶことは、汎用のUDP転送スイッチを有効にすることでも、ブラウザのすべての接続が自動的にHTTP/3へ切り替わることでもありません。

UDP自体には、データの到達や順序、再送を保証する仕組みがありません。QUICはUDP上で接続管理、信頼性のあるストリーム、パケットロスからの回復、暗号化を実現します。プロキシ経由でTCPサービスにアクセスする場合も、外側の通信にはQUICを利用できます。そのため「外側がUDPだから、Webページのデータが失われても再送されない」という理解は誤りです。Hysteria2はUDP通信も運べますが、通信の種類ごとの処理は区別が必要です。

UDP
Hysteria2の外側の通信には、対応するUDPポートへの到達性が必要
TLS 1.3
QUICの暗号化ハンドシェイクでは、証明書と名前の確認が必要
443
ここでは説明用のポートを例示しています。実際のPortには、利用中の設定に記載された値を入力してください

ポート番号だけでは、通信方式が同じとは限りません。TCP 443が許可されているネットワークでも、UDP 443が許可されているとは限りません。サーバーが別のポートを使う場合もあります。Hysteria2と旧Hysteriaの設定は自由に置き換えられるものではありません。インポート後はTypeを確認し、旧Typeのままアドレスとパスワードだけを変更しないでください。

速くなる可能性がある理由:パケットロスの回復と輻輳制御

遅延が大きいと、接続の往復やパケットロスからの回復に時間がかかります。従来のTCP接続では、連続してパケットロスが起きると輻輳ウィンドウが縮小し、スループットの回復が遅くなる場合があります。ただし、挙動は輻輳制御アルゴリズムやネットワーク環境によって異なり、「TCP」という名称だけで速度を判断することはできません。Hysteria2はQUICを基盤とし、Brutalを含む輻輳制御方式を提供します。利用可能な帯域が大きく、パケットロスがある回線でも通信効率を維持することを目的の一つとしています。

QUICの独立したストリームにより、異なるストリーム間でトランスポート層のHead-of-Line Blockingが起きにくくなります。あるストリームでパケットロスが発生しても、別のストリームがそのデータの再送を待つ必要はありません。ただし、同じ信頼性のあるストリーム内では、引き続き順序どおりの配信が必要です。また、サーバーの処理時間、DNSの検索時間、物理的な遅延がなくなるわけではありません。そのため、QUICなら常にWebページの表示が速くなるとは限りません。

ネットワーク環境見られる可能性のある現象最初に確認すること
遅延が大きく、ときどきパケットロスが発生継続的なダウンロードは安定する場合がありますが、ページの初回表示は往復時間の影響を受けます同じネットワークで繰り返し測定し、初回応答時間と継続的なスループットを分けて記録する
遅延が小さく、パケットロスが少ないプロトコル間の差が目立たず、ボトルネックがサーバーや接続先サイトにある場合があります同じ接続先、近い時間帯、同じルーティング経路で比較する
UDPが遮断、または厳しく速度制限されているタイムアウトが続く、または接続後のスループットが大きく制限される場合があります接続先のUDPポートと現在のネットワークポリシー
上り回線の混雑パケット遅延を確認する。ダウンロードやインタラクティブな通信にも影響する場合がありますほかのアップロードを一時停止して、挙動を比較する

結論:まずUDPに到達できるか確認

まずハンドシェイクが完了することを確認してから、継続的なスループットを比較してください。接続がタイムアウトし続ける場合、帯域の設定を大きくしても、ポート、アドレス、ネットワークポリシーの確認の代わりにはなりません。

帯域の設定は大きければよいわけではありません。Brutalを使う設定で、実際に利用できる帯域を大幅に上回る値を指定すると、パケットロスが増えたり、ほかの通信を圧迫したり、操作時の応答が悪化したりする場合があります。利用中のサービス設定を基準にし、安定性を確認してから調整してください。回線、負荷、測定条件に共通の基準がないため、この記事では速度向上率を固定値で示しません。

Shadowrocketへの追加前に確認する設定項目

設定には、利用者がすでに持っているサービス情報を使用してください。Hysteria2は汎用のサーバーログイン方式ではありません。アドレスをWebブラウザで開けても、そのアドレスで利用可能なHysteria2サービスが動いているとは限りません。手動で追加する前に、サービスタイプ、認証情報全体、UDPポート、TLS設定を確認してください。まずは既存の設定に記載された組み合わせをそのまま使いましょう。

項目・設定確認する内容よくある間違い
Typeサーバー側のプロトコルに合わせてHysteria2を選択Hysteriaを誤って選び、アドレスが同じなら接続できると思い込む
Address / Portサーバーのドメイン名またはIPアドレスと、実際に開放されているUDPポートアドレスのコピー時に空白が入る、またはWebサイト用のポートをプロキシ用として入力する
Passwordサービス設定に記載された認証情報全体。大文字と小文字も区別する認証情報を独自に分割したり、記号を入力し忘れたりする
SNI / TLSハンドシェイクに使う名前と証明書の要件。利用中の設定に従うIPアドレスで接続する際に、証明書に対応する名前を入力し忘れる
Obfuscationサーバー側で有効化が求められる場合は、タイプとパスワードを一致させるObfuscationのパスワードと認証パスワードを混同する
帯域パラメータ既存の設定に記載された内容と、実際の回線性能に合わせるサービスプランに記載された最大値を、現在のネットワークで使える値だとみなす

画面の表示項目は、言語設定や設定形式によって異なる場合があります。現在の編集画面を確認してください。SNIはTLSハンドシェイクで使う名前を指定し、証明書検証は接続先サーバーの身元を確認します。どちらもPasswordの代わりにはなりません。AddressにIPアドレスを指定し、証明書がドメイン名に対して発行されている場合は、設定に従って該当する名前も入力してください。名前の不一致を隠すために証明書検証を無効にしないでください。

追加と確認:接続してからルーティングを確認

ShadowrocketのHomeでは接続の確認と選択、Configではルール設定の管理、Settingsではアプリの設定を行います。初回接続時は、システムからVPN構成の許可を求められることも確認してください。以下では、すでに持っているHysteria2設定を手動で追加する手順を説明します。既存のサブスクリプションからインポートした場合も、該当項目の編集画面で同じ設定を確認してください。

  1. サービス情報を確認

    自分のAddress、Port、認証情報、TLSの設定内容を用意します。たとえば、情報にUDP 443と明記されている場合に限り、Portに443を入力してください。ほかの項目を見てポートを推測しないでください。

  2. プロトコルを選択

    Home → 右上の「+」→ Add Serverを開き、TypeでHysteria2を選択します。アドレス、ポート、Passwordを手動で入力し、元の情報と一つずつ照合してください。

  3. 暗号化の設定を確認

    項目の編集画面で、TLS、SNI、任意のObfuscation設定を確認します。サーバー側で指定された名前とパスワードを入力し、証明書検証は有効のままにして保存してください。

  4. 接続を確認

    Homeに戻り、保存した項目を選択します。Global Routingを一時的にProxyに設定し、接続スイッチをオンにしてシステムの許可を確認してください。同じWebページで接続を確かめてから、長時間のダウンロードも確認します。

  5. 通常の設定に戻す

    テスト後、Global RoutingをConfigに戻し、Configで現在の設定にあるルールとポリシーの参照先を確認してください。自動接続が干渉する場合は、Settings → On Demandで有効状態とトリガー条件を確認します。

Home →「+」→ Type → Subscribeから既存のサブスクリプションを追加する場合は、自分が利用している完全なURLを入力して保存し、サブスクリプショングループを更新してください。更新に成功しても、サブスクリプションの取得と解析が完了したことを示すだけで、すべてのサーバーに接続できるとは限りません。手動で変更した項目が次回の更新で上書きされることもあります。継続的に修正する場合は、既存のサブスクリプションの設定元を確認してください。

サブスクリプションのtoken、Password、設定全体が写ったスクリーンショットを公開ページに投稿しないでください。トラブルの記録には、エラーの種類、ネットワーク環境、発生した時間帯を残せば十分です。項目の確認が必要な場合は、先に認証情報を隠してください。接続テストでは、アドレスの名前解決、ハンドシェイクの成功、接続先Webページの利用可否をそれぞれ別の段階として確認します。

トラブル切り分けに使うConfig・Proxy・Direct

Hysteria2の項目を選択しても、実際の通信はGlobal Routingの設定に左右されます。Configは現在の設定ルールに従って処理し、Proxyはプロキシで処理できる通信を選択中のプロキシ経路に通し、Directは直接接続します。Global RoutingではSceneを使う場合もあります。設定済みのシーンに従って処理されるため、項目を選択しただけで通信がHysteria2を経由しているとは限りません。

Config

推奨

現在の設定にあるルールとポリシーに従って接続を処理します。プロキシルールが参照するポリシーで、利用可能なHysteria2の項目を選択できる必要があります。DIRECTと指定された通信は直接接続します。

適した用途:接続確認後の日常的なルーティング

Proxy

一時的にすべての通信をプロキシ経由にして、ルールによる振り分けがテストに与える影響を抑えます。選択中のサーバーまたはポリシーは引き続き確認が必要です。誤った認証情報やTLS設定が無効になるわけではありません。

適した用途:Configのルールやポリシーが原因か確認する

Direct

現在のネットワークで直接接続した場合の状態を確認できます。この状態でページが開いても、Hysteria2への接続に成功した証明にはなりません。

適した用途:直接接続の基準を確認し、接続先サイトとプロキシ経路の問題を切り分ける

以下のルールは構文の例であり、完全な設定ではありません。DOMAIN-SUFFIXはドメインの末尾に一致し、FINALはそれ以前のルールに一致しない場合の最終処理を指定します。PROXYは現在の設定内に存在し、利用できるポリシーに対応している必要があります。そのポリシーで別の項目を選んでいる場合、テスト結果をHysteria2の挙動として判断することはできません。

DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT

GEOIPとIP-CIDRはIPアドレスに関するマッチ条件、DOMAIN-SUFFIXはドメイン名に関するマッチ条件です。原因を調べる際は、設定内にキーワードがあるかだけではなく、ルールの順序、マッチ結果、ポリシーの選択も確認してください。Proxyでは使えてConfigでは失敗する場合、まずこれらを確認します。どちらでもハンドシェイクがタイムアウトする場合は、UDPの到達性とサーバー設定を調べてください。

よくある問題:タイムアウト・速度測定のばらつき・サブスクリプションの更新

同じ設定でWi-Fiなら使えるのに、モバイル通信ではタイムアウトし続けるのはなぜですか?

同じ項目と接続先のまま、2種類のネットワークでそれぞれテストしてください。まずAddress、Port、サーバー側のUDPの状態を確認し、次に現在のネットワークでUDPが制限されていないかを調べます。一方のネットワークだけで失敗する場合は、その違いを記録してください。原因を特定できなくなるため、パスワード、SNI、帯域を同時に変更しないでください。

接続中と表示されるのに、Webページが開かないのはなぜですか?

システムのVPNスイッチがオンでも、リモートプロキシとのハンドシェイクが成功したとは限りません。Homeで選択中の項目を確認し、Global Routing → Proxyに一時的に切り替えて同じページをテストしてください。接続ログでハンドシェイク、認証、DNSのエラーを確認してから、項目の編集画面で該当する設定を見直します。

速度測定では高い数値が出るのに、Webページの表示が速くならないのはなぜですか?

速度測定では継続的なスループットが重視されることが多く、Webページの表示はDNS、接続の確立、接続先サーバーの応答にも左右されます。初回表示と2回目以降の読み込みを分けて記録し、接続先とネットワークをそろえて比較してください。大きなファイルを1回ダウンロードした結果だけで、操作全体の快適さを判断しないでください。

サブスクリプションを更新したら、手動で変更した設定が元に戻ったのはなぜですか?

更新時に項目が再生成されることがあります。Homeで該当するサブスクリプショングループを開き、Type、Port、SNI、認証情報を確認して、既存のサブスクリプションの説明と照合してください。サブスクリプションの取得失敗とHysteria2のハンドシェイク失敗は別の問題です。URLへの到達性とサーバーへの接続をそれぞれ確認してください。

異なる設定を比較するときは、1回につき変更する項目を一つにしてください。使用したネットワーク、Global Routingの設定、選択した項目、接続先のアドレス、「ハンドシェイクのタイムアウト」「認証失敗」「継続ダウンロードの中断」などの具体的な状況を記録します。必要に応じてほかのアップロードやダウンロードを一時停止し、再度テストしてください。こうした記録は、単独の遅延値よりも回線の問題を判断する助けになります。

利用上の注意とApp Storeからの入手

Hysteria2を試すには、利用中のサービスが対応していて、UDPに到達できることが前提です。特に、利用可能な帯域がありながら遅延が大きく、パケットロスも発生する回線で検証する価値があります。ネットワークでUDPが継続的に遮断される場合は、帯域の値を繰り返し大きくするのではなく、利用中の設定で使える別の通信方式を選んでください。プロトコルを変えても、サーバーの負荷、出口帯域、接続先サイトの制限は解消できません。

Shadowrocketはクローズドソースの商用アプリで、Appleプラットフォームのみで提供されています。主にiPhoneとiPad向けです。Mac、Apple TV、Apple Visionとの互換性およびシステム要件は、App Storeの掲載内容をご確認ください。入手先はApp Storeのみです。開発元がShadow Launch Technology LimitedであることとアプリID 932747118を確認し、買い切りで購入してください。アプリの購入に回線プランは含まれません。この記事では、ノードやサブスクリプションの提供、販売、推奨は行っていません。

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