Hysteria2官方脚本装完起不来?手写config.yaml的最小配置
用官方脚本装完 Hysteria2,systemctl start 一下发现起不来,是正常现象:脚本只装程序、放一份示例配置,真正能用的 config.yaml 得自己写。好在最小配置很短,十来行就够。配置文件在 /etc/hysteria/config.yaml,下面的字段都对照过官方文档。
先选证书方式:acme 还是 tls
这是配置里唯一需要先想清楚的事,两个字段只能二选一。
情况一:有域名,已经解析到这台服务器。 用 acme,Hysteria 自己去申请和续期证书:
1 | acme: |
ACME 默认走 HTTP 验证,验证时会用到 80 端口,所以申请证书那段时间要保证 80 端口没被别的程序占着。域名没解析到本机、或者 80 被占,证书会申请失败,这是最常见的起不来原因。
情况二:没有域名,或者已经有证书文件。 用 tls 填文件路径:
1 | tls: |
没有证书的话可以先生成一张自签的:
1 | openssl req -x509 -nodes -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \ |
自签证书不被系统信任,客户端要打开"跳过证书验证"(有的客户端叫"允许不安全连接")才连得上,真实证书不需要这一步。
其他字段怎么填
监听端口 listen:不写就是默认的 :443,注意这是 UDP 端口。想换端口就加一行,比如 listen: :8443。只想监听 IPv4 写 0.0.0.0:8443,只监听 IPv6 写 [::]:8443。
认证 auth:上面用的是 password 类型,所有客户端共用一个密码,个人使用够了。多个用户想分开管理,官方还支持 userpass(用户名加密码)、http、command 几种类型,多用户的具体配法看Hysteria2多用户。密码随便挑一个够长的随机字符串,openssl rand -base64 18 就能生成。
伪装 masquerade:别人直接访问你的服务器端口时,Hysteria 会假装成一个正常的 HTTP/3 网站。上面用的 proxy 类型会把请求转发到你指定的真实网站,另外还有 file(返回本地静态文件)和 string(返回固定字符串)两种。如果你不在意抗封锁,这一段可以整个删掉。
混淆 obfs:可选项,类型是 salamander,需要设一个密码,客户端那边必须填同样的密码。不确定要不要就先不加,配置越少越不容易出错。
1 | obfs: |
带宽 bandwidth:可选,限制服务端的上下行速度,单位支持 mbps、gbps 等。不写就是不限制。速度慢的问题通常不在服务端这里,排查顺序看Hysteria2速度慢怎么办。
启动、检查、放行端口
配置存好之后启动并设为开机自启:
1 | systemctl enable --now hysteria-server.service |
确认状态和日志:
1 | systemctl status hysteria-server |
以后改了配置,用 systemctl restart hysteria-server.service 重启生效。
最后别忘了放行 UDP 端口,系统防火墙和服务商安全组两边都要放:
1 | ufw allow 443/udp |
只放 TCP 的话客户端是连不上的,具体可以看3x-ui配置Hysteria2节点教程里的说明。
起不来时按这个顺序看
- 看日志:
journalctl那条命令的报错基本会直接告诉你原因,比如证书申请失败、端口被占用、YAML 缩进错误。 - YAML 缩进:只能用空格,不能用 Tab,同级字段对齐,冒号后面要有空格。
- 证书文件读不了:官方脚本默认让服务以
hysteria这个普通用户运行,如果证书文件只有 root 能读,服务会起不来。可以改文件权限,或者按一键安装脚本那篇里说的用HYSTERIA_USER=root重新装。 - 端口冲突:UDP 443 如果被其他程序占用,换一个端口,同时改
listen和防火墙。
如果想用端口范围做端口跳跃,Hysteria 的 listen 支持写端口范围,配法看Hysteria2端口跳跃配置,用 S-UI 的话看S-UI端口跳跃教程。不想手写配置、想要图形界面的话,用面板更省事,对比可以看 S-UI 搭建 Hysteria2 节点教程。
服务端跑起来之后,客户端怎么导入、链接里每个参数对应什么,看Hysteria2客户端导入和连接。