Hysteria:基于QUIC的双边网络加速拯救破烂小鸡

Hysteria:基于QUIC的双边网络加速拯救破烂小鸡

前言

一直看到有朋友在搞Hax啊,Eusrv的欧洲鸡。以我多年的见识以及最近欧洲方向线路的实际表现,v4网络到中国大陆的直连链路如果不是国内御三家的精品网的话也是堪忧的,就更别提这几家免费的v6 only了。但作为MJJ,必然要倒腾一番才能收场,所以这篇便写一下Hysteria这个工具。

效果

SpeedTest

先来看看Vmess WSS的测速
Direct
可以看到在晚高峰时段,使用V2的WSS协议并不能得到一个好的速度。
这是Hysteria的测速
HY
可以看出有巨大的提升。
但值得一提的是,该测试结果并非在IPv6链路上得到的,而是在JustHost新西伯利亚RT机房的v4链路上得到的。原因在于,基于TLS加密的QUIC需要服务器有相对强力的硬件支持,130Mbps的数据发送占用了E5 2697 V2的两个核心的80%,而我们在Hax EU上进行测试时即使关闭OBFS混淆等可选加密,依旧无法避开CPU瓶颈,导致使用Hysteria进行测速时仅仅是降低了延迟,而并未有速度提升,甚至SpeedTest的最终成绩低于V2ray WS。

视频流

但降低延迟并非没有好处,经实测,Youtube 1080P60 视频播放中,使用V2ray WS进行的连接体验明显差于Hysteria.
HY
这是Hysteria打开Youtube视频3s后的调试信息,可以看到仅3s便来到了1w9的连接速度以及13s的视频缓存。
Direct
而使用V2ray WS的连接我们可以发现在打开视频将近10s后才开始加载,且连接速度与视频缓存增长缓慢。
注意,我们在进行Youtube测试时并未关注长时间播放后能来到怎样的连接速度和视频缓存,我们仅仅关注视频加载初期的链路状况,因为网页浏览体验是由初期这几秒决定的。在这几秒内的加载速度决定了视频是秒开还是转圈很久再打开,该规律对于图片等静态资源同样适用。

搭建

可以看到,Hysteria对于连接质量的提升很大,那么我们怎么搭建一套Hysteria服务呢?

服务端

由于Hysteria是基于TLS的应用,所以我们需要执行如下Shell命令在Hysteria运行目录生成一个自签名的证书。

1
2
openssl genrsa -out server.key 1024
openssl req -new -x509 -days 3650 -key server.key -out server.crt -subj "/C=CN/ST=mykey/L=mykey/O=mykey/OU=mykey/CN=domain1/CN=domain2/CN=domain3"

生成完后应该可以看到目录里多出了server.keyserver.crt,然后我们新建一个config.json,在里面写入如下配置.

1
2
3
4
5
6
7
8
{
"listen": ":<Your Port>",
"cert": "./server.sert",
"key": "./server.kry",
"obfs": "<Your Password>",
"up_mbps": 200,
"down_mbps": 200
}

< >注明的需要自定义的地方外,up_mbpsdown_mbps也需要自定义,按照服务器上下行带宽情况填写即可。
然后我们部署Hysteria即可

1
2
wget https://github.com/HyNetwork/hysteria/releases/download/v0.9.6/hysteria-linux-amd64
chmod -c 777 hysteria-linux-amd64

下载完成后我们找一个Screen或者类似的东西把Hysteria挂在本地,启动服务器的命令为

1
./hysteria-linux-amd64 server

客户端

PC/软路由

PC平台或者软路由的客户端大同小异,一并讲解。
GitHub下载对应的预编译包,给予可执行权限后进行以下步骤。
在可执行文件同目录创建config.json,写入如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"server": "<Your IP>:<Your Port>",
"obfs": "<Your Password>",
"up_mbps": 40,
"down_mbps": 200,
"insecure": true,
"socks5": {
"listen": "127.0.0.1:1080"
},
"http": {
"listen": "127.0.0.1:8080"
}
}

特别提示如下
合法的IPv4 Server示例 8.8.8.8:233
合法的IPv6 Server示例 [1145::5141]:233
依旧是up_mbpsdown_mbps按自己本地网络情况设置。
完成后执行 ./<可执行文件名> client 即可在本地打开运行在1080端口的Socks5服务与运行在8080端口的HTTP代理服务,直接使用这个代理或者导入V2rayN等工具做进一步分流处理都是可以的。

安卓

在Google Play安装SagerNetSagerNet的Hysteria扩展
安装完成后打开SagerNet创建Hysteria节点,在obfs字段设置的Password即是混淆密码,剩下的按配置填写即可。

iOS

很遗憾,目前并未有iOS应用适配Hysteria,有能力者可在软路由等处运行,再使用iOS设备连接对应的Socks5/HTTP代理。

优化

由于UDP的特性,对UDP内核缓冲区进行一定的调整有助于优化网络性能,按QUIC-GO库的Wiki所说,在非Windows平台可以使用root权限执行如下Shell命令来调整至优化设置

1
sysctl -w net.core.rmem_max=2500000

最后

折腾这些只是一乐,基于UDP的Hysteria有也很多缺点和不足等待完善,开发者和相关库作者也在积极完善,所以遇到问题请不要激动,和气地提出,和气地解决才是正道。当然如果你没能在自己的环境下复现本文的种种提升也不要着急,不同的网络环境决定了不同的效果,本文仅仅是讲述了最普适,最简便的方法,如果你的环境较为特殊也可以看下Hysteria的Wiki来解锁一些高端操作。
如果想找到我进行交流的话也非常的欢迎,现在在Hax的中文群组可以方便地联系到我,也可以找Bot来玩耍,都可以的。