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。
一條連線的過程如下:
- 你的用戶端向伺服器的 UDP 連接埠開啟一條 QUIC 連線。TLS 交握使用
h3(HTTP/3)協定名稱,就像瀏覽器一樣。 - 用戶端送出一個帶有你密碼的 HTTP/3 請求。
- 如果密碼正確,伺服器就接受這個用戶端;如果不正確,伺服器就表現得像一般的網頁伺服器,也就是它的偽裝。
- 你裝置上的每條 TCP 連線,都會變成這條連線裡的一個 QUIC 串流。
- 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 伺服器。