Hysteria代理的搭建部署

1. 简介
Hysteria是一款基于修改版QUIC传输协议下的轻量级加密代理工具,相较于传统网站访问的HTTP以及shadowsocks、Vmess、Trojan等主要基于TCP的网络协议,基于QUIC的Hysteria拥有更快的传输速度。
graph LR; 客户端1 <---> |50Mbps| 路由转发 客户端2 <---> |50Mbps| 路由转发 客户端3 <---> |50Mbps| 路由转发 路由转发 <---> |100Mbps| 服务端
如上图所示,当用户访问量过多导致超出网络带宽资源和路由处理的极限时,就会出现链路拥堵和数据丢包的情况。对于底层传输基于TCP可靠传输的网络协议,当出现网络拥堵丢包情况时,就会遵循传统的拥塞控制算法(如BBR),来主动降低传输速率,使得网速变慢。
BBR: 由 Google 为 TCP 开发,我们对其进行了修改以移植到 QUIC。BBR 是标准的拥塞控制算法,包括慢启动和基于 RTT 变化的带宽估算。BBR 能独立运行,不需要用户手动设置带宽。
而对于经过修改后的QUIC之上的Hysteria来讲,当同样出现高延迟高丢包的情况时,Hysteria所采用的Brutal拥塞控制算法并不会主动降低传输速率,而是始终按照用户所设定的固定速度进行全速发送,并根据数据的丢包率来进行速率补偿,从而令其在网络拥堵的情况依然能够保持稳定的网速。
Brutal: 这是 Hysteria 自有的拥塞控制算法。与 BBR 不同,Brutal 采用固定速率模型,丢包或 RTT 变化不会降低速度。相反,如果无法达到预定的目标速率,反而会根据计算的丢包率提高发送速率来进行补偿。Brutal 只在你知道(并正确设置了)当前网络的最大速度时才能正常运行。其擅长在拥塞的网络中抢占带宽,因此得名。
此外,Hysteria同样能进行TLS加密,将数据伪装成访问HTTP3服务器的QUIC流量。
2. 服务端的部署和配置
连接进入服务器,在sudo权限下执行
1 | bash <(curl -fsSL https://get.hy2.sh/) |
安装成功之后,进入到Hysteria的配置文件目录中,并创建config.yaml配置文件
1 | cd /etc/hysteria/ && touch config.yaml |
这里可以使用自签TLS证书的方式进行配置,首先生成自签证书
1 | openssl req -x509 -nodes -newkey ec:<(openssl ecparam -name prime256v1) -keyout /etc/hysteria/your_key.key -out /etc/hysteria/your_crt.crt -subj "/CN=your-site.com" -days 36500 && sudo chown hysteria /etc/hysteria/your_key.key && sudo chown hysteria /etc/hysteria/your_crt.crt |
其中your_key.key
和your_crt.crt
对应生成的私钥和证书,而your-site.com
为指定域名。
接着修改配置文件config.yaml
1 | nano config.yaml |
将下面配置信息复制粘贴进去
1 | listen: :443 |
这里默认指定的端口是443,密码和伪装网址可以自行修改,保存退出。
接下来将Hysteria服务设定为开机自启并启动
1 | systemctl enbale hysteria-server.service |
并查看服务状态
1 | systemctl status hysteria-server.service |
显示active(running)即为启动成功。
需要注意要将设定端口的防火墙和网络安全组放开。
3. 客户端的配置
首先创建一个config.yaml的配置文件,将下面内容复制粘贴进去
1 | server: your_ip:443 #服务器ip加上对应端口 |
其中bandwidth下对应的上下行参数即为用户自行设定的固定传输速率,代表使用Hysteria的Brutal算法进行拥塞控制,这部分在服务端的配置文件中也可以设置,以两者之间的最小值为准。而如果希望使用BBR算法,可以将bandwidth这部分给删除。
以v2rayN为例,要添加Hysteria代理,首先选择服务器,点击添加自定义配置服务器
自定义代理名称,地址导入刚才的yaml配置文件,core类型选择hysteria,Socks端口需要与v2rayN客户端的相对应。保存退出。
到这里就算是搭建完成了,通过测速可以看到网速确实能跑到所设定的速率值,当然这也和本地网络的网速有关。
更进阶的配置可以参考Hysteria2的项目文档 来实现。