返回
Featured image of post 使用Hysteria进行双边加速

使用Hysteria进行双边加速

使用Hysteria建立一个基于QUIC的隧道,实现双边网络加速,优化较差网络环境下的连接。

使用Hysteria进行双边网络加速

这几天在网络上看见一个挺有意思的东西Hysteria,这个软件可以在两台机器之间建立一个隧道,和之前的各种tls隧道不太一样的是,这个隧道建立在QUIC上,也就是使用udp来进行传输,于是这个隧道除了能加密其中传输的流量还可以利用udp突破tcp的拥塞控制机制,使得网络传输在如高丢包率高延迟的较差的网络环境高下能表现得更加好一些(前提是运营商对于UDP没有限速等策略),实现双边加速。

配置

关于如何配置,github上有详细的文档

我自己使用的配置如下:

  1. 服务端

    github上的示例配置文件中里面使用了ACME,只要你配置好了域名解析,该软件可以自动帮你申请证书,不过在我这里没申请成功,于是我直接使用了之前certbot申请的证书。

    如果不方便申请证书的话,可以使用自签名证书:

    openssl req -newkey rsa:2048 \
                -x509 \
                -sha256 \
                -days 3650 \
                -nodes \
                -out hello.crt \
                -keyout hello.key
    

    使用自签名证书需要修改客户端的 insecure选项为true 允许不安全证书 (别懒小心中间人攻击,不过一般的流量其实都有https了…)

    如果延迟较高且期望传输速度较快的话,需要把缓存设置的大一些

    recv_window_client表示QUIC接收窗口的大小,设置成 RTT(单位:秒)*期望带宽(单位:字节)

    recv_window_conn设置成前者的四分之一。 (内存充足的话多多益善)

    {
      "listen": ":20000",
      "cert": "/etc/letsencrypt/live/example.com/fullchain.pem",
      "key": "/etc/letsencrypt/live/example.com/privkey.pem",
      "obfs": "Hello Hysteria",
      "up_mbps": 1000, // 服务端上这两个参数是可选的,限制对每个客户端传输的速度
      "down_mbps": 1000,
      "recv_window_conn": 65536000,
      "recv_window_client": 262144000,
      "max_conn_client": 4096 // 单一客户端的最大连接数
    }
    

    之后可以使用 ./hysteria -config config.json server 或者 ./hysteria server 启动服务端。

    另外如果是高延迟高速传输,还需要提高系统udp接收缓存 (例子中是4MB)

    sysctl -w net.core.rmem_max=4000000

  2. 客户端

    客户端中的up_mbps和down_mbps 是必填项,建议按照实际的带宽来,udp虽然没有拥塞控制,但是也不应该浪费过多的带宽。 QUIC的协商机制我还没有研究过

    和常见的隧道不一样,Hysteria的转发设置是在客户端进行的,其中的socks5和http设置都是在本地开启代理,具体作用你懂的。而relay_tcp、relay_udp则是转发远程服务器上的端口,其中填的remoteip中的127.0.0.1代表的是远程的服务器,你还可以用远程服务器作为一个中继去转发远程服务器的远程服务器。

    {
      "server": "example.com:20000",
      "obfs": "Hello Hysteria",
      "up_mbps": 100,
      "down_mbps": 800,
      "insecure": false,
      "relay_tcp": {
        "listen": "127.0.0.1:2222",
        "remote": "127.0.0.1:5201",
        "timeout": 300
      },
      "socks5": {
        "listen": "0.0.0.0:1080",
        "timeout": 1000
      },
      "http": {
        "listen": "0.0.0.0:8080"
      },
      "recv_window_conn": 65536000,
      "recv_window": 262144000
    }
    
    

    模式还有很多种,不过我还没用到所以就先不记录了,另外还有许多的配置项,都可以参考 高级用法一章。

    同样,如果是Linux的话,可以将udp接收缓存开高一些。

    sysctl -w net.core.rmem_max=4000000

实际体验

Hysteria适合给线路糟糕的服务器用,在线路较好的服务器上和普通的tcp连接并没有太大的区别。但是在线路较差的服务器上,本地测试(本地运营商对udp没有什么限制),能比tcp连接快上十倍、甚至更多,效果还是很显著的,可以用来加速http下载、ssh连接以及各种你懂的服务。

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
本站访客数:
Built with Hugo
Theme Stack designed by Jimmy