Hysteria 2 是一種執行在 QUIC 之上的代理協定,QUIC 是 HTTP/3 背後以 UDP 為基礎的傳輸協定。它專為在會掉封包的網路上維持速度而設計:它不會一掉封包就降速,而是能以你設定的頻寬持續傳送。對不知道密碼的人來說,Hysteria 2 伺服器看起來可以就像一個普通的 HTTP/3 網站。

本文會說明它的運作方式、各個選項的作用,以及它的不足之處。

簡短的歷史

最初的 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。

一條連線的過程如下:

  1. 你的用戶端向伺服器的 UDP 連接埠開啟一條 QUIC 連線。TLS 交握使用 h3(HTTP/3)協定名稱,就像瀏覽器一樣。
  2. 用戶端送出一個帶有你密碼的 HTTP/3 請求。
  3. 如果密碼正確,伺服器就接受這個用戶端;如果不正確,伺服器就表現得像一般的網頁伺服器,也就是它的偽裝。
  4. 你裝置上的每條 TCP 連線,都會變成這條連線裡的一個 QUIC 串流。
  5. UDP 封包則以 QUIC datagram 的形式在同一條連線中傳送。

由於許多連線共用同一條 QUIC 連線,開啟新連線不需要再交握一次。

Brutal:以固定速率傳送

TCP 和大多數 QUIC 實作會把掉封包視為壅塞的訊號,於是降低速度。在距離長、雜訊多的線路上,這可能讓速度遠低於線路實際能承載的程度。

Hysteria 的 Brutal 壅塞控制則不同。用戶端告訴伺服器自己的接收速度,伺服器就以這個速率傳送,即使掉封包也不降速,只重傳遺失的部分。這就是 Hysteria 2 能在 TCP 類協定吃力的地方維持速度的原因。

但有個前提:這個速率必須接近你真實的頻寬。設得太高,掉的封包會比多傳的還多,連線反而變慢。Brutal 也不會為網路上的其他流量讓步。沒有設定頻寬時,Hysteria 2 會改用 BBR,這是一種會自行調整速率的標準壅塞控制。

Salamander:混淆

單純的 Hysteria 2 流量就是 QUIC,而 QUIC 很容易辨識。Salamander 會用一組共用密碼打亂每個封包,讓連線看起來不再像 QUIC。有些伺服器提供 Gecko,它還會分割並填充最初的幾個封包,讓封包大小不會洩漏身分。

這是有取捨的:開啟混淆後,伺服器說的就不再是單純的 QUIC,也就無法同時偽裝成普通的 HTTP/3 網站。兩種偽裝只能二選一。

連接埠跳躍

有些網路會在一段時間後對單一 UDP 連接埠降速或封鎖。使用連接埠跳躍時,伺服器會監聽一段範圍的 UDP 連接埠,例如 20000-30000,用戶端則每隔一段時間換到另一個連接埠,預設為每 30 秒。

偽裝

伺服器遇到無法辨識的用戶端時,可以提供一個網站、代理另一個網站,或回傳一個簡單的頁面。這樣一來,探測它就像在瀏覽一個普通網站。偽裝是伺服器端的設定,你的裝置不需要做任何更改。

憑證與釘選

Hysteria 2 一定會使用 TLS,所以伺服器需要憑證。許多伺服器使用自簽憑證,而不是網域加上公開憑證。這時你的用戶端有兩種選擇:

  • 釘選憑證(pinSHA256):只信任這一張憑證,其他一律不信任。這是安全的做法。
  • 略過憑證驗證(insecure=1):信任任何憑證。這樣你與伺服器之間的任何人都可能讀取你的流量。請避免使用。

優點與缺點

優點:

  • 在容易掉封包的線路上維持速度,這要歸功於 Brutal 和 QUIC。
  • 連線快。 許多連線共用一條 QUIC 連線。
  • 原生承載 UDP,以 QUIC datagram 傳送。
  • 偽裝方式有彈性。 有偽裝網站、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 是伺服器在 App 中的名稱。

選項以參數的形式加上去。以下是使用 Salamander 混淆、密碼為 hidden 的連結:

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 上的免費代理用戶端,支援 Hysteria 2 的 Salamander 和 Gecko 混淆、連接埠跳躍、下載頻寬和憑證釘選,並已用官方伺服器、sing-box、Mihomo 和 Xray 實測。照著 iPhone 使用 Hysteria 2 教學操作,即可匯入連結並連線。

常見問題

Hysteria 2 是用來做什麼的?
Hysteria 2 是一種代理協定,目的是在會掉封包的網路上維持好的速度,例如長距離的國際線路或擁擠的行動網路。它執行在 QUIC(HTTP/3 背後以 UDP 為基礎的協定)之上,可以承載 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 伺服器。

其他語言版本: English · 简体中文 · 日本語 · Русский