在 YouTube 观看完整视频 订阅 Skyline YouTube 频道

本文记录如何使用自己的域名和 VPS 搭建 Hysteria2 服务端。示例中使用的子域名是:

1
hy2.example.com

请把文中的域名、邮箱和 VPS IP 替换成你自己的真实信息。

本文只适合合法自用、远程办公、授权测试和个人网络环境优化。不要用于违法用途,也不要用于违反服务条款的场景。

💡 一、准备工作

开始之前,你需要准备好以下内容:

  • 一个自己的域名;
  • 一台 VPS,建议使用 Debian 12 或 Debian 13 纯净系统;
  • VPS 的公网 IPv4 地址;
  • 可以 SSH 登录 VPS 的 root 权限;
  • 域名 DNS 管理权限,例如 Cloudflare。

本文默认使用的服务端域名是:

1
hy2.example.com

后面所有命令里的 hy2.example.comyour@email.com你的VPS_IP 都需要替换。

🌐 二、进入 DNS 设置页面

先找到你的域名 DNS 设置页面。

如果你使用 Cloudflare,常见路径是:

1
网站 -> DNS -> Records

进入 DNS Records 页面后,准备添加一条新的 DNS 记录。

🧭 三、添加子域名解析

添加一条 A 记录:

类型 名称 内容 TTL 代理状态
A hy2 你的 VPS IPv4 地址 Auto 或 300 DNS only / 灰云

示例:

类型 名称 内容 TTL 代理状态
A hy2 123.123.123.123 Auto DNS only

这里的最终访问域名就是:

1
hy2.example.com

注意,Cloudflare 里一定不要开启橙云代理,要保持 DNS only,也就是灰云状态。

原因很简单:普通 Cloudflare CDN 不会直接代理 Hysteria2 的 UDP 443 流量。开启橙云后,客户端连接到的是 Cloudflare,而不是你的 VPS,Hysteria2 会连不上。

⏳ 四、等待 DNS 生效

添加 DNS 记录后,等待几分钟。

可以在本地电脑或 VPS 上测试:

1
ping hy2.example.com

如果能解析到你的 VPS IPv4 地址,说明 DNS 已经生效。

如果暂时没有解析到,先等几分钟再试。DNS 生效时间和本地缓存、运营商缓存、域名服务商有关。

🔐 五、SSH 登录 VPS

DNS 准备好后,SSH 登录 VPS:

1
ssh root@你的VPS_IP

示例:

1
ssh root@123.123.123.123

登录后再继续执行下面的命令。

🚀 六、更新系统并安装基础工具

先更新系统:

1
apt update && apt upgrade -y

安装基础工具:

1
apt install -y curl wget nano openssl ca-certificates nftables

这些工具后面会用于下载安装脚本、编辑配置文件、生成随机密码和处理证书相关请求。

⚡ 七、开启 BBR 网络优化

BBR 不是 Hysteria2 的必需项,因为 Hysteria2 主要使用 UDP/QUIC,net.ipv4.tcp_congestion_control=bbr 直接优化的是 TCP 拥塞控制。

不过 VPS 上通常还会跑 SSH、证书申请、网站伪装页、订阅服务或其他 TCP 服务,所以建议把 BBR 作为基础网络优化一起开启。

先写入 BBR 配置。注意:请点击代码块右上角的复制按钮完整复制,确保粘贴到终端时包含换行。下面这一段要从第一行复制到 EOF,作为一个整体执行:

1
2
3
4
tee /etc/sysctl.d/99-bbr.conf > /dev/null <<'EOF'
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF

再应用系统参数:

1
sysctl --system

检查是否生效:

1
2
3
sysctl net.ipv4.tcp_congestion_control
sysctl net.core.default_qdisc
lsmod | grep bbr

正常情况下可以看到类似结果:

1
2
3
net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq
tcp_bbr

如果 lsmod | grep bbr 没有输出,但前面的 sysctl 已经显示 bbr,通常也可以继续部署。部分内核会把 BBR 编进内核,不一定以模块形式显示。

🛡️ 八、安装并配置 UFW 防火墙

Debian 可以直接安装 UFW:

1
2
apt update
apt install -y ufw

先确认 SSH 实际监听端口:

1
sshd -T | grep '^port '

如果输出是 port 22,再放行以下必要端口:

1
2
3
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/udp

启用 UFW:

1
ufw enable

查看状态:

1
ufw status

注意:一定要先放行 SSH 的实际端口,再执行 ufw enable。如果 SSH 不是 22 端口,请把命令中的 22 换成真实端口,否则可能会断开远程连接。

如果你的 VPS 服务商还有额外的安全组、防火墙或云防火墙,也需要同步放行:

  • 22/tcp:SSH 登录;
  • 80/tcp:本文明确使用 ACME HTTP 验证申请证书;
  • 443/udp:Hysteria2 连接端口。

📦 九、安装 Hysteria2

执行官方安装脚本:

1
bash <(curl -fsSL https://get.hy2.sh/)

安装脚本会获取当前稳定版。安装后检查版本:

1
hysteria version

建议服务端和客户端都使用当前稳定版。官方更新日志显示 2.8.2 包含重要安全修复;若版本更旧,请重新运行上面的官方脚本升级。

安装完成后,生成认证密码和混淆密码:

1
2
AUTH=$(openssl rand -base64 32)
OBFS=$(openssl rand -base64 32)

这两个变量会写入 Hysteria2 配置文件。

📝 十、创建 Hysteria2 配置文件

执行下面的命令创建配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
cat > /etc/hysteria/config.yaml <<EOF
listen: ":443"

acme:
domains:
- hy2.example.com
email: your@email.com
type: http

auth:
type: password
password: "$AUTH"

obfs:
type: salamander
salamander:
password: "$OBFS"

masquerade:
type: proxy
proxy:
url: "https://www.microsoft.com/"
rewriteHost: true
EOF

echo "auth password: $AUTH"
echo "obfs password: $OBFS"

这里需要替换两处:

1
2
hy2.example.com
your@email.com

hy2.example.com 改成你自己的 Hysteria2 子域名,your@email.com 改成你的邮箱。

命令执行完成后,终端会输出两项重要信息:

1
2
auth password: xxxxx
obfs password: xxxxx

请保存好这两个密码,后面配置客户端时会用到。

✅ 十一、检查配置文件

写入配置后,先检查一下文件内容:

1
cat -n /etc/hysteria/config.yaml

重点确认下面几项:

  • 域名是否是你的真实域名;
  • 邮箱是否填写正确;
  • acme.type 是否为 http
  • listen 是否是 ":443"
  • auth.password 是否已经生成;
  • obfs.salamander.password 是否已经生成;
  • YAML 缩进是否正常。

▶️ 十二、启动并检查服务

启用开机启动并立即启动 Hysteria2 服务:

1
systemctl enable --now hysteria-server.service

查看服务状态:

1
systemctl status hysteria-server.service

如果正常运行,应该可以看到类似状态:

1
Active: active (running)

这表示 Hysteria2 服务端已经启动成功。

🔀 十三、可选:是否开启端口跳跃

端口跳跃不是必选项。普通 VPS 如果 443/udp 稳定能连,建议继续保持前面的默认配置,不要一开始就放行一大段端口。

它主要适合下面这种情况:

  • 固定 UDP 端口晚高峰经常断流;
  • 443/udp 经常被限速,但换一个 UDP 端口后又恢复;
  • SSH、网页、TCP 服务正常,只有 Hysteria2 的 UDP 连接不稳定;
  • 你使用的客户端明确支持 Hysteria2 端口范围或端口跳跃。

如果要开启,可以把服务端配置里的:

1
listen: ":443"

改成一个 UDP 端口范围,例如:

1
listen: ":20000-20100"

Linux 版 Hysteria2 当前支持直接监听端口范围,并通过 nftables 或 iptables 建立转发规则。此功能需要 root 或 CAP_NET_ADMIN 权限;如果重启后日志提示防火墙权限错误,请先恢复单端口 443,不要盲目扩大权限。

然后放行这段 UDP 端口:

1
ufw allow 20000:20100/udp

如果 VPS 服务商后台还有安全组、防火墙或云防火墙,也要同步放行:

1
20000-20100/udp

改完后重启服务:

1
2
systemctl restart hysteria-server.service
systemctl status hysteria-server.service

客户端配置也要对应改成端口范围:

1
2
3
4
5
6
server: hy2.example.com:20000-20100

transport:
udp:
minHopInterval: 15s
maxHopInterval: 45s

如果是手机图形客户端,要确认它是否支持 20000-20100 这种端口范围。客户端不支持的话,就不要开启端口跳跃,继续使用单端口 443/udp 更稳。

注意:端口跳跃不能解决 Cloudflare 橙云代理问题。Hysteria2 仍然需要 Cloudflare DNS 保持 DNS only,也就是灰云。

🛠️ 十四、常见问题排查

1. 服务没有启动成功

查看服务日志:

1
journalctl --no-pager -e -u hysteria-server.service

优先检查:

  • DNS 是否已经解析到 VPS;
  • Cloudflare 是否保持灰云;
  • VPS 防火墙是否放行 80/tcp443/udp
  • 如果开启了端口跳跃,VPS 防火墙和云厂商安全组是否放行对应的 UDP 端口范围;
  • 配置文件缩进是否正确;
  • 邮箱和域名是否填写正确。

2. 客户端无法连接

先检查 UFW:

1
ufw status

确认里面有:

1
443/udp

如果你开启了端口跳跃,还要确认里面有对应的 UDP 端口范围,例如:

1
20000:20100/udp

然后再检查 Cloudflare DNS 记录,代理状态必须是:

1
DNS only

也就是灰云,不能是橙云。

3. 域名能 ping 通但服务仍然连不上

ping 只能说明域名解析到了某个 IP,并不代表 UDP 443 一定通。

继续检查:

  • VPS 系统防火墙;
  • VPS 服务商安全组;
  • Hysteria2 服务状态;
  • Hysteria2 日志;
  • 客户端里的认证密码和混淆密码是否填写正确。
  • 如果开启了端口跳跃,客户端端口范围是否和服务端 listen 范围一致。

✅ 总结

整个流程可以概括为:

  1. 在 Cloudflare 添加 hy2 的 A 记录;
  2. 代理状态保持 DNS only,不要开启橙云;
  3. 等待 DNS 解析生效;
  4. SSH 登录 VPS;
  5. 安装基础工具;
  6. 开启 BBR 基础网络优化;
  7. 安装 UFW,并放行 22/tcp80/tcp443/udp
  8. 安装 Hysteria2;
  9. 写入 /etc/hysteria/config.yaml
  10. 重启并检查 hysteria-server.service

如果你的网络环境对固定 UDP 端口有限速或阻断,再考虑开启端口跳跃;如果 443/udp 已经稳定,就不需要额外配置。

最后服务状态显示:

1
Active: active (running)

就说明 Hysteria2 服务端已经正常运行,可以继续配置客户端。

📺 观看配套视频

如果你更习惯跟着画面操作,可以观看本教程的完整视频。视频中会演示 Cloudflare DNS、VPS 命令和 Hysteria2 配置过程。

在 YouTube 观看 Hysteria2 完整教程 订阅 Skyline,获取更多 VPS 教程

📚 官方参考资料