🚀 Hysteria2 服务端搭建教程:Cloudflare DNS、VPS 与端口跳跃
本文记录如何使用自己的域名和 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.com、[email protected] 和 你的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 [email protected] |
登录后再继续执行下面的命令。
🚀 六、更新系统并安装基础工具
先更新系统:
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 | tee /etc/sysctl.d/99-bbr.conf > /dev/null <<'EOF' |
再应用系统参数:
1 | sysctl --system |
检查是否生效:
1 | sysctl net.ipv4.tcp_congestion_control |
正常情况下可以看到类似结果:
1 | net.ipv4.tcp_congestion_control = bbr |
如果 lsmod | grep bbr 没有输出,但前面的 sysctl 已经显示 bbr,通常也可以继续部署。部分内核会把 BBR 编进内核,不一定以模块形式显示。
🛡️ 八、安装并配置 UFW 防火墙
Debian 可以直接安装 UFW:
1 | apt update |
先确认 SSH 实际监听端口:
1 | sshd -T | grep '^port ' |
如果输出是 port 22,再放行以下必要端口:
1 | ufw allow 22/tcp |
启用 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 | AUTH=$(openssl rand -base64 32) |
这两个变量会写入 Hysteria2 配置文件。
📝 十、创建 Hysteria2 配置文件
执行下面的命令创建配置文件:
1 | cat > /etc/hysteria/config.yaml <<EOF |
这里需要替换两处:
1 | hy2.example.com |
hy2.example.com 改成你自己的 Hysteria2 子域名,[email protected] 改成你的邮箱。
命令执行完成后,终端会输出两项重要信息:
1 | auth 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 | systemctl restart hysteria-server.service |
客户端配置也要对应改成端口范围:
1 | server: hy2.example.com:20000-20100 |
如果是手机图形客户端,要确认它是否支持 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/tcp和443/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范围一致。
✅ 总结
整个流程可以概括为:
- 在 Cloudflare 添加
hy2的 A 记录; - 代理状态保持
DNS only,不要开启橙云; - 等待 DNS 解析生效;
- SSH 登录 VPS;
- 安装基础工具;
- 开启 BBR 基础网络优化;
- 安装 UFW,并放行
22/tcp、80/tcp、443/udp; - 安装 Hysteria2;
- 写入
/etc/hysteria/config.yaml; - 重启并检查
hysteria-server.service。
如果你的网络环境对固定 UDP 端口有限速或阻断,再考虑开启端口跳跃;如果 443/udp 已经稳定,就不需要额外配置。
最后服务状态显示:
1 | Active: active (running) |
就说明 Hysteria2 服务端已经正常运行,可以继续配置客户端。
📺 观看配套视频
如果你更习惯跟着画面操作,可以观看本教程的完整视频。视频中会演示 Cloudflare DNS、VPS 命令和 Hysteria2 配置过程。
在 YouTube 观看 Hysteria2 完整教程 订阅 Skyline,获取更多 VPS 教程