ginuerzh / gost

GO Simple Tunnel - a simple tunnel written in golang
MIT License
15.83k stars 2.47k forks source link

Hysteria使用的quic库速度快好多倍! #859

Open PHCSJC opened 2 years ago

PHCSJC commented 2 years ago

长期使用和测试发现,Hysteria的速度非常快,它底层使用的是quic协议,可能是它用的quic库优化的比较好,gost大佬有空能否看看,也许能借鉴一下?

我实测的,Hysteria下载速度在25M左右,而gost的relay+quic\kcp不到5M image

这里也直接放出下载命令,方便测试: curl -fo /dev/null https://download3.vmware.com/software/WKST-1624-WIN/VMware-workstation-full-16.2.4-20089737.exe

使用的quic库应该是这个: https://github.com/lucas-clemente/quic-go

ginuerzh commented 2 years ago

Hysteria不是标准的quic。

PHCSJC commented 2 years ago

关键是真的真的快呀,标不标准无所谓吧?所有的标准不都是慢慢发展来的吗?

happyharryh commented 1 year ago

可以尝试一下我的分支:https://github.com/happyharryh/gost/tree/hysteria-quic

# 构建
git clone -b hysteria-quic https://github.com/happyharryh/gost.git
cd gost
go build ./cmd/gost

# 服务器端
./gost -L='quic://127.0.0.1:8080?send_mbps=100'

# 客户端
./gost -L=auto://127.0.0.1:1080 -F='quic://127.0.0.1:8080?send_mbps=20&keepalive=true'

这个分支只是简易实现了Hysteria-QUIC的通道,未实现Hysteria的其他加密功能,数据发送速率由服务器端/客户端启动配置直接定死,而非在连接时协商

PHCSJC commented 1 year ago

@happyharryh 非常感谢,下载测试了多次,和hysteria的效果完全一样,可以达到我带宽的满速,而且也是0-RTT

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  615M  100  615M    0     0  35.7M      0  0:00:17  0:00:17 --:--:-- 36.8M
f4nff commented 1 year ago

使用了hysteria其实就没必要用gost了,

PHCSJC commented 1 year ago

@f4nff 你说的也没错,只是因为@ginuerzh大佬的gost正好也有quic,如果能达到更快的速度不是更香吗?所以才有这个issue来求大佬了

f4nff commented 1 year ago

gost其实没特别的优点, 所有的协议并不快, gost的特点就是多个协议的转换, 目前已经基本不用gost, 用hy放到路由器里面,速度碾压任何其他协议.

f4nff commented 1 year ago

hy最好的特点就是支持端口转移,对抗qos, 支持会话平滑转移, 如果是tcp连接ssh会时不时断开一下.

AndersonGhost commented 1 year ago

gost 可以中转最新的Hysteria 2 协议吗?如何中转呢?

Yongke commented 10 months ago

@happyharryh 专门来这里感谢的~ hysteria-quic 非常 nice~~ 终于又能高峰期上网了😂

AndersonGhost commented 10 months ago

@happyharryh 专门来这里感谢的~ hysteria-quic 非常 nice~~ 终于又能高峰期上网了😂

gost 可以中转最新的Hysteria 2 协议吗?如何操作?

happyharryh commented 10 months ago

@happyharryh 专门来这里感谢的~ hysteria-quic 非常 nice~~ 终于又能高峰期上网了😂

注意这里的quic没有实现身份校验和伪装,仅仅是应用了hysteria的拥塞算法提升传输速率,建议搭配iptables白名单之类的防护使用

happyharryh commented 10 months ago

@happyharryh 专门来这里感谢的~ hysteria-quic 非常 nice~~ 终于又能高峰期上网了😂

gost 可以中转最新的Hysteria 2 协议吗?如何操作?

这里的quic没有实现hy的身份校验和伪装,不能直接和hy对接,还是得用hy才能和hy对接。中转的话可以用gost帮忙把udp数据转发一下,不过如果只是转发的话,其实用iptables就可以实现,性能还更高一些

Yongke commented 10 months ago

@happyharryh 专门来这里感谢的~ hysteria-quic 非常 nice~~ 终于又能高峰期上网了😂

gost 可以中转最新的Hysteria 2 协议吗?如何操作?

这里的quic没有实现hy的身份校验和伪装,不能直接和hy对接,还是得用hy才能和hy对接。中转的话可以用gost帮忙把udp数据转发一下,不过如果只是转发的话,其实用iptables就可以实现,性能还更高一些

我这里只是将hysteria-quic当成点对点的传输隧道而已,gost的命令比较简洁,搭配docker非常方便。 QUIC server放在本地NAS上(不是放在远程VPS上,我这里测试放VPS上容易被ISP封一段时间整个UDP传输)。

最初是rtcp+quic://的方式远程端口映射其他代理协议端口(gost ss)到本地NAS上, 但是GOST rtcp貌似有些BUG,经常断连又重连... 最后用的是tcp+quic://方式,将NAS上的端口本地端口映射到VPS上, 然后在这个隧道中跑了一对chisel。

PHCSJC commented 10 months ago

@Yongke QUIC SERVER放在VPS容易封?放到本地不会被封?然后VPS发起连接到本地NAS上?那你本地是有公网IP吧?

Yongke commented 10 months ago

@Yongke QUIC SERVER放在VPS容易封?放到本地不会被封?然后VPS发起连接到本地NAS上?那你本地是有公网IP吧?

是的,本地有公网IP,也有IPV6,随便找了个DDNS。 我发现VPS自己就算被封了IP,也是可以通过TCP/UDP连回本地NAS的。最开始是TCP反向,但是拥塞实在太严重了,高峰期基本卡死(常用的VPS在印度,日本也卡)。hysteria-quic正好解决了拥塞问题。

happyharryh commented 10 months ago

@happyharryh 专门来这里感谢的~ hysteria-quic 非常 nice~~ 终于又能高峰期上网了😂

gost 可以中转最新的Hysteria 2 协议吗?如何操作?

这里的quic没有实现hy的身份校验和伪装,不能直接和hy对接,还是得用hy才能和hy对接。中转的话可以用gost帮忙把udp数据转发一下,不过如果只是转发的话,其实用iptables就可以实现,性能还更高一些

我这里只是将hysteria-quic当成点对点的传输隧道而已,gost的命令比较简洁,搭配docker非常方便。 QUIC server放在本地NAS上(不是放在远程VPS上,我这里测试放VPS上容易被ISP封一段时间整个UDP传输)。

最初是rtcp+quic://的方式远程端口映射其他代理协议端口(gost ss)到本地NAS上, 但是GOST rtcp貌似有些BUG,经常断连又重连... 最后用的是tcp+quic://方式,将NAS上的端口本地端口映射到VPS上, 然后在这个隧道中跑了一对chisel。

断连又重连的问题,可以看看开启keepalive=true有没有效果(这是quic的一个参数)

Yongke commented 10 months ago

断连又重连的问题,可以看看开启keepalive=true有没有效果(这是quic的一个参数)

没什么效果,试过10、60,都差不多的现象。 应该是rtcp的问题,没有深入调查...

onlineie commented 2 months ago

可以尝试一下我的分支:https://github.com/happyharryh/gost/tree/hysteria-quic

# 构建
git clone -b hysteria-quic https://github.com/happyharryh/gost.git
cd gost
go build ./cmd/gost

# 服务器端
./gost -L='quic://127.0.0.1:8080?send_mbps=100'

# 客户端
./gost -L=auto://127.0.0.1:1080 -F='quic://127.0.0.1:8080?send_mbps=20&keepalive=true'

这个分支只是简易实现了Hysteria-QUIC的通道,未实现Hysteria的其他加密功能,数据发送速率由服务器端/客户端启动配置直接定死,而非在连接时协商

兄弟,你近期有把你Hysteria-gost升级到gostv3的打算吗...

happyharryh commented 2 months ago

可以尝试一下我的分支:https://github.com/happyharryh/gost/tree/hysteria-quic


# 构建

git clone -b hysteria-quic https://github.com/happyharryh/gost.git

cd gost

go build ./cmd/gost

# 服务器端

./gost -L='quic://127.0.0.1:8080?send_mbps=100'

# 客户端

./gost -L=auto://127.0.0.1:1080 -F='quic://127.0.0.1:8080?send_mbps=20&keepalive=true'

这个分支只是简易实现了Hysteria-QUIC的通道,未实现Hysteria的其他加密功能,数据发送速率由服务器端/客户端启动配置直接定死,而非在连接时协商

兄弟,你近期有把你Hysteria-gost升级到gostv3的打算吗...

个人没有这个需求……

vjeson commented 2 months ago

@happyharryh 专门来这里感谢的~ hysteria-quic 非常 nice~~ 终于又能高峰期上网了😂

gost 可以中转最新的Hysteria 2 协议吗?如何操作?

这里的quic没有实现hy的身份校验和伪装,不能直接和hy对接,还是得用hy才能和hy对接。中转的话可以用gost帮忙把udp数据转发一下,不过如果只是转发的话,其实用iptables就可以实现,性能还更高一些

我这里只是将hysteria-quic当成点对点的传输隧道而已,gost的命令比较简洁,搭配docker非常方便。 QUIC server放在本地NAS上(不是放在远程VPS上,我这里测试放VPS上容易被ISP封一段时间整个UDP传输)。

最初是rtcp+quic://的方式远程端口映射其他代理协议端口(gost ss)到本地NAS上, 但是GOST rtcp貌似有些BUG,经常断连又重连... 最后用的是tcp+quic://方式,将NAS上的端口本地端口映射到VPS上, 然后在这个隧道中跑了一对chisel。

兄弟能否分享下,具体怎么做的,vps ip被封,有公网ip

Yongke commented 2 months ago

兄弟能否分享下,具体怎么做的,vps ip被封,有公网ip

我是这么玩的。

  1. 首先本地需要有公网IP,且开放UDP端口2222/udp(或其他端口)的访问, 确保你的VPS能通过UDP访问这个端口;同时本地还需运行一个rathole服务器(或者chisel服务器,这个效率偏低)。

    gost-hysteria -L "quic://:2222?send_mbps=1000&keepalive=10&cipher=**some_cipher_for_hysteria**"
    
    rathole /server.toml

server.toml, rathole监听到本地2222/tcp上,不需要开放到公网上。

[server]
bind_addr = "0.0.0.0:2222"

[server.services.ss-hy-oracle-in]
token = "**someratholetoken**"
bind_addr = "0.0.0.0:7001"

GOST的反向端口代理功能rtcp和rudp,在监听的超时设计和断线重连上有些不好用,rathole或chisel相比之下要稳定很多。

  1. 在VPS上启动gost-hysteria客户端,建立从VPS到本地的UDP隧道, 并且将你本地的2222/tcp代理到VPS的9999/tcp上。

    gost-hysteria -L tcp://0.0.0.0:9999/:2222 -L $3 -F "quic://**your_public_ip_or_ddns**:2222?send_mbps=1000&keepalive=10&cipher=**some_cipher_for_hysteria**"
  2. VPS启动SS服务到7777/tcp

    gost-hysteria -L "ss://aes-128-gcm:**somecipher**@127.0.0.1:7777"
  3. VPS转发7777/tcp到本地的7001/tcp,最终你的SS服务就相当于监听在本地的网络上了(7001/tcp)

    /bin/rathole client.toml

    client.toml

    [client]
    remote_addr = "127.0.0.1:9999"
    [client.services.ss-hy-oracle-in]
    token = "**someratholetoken**"
    local_addr = "127.0.0.1:7777"

这样反着连,整体效果还行,我都用了差不多大半年了,一直没有被掐断过~~ VPS可以多个,相当于把多个VPS的SS或其他服务都映射到本地。

可以把上面的脚本和配置塞到docker里,最后docker-compose一跑就完事,不用每次每台vps和本地机器都重新配置。