Hysteria2多用户怎么配?userpass认证和流量统计API
用官方脚本装的 Hysteria2,默认是 password 认证:所有人共用同一个密码。自己一个人用没问题,但想分给家人朋友用,就会遇到两个麻烦:不知道谁用了多少流量,想让某个人停用也没办法单独处理,只能把所有人的密码一起换掉。官方其实内置了多用户认证,改一处配置就能用。服务端配置的基础写法先看config.yaml 最小配置。
把 auth 改成 userpass
原来的配置大概是这样:
1 | auth: |
改成多用户,就是把 type 换成 userpass,然后在下面逐个列出用户:
1 | auth: |
左边是用户名,右边是该用户的密码。改完保存,重启服务生效:
1 | systemctl restart hysteria-server.service |
增加、删除用户都是改这一段再重启。要删掉某个人,把他那一行删掉后重启即可,旧账号以后就认证不过了。
客户端怎么填
客户端的认证字段要写成 用户名:密码,比如 alice 填 alice:密码一。分享链接里就是 @ 前面那一段,官方 URI 规范里也说明了,userpass 类型的服务器,认证部分要写成 username:password:
1 | hysteria2://alice:密码一@your.domain.net:443/?sni=your.domain.net#alice |
密码里如果有特殊字符,链接里需要做百分号转义,否则解析会出错,建议给用户设密码时就避开 @、:、/、# 这类字符。各个参数的含义可以看客户端导入连接。
开启流量统计 API,看谁用了多少
光有多用户还不够,想知道每个人的用量,需要开启官方的 Traffic Stats API。在服务端配置里加这一段:
1 | trafficStats: |
两个字段都值得认真对待:
secret一定要设。 官方文档明确说,不设的话,任何能访问这个监听地址的人都能看流量统计、踢掉用户,强烈建议设置。listen建议写成127.0.0.1,只让本机能访问。官方示例写的是:9999,会监听所有网卡;多加一层限制更保险,需要从别的机器查询时,可以用 SSH 隧道。这是我的建议,不是官方要求。
改完重启服务,就可以在服务器上用 curl 查询了。
查每个用户的流量
1 | curl -H 'Authorization: 你设的secret' http://127.0.0.1:9999/traffic |
返回的是以用户名为键的 JSON,每个用户有 tx 和 rx 两个字节数:
1 | { |
在地址后面加 ?clear=1,会在返回数据的同时把统计清零,适合按周期(比如每月)统计用量。
查谁在线
1 | curl -H 'Authorization: 你设的secret' http://127.0.0.1:9999/online |
返回每个在线用户和他当前的设备连接数,比如 {"alice": 2, "bob": 1},可以看出某个账号有没有被多人同时使用。
踢人
1 | curl -X POST -H 'Authorization: 你设的secret' -d '["bob"]' http://127.0.0.1:9999/kick |
官方文档提醒,被踢的客户端通常会自动重连,所以这只是临时断开。真想让某个人彻底用不了,要从 userpass 里删掉账号再重启服务。
它不能做到什么
要分清这套方案的边界,免得期望过高:
- 只是查询接口。 官方配置里我没有看到"流量用完自动停用"或者"到期自动封号"这类功能,要做的话得自己写脚本,定时读取
/traffic,超额了就从配置里删掉账号并重启。 - 没有按用户单独限速。 服务端的
bandwidth是对每个客户端统一的限速,没有看到针对单个用户设不同速度的字段,具体见速度慢怎么办里的说明。 - 官方还支持
http和command两种认证类型,可以把认证交给你自己的后端服务或脚本,更灵活,但需要自己开发。简单的多人分享,userpass已经够用。
如果觉得手动管理太麻烦
用户一多,手动改配置文件再重启会很累,而且没有现成的到期、流量额度管理。这时候用面板更省事,比如 3x-ui 里的用户管理,Hysteria2 的搭建可以看3x-ui 配置 Hysteria2,面板自带流量和到期的设置。两种方式怎么选,取决于你是只想自己加两三个人,还是需要长期管理一批用户。