Hysteria2 伺服器部署:UDP、憑證、認證與復原驗證

Hysteria2 伺服器部署:UDP、憑證、認證與復原驗證

Ryan Foster
2026年10月11日· 8 分鐘讀完

Hysteria2 伺服器部署須具備可達的 UDP 路徑、有效 TLS 身份,以及獨立的認證秘密。本指南採用固定版本的原生二進位檔,保留獨立管理通道,並分別驗證應用 TCP 和 UDP,才接受服務。

關鍵要點

  • 應用 TCP 仍會經 Hysteria 的 UDP 傳輸。
  • 憑證確認伺服器身份,並不授權客戶端使用代理。
  • 網頁回應不能證明代理認證成功。
  • 錯誤秘密須被拒絕,重啟與復原後亦須重查。

甚麼情況適合進行 Hysteria2 伺服器部署?

先參考自建節點的責任及復原規劃。若想學習基於 QUIC 的部署,以下流程提供範圍明確的驗收練習;若只是要日常上網出口,先比較VPS 自行維護與託管服務,再決定是否承擔憑證和主機保養。

Hysteria2 協議介紹說明傳輸模型。客戶端網絡不能通過所需 UDP 時,應先了解阻擋 UDP 的後果,開放 TCP 不會修好該路徑。Shadowsocks Rust 部署則是另一個密鑰模型不同的實作選擇。

**適用範圍及依據:**專用 Ubuntu 24.04 LTS x86-64 伺服器、獨立 Linux 客戶端、Hysteria v2.13.0、公網 IPv4,以及預先簽發且有效的自有域名憑證。作者未有完成端到端部署實測。下列指令和預期條件按官方文件編寫,供讀者操作,並非測量結果。其他架構須下載相符發行檔,不可使用下列二進位檔。[1][2]

步驟 1:保留管理通道及安裝可信二進位檔

確認新的 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。

步驟 2:準備 Hysteria2 憑證及認證

繼續前,先以認可簽發方式取得真實域名的有效憑證,核對 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

步驟 3:設定 Hysteria2 UDP 防火牆政策

保留獨立 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 修復。

步驟 4:連接正確客戶端並拒絕錯誤秘密

在另一部獲授權 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 為刻意錯誤的值,再用副本啟動。地址與憑證不變時,新的代理請求須遭拒絕。有些錯誤要開始傳送流量才出現,本地連接埠能監聽並不代表通過認證。若仍成功,關閉入口並檢查直接連線回退、其他設定檔及伺服器認證配置。

步驟 5:分開驗證 TCP、UDP、DNS 與斷線

轉回正確秘密設定。瀏覽器 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]

步驟 6:續期、撤銷、復原及停用

在獲准維護時段重啟專用服務,重做正確和錯誤秘密、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 8443 能解決 Hysteria UDP 被阻擋嗎?

不能。即使代理應用 TCP,本例仍監聽 UDP。應排查獲授權 UDP 路徑,不可改成無關的 TCP 規則。

有效憑證是否授權客戶端接入?

憑證向客戶端證明伺服器身份,獨立密碼才授權客戶端存取。兩項都須通過,亦不可重用相同秘密。

應否複製其他指南的大頻寬值?

不要複製未經測量的速度。本基線省略頻寬調校,取得自己獲授權網絡的相關證據後才加入官方支援參數。

瀏覽器測試能代替應用 UDP 檢查嗎?

成功的 HTTPS 請求覆蓋另一條應用路徑。UDP 須以客戶端支援的獨立模式和受控回應端測試,並另行記錄結果。

這個密碼設定可以只撤銷一部客戶端嗎?

示例共用一個密碼,輪換會影響全部用戶。個別撤銷須另行設計受支援的認證模型,裝置標籤不會帶來隔離。

為何網頁有回應但代理仍失敗?

HTTP 回應與已認證代理請求是不同協議行為。須實際確認正確憑據請求成功,以及錯誤憑據遭到拒絕。

作者有執行這些檢查嗎?

本文沒有報告作者端到端實測。表格列出讀者應取得的證據,實際伺服器、客戶端、網絡、日期及結果須在授權環境記錄。

來源:

  1. Hysteria v2.13.0 — https://github.com/HyNetworks/hysteria/releases/tag/app/v2.13.0
  2. Hysteria 2 — Installation — https://v2.hysteria.network/docs/getting-started/Installation/
  3. Hysteria 2 — Server — https://v2.hysteria.network/docs/getting-started/Server/
  4. Hysteria 2 — Full Server Config — https://v2.hysteria.network/docs/advanced/Full-Server-Config/
  5. Hysteria 2 — Client — https://v2.hysteria.network/docs/getting-started/Client/
  6. Hysteria 2 — Full Client Config — https://v2.hysteria.network/docs/advanced/Full-Client-Config/

Sources checked 2026 年 10 月 11 日。


延伸閱讀:

開啟 3 天免費試用

註冊即可免費體驗全部高級功能。

*只限新用戶;每位用戶只可獲得一次試用。

Hysteria2 伺服器部署:UDP、憑證、認證與復原驗證 | AethoVPN