Hysteria 2(Hysteria2)は、HTTP/3 の土台である UDP ベースのトランスポート QUIC の上で動作するプロキシプロトコルです。パケットロスの多いネットワークでも速度を出せるよう設計されており、パケットが失われるたびに減速する代わりに、設定した帯域幅で送り続けられます。パスワードを知らない相手からは、Hysteria 2 サーバは普通の HTTP/3 ウェブサイトに見えるようにできます。
このガイドでは、Hysteria 2 の仕組み、各オプションの役割、そして弱点を説明します。
Hysteria 2 の成り立ち
元の Hysteria は、品質の悪い長距離回線で高速にプロキシすることを目指した、Apernet の開発者によるオープンソースプロジェクトです。2023 年にリリースされた Hysteria 2 はアップデートではなく再設計です。HTTP/3 で認証するため、サーバをウェブサーバに見せかけられる一方、元のプロトコルとの互換性はありません。
公式のサーバとクライアントのほか、sing-box、Mihomo、Xray も Hysteria 2 に対応しています。
Hysteria 2 の仕組み
Trojan や VLESS など、ほとんどのプロキシプロトコルは TCP の上で動作します。Hysteria 2 が動作するのは QUIC の上で、QUIC は UDP の上で動き、TLS 1.3 を内蔵しています。
接続は次のように進みます。
- クライアントがサーバの UDP ポートに QUIC 接続を開きます。TLS ハンドシェイクでは、ブラウザと同じように
h3(HTTP/3)というプロトコル名を使います。 - クライアントが、パスワードを含む HTTP/3 リクエストを送ります。
- パスワードが正しければ、サーバはクライアントを受け入れます。正しくなければ、サーバは普通のウェブサーバとして振る舞います。これが偽装(masquerade)です。
- デバイスからの各 TCP 接続は、その 1 本の接続の中の QUIC ストリームになります。
- UDP パケットは、同じ接続の中を QUIC データグラムとして運ばれます。
多くの接続が 1 本の QUIC 接続を共有するため、新しい接続を開くときにハンドシェイクをやり直す必要がありません。
Brutal:設定したレートで送る
TCP やほとんどの QUIC 実装は、パケットロスを輻輳の兆候とみなして減速します。長距離でノイズの多い回線では、そのせいで速度が回線の実力を大きく下回ったままになることがあります。
Hysteria の輻輳制御 Brutal は、これとは異なる動きをします。クライアントが受信できる速度をサーバに伝え、サーバはパケットが失われてもそのレートで送り続け、欠けた分を再送します。TCP ベースのプロトコルが苦戦する場面でも Hysteria 2 が速度を保てるのは、このためです。
注意点として、レートは実際の帯域幅に近い値にする必要があります。高すぎると、得られる以上のパケットが失われ、接続はかえって遅くなります。また、Brutal はネットワーク上のほかの通信に譲ることをしません。帯域幅が設定されていない場合、Hysteria 2 は自らレートを調整する標準的な輻輳制御、BBR を使います。
Salamander:難読化
素の Hysteria 2 の通信は QUIC で、QUIC は見分けるのが簡単です。Salamander は共有パスワードですべてのパケットをかく乱し、接続が QUIC に見えないようにします。サーバによっては Gecko も使えます。Gecko は最初のパケットの分割とパディングも行い、サイズから見破られないようにします。
ただしトレードオフがあります。難読化をオンにすると、サーバは素の QUIC を話さなくなるため、普通の HTTP/3 ウェブサイトとして振る舞うことはできません。どちらかの偽装を選ぶことになります。
ポートホッピング
ネットワークによっては、しばらくすると特定の UDP ポートを減速させたり遮断したりします。ポートホッピングでは、サーバが 20000-30000 のような UDP ポートの範囲で待ち受け、クライアントは一定間隔(初期設定では 30 秒ごと)で別のポートに移ります。
偽装(masquerade)
クライアントを認識できなかったサーバは、ウェブサイトを配信したり、別のサイトをプロキシしたり、簡単なページを返したりできます。そのためプローブしても、普通のサイトを訪れたようにしか見えません。偽装はサーバ側の設定で、デバイス側で変えるものはありません。
証明書とピン留め
Hysteria 2 は常に TLS を使うため、サーバには証明書が必要です。多くのサーバは、ドメインと公的な証明書の代わりに自己署名証明書を使っています。この場合、クライアント側の選択肢は 2 つです。
- 証明書をピン留めする(
pinSHA256):その証明書だけを信頼し、ほかは信頼しません。こちらが安全な選択です。 - 証明書の検証をスキップする(
insecure=1):どんな証明書でも信頼します。あなたとサーバの間にいる誰もが通信を読めるようになるため、避けてください。
Hysteria 2 のメリットと弱点
メリット:
- パケットロスの多い回線でも速度を保てる。Brutal と QUIC のおかげです。
- 接続が速い。多くの接続が 1 本の QUIC 接続を共有します。
- UDP をネイティブに運べる。QUIC データグラムで運びます。
- 偽装の手段が豊富。偽装サイト、Salamander や Gecko による難読化、ポートホッピングを使えます。
- 自己署名証明書でも使える。ピン留めすれば安全です。
弱点:
- UDP に依存する。オフィスの Wi-Fi や一部のモバイル回線など、UDP を遮断・制限するネットワークがあります。そうした環境では、Hysteria 2 は遅くなるか、まったく接続できません。
- Brutal には適切な値が必要。帯域幅の設定を誤るとかえって悪化し、Brutal はほかの通信に対して公平ではありません。
- CDN を使えない。サーバには直接接続します。
- 見つけにくいが、検出されないわけではない。一般的でないポート上の QUIC や、既知のどのプロトコルにも似ていない通信は、やはり目立つことがあります。
Hysteria 2 とほかのプロトコルの比較
| Hysteria 2 | VLESS + REALITY | Trojan | Shadowsocks | |
|---|---|---|---|---|
| 下位の通信 | UDP(QUIC) | TCP | TCP | TCP と UDP |
| 暗号化 | QUIC 内の TLS 1.3 | REALITY(TLS 1.3) | TLS | 独自の暗号方式 |
| パケットロスの多い回線 | 強い | 普通 | 普通 | 普通 |
| UDP が遮断された環境 | 使えない | 使える | 使える | TCP のみ使える |
| 証明書 | 必要(自己署名でも可) | 不要 | 必要 | 不要 |
| プローブへの応答 | 偽装サイト(設定した場合) | 借用元のサイト | フォールバックサイト(設定した場合) | 接続を切る |
すべてのプロトコルの比較は プロキシ プロトコル比較をご覧ください。Shadowsocks が初めての方は Shadowsocks とは?をお読みください。
Hysteria 2 のリンクの見方
サーバは通常、hysteria2:// リンク、または同じリンクを短い名前にした hy2:// で共有されます。
hysteria2://secret@hy2.example.com:443/?sni=hy2.example.com#Basic
secretはパスワードです。hy2.example.com:443はサーバと UDP ポートです。sniは TLS のサーバ名です。#Basicは、アプリでのサーバの名前です。
オプションはパラメータとして追加します。パスワード hidden で Salamander 難読化を使う例です。
hysteria2://secret@hy2.example.com:443/?obfs=salamander&obfs-password=hidden#Salamander
20000〜30000 の間でポートホッピングする例です。ポート部分に記載します。
hysteria2://secret@hy2.example.com:443,20000-30000/?sni=hy2.example.com#Hopping
SHA-256 でピン留めした自己署名証明書の例です。
hysteria2://secret@203.0.113.7:443/?sni=hy2.example.com&pinSHA256=abababababababababababababababababababababababababababababababab#Pinned
すべてのパラメータは Hysteria 2 リファレンスに載っています。
iPhone で Hysteria 2 を使う
Potatso は iPhone・iPad 向けの無料プロキシクライアントで、Salamander と Gecko による難読化、ポートホッピング、ダウンロード帯域幅、証明書のピン留めを含めて Hysteria 2 に対応しています。公式サーバ、sing-box、Mihomo、Xray で動作を確認済みです。iPhone で Hysteria 2 を設定する方法の手順に沿って、リンクを読み込んで接続してください。
よくある質問
- Hysteria 2 は何に使うのですか?
- Hysteria 2 は、長距離の国際回線や混雑したモバイル回線など、パケットロスの多いネットワークでも速度を出すためのプロキシプロトコルです。HTTP/3 の土台である UDP ベースのプロトコル QUIC の上で動作し、TCP と UDP の両方の通信を運びます。
- Hysteria 2 は VLESS や Trojan より速いですか?
- パケットロスの多い回線や長距離の回線では速くなることがあります。パケットが失われても、設定したレートで送り続けるからです。品質のよいネットワークでは差が小さいことが多く、UDP を制限・遮断するネットワークでは遅くなったり、まったく動かなかったりします。
- Hysteria 2 の Salamander とは何ですか?
- Salamander は Hysteria 2 のオプションの難読化です。共有パスワードですべてのパケットをかく乱し、接続が QUIC に見えないようにします。クライアントとサーバで同じ難読化パスワードを使う必要があります。
- Hysteria 2 にはドメインと証明書が必要ですか?
- TLS 証明書は必要ですが、自己署名証明書でもかまいません。自己署名証明書を使う場合は、証明書の検証をオフにするのではなく、クライアントで SHA-256 を使って証明書をピン留めしてください。
- Hysteria 2 と Hysteria は同じものですか?
- 違います。Hysteria 2 は元の Hysteria プロトコルを再設計したもので、互換性はありません。Hysteria 2 のクライアントには Hysteria 2 のサーバが必要です。