Shadowrocket Hysteria2とは?QUICの通信特性と利用条件

Hysteria2のQUIC/UDP通信、輻輳制御、通信が不安定な環境での挙動を解説。Shadowrocketで設定するpassword、sni、obfsの役割も紹介します。

この記事の概要

この記事では、利用可能なサービスと設定情報をすでにお持ちで、ShadowrocketでHysteria2を使う方を対象に、QUIC・UDP・アプリの通信を整理します。認証、証明書、obfsの設定を確認したうえで、条件をそろえて接続をテストします。ネットワークへの到達性、TLS、認証、ルールによる振り分けのどこで問題が起きているかを切り分ける方法を解説します。1回の遅延テストだけでプロトコルを変更する必要はありません。

Hysteria2とQUIC・UDPの関係

Hysteria2はQUICをベースにしたプロキシプロトコルです。QUICはUDPをデータ転送に使い、その上で暗号化、信頼性のある転送、輻輳制御、多重化などの機能を提供します。「UDPベース」とはクライアントとサーバー間の外側の通信方式を指し、Webリクエストがすべて信頼性のないデータになるという意味でも、UDPを使うサービスにしかアクセスできないという意味でもありません。

ShadowrocketでHysteria2を選ぶと、その接続に振り分けられたTCP通信はQUIC stream経由で転送され、UDP通信には対応するデータグラム転送方式が使われます。Webは従来どおりアプリのプロトコルで通信するため、ブラウザーをHTTP/3に変更する必要はありません。サーバーがHysteria2に対応している必要があります。接続先とパスワードが同じだからといって、別のプロトコルの設定をHysteria2として使うことはできません。

UDP
クライアントとサーバー間の下位層の通信方式
TLS 1.3
QUICのハンドシェイクと暗号化の基盤
443/UDP
一般的な構成例。実際のポートは既存の設定に従ってください

ポート番号が同じでも通信方式が同じとは限りません。たとえばサーバーが443/UDPで待ち受けていても、ネットワーク側で443/TCPしか許可されていなければ接続できません。443はHysteria2の必須ポートではありません。8443など別のポートを使う場合は、クライアント、サーバーの待ち受け設定、ファイアウォールの許可ポートを一致させてください。

通信が不安定な環境での挙動と輻輳制御の限界

QUICの多重化により、信頼性のある転送で発生する、順序待ちによるstream間のヘッドオブラインブロッキングを軽減できます。あるstreamのデータを再送している間も、別のstreamですでに受信したデータは、同じTCPバイトストリームの欠落部分が埋まるまで待つ必要がありません。ただし、各streamは経路の帯域幅と輻輳制御を共有します。継続的なパケットロス、無線信号の弱さ、上り回線の混雑は、すべての通信に影響します。

Hysteria2の輻輳制御には、帯域幅の推定に基づくBrutalと、ネゴシエーションで選択されるBBRがあります。実際にどの方式が使われるかは、クライアントの実装、設定、サーバーとのネゴシエーションによって異なります。Brutalでは適切な帯域幅の設定と、パケットロスのフィードバックに基づく送信制御が必要です。帯域幅を新たに生み出すことも、ネットワークによるUDPの制限を回避することもできません。

結論:まずUDPで接続できるか確認

ハンドシェイクが繰り返しタイムアウトする場合は、既存設定の接続先、UDPポート、現在のネットワークによる制限を確認してください。接続が確立し、通信が継続できる状態になってから、帯域幅の値を調整する意味があります。

password、sni、obfsの役割

これらのパラメーターはそれぞれ異なる層で使われ、相互に置き換えることはできません。設定する前に、ご自身の設定情報の提供元へ必要な値をすべて確認してください。項目が不足していても、別のパスワードで補わないでください。表内の英語は設定フィールド名です。Shadowrocketの画面では対応するラベルで表示される場合があります。項目の有無は、選択したTypeと実際の画面に従います。

項目役割確認ポイント
server接続先サーバーのドメイン名またはIPアドレス。共有リンク全体やパスを含むWebページのURLを、アドレス欄に入力しないでください。
portサーバーがUDPで待ち受けるポート。例:443。既存の設定と一致させてください。WebページがHTTPSだからといって、独自に443へ変更しないでください。
passwordHysteria2サーバーの認証情報。大文字・小文字と記号をそのまま保持し、コピー時に前後の空白が入っていないか確認してください。
sniTLSハンドシェイクで使うサーバー名。証明書の名前との照合に関係します。通常はドメイン名を指定します。プロトコル、ポート、パスは含めず、既存の設定どおりに入力してください。
obfs任意で設定する通信のobfs方式。例:Salamander。サーバー側で有効になっている場合は、両側の設定を一致させてください。サーバー側で無効なら、クライアント側だけで有効にしないでください。
obfs-passwordobfsで使うキー。認証用のpasswordとは別の設定です。obfsのキーが正しくないと、ハンドシェイクの段階で失敗することがあります。
up / down一部の設定形式で指定する、上り・下りの帯域幅の目安。まず単位と方向を確認してください。速度測定のMB/sを、そのままMbpsとして扱わないでください。

接続先アドレスとsniは異なる場合があります。たとえばIPアドレスで接続し、証明書に登録されたドメイン名をTLSの名前照合に使う構成です。よく知られたWebサイトのドメインを任意に入力してよいという意味ではありません。証明書チェーン、証明書の名前、サーバー設定が一致している必要があります。証明書エラーが発生した場合は、証明書検証を無効にするのではなく、sni、端末の日時、サーバー証明書の状態を確認してください。

Shadowrocketで接続を追加して確認する

以下はiPhoneまたはiPadのHomeから操作する手順です。利用可能なHysteria2設定をすでにお持ちであることを前提としています。Subscribeの項目がある場合は、先に更新して読み込み結果を確認してください。手動追加は個別の接続を確認するときに使います。Subscribeで管理している項目と何度も上書きし合わないようにしてください。

  1. 設定値を確認

    サーバーアドレス、UDPポート、password、sni、サーバーで必要なobfs情報を用意します。設定がHysteria2用であることを確認してください。名前が似ていても、互換性のない別のプロトコルの場合があります。

  2. Typeを選択

    Home → 右上の「+」 → Typeの順に開き、Hysteria2を選びます。共有情報から設定を読み込んだ場合も、項目を開いてTypeを確認してください。表示名だけで判断しないでください。

  3. 設定値を入力

    元の設定に従ってアドレス、ポート、認証情報を入力し、TLSとobfsの各項目でsni、証明書検証、obfsを確認します。初回テストでは帯域幅の値を元のままにし、複数の設定を同時に変更しないでください。

  4. 保存して選択

    保存後、Homeに戻って追加した項目を選択します。Configでポリシーグループを使っている場合は、実際にその項目が選ばれているか確認してください。別の接続をテストしてしまうのを防げます。

  5. 接続を許可してテスト

    Homeの接続スイッチをオンにし、システムの案内に従ってVPN構成を許可します。まず、利用できることが分かっているHTTPSページを開き、実際の通信で使われたポリシーと接続ログを確認してください。

Settings → On Demandでは、条件に応じて接続を開始する動作を管理します。Hysteria2の設定値を修正する機能ではありません。切り分け中は有効かどうかを記録し、自動接続を「オフにした直後にまた接続した」と誤認しないようにしてください。Homeに接続中と表示されていても、それはローカルのVPNセッションが確立したことを示すだけです。サーバー認証、Webサイトへのアクセス、すべてのルール経路が正常であるとは限りません。

Global Routingでプロトコルの問題とルールの問題を切り分ける

接続をオンにしても特定のWebサイトにアクセスできない場合は、「接続自体の失敗」と「リクエストがその接続に振り分けられていない状態」を切り分けます。Global RoutingのConfig、Proxy、Directはルーティングの選択肢であり、Hysteria2の設定値が3種類あるという意味ではありません。Sceneは設定されたシーンのロジックに従って動作します。トラブルシューティングの前に現在のシーンで何が選択されているか確認し、シーンの切り替えをプロトコルの変動と誤認しないようにしてください。

Config

おすすめ

日常利用では、内容を確認済みのConfigを使い、ルールに応じてDIRECTまたはプロキシのポリシーを選択します。適用されたDOMAIN-SUFFIX、IP-CIDR、GEOIP、FINALを確認し、最終的に想定したHysteria2接続が選ばれていることを確認してください。

適した用途:明確な振り分け要件があり、ルールとポリシーグループを確認済みの日常利用

Proxy

クライアントが処理する通信を一時的に選択中のプロキシ経路へ送る設定です。Configの振り分けによる影響を減らすのに使えます。ただし、システムが処理する通信の範囲とプロトコルの対応状況に左右されます。端末のすべての通信が必ず同じ経路を通るという意味ではありません。

適した用途:短時間で接続の可否を確認し、ルールの適用問題を切り分ける

Direct

直結経路を基準として比較します。この設定ではテスト通信がプロキシ接続を通らないため、Hysteria2が正常に動作していることの確認には使えません。

適した用途:ローカルネットワークと接続先Webサイトの直結時の状態を確認する

結論:Proxyで確認してからルールを調べる

同じ接続先がProxyでは開けてConfigでは開けない場合、接続設定はそのままにして、適用ルール、ポリシーグループ、DNSの結果を優先して確認してください。sni、obfs、ポートを同時に変更しないでください。

1回の遅延だけで判断せず、失敗した段階ごとに切り分ける

遅延テストの結果は測定方法と接続先によって異なり、すべての通信の状態を表すものではありません。測定値が低くても、大容量通信ではUDPの速度制限を受けることがあります。測定がタイムアウトした項目も、実際のWebリクエストや接続ログとあわせて判断してください。以下は観察できる現象をまとめたもので、特定の回線での実測結果を保証するものではありません。

現象最初に確認する項目次の手順
ハンドシェイクが繰り返しタイムアウトするドメイン名の解決、UDPポート、現在のネットワーク制限、obfsの一致を確認します。設定を変えず、利用可能な別のネットワークで同じリクエストを繰り返し、接続先のネットワークに関係するか確認します。
証明書に関するエラーが表示されるsni、証明書の有効期間、端末の日時、信頼チェーンを確認します。設定情報の提供元に証明書に対応するドメイン名を確認し、証明書検証は有効のままにしてください。
認証に失敗するpasswordが完全か、認証情報がまだ有効かを確認します。元の認証情報をコピーし直してください。obfs-passwordで代用しないでください。
小さなページは開くが、大容量通信が止まるUDPの速度制限、経路のMTU、パケットロス、サーバー負荷、帯域幅の設定値を確認します。まず帯域幅を元の値に戻し、並行中の転送を一時停止してから、同じ接続先で再テストします。
一部のWebサイトだけ開けないルールの適用状況、ポリシーグループの選択、DNSの結果、接続先サイトの状態を確認します。一時的にProxyで比較し、ルールの振り分けと接続自体のどちらに問題があるか確認します。

QUICの経路では、少なくとも1200バイトのUDPペイロードに対応する必要があります。トンネルの多重化や異常な経路では、パケットサイズに関係する問題が発生することがあります。ただし、「ページが開かない」という現象だけではMTUの問題と判断できません。経路に関する明確な根拠がない場合、システムのネットワーク設定をむやみに変更しないでください。Hysteria2をWireGuardのMTU設定と同じように扱う必要もありません。

再確認できるテスト記録を残す

Hysteria2を利用するには、サーバーが明確に対応していること、UDPで通信できること、認証とTLSの設定がそろっていることが必要です。通信が不安定な環境で適しているかは、繰り返し確認できるアクセス結果に基づいて判断してください。現在の経路でUDPが制限されている場合、帯域幅の値を上げても有効な改善にはなりません。まずネットワークへの到達性を確認し、利用者がすでにお持ちの、その環境に適した設定を使ってください。

App Storeでダウンロード先に正規アプリの情報を確認