Shadowrocket Hysteria2とは?QUICの仕組みと利用できるネットワーク環境

Hysteria2のQUIC/UDP通信と輻輳制御を解説。UDPが制限される環境や、期待した速度が出ないときの確認ポイントも紹介します。

この記事の概要

Hysteria2はQUICをベースにしたプロキシプロトコルで、速度を一律に向上させる機能ではありません。サービス提供元からサブスクリプションやノード情報を入手済みのShadowrocketユーザー向けに、UDP・QUIC・輻輳制御の違い、設定項目の確認方法、同じ接続先とネットワークで繰り返し比較する手順を解説します。設定ミスやUDPの制限を、クライアントの不具合と取り違えないようにしましょう。

Hysteria2・QUIC・UDPの役割

ShadowrocketのHysteria2は、接続プロトコルの選択肢のひとつです。クライアントとサーバー間でUDPベースのQUIC接続を使い、プロキシ通信を行います。接続経路を提供するものではなく、プロトコルを切り替えてもサーバーの設置場所や回線の帯域、接続先サイトの処理能力は変わりません。サブスクリプションやノード情報は、ご利用のサービス提供元から入手してください。

UDPはデータグラムを転送する仕組みで、データの到着順や、失われたデータの再送を保証しません。QUICはUDP上で暗号化接続、信頼性のあるストリーム、損失からの回復、輻輳制御などを実現します。そのため、「下位層がUDPだから、Webページのデータも再送されない」ということではありません。アプリケーションが必要とする信頼性のあるバイトストリームは、対応する転送機構によって確保されます。

アプリのリクエスト ルールによる振り分け QUICでカプセル化 UDPで転送 サーバーから転送

この流れから、原因を切り分けられる範囲も分かります。プロキシポリシーに一致し、そのポリシーでHysteria2ノードが選択された通信だけが、この経路を通ります。Global RoutingがDirectのままでは、Web閲覧の結果からノードの通信性能を判断できません。Configモードでは、接続先に実際に適用されたルールも確認してください。

不安定なネットワークで安定する場合はあるが、すべての通信が速くなるわけではない

QUICでは、複数のストリームがそれぞれ独立してデータを受け取れます。あるストリームで失われたデータの再送を待っている間も、ほかのストリームが同じ順序付きバイトストリームの回復を待つ必要はありません。これにより、ストリーム間のヘッドオブラインブロッキングを軽減できます。ただし、各ストリーム内には順序制約があり、複数のストリームでネットワーク容量や輻輳状態を共有します。「複数ストリーム」は実際の帯域が増えるという意味ではありません。

Hysteria2のスループットは輻輳制御にも左右されます。プロトコル仕様では、帯域幅パラメーターに基づくBrutal輻輳制御と、適応型の制御方式がサポートされています。実際の動作は、クライアントの実装、サーバー設定、ネゴシエーションの結果によって異なります。帯域幅の値が高すぎると、継続的なパケットロスやキューの増加につながり、低すぎるとスループットが制限される可能性があります。利用中の回線能力と無関係な数値を、そのまま設定しないでください。

ネットワーク条件起こり得る結果最初に確認すること
ランダムなパケットロスがあるが、UDPは到達可能保守的に速度を調整する方式よりスループットが安定する場合がありますが、改善が保証されるわけではありません。同じ条件で繰り返し測定し、完了時間、停止回数、継続的なスループットを確認します。
ローカル回線が飽和している送信速度を上げるとキューイング遅延が増え、応答性がかえって低下する場合があります。測定中にアップロード、クラウドバックアップなど、大容量通信が同時に行われていないか確認します。
サーバー側の出口帯域が制限されているQUICに切り替えても、サーバー側や接続先の容量上限を超えることはできません。同じ時間帯・同じ接続先で、継続して同じ上限に達するか確認します。
UDPが破棄または速度制限されているハンドシェイクがタイムアウトする、または接続後もスループットが低いままになる場合があります。同じ設定が、UDPを利用できる別のネットワークでは動作するか確認します。

結論:まずUDPの到達性を確認し、その後にスループットを比較する

同じ設定が特定のネットワークだけでタイムアウトする場合は、まずネットワークを切り替えて比較してください。すぐに帯域幅の値を上げたり、一度の遅延測定だけでプロトコルが速いと判断したりしないでください。

インポート前にアドレス、ポート、認証情報、TLSを確認する

サブスクリプションを利用している場合は、認証情報の入力漏れを防ぐため、まずサービス提供元から受け取った一式の設定をインポートしてください。インポート後、Homeで該当ノードを確認して編集画面を開き、プロトコルの種類、サーバーアドレス、ポート、認証情報をひとつずつ確認します。名前が似ているからといってHysteriaとHysteria2を同じ設定とみなさず、サーバーの要件に合った種類を選んでください。

接続情報と認証の確認

プロトコルの種類
サーバー側のプロトコルと一致するHysteria2を選択します。
サーバーアドレス
指定されたドメイン名またはIPアドレスを変更せずに入力します。
サーバーポート
指定された値を使用します。443の場合もUDP 443が許可されている必要があります。
認証情報
大文字・小文字と記号を維持し、コピー時に空白が含まれていないことを確認します。

443はポート番号の例であり、すべてのHysteria2ノードで使う固定ポートではありません。

TLSと追加パラメーターの確認

TLS
証明書の検証要件を確認してください。検証を無効にすることを通常の解決策にしないでください。
SNI
専用の名前が指定されている場合は、その指示に従って入力し、安易にIPアドレスへ変更しないでください。
難読化パラメーター
サーバー側で必要とされている場合のみ入力し、種類とパスワードを一致させます。
帯域幅パラメーター
まずはインポートした値を維持します。変更前に単位と項目の意味を確認してください。

ノード編集画面の項目配置は異なる場合があります。画面上の位置ではなく、各項目の意味をもとに確認してください。

TCP 443にアクセスできても、UDP 443が通るとは限りません。番号が同じでも、転送プロトコルとファイアウォールの判定条件は異なります。会社、学校、ホテルなどのネットワークでは、一部のUDP通信だけが許可されていることがあります。DNSクエリが許可されていても、任意のUDPポートに到達できる証明にはなりません。

サブスクリプションの更新とノードへの接続は別の通信経路です。更新が成功したことから分かるのは、サブスクリプション情報を取得できたということだけで、記載されたHysteria2サーバーに接続できるとは限りません。更新に失敗した場合は、まず現在のネットワークからサブスクリプションのURLにアクセスできるか、サービス提供元のリンクが有効かを確認してください。認証情報を含むサブスクリプションのURL全体を公開しないでください。

条件をそろえてテストし、ハンドシェイク・ルーティング・スループットの問題を切り分ける

テストでは、一度に変更する条件をひとつにしてください。ネットワーク、ノード、接続先のコンテンツ、測定時間を同時に変えると、結果の原因を特定できません。以下は測定結果ではなく、記録方法の例です。実際の数値は、お使いのデバイスと現在の回線で測定してください。

  1. ネットワークを固定する:まず同じWi-Fiを使い、大容量ファイルのアップロードやバックアップを一時停止します。ほかのデバイスが帯域を使っていないかも記録してください。その後、モバイル通信だけで個別に測定し、2つの結果を混ぜないようにします。
  2. ルーティングを確認する:HomeでGlobal Routingを一時的にProxyに設定し、測定するノードを選択します。この設定は測定中の通信処理に影響します。終了後は、普段使っているConfigに戻してください。
  3. 実際にアクセスできるか確認する:同じHTTPSページにアクセスし、読み込みが完了するか記録します。ノードが利用可能と表示されていることや、1回の遅延測定に数値が出ることだけでは、プロキシ経路で通信を継続できるとは限りません。
  4. 通信を繰り返し測定する:信頼できる同じ大容量ファイルを3回続けて転送し、各回で少なくとも30秒間観察します。平均速度、目立った停止、失敗回数を記録し、一時的なピーク値だけを記録しないようにします。
  5. ネットワークを変えて再確認する:ノードと設定を変えずに別のネットワークへ切り替え、同じテストを繰り返します。特定のネットワークだけで失敗する場合は、まずそのネットワークでUDPがどう扱われているか確認します。

単位に注意してください。Mbpsは毎秒メガビット、MB/sは毎秒メガバイトです。10進法で換算すると80 Mbpsは約10 MB/sですが、実際のアプリケーションのスループットはプロトコルのオーバーヘッドにも左右されます。これは単位換算の例であり、速度を保証するものではありません。測定結果と設定の帯域幅を比較する前に、必ず単位をそろえてください。

ConfigとOn Demandは、プロトコルの下位層を変えるものではない

Global Routingは通信の処理方法を決め、ノードのプロトコルはプロキシが選択された後のサーバーへの接続方法を決めます。普段Configを使う場合、ルールによってリクエストごとに指定されたポリシーへ振り分けられます。Proxyはテスト範囲を絞るために使い、Directは直接接続に使います。Sceneは状況に応じた処理方法の選択肢であり、Hysteria2の別の輻輳制御方式ではありません。

On Demandは条件に応じて自動接続する機能です。ネットワークでUDPが制限されている場合にそれを許可するものでも、ノードの認証に代わるものでもありません。原因の切り分け中は現在の条件を記録し、必要であれば自動接続を一時的に無効にして手動で接続します。確認が終わったら設定を戻してください。普段の接続動作を忘れず復元できるよう、変更前の設定を記録しておきましょう。

Hysteria2でよくある接続トラブル

Wi-Fiではずっとタイムアウトするのに、モバイル通信なら使えます。どこを変更すればよいですか?

アドレス、ポート、認証情報、TLSの設定は変えずに、それぞれのネットワークで接続を繰り返してください。差が安定して再現する場合は、Wi-Fiでネットワークへのログインが必要か、宛先のUDPポートが制限されているかを確認します。管理されたネットワークでは管理者にルールを問い合わせ、むやみにポートを変更しないでください。サーバーが待ち受けていない新しいポートに変えても、接続できるようにはなりません。

遅延の数値は表示されるのに、Webページが開かないのはなぜですか?

Homeに戻り、ノードとGlobal Routingを確認してください。Proxyにして制御されたアクセス試験を行い、その後Configに戻します。Proxyでは使えてConfigでは使えない場合は、接続先に適用されたルールとポリシーを確認します。どちらも失敗する場合は、認証情報、TLS、サーバーの状態を確認してください。遅延の数値だけでは、接続先へのリクエストが正常に転送されたとは判断できません。

帯域幅の値を大きくするほど速くなりますか?

いいえ。まずはインポートした値を維持し、ほかの大容量通信を止めて3回測定します。項目の単位、サーバー側の要件、ローカルで利用できる容量が明確な場合に限り、ひとつずつ調整してください。変更後に停止やパケットロス、応答遅延の増加が起きたら元の値に戻し、それ以上は増やさないでください。

サブスクリプションを更新しても接続できません。アプリを買い直す必要はありますか?

まずHomeで、更新後のノードが実際に選択されているか確認します。次にプロトコルやポートが変わっていないか確認し、サービス提供元に設定情報が有効か問い合わせてください。アプリの購入と回線サービスは別のものです。クライアントを買い直しても、サーバーの障害や現在のネットワークによるUDP制限は解消されません。

最終的には、繰り返し確認できる現象をもとに判断してください。同じ条件で停止が減るか、リクエストが完了するか、許容できる応答性を保てるかを確認します。Hysteria2はUDPが到達可能な環境で比較対象にできますが、プロトコル名だけを理由にすべての接続を切り替えるべきではありません。検証済みの設定を保存しておけば、ネットワーク条件が変わったときに元に戻し、問題を切り分けやすくなります。

Shadowrocket 正規版ガイドまずApp Storeの掲載情報を確認 →