この記事の概要

Hysteria2は、UDPで通信でき、ランダムなパケットロスや遅延の変動があるネットワークで比較テストする価値がありますが、常に速くなるとは限りません。本記事は、サーバー設定やサブスクリプションをすでにお持ちのShadowrocketユーザー向けに、通信の仕組み、Homeでの入力手順、Global Routingでの確認方法、トラブルの切り分け方を解説します。iPhone、iPad、Mac、Windows、Android、Linuxで共通する仕組みを扱います。操作時はクライアントに表示される項目を確認してください。

Hysteria2とQUIC:通信レイヤーとプロキシプロトコルの違い

Hysteria2はQUICをベースとするプロキシプロトコルです。QUICは通常UDP上で動作し、TLS 1.3で暗号化接続を確立します。UDPはデータグラムを送る仕組みで、到達や順序を保証しません。その上でQUICが接続管理、信頼性のあるストリーム、損失検出、輻輳制御を実装します。したがって「UDPを使う」ことは、「すべてのデータが再送されない」ことでも「帯域制限を回避できる」ことでもありません。

プロキシ経由のTCP接続では、Hysteria2はQUICの信頼性のあるストリームでデータを運びます。UDP転送ではデータグラム方式を使うため、信頼性のあるストリームの再送特性をすべてのUDPデータに当てはめることはできません。アプリがパケットロスを許容できるかは、そのアプリ自身のプロトコルによります。同じサーバーを使っていても、Web通信とリアルタイム音声では異なる不具合が起こる場合があります。

TLS 1.3
QUICで使われるセキュリティプロトコル。証明書の検証も正しく行う必要がある
UDP
下位の通信。クライアントとサーバー間で通過が許可されている必要がある
443
設定例によく使われるポートであり、Hysteria2の固定ポートではない

サーバーがUDP 443を使う設定の場合、ネットワークでTCP 443だけが許可されていても接続できません。ポート番号が同じでも、通信プロトコルは異なります。入力時はユーザーがすでにお持ちの設定に記載されたポートを使ってください。「443がよく使われる」からといって元の値を変更したり、別プロトコルのアドレス、パスワード、ポートをそのまま組み合わせたりしないでください。

速くなることがある理由:独立したストリーム、輻輳制御、パケットロスからの復旧

QUICの特徴のひとつは、ストリームが互いに独立していることです。あるストリームでデータが失われても、そのデータが補われるまで待つために、他のストリームへのデータ配信まで止まるとは限りません。これによりストリーム間のヘッドオブラインブロッキングは軽減されますが、同じ信頼性のあるストリーム内で順序待ちがなくなるわけではありません。複数のストリームは回線容量を共有し、通常は接続単位の輻輳制御も共有します。したがって「パケットロスが速度に影響しない」とは言えません。

仕組み期待できる効果残る制約
QUICの独立ストリーム異なるストリーム間で、順序どおりに届けるための待ち時間を減らす同じストリーム内でデータが失われると、復旧を待つ場合がある
損失の検出と復旧確認応答をもとに、信頼性のあるストリームで欠落したデータを復旧する復旧には時間と追加の通信が必要で、物理的なパケットロス自体はなくならない
輻輳制御送信のペースを調整し、ランダムなパケットロスがある環境でのスループットに影響する設定が過度に強いと、キューの増加やパケットロス、他のアプリの遅延につながることがある
TLSハンドシェイクの統合通信レイヤーと暗号化レイヤーで別々に交渉する際のオーバーヘッドを減らす初回接続ではハンドシェイクが必要で、待ち時間がゼロになるわけではない

Hysteria2のスループットは、輻輳制御の方式にも左右されます。Brutalは目標帯域とフィードバックをもとに送信動作を調整し、ランダムなパケットロスがある回線では、保守的に速度を落とす方式よりスループットを維持しやすい場合があります。この方式を使うかどうか、帯域の設定値がどのように交渉に使われるかは、クライアントの実装、サーバー側の方針、実際の設定によって異なります。効果のすべてをQUICによるものと見なしたり、目標帯域を実際に利用できる帯域と同一視したりしないでください。

画面にUploadやDownloadなどの帯域項目がある場合は、まず既存の設定、またはサービス提供元が明示した値を使い、単位を確認してください。MbpsとMB/sは異なり、数値では8 Mbpsが約1 MB/sに相当します。実際の転送量はプロトコルのオーバーヘッド分だけ少なくなります。接続回線の能力を大幅に超える値を設定すると、ルーターのキューが長くなり、ダウンロード中に通話の遅延が大きくなることがあります。

結論:設定値は維持し、変更はひとつずつテストする

初回の確認では、帯域、DNS、ルールを同時に変更しないでください。まず既存の設定で接続できることを確認し、その後、項目をひとつずつ変更して、スループットと応答遅延の両方に改善があるか記録します。

適したネットワーク:ランダムなパケットロスでは効果が期待できるが、UDPに制限がある場合は到達性を確認

モバイル回線の無線干渉、地域間回線の揺らぎ、アクセスポイントの負荷変動は、通信に影響することがあります。Hysteria2はこうした環境の一部でテストする価値がありますが、「モバイル回線なら速い」という保証はありません。サーバーの出口、接続先のWebサイト、無線電波の状態、ローカル回線の上り通信も、プロトコルの選択とは関係なくボトルネックになります。

Shadowrocketの設定手順:手元にあるHysteria2の設定を使う

以下ではHomeから手動で追加する手順を説明します。サーバーアドレス、ポート、認証パスワード、TLS用のSNI、サーバーから指定されたその他の設定を用意してください。AddressとSNIは異なる場合があります。Addressは接続先を指定し、SNIはTLSハンドシェイクでサーバー名を通知します。証明書の名前も設定に合致している必要があります。

  1. 設定元を確認

    手元にあるサーバー設定の説明を開き、プロトコルがHysteria2であることを確認します。HysteriaとHysteria2は互換性のあるTypeとしてそのまま置き換えられるものではありません。また、別のプロトコルの認証項目を混用しないでください。

  2. Typeを選択

    Home → 右上の「+」→ TypeでHysteria2を選び、追加画面に戻ります。実際の画面にこの項目がない場合は、まず本サイトのダウンロードページで、使用中のプラットフォーム向けの入手先を確認してください。似た名前の項目で代用しないでください。

  3. 接続情報を入力

    手元にある設定に従ってAddress、Port、Passwordを入力します。Addressには項目で指定されたサーバーアドレスだけを入力し、Portには指定された数値を使ってください。共有用の文字列全体をアドレス欄に貼り付けたり、余分な空白を加えたりしないでください。

  4. セキュリティを確認

    設定に従ってSNIを入力し、証明書の検証は有効のままにします。手元の設定に混淆や帯域の指定が含まれている場合は、クライアント上の対応項目を確認してから入力してください。指定のない任意項目に推測で値を設定しないでください。

  5. 保存してテスト

    保存後、Homeに戻って追加したサーバーを選び、Global Routingの現在のモードを確認します。接続を有効にし、システムの案内に従って許可してください。まず利用可能と分かっている接続先にアクセスし、その後、継続的なデータ転送をテストします。

すでにサブスクリプションをお持ちの場合は、Home →「+」→ Type → Subscribeから自分のサブスクリプションURLを追加できます。保存後に内容を更新し、読み込まれた項目のプロトコルタイプを確認してください。更新によって、管理対象の項目のポート、認証情報、その他の設定が書き換わる場合があります。変更を長期的に維持する必要がある場合は、その項目がサブスクリプション管理下にあるか先に確認し、一時的なローカル変更が永続すると誤認しないようにしてください。

証明書エラーが表示された場合は、SNI、サーバー証明書の有効期間、証明書チェーン、端末の時刻を確認してください。検証を無効にすると相手の正当性を確認する保護が変わるため、通常の修復手順ではありません。認証エラーの場合は、Passwordが正しくコピーされているか、サーバーがその認証情報を引き続き受け付けているかを優先して確認してください。認証の問題をQUICのパケットロスのせいにしないでください。

Global Routingでの確認:プロトコルの問題とルールの不一致を切り分ける

サーバー設定が正しくても、すべてのリクエストがそのサーバーを使うとは限りません。ShadowrocketのGlobal Routingでルーティング方式を選びます。Configでは現在の設定にあるルールが適用され、Proxyは一時的に切り分ける際に使えます。モードが影響するのはクライアントが処理する通信です。端末上のすべてのシステム通信が同じ経路を通る証拠にはなりません。

Config

おすすめ

現在選択中のConfigを使い、ルールとその順序に従ってDIRECT、PROXYなど定義済みのポリシーを適用します。リクエストの経路を決めるのはルールで、プロキシ接続の通信方式を決めるのがHysteria2です。

適した用途:明確なルールに基づく日常的な振り分けや継続利用

Proxy

クライアントが処理するリクエストをプロキシモードで送信します。通常のルール判定による影響を一時的に除外できます。テスト後は元のモードに戻してください。一時テストの結果を、元の設定が正しい証拠と見なさないでください。

適した用途:選択したサーバーが対象のリクエストを処理できるか確認する

Direct

クライアントが処理するリクエストを直接接続で送信します。この状態ではHysteria2サーバーのスループットをテストできません。同じ接続先に対する、現在のネットワークでの直接接続の比較基準として使えます。

適した用途:接続先とローカル回線が利用可能か確認する

Global RoutingのSceneは、シーンに応じたルーティング設定に使うもので、Config、Proxy、Directのいずれかと同じ固定結果を意味するものではありません。切り分ける際は、実際に適用されている設定を先に確認してください。また、Settings → On Demandの状態も記録し、テスト中にオンデマンド接続が再実行されて「切断したのに再接続した」と誤認しないようにします。

Configでは通常、ルールを上から順に確認し、最初に一致したルールのポリシーが適用されます。以下はDOMAIN-SUFFIXとFINALの構文例であり、そのまま読み込める完全な設定ではありません。example.comは説明用ドメインで、本記事が提供するサーバーではありません。実際の設定では、指定するポリシー名が存在している必要があります。

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT

対象ドメインが最初のルールに一致しなければ、FINAL,DIRECTが適用されます。その場合、アクセスの成否だけでHysteria2の状態を判断することはできません。ほかの設定では、IPアドレスの判定にGEOIPやIP-CIDRを使う場合もあります。ドメイン名の解決が関わるときは、DNSの結果もその後の判定に影響することがあります。設定値は設定リファレンス、ルーティング方式はプロキシモードの説明をご覧ください。

トラブルの切り分けと比較記録:一度に変更する条件はひとつだけ

テスト前に、ネットワークの種類、選択中のサーバー、Global Routing、接続先サイト、テスト時間を記録します。接続先とサーバーを固定し、Wi-Fiとモバイル回線でそれぞれ確認してください。異なるプロトコルを比較する場合は、すでに利用している設定のうち、サーバー条件を比較できるものだけを使います。サーバーが異なる場合の速度差を、プロトコルの違いだけに帰属させることはできません。

確認された現象まず確認する項目次の操作
接続中にタイムアウトが続くサーバーアドレス、UDPポート、ネットワークでの通信許可Portを確認し、別の接続ネットワークでもテストする
証明書エラーが明示されるSNI、証明書名、有効期間、端末の時刻該当項目を修正するか、利用中のサービス提供元にサーバー証明書を確認する
認証に失敗するPassword、項目の有効期限、サブスクリプションの更新状況手元の設定をもう一度確認し、認証の切り分けをDNSの変更で代用しない
Proxyでは使えるが、Configでは使えない現在のConfig、ルールの順序、ポリシーの対象、DNSサーバーをすぐに作り直すのではなく、対象のリクエストに適用されたポリシーを確認する
ダウンロード中に他の通信が明らかに遅くなる上り回線の使用状況、キューの滞留、帯域の設定値が高すぎないか並行するデータ転送を一時停止し、帯域の設定値をひとつずつ控えめに調整する
サブスクリプション更新後に設定値が変わった管理対象の項目と上流の設定更新内容を確認し、上書きされる項目を繰り返し編集しない

Shadowrocketのダウンロードと初期設定

iPhone / iPad版はApp Storeから入手でき、価格は2.99ドルの買い切りです。Mac(Appleシリコン / Intel)、Windows、Android、Linux版は無料です。iPhone / iPadのシステム要件はApp Storeの製品ページをご確認ください。製品ページに記載されている開発者はShadow Launch Technology Limitedです。ダウンロードページで該当するプラットフォームを選び、チュートリアルに沿って手元にある設定を読み込んでください。