查看 2026-05-29 12 分钟 进阶 7 步

Hysteria 2 节点搭建教程:VPS 一键脚本从部署到客户端连接(2026)

Hysteria 2 基于 QUIC 协议,在高延迟和丢包环境下比 TCP 方案快 3-5 倍。但很多教程只给一句 bash 命令,不讲端口跳跃、obfs 混淆、自签证书和带宽限制这四个最容易配错的参数——本文用完整 YAML 和客户端 JSON 把这些拆开讲。

拿到一台 Debian 或 Ubuntu VPS 之后,SSH 登录,一条 curl 命令就能把 Hysteria 2 跑起来。但脚本跑完不等于能用——端口跳跃、obfs 混淆密码、自签证书和带宽限制这四个参数,任意一个没和客户端对上,就是连接超时或 TLS 握手失败。

这篇文章不只在讲”敲什么命令”,更在讲”脚本里的每个选项为什么这么填、填错了会看到什么错误”。Hysteria 2 当前最新版本是 v2.9.2(2026-05-23 发布),本文配置基于此版本。

Hysteria 2 为什么走 UDP 而不用 TCP?

Hysteria 2 的底层是 QUIC——和 HTTP/3 用同一套传输协议。传统代理协议(Shadowsocks、Trojan、VMess、VLESS)跑在 TCP 上,丢一个包就要等重传,延迟翻倍。QUIC 在 UDP 上实现了多路复用和 0-RTT 握手,一个包丢了不影响其他流,在延迟 > 150ms 的跨境线路上,实测吞吐量比 TCP 方案高 3-5 倍。

但 UDP 也带来一个额外门槛:防火墙规则要专门为 UDP 放行。做习惯了 TCP 协议的用户,部署完发现连不上,第一反应去查配置,实际上经常是防火墙只开了 TCP 端口。

不适合 Hysteria 2 的场景:你的网络环境对 UDP 做了严格的 QoS 限速(部分企业网、校园网),这种场景下 UDP 的带宽可能比 TCP 还低,不如继续用 TCP 协议。

VPS 环境和防火墙:UDP 必须先放行

动手之前确认三件事:

  1. 操作系统:Debian 11+ 或 Ubuntu 22.04+(CentOS 7 也能跑但需要手动编译内核开启 BBRv3,不推荐新手碰)。
  2. UDP 端口:Hysteria 2 完全依赖 UDP,SSH 登录后第一件事不是装软件,是确认 UDP 能通。
  3. 内核参数:开启 BBR 拥塞控制算法能提升 15-30% 吞吐量,尤其在高延迟链路上。

UDP 防火墙检查两步走:

# 第一步:在 VPS 上放行 UDP 端口(以 443 为例)
ufw allow 443/udp

# 第二步:如果你用了端口跳跃(如 20000-50000),放行整个范围
ufw allow 20000:50000/udp

如果 VPS 有外部安全组(阿里云安全组规则、AWS Security Group、GCP 防火墙规则),必须同时在网页控制台放行相同的 UDP 端口。外部安全组 + 系统防火墙两层都放行,UDP 才能通。

验证 UDP 是否真通了,可以在本地电脑执行:

nc -zu <VPS_IP> 443

如果返回 succeeded,UDP 可达;如果超时或无响应,防火墙或安全组还有一层没放行。

一键安装脚本:每个选项在做什么

把 Hysteria 2 装到 VPS 上只有三步:下载二进制、写 config.yaml、注册 systemd 服务。社区脚本把这三步打包成了一个交互式菜单。

以社区维护的安装脚本为例(截至 2026 年 5 月仍活跃更新的有 SatkiExE808 的纯 Hysteria 2 脚本和 chaconneX 的 Hy2+Reality 多合一脚本),安装过程中你会被问到以下几个问题:

脚本问你什么这个参数真正控制什么填错了会怎样
监听端口(listen port)Hysteria 2 在 VPS 上占用的 UDP 端口客户端填的端口和这个不一致 → connection refused
是否启用端口跳跃让服务端同时监听一段端口范围,客户端随机选一个连防火墙只放行单个端口 → 部分跳跃端口不通 → 间歇性断连
obfs 密码(Salamander)把 QUIC 包伪装成随机字节流,降低 DPI 识别概率客户端 obfs 密码填错 → 服务端静默拒绝,日志不会有明显报错
认证密码(auth password)客户端连接时验证身份的密钥填错 → 日志显示 authentication failed
伪装地址(masquerade)非 Hysteria 请求(扫端口、探测)被重定向到的正常网站不填 → 端口被扫时会直接暴露为代理服务
带宽限制(bandwidth)每个连接的上下行速率上限填 0 或留空 → 不限速;填太低 → 看视频卡顿

脚本跑完后,/etc/hysteria/config.yaml 已经生成。但直接拿来用之前,证书路径和 obfs 密码你最好自己确认一遍。

证书选择:自签 vs ACME,什么时候该用哪个

Hysteria 2 强制 TLS 加密,证书是必选项。两种方式的取舍:

自签证书——不需要域名,IP 直连。生成命令只有一行:

openssl req -newkey rsa:2048 -nodes \
  -keyout /etc/hysteria/server.key \
  -x509 -days 3650 \
  -out /etc/hysteria/server.crt \
  -subj "/CN=<你的_VPS_IP>"

生成的证书有效期 10 年,不需要续期。代价是客户端必须开启 TLS insecure(跳过证书验证)。所有主流客户端——sing-box、NekoBox、v2rayNG(通过订阅)、Shadowrocket——都支持这个选项。

ACME 证书(Let’s Encrypt)——需要你的域名 A 记录指向这台 VPS。Hysteria 2 内置 ACME 客户端,config.yaml 里直接写:

acme:
  domains:
    - your.domain.com
  email: [email protected]

启动时自动申请和续期,不需要装 certbot。证书有效期 90 天,到期前 Hysteria 2 自动续。

选哪个看你的场景:一个人用、没域名、快搞定——自签。多人共享、想”看起来像个正常网站”、设备不支持跳过证书验证(如企业 VPN 客户端)——ACME。

config.yaml 完整示例与每个字段

下面是一份生产可用的配置,用自签证书 + salamander 混淆 + 端口跳跃 + 伪装,按你的实际 IP 和密码替换即可:

# /etc/hysteria/config.yaml
listen: :443
# 端口跳跃写法(二选一,不要同时写):
# listen: :20000-50000

tls:
  cert: /etc/hysteria/server.crt
  key: /etc/hysteria/server.key

auth:
  type: password
  password: "your-auth-password-here"

obfs:
  type: salamander
  salamander:
    password: "your-obfs-password-here"

masquerade:
  type: proxy
  proxy:
    url: https://news.ycombinator.com/
    rewriteHost: true

bandwidth:
  up: 100 mbps
  down: 500 mbps

字段解释:

  • listen:443 监听单个端口;:20000-50000 启用端口跳跃(需要 iptables/nftables 支持,仅限 Linux)。
  • tls.cert / tls.key:证书路径。用 ACME 时删掉整个 tls: 块,换成上面的 acme: 块。两个不能同时出现
  • auth.password:客户端连接时的认证密码。支持 userpass 方式做多用户,但对自用场景 password 足够。
  • obfs.salamander.password:Salamander 是 Hysteria 2 内置的混淆算法,把 QUIC 数据包的明显特征打乱成看似随机的字节。这个密码和 auth.password 是两个不同的东西
  • masquerade:任何非 Hysteria 2 协议的请求(探测、扫端口)都会被反向代理到这个 URL,外人看到的是 Hacker News 而不是代理服务。
  • bandwidth:限制每连接速率。up 是上传(VPS 发给客户端),down 是下载(客户端发给 VPS)。注意方向不要填反。

保存后启动:

systemctl enable --now hysteria-server
systemctl status hysteria-server

看到 Active: active (running) 且日志无红色报错,服务端就绪。

客户端怎么连:三种主流方式

服务端跑起来之后,把三个核心参数搬进客户端:服务器地址 + 端口、auth 密码、obfs 密码。不同客户端填写方式不同。

sing-box(JSON 配置),在 outbounds 里加:

{
  "type": "hysteria2",
  "tag": "hy2-node",
  "server": "1.2.3.4",
  "server_port": 443,
  "password": "your-auth-password-here",
  "obfs": {
    "type": "salamander",
    "password": "your-obfs-password-here"
  },
  "tls": {
    "enabled": true,
    "insecure": true,
    "server_name": "1.2.3.4"
  },
  "up_mbps": 100,
  "down_mbps": 500
}

insecure: true 对应自签证书;如果用了 ACME 证书,insecure 改为 falseserver_name 改为你的域名。

NekoBox(Android / Windows):新建配置 → 类型选 Hysteria2 → 填入 Address(IP 或域名)、Port、Password(auth 密码)→ 展开 TLS → 勾选 Allow Insecure(自签时)→ 展开 Obfuscation → 类型选 Salamander → 填入 obfs 密码。

v2rayNG(Android):v2rayNG 不支持手动新建 Hysteria 2 节点,只能通过订阅链接导入。如果你的订阅提供商输出的订阅格式包含 hysteria2:// 协议的节点,更新订阅后会自动出现在节点列表里。如果订阅里没有 Hysteria 2 节点,说明订阅源尚未支持该协议导出。

NekoBox 和 sing-box 是目前对 Hysteria 2 支持最完整的两个客户端。如果你之前用 Clash / Mihomo 路线,注意 sing-box 的 JSON 配置语法和 Clash YAML 完全不同——规则放到 route 块,入站/出站放到 inbounds/outbounds 块。

如果你手头没有兼容 Hysteria 2 协议的订阅节点,或者不想手动维护 VPS 和服务端配置,兼容 Clash / Singbox / V2Ray 的订阅可以省掉服务端运维这一步——拿到订阅链接直接导入客户端就行,Hysteria 2 节点也包含在内。

连不上怎么排查:三种错误和对应解决路径

遇到连接问题时,先 SSH 回 VPS 看日志:

journalctl -u hysteria-server -f

然后对照下表定位:

客户端报错服务端日志显示最可能的原因先检查什么
connection refused完全无日志UDP 端口被防火墙拦了ss -tuln | grep <端口> 确认端口在监听 → 检查 VPS 安全组规则
connection timeout完全无日志UDP 包没到达 VPS 或被运营商 QoS 丢弃nc -zu <VPS_IP> 443 从本地测 UDP 可达性
TLS handshake failedtls: bad certificate 或 no matching cert客户端 TLS 配置和服务端证书不匹配自签时客户端 insecure 开了没、server_name 填对了没
连上但 10 秒后断开authentication failedauth 密码不匹配对比客户端 password 字段和 config.yaml 里的 auth.password
连上了但没网显示客户端已认证obfs 密码错误——Hysteria 2 用 obfs 密码做加密封装,密码错了解出来的是乱码,表现为”连上了但没数据”对比 obfs 密码;注意 obfs 密码和 auth 密码是两个独立字段

最常见的组合错误:自签证书 + 客户端没开 insecure + obfs 密码只填了 auth 密码那个字段。三个错误一起触发,排查时一个一个改,不要同时调三个参数。

端口跳跃为什么不一定适合你的 VPS

端口跳跃是在 listen 里写一个范围(如 :20000-50000),服务端在所有端口上同时监听。客户端每次连接从范围内随机选一个端口。

好处:流量分散在 30001 个端口上,单端口被限速或封锁时其他端口还能用。

坏处三条:第一,VPS 安全组和系统防火墙要放行整个 30001 个端口的 UDP,部分 VPS 商的安全组规则数量有限制(阿里云默认每个安全组 200 条规则,不够覆盖 30001 个端口);第二,端口跳跃需要 iptables/nftables 的 TPROXY 模块支持,某些精简内核可能没编译这个模块;第三,客户端也要支持端口跳跃——sing-box 和 NekoBox 都支持,但 v2rayNG 和部分 iOS 客户端不支持。

如果你用的是轻量应用服务器(如 512MB 内存的 VPS),单端口 443 已经够用,不建议一上来就开跳跃——先跑通最简配置,确认稳定后再加。

相关阅读

来源与时间

本文最后查看时间:2026-05-29。操作路径会随客户端版本变化,遇到按钮名称不一致时,优先按同义菜单和官方文档查看。

看更多教程:教程库 · 看客户端:客户端目录 · 看下载入口:下载中心