Hysteria2とは?QUIC通信の仕組みと速度・適したネットワーク

Hysteria2がパケットロスの多い回線で性能を発揮する理由を、QUIC/UDP通信と輻輳制御から解説。適した環境やUDPが制限された場合の挙動、Shadowrocketの設定項目も紹介します。

この記事の要点

Hysteria2はQUICをベースにしたプロキシプロトコルで、速度を上げるためのスイッチではありません。利用中のサービスやサーバー、サブスクリプションがあるiPhone/iPadユーザー向けに、通信の仕組みと速度の関係、Shadowrocketの接続項目、UDP・TLS・ルーティングの順に接続トラブルの確認方法を解説します。

Hysteria2、QUIC、UDPの関係

ShadowrocketのHysteria2は、サーバーへの接続方式です。QUICはその基盤となるトランスポートプロトコルで、UDPがQUICのパケットを運びます。ここでいう「UDPを使用する」とはクライアントとサーバー間の外側の接続を指します。ブラウザーのすべてのリクエストが信頼性のない通信になるわけでも、アプリがUDPサービスにしかアクセスできなくなるわけでもありません。

QUICはUDP上で接続管理、信頼性のあるストリーム、パケットロスからの回復、輻輳制御を行い、TLS 1.3でハンドシェイクと暗号化を実施します。Hysteria2はこのトランスポート層の上で認証とプロキシ転送を行います。サーバー側がHysteria2に対応している必要があり、別のプロトコル用サーバーのType(タイプ)だけを変更して接続することはできません。

UDP
クライアントからサーバーまでの外側の通信
TLS 1.3
QUICのハンドシェイクと暗号化に使われる仕組み
443
この記事で使う説明用ポート番号。実際の設定は既存の構成に従ってください

ポート番号だけではプロトコルの対応状況は判断できません。443/TCPが使えても、同じアドレスの443/UDPが使えるとは限りません。サーバーの待ち受け設定やファイアウォール、接続中のネットワークによって、それぞれ異なる扱いになることがあります。本文中のexample.comは説明用のドメインで、クリックできず、実際に利用できるサービスを示すものではありません。

速くなることがある理由:ストリーム分離と輻輳制御

まずスループットと遅延を区別しましょう。スループットは単位時間あたりに転送されるデータ量、遅延は1回の通信で待つ時間です。ファイルの転送速度が上がっても、すべてのWebページが早く表示されるとは限りません。DNSの問い合わせ、接続先の応答、サーバー負荷、無線電波の状態もページ表示までの時間に影響します。

QUICのマルチストリーム機能は、トランスポート層でのパケットロスによって、別々のストリーム間に生じるHead-of-Line Blocking(先頭ブロッキング)を抑えます。あるストリームの欠落データを回復している間も、ほかのストリームで受信済みのデータは渡せます。ただし、同じ信頼性のあるストリーム内では引き続き順序を保つ必要があり、パケットロスによって再送帯域も消費されます。QUICでも「パケットロスを待たずに済む」わけではありません。

Hysteria2の性能は、輻輳制御にも左右されます。Brutal輻輳制御は帯域目標を基準に動作します。ランダムなパケットロスがあるものの回線に余力が残っている場合、ロスを検知すると送信速度を大きく落とす方式よりも、帯域を有効に使えることがあります。サーバー側では別の輻輳制御方式を採用する場合もあるため、「Hysteria2を使う」ことが「常に同じ送信方式になる」ことを意味するわけではありません。

適したネットワークとUDPが制限された場合の挙動

地域をまたぐ接続、往復時間が長い回線、ランダムなパケットロスが少しある回線は、Hysteria2の性能を試す価値のある環境です。ただし、UDPが安定して通り、サーバーと接続回線の両方に十分な容量があることが前提です。パケットロスと遅延が少ないネットワークでは性能差が小さいこともあり、プロトコル名だけでどの接続が速いかは判断できません。

ネットワークの状況考えられる症状確認すること
UDPは正常で、ランダムなパケットロスがある長時間の転送は比較的安定する場合があるものの、再送は発生するサーバーと接続先を固定し、スループットと通信遅延を繰り返し測定する
UDPが遮断されているハンドシェイクの待機後にタイムアウトし、サーバーに接続できないUDPの待ち受け設定とファイアウォールを確認し、別のネットワークでも再測定する
UDPが速度制限されている接続できるが、継続転送の速度が一定の水準から伸びないWi-Fiとモバイル通信を比較し、回線容量と速度制限の条件を確認する
ネットワークが混雑している、または無線電波が弱い転送中に遅延が増え、Webページの操作が重くなる並行している転送を止め、帯域目標を下げて再測定する

UDPが通らないからといって、Hysteria2が自動的にTCP接続へ切り替わることはありません。既存の設定にあるobfuscation(難読化)オプションも、ファイアウォールで完全に遮断されたUDP経路を作り出すことはできません。利用中のネットワークでUDPが制限されている場合は、パスワードを何度も変更したり証明書検証を無効にしたりせず、その環境で使える別の接続設定があるか、自分が利用しているサービス提供元に確認してください。

結論:まずUDP経路を確認する

同じ設定でモバイル通信では接続できるのに、特定のWi-Fiではタイムアウトが続く場合は、まず接続ネットワークのUDP制限を確認します。認証情報とTLSパラメーターは変更せず、一度に複数の項目を変えて比較できなくなるのを避けましょう。

Shadowrocketで設定を読み込み、項目を確認する

まずは利用中のサービス提供元から取得済みのサブスクリプションを使いましょう。サブスクリプションには通常、プロトコル、ポート、認証、TLSパラメーターが含まれているため、手入力よりも項目の入力漏れを防ぎやすくなります。更新後もサーバーの種類を確認してください。リストを更新しても、そのサーバーの接続確認が済んだことや、現在のデフォルトサーバーに選ばれたことにはなりません。

  1. サブスクリプションを読み込む

    Home(ホーム)を開き、右上の「+」→ Type(タイプ)→ Subscribe(サブスクリプション)を選択します。利用中のサブスクリプションURLを入力して保存し、Homeに戻ってリストを下に引いて更新します。サブスクリプションURLを他人に共有しないでください。

  2. タイプを確認する

    Homeで読み込んだサーバーを探し、その行の情報ボタンをタップして編集画面を開き、TypeがHysteria2になっていることを確認します。手動で追加する場合は、Home →「+」→ TypeからHysteria2を選び、サービス提供元から案内されたパラメーターを入力します。

  3. 接続情報を確認する

    Address(アドレス)、Port(ポート)、Password(パスワード)を一つずつ確認します。アドレスにはサーバーのドメイン名またはIPアドレスだけを入力します。サブスクリプションURLやWebページのパス、共有リンク全体をアドレス欄に入力しないでください。

  4. 暗号化設定を確認する

    既存の設定に従ってSNI(サーバー名表示)と証明書の要件を確認します。obfuscation(難読化)を使う場合は、方式とパスワードも確認してください。認証用パスワードを難読化用パスワードとして使ったり、設定にない値を独自に追加したりしないでください。

  5. サーバーを選んで接続する

    保存したらHomeに戻り、サーバーの左にある丸印をタップしてデフォルトに設定し、Global Routing(グローバルルーティング)を確認します。接続スイッチをオンにします。初回にシステムのVPN構成の許可を求められたら、画面の案内に従って許可し、Connectivity Test(接続テスト)を実行します。

項目・パラメーター確認内容よくある入力ミス
Address(アドレス)説明例はexample.comです。実際には自分のサーバーアドレスを使いますサブスクリプションURLやWebページのパスを含むアドレスを入力する
Port(ポート)説明例は443です。実際にはサーバーのUDP待ち受けポートに合わせます一般的なポート番号から推測し、サーバー側を確認しない
Password(パスワード)サービス提供元が案内した認証文字列を省略せず入力する区切り文字を抜かす、コピー時に空白が入る
SNI(サーバー名表示)既存の設定で指定されたTLS名を使い、証明書の適用範囲も確認するIPアドレスで接続する際、証明書のドメイン名もIPアドレスに変更する
obfuscation(難読化)パラメーターサーバー側で有効な場合のみ入力し、方式とパスワードを一致させる片側だけで難読化を有効にする、または誤ったパスワードを使う

SNIとAddressは異なる場合があります。前者はTLSでの名前の確認に使われ、後者は接続先を指定します。証明書の検証に失敗した場合は、まずシステム時刻、証明書名、サービス提供元の設定を確認してください。Allow Insecure(安全でない接続を許可)は通常の修正方法ではありません。検証を無効にするとサーバーの身元確認条件が変わるため、正しい設定の代わりにはなりません。

プロトコルの接続とGlobal Routingを切り分ける

サーバーに接続できたということは、プロキシ経路が利用できる状態にあることを示すだけです。Webサイトへの通信がその経路を通るかどうかは、Global Routing(グローバルルーティング)、現在のConfig(設定ファイル)、ポリシーの選択にも左右されます。切り分ける際はルーティングの状態を固定し、サーバーを切り替えながらルールや帯域パラメーターも変更するのは避けてください。

Config(設定)

おすすめ

現在の設定にあるルールに従って振り分けます。通常の利用では、対象に適用されるルールとポリシーを確認し、そのポリシーがテスト対象のHysteria2サーバーを指していることを確かめてください。デフォルトサーバーがポリシーグループの選択に反映されるとは限りません。

適した用途:振り分けルールが設定済みの日常的な接続

Proxy(プロキシ)

プロキシとして処理する対象の通信に適用します。デフォルトサーバーを確認したうえで、ルールの影響を切り分けるために一時的に使用できます。サーバーのプロトコルを変更する機能ではなく、UDPのハンドシェイク失敗も解決しません。

適した用途:短時間のサーバー接続確認や、振り分け要因の切り分け

Direct(直接接続)

選択したプロキシサーバーを経由せず、直接接続します。この状態でWebサイトを開けても、Hysteria2の設定が有効だとは確認できません。

適した用途:現在のネットワークから接続先へ直接アクセスできるか確認する

Global RoutingのScene(シーン)は、設定済みのシーン条件に応じてルーティング動作を選択します。テスト時は、現在のシーンでどの設定が使われているかを先に確認してください。Settings(設定)→ On Demand(オンデマンド接続)は、条件を満たしたときにシステムが接続を開始するかを制御します。プロトコルを高速化する設定ではなく、サーバー認証やルール照合の代わりにもなりません。

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

上の設定例は、ドメインがexample.comまたはそのサブドメインの場合にPROXYを使い、それ以外の通信はFINAL,DIRECTで直接接続することを示しています。ルールは上から順に照合され、該当するConfigを使用している場合にのみ有効です。ここでのPROXYはプロキシポリシーを指し、Hysteria2の別の表記ではありません。

症状ごとに切り分け、比較できる結果を記録する

テストは「ハンドシェイク成功」「接続先へのアクセス」「継続転送時の挙動」の3つに分けて行います。Homeの遅延表示だけではWebページやファイルの転送状態を判断できず、Connectivity Testが成功しても、すべての接続先がいつでも使えることを保証するものではありません。以下は結果の見方であり、特定の回線を実測した結論ではありません。

比較する場合は、端末、サーバー、接続先のリソース、ルーティング設定を固定し、同じネットワークで3回測定してから、別のネットワークでも同じ手順を繰り返します。ハンドシェイクの成否、ページの読み込み完了、継続転送の安定性、転送中に通信遅延が大きく上昇するかをそれぞれ記録してください。変化の原因を特定できるよう、一度に変更する条件は1つにします。

App Storeで正規品を確認