開啟 3 天免費試用
註冊即可免費體驗全部高級功能。
*只限新用戶;每位用戶只可獲得一次試用。


Hysteria2 伺服器部署須具備可達的 UDP 路徑、有效 TLS 身份,以及獨立的認證秘密。本指南採用固定版本的原生二進位檔,保留獨立管理通道,並分別驗證應用 TCP 和 UDP,才接受服務。
關鍵要點
- 應用 TCP 仍會經 Hysteria 的 UDP 傳輸。
- 憑證確認伺服器身份,並不授權客戶端使用代理。
- 網頁回應不能證明代理認證成功。
- 錯誤秘密須被拒絕,重啟與復原後亦須重查。
先參考自建節點的責任及復原規劃。若想學習基於 QUIC 的部署,以下流程提供範圍明確的驗收練習;若只是要日常上網出口,先比較VPS 自行維護與託管服務,再決定是否承擔憑證和主機保養。
Hysteria2 協議介紹說明傳輸模型。客戶端網絡不能通過所需 UDP 時,應先了解阻擋 UDP 的後果,開放 TCP 不會修好該路徑。Shadowsocks Rust 部署則是另一個密鑰模型不同的實作選擇。
**適用範圍及依據:**專用 Ubuntu 24.04 LTS x86-64 伺服器、獨立 Linux 客戶端、Hysteria v2.13.0、公網 IPv4,以及預先簽發且有效的自有域名憑證。作者未有完成端到端部署實測。下列指令和預期條件按官方文件編寫,供讀者操作,並非測量結果。其他架構須下載相符發行檔,不可使用下列二進位檔。[1][2]
確認新的 SSH 連線與雲端控制台不依賴計劃中的代理。私下記錄連接埠、路由、DNS、防火牆規則負責方、服務、憑證路徑及續期工作。預留伺服器 UDP 8443、客戶端 TCP 1080 和 UDP 19001。遇上衝突,或已有 hysteria-ops 用戶、目錄或服務單元便停止,不接管別人的安裝。
本例選高連接埠 8443,專用服務用戶毋須 root 或低連接埠能力。若缺少 curl、ca-certificates 或 Python 3,從 Ubuntu 可信套件安裝。只下載指定官方發行檔,執行前核對該版本提供的完整性依據;項目歸屬不明或驗證失敗便停止。版本字串本身不能證明來源。
umask 077
curl --fail --show-error --location \
https://github.com/HyNetworks/hysteria/releases/download/app%2Fv2.13.0/hysteria-linux-amd64 \
-o hysteria-v2.13.0
chmod 700 hysteria-v2.13.0
./hysteria-v2.13.0 version
sudo install -m 755 hysteria-v2.13.0 /usr/local/bin/hysteria-ops
sudo useradd --system --home /nonexistent --shell /usr/sbin/nologin hysteria-ops
sudo install -d -o root -g hysteria-ops -m 750 /etc/hysteria-ops
版本應符合 v2.13.0,並應保留可信二進位檔的受保護副本作復原之用。下載失敗不代表可以改跑未經審查的遙距安裝腳本,或暗中換用 latest。
繼續前,先以認可簽發方式取得真實域名的有效憑證,核對 SAN、有效期、憑證鏈與私鑰配對。客戶端可能選取的 A/AAAA 記錄都須對應預期可達路徑。本例監聽 IPv4,不應留下錯誤 AAAA,再將路徑失敗當成密碼問題。
本基線須使用 ECDSA 或 RSA 伺服器憑證。v2.13.0 客戶端預設模擬 Chrome 握手,宣告的簽署算法不包括 Ed25519,所以有效的 Ed25519 憑證亦可能令握手失敗。應取得兼容憑證,不可關閉憑證驗證來繞過。[6]
把完整憑證鏈和私鑰放在以下路徑,以 root 編輯器建立 /etc/hysteria-ops/config.yaml。將秘密換成獨立隨機值並存於密碼管理器,不寫入指令參數、公開 URI 或日誌。本例使用手動管理的 TLS 檔案及密碼認證,並非同時配置 ACME 和靜態憑證。[3][4]
listen: 0.0.0.0:8443
tls:
cert: /etc/hysteria-ops/fullchain.pem
key: /etc/hysteria-ops/privkey.pem
auth:
type: password
password: "REPLACE_WITH_DISTINCT_RANDOM_SECRET"
disableUDP: false
TLS 私鑰與認證秘密各有用途,不可重用管理員密碼或憑證私鑰作客戶端秘密。不要靠未說明的擁塞、混淆或頻寬參數解決基本啟動錯誤。本基線沒有頻寬調校,也不承諾未經測量的速度。
把下列本地服務單元儲存為 /etc/systemd/system/hysteria-ops.service。這是本文明確建立的服務,並非聲稱上游安裝器使用相同名稱。
[Unit]
Description=Dedicated Hysteria2 reader deployment
After=network-online.target
Wants=network-online.target
[Service]
User=hysteria-ops
Group=hysteria-ops
ExecStart=/usr/local/bin/hysteria-ops server -c /etc/hysteria-ops/config.yaml
Restart=no
NoNewPrivileges=true
PrivateTmp=true
ProtectHome=true
ProtectSystem=strict
[Install]
WantedBy=multi-user.target
保留獨立 SSH 規則,透過實際管理雲端及主機防火牆的入口,初期只讓獲授權測試客戶端的來源存取 UDP 8443。不可清空規則表或關閉防火牆。有 NAT 時,獲授權映射須傳送 UDP 至此主機;TCP 8443 不能替代這個監聽連接埠。[3]
sudo chmod 640 /etc/hysteria-ops/config.yaml /etc/hysteria-ops/privkey.pem /etc/hysteria-ops/fullchain.pem
sudo chown root:hysteria-ops /etc/hysteria-ops/config.yaml /etc/hysteria-ops/privkey.pem /etc/hysteria-ops/fullchain.pem
sudo systemctl daemon-reload
sudo systemctl start hysteria-ops
sudo systemctl status hysteria-ops --no-pager
sudo ss -lunp
預期所選服務持續運行,IPv4 UDP 8443 有監聽。這只確認啟動與綁定。若服務退出,查看 journalctl -u hysteria-ops,分開排查 YAML、檔案權限、憑證及地址衝突,修正時保持入口關閉。讓客戶端忽略憑證不能當作 TLS 修復。
在另一部獲授權 Linux 客戶端,按上述可信流程取得同版本的相符二進位檔。於私有目錄建立 client.yaml,替換兩個示例域名和秘密。UDP 練習須有你控制且獲授權的回顯回應端 udp-check.example.net:9001,並可由伺服器連接。示例域名不是公開測試服務;沒有回應端便須保留 UDP 驗收為未驗證。[5][6]
server: hy.example.com:8443
auth: "REPLACE_WITH_DISTINCT_RANDOM_SECRET"
tls:
sni: hy.example.com
insecure: false
socks5:
listen: 127.0.0.1:1080
udpForwarding:
- listen: 127.0.0.1:19001
remote: udp-check.example.net:9001
兩個本地監聽均須只綁定回環。UDP 轉發項目經 Hysteria 把封包交給受控回應端,不更改整個系統路由,也不開放區域網絡通用代理。在獨立終端啟動客戶端,並保護輸出私隱。
chmod 600 client.yaml
./hysteria-v2.13.0 client -c client.yaml
在測試瀏覽器明確選用 SOCKS5 127.0.0.1:1080,支援時啟用代理端域名解析。然後檢查可見出口 IP,與伺服器已知出口比較。須確認瀏覽器的實際請求,不能只看「已連接」提示。
停止該程序,私下複製設定,只改 auth 為刻意錯誤的值,再用副本啟動。地址與憑證不變時,新的代理請求須遭拒絕。有些錯誤要開始傳送流量才出現,本地連接埠能監聽並不代表通過認證。若仍成功,關閉入口並檢查直接連線回退、其他設定檔及伺服器認證配置。
轉回正確秘密設定。瀏覽器 HTTPS 請求測試應用 TCP,即使 Hysteria 底層採用 UDP。以下讀者指令另行經本地轉發傳送一個 UDP 封包,預期自有回應端送回相同內容;本文沒有聲稱任何實際輸出。
python3 - <<'CHECK'
import socket
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock:
sock.settimeout(3)
sock.sendto(b"reader-check", ("127.0.0.1", 19001))
data, _ = sock.recvfrom(1024)
assert data == b"reader-check", "Unexpected UDP reply"
CHECK
| 層次 | 讀者須取得的證據 | 失敗時處理 |
|---|---|---|
| 應用 TCP | 新的代理 HTTPS 請求及預期出口 | 分開查瀏覽器選擇、認證、伺服器出口及目的地 |
| 應用 UDP | 回顯與原封包內容相同 | 查本地轉發、disableUDP、回應端及回程 |
| DNS | 解析路徑符合瀏覽器或應用政策 | 分清本地和遠端解析,不單憑 IP 推斷 |
| IPv6 | 每條適用路徑均明確納入或排除 | IPv4 驗收不能證明整部裝置的覆蓋 |
| 斷線 | 明確設定的代理按政策報錯或回退 | 所需失敗政策未另行確認前停止敏感操作 |
一般 TCP 連接埠檢查、網頁或 HTTP3 回應不能證明 Hysteria 客戶端認證成功。即使代理拒絕存取,錯誤頁面仍可能回應。錯誤秘密驗證須獨立於可達性及應用 TCP/UDP 檢查。本地 SOCKS 不提供整機隧道或斷網保護。[3][5]
在獲准維護時段重啟專用服務,重做正確和錯誤秘密、TCP 及 UDP 檢查。驗收後若需要自動啟動,才執行 systemctl enable hysteria-ops;先確認主機重啟後設定及憑證仍可供服務讀取。
續期時,由現有簽發維護方原子替換完整配對的憑證鏈與私鑰,重新套用 root:hysteria-ops 及 640 權限,再於獲准時段重啟。以正常核驗憑證的客戶端確認新身份。過期憑證須修復,不可設成 insecure: true;更新不完整時應回復上一組有效檔案或關閉服務。
立即撤銷時,先關閉此監聽入口,換用新的獨立隨機共享密碼,再重啟以終止現有工作階段。只向保留的客戶端提供新值。本例會撤銷全部使用舊密碼的客戶端,不能逐部裝置撤銷。再次重啟後,確認保留客戶端可用,舊秘密被拒絕。
停止服務後,把設定及 TLS 目錄、固定二進位檔、服務單元、續期及防火牆記錄備份至加密且受限的異機位置。較新的輪換與撤銷清單另存。復原須在同版本隔離替代主機、入口關閉時進行:還原擁有者、權限和有效憑證對,啟動前先套用清單中的目前秘密。開放前重做正向、反向及重啟檢查,不可因舊密碼在封存內便重新啟用。
以下生命週期指令分別供驗收重啟、查閱日誌、退役停止及停用;不可整段連續貼上當成可用性測試。
sudo systemctl restart hysteria-ops
sudo journalctl -u hysteria-ops --since "10 minutes ago" --no-pager
sudo systemctl stop hysteria-ops
sudo systemctl disable hysteria-ops
停用時只關閉本次部署的 UDP 規則,停止客戶端,移除瀏覽器代理設定及本地轉發監聽,並撤銷秘密。決定保留期限後,只刪除本文建立的服務單元、二進位檔、檔案及用戶,再重新載入 systemd。另行檢查續期工作、DNS 和雲端資源,確認新的 SSH 連線與原有服務正常。移除軟件不會停止雲端計費;未確認復原便保持入口關閉,停止後續變更。
不能。即使代理應用 TCP,本例仍監聽 UDP。應排查獲授權 UDP 路徑,不可改成無關的 TCP 規則。
憑證向客戶端證明伺服器身份,獨立密碼才授權客戶端存取。兩項都須通過,亦不可重用相同秘密。
不要複製未經測量的速度。本基線省略頻寬調校,取得自己獲授權網絡的相關證據後才加入官方支援參數。
成功的 HTTPS 請求覆蓋另一條應用路徑。UDP 須以客戶端支援的獨立模式和受控回應端測試,並另行記錄結果。
示例共用一個密碼,輪換會影響全部用戶。個別撤銷須另行設計受支援的認證模型,裝置標籤不會帶來隔離。
HTTP 回應與已認證代理請求是不同協議行為。須實際確認正確憑據請求成功,以及錯誤憑據遭到拒絕。
本文沒有報告作者端到端實測。表格列出讀者應取得的證據,實際伺服器、客戶端、網絡、日期及結果須在授權環境記錄。
來源:
Sources checked 2026 年 10 月 11 日。
延伸閱讀:
註冊即可免費體驗全部高級功能。
*只限新用戶;每位用戶只可獲得一次試用。