プロトコルの境界と最小構成
type: hysteria2 は、再設計された Hysteria 2 プロトコルに対応します。QUIC と UDP 上で動作し、通信を HTTP/3 に見せますが、Hysteria 1.x サーバーには接続できません。
ノードには、名前、種別、サーバー、有効なポート指定が必要です。単一の portを指定することも、 ports を指定してポートホッピングを有効にすることもできます。どちらもない場合、クライアントは invalid port としてノードの作成を拒否します。
name必須- ノード名です。ポリシーグループやルールから参照されます。
type: hysteria2必須- Hysteria2 実装を選択します。Hysteria 1.x の互換モードではありません。
server必須- サーバーのドメインまたは IP アドレスです。
port / ports二つから一つを選択- 単一ポートを指定するか、ポート一覧と範囲を指定してホッピングを有効にします。
password認証- サーバーの認証パスワードを指定します。現在のコンストラクターでは空文字列も受け付けますが、省略できるのはサーバー側で空の認証情報が明示的に許可されている場合だけです。
認証と TLS 検証
Hysteria2 は TLS 1.3 を使用します。認証パスワードと TLS 証明書の検証は独立しており、パスワードが正しくても、信頼できる証明書と正しいサーバー名の代わりにはなりません。
password認証- サーバーがクライアントの識別に使うパスワードです。userpass サーバーを使う場合は、サーバーから提供された完全な形式で指定してください。
sniTLS- を使用します。証明書に対応するサーバー名を設定してください。省略時は server を使用します。
alpnTLS- 公式例では h3 を使用します。サーバー側で明示的に求められている場合に限り、デフォルトのネゴシエーション結果を上書きしてください。
skip-cert-verifyリスク- 証明書の検証を省略します。リスクを明確に理解しているテストまたは自己署名証明書の環境だけで使用してください。
name-cert-verifyTLS- 証明書名の検証対象を個別に指定します。
fingerprintTLS- サーバー証明書の SHA-256 フィンガープリントを固定します。
certificate / private-keymTLS- サーバー側でクライアント証明書が必要な場合に、ペアで指定します。
ポートホッピング
次を指定すると、 ports クライアントはポート集合から接続を確立し、単一の portを無視します。ポート集合には、現在のコアのポート範囲構文を使用します。ハイフンで範囲を表し、複数の値はカンマまたはスラッシュで区切れます。
ports任意- 例:443,20000-21000。サーバーとファイアウォールで、まったく同じ UDP ポート集合を開放する必要があります。
hop-intervalデフォルトは 30 秒- 固定の秒数を指定するか、15-30 のように指定して、切り替えごとに範囲内の間隔をランダムに選べます。
- 最小間隔5 秒間
- 現在の実装では、開始値が 5 秒未満の場合は 5 秒に引き上げられます。
- 範囲の制限重要事項
- hop-interval には一つの範囲だけを指定でき、カンマで複数の範囲を入れることはできません。ports を設定していない場合、このフィールドは機能しません。
Salamander と Gecko の難読化
難読化は QUIC パケットの識別可能な特徴を変えますが、Hysteria2 を TCP に変えるものではなく、ネットワークによるすべての UDP 通信のブロックも回避できません。クライアントとサーバーでは、同じ種別とパスワードを使用する必要があります。
obfs任意- 現在は salamander と gecko に対応しています。空欄の場合は難読化が無効になります。
obfs-password条件付きで必須- obfs を指定する場合は、難読化パスワードも必ず指定してください。指定しないと、クライアントは missing obfs password を報告します。
obfs-min-packet-sizeGecko のみ- ハンドシェイク断片の最小パケットサイズを設定します。公式アップストリームのデフォルトは 512 バイトです。
obfs-max-packet-sizeGecko のみ- ハンドシェイク断片の最大パケットサイズを設定します。公式アップストリームのデフォルトは 1200 バイトです。
- Gecko の範囲制約
- 最大値は最小値以上、かつ 2048 バイト以下にする必要があります。Salamander は、この二つのパケットサイズフィールドを読み取りません。
帯域幅、輻輳制御、QUIC ウィンドウ
Hysteria2 の up と down は Hysteria 1.x と異なり、方向ごとに Brutal を使うかを決めます。 up を指定すると、クライアントのアップロード方向で Brutal が有効になり、 down を指定すると、目標ダウンロード速度がサーバー方向の処理に渡されます。
クライアントの bbr-profile は、アップロード方向で Brutal が無効な場合のローカル QUIC 送信だけを制御し、サーバー側のダウンロード方向で使う輻輳制御を選ぶものではありません。受信ウィンドウは quic-go の高度なパラメーターです。帯域遅延積とメモリコストを理解せずに変更しないでください。
up / down任意- Brutal の速度を指定します。単位を省略すると Mbps として解釈されます。回線で安定して実現できる速度を超えないようにしてください。
bbr-profileデフォルトは standard- standard、conservative、aggressive から選択できます。クライアント側で
upBrutal を使わない場合のアップロード送信方向にだけ影響します。 initial-stream-receive-window高度な設定- QUIC の単一ストリーム用初期受信ウィンドウです。
max-stream-receive-window高度な設定- QUIC の単一ストリーム用最大受信ウィンドウです。
initial-connection-receive-window高度な設定- QUIC 接続全体の初期受信ウィンドウです。
max-connection-receive-window高度な設定- QUIC 接続全体の最大受信ウィンドウです。
Hysteria2 Realm
realm-opts Hysteria2 Realm へ接続するための UDP ホールパンチと仲介サービスに使用します。デフォルトは無効です。サーバーまたは Realm の提供元からパラメーターが明示された場合にだけ有効にしてください。
realm-opts.enableデフォルトは false- Realm を有効にするには、明示的に true を設定する必要があります。
realm-opts.server-urlRealm- 仲介サービスの HTTPS アドレスです。
realm-opts.token / realm-opts.realm-idRealm- 仲介サービスのトークンと、接続先の Realm 識別子をそれぞれ指定します。
realm-opts.stun-serversRealm- 公開 UDP アドレスの検出に使う STUN サーバーの一覧です。
realm-opts.sni / skip-cert-verify / fingerprint適用範囲- これらのサブフィールドは、
realm-opts.server-urlにだけ適用され、プロキシサーバーの TLS フィールドを置き換えるものではありません。
基本例とよくある設定ミス
まず単一ポートかつ難読化なしの設定で認証と TLS を確認し、その後、実際のサーバー設定に応じてポートホッピングまたは難読化を追加してください。
- Hysteria 1.x の
auth-strまたはprotocolをコピーしていますが、これらのフィールドは Hysteria2 には属しません。 - obfs を指定した一方で、
obfs-passwordが抜けているため、ノードの作成時に直接エラーになります。 - ports を有効にしているのに、サーバーまたはファイアウォールで同じポート範囲を開放していないため、周期的に切断されます。
- 設定項目
upとdownを実際の回線帯域幅より大幅に高く指定すると、輻輳とパケットロスが発生します。
proxies:
- name: hysteria2-node
type: hysteria2
server: server.example.com
port: 443
password: replace-with-server-password
sni: server.example.com
alpn:
- h3
skip-cert-verify: false