v2ray / v2ray-core

A platform for building proxies to bypass network restrictions.
https://www.v2ray.com/
MIT License
45.44k stars 8.95k forks source link

允许HTTP/2使用明文传输 #975

Closed raidenii closed 6 years ago

raidenii commented 6 years ago

Please skip to the English section below if you don't write Chinese.

中文: 提交 Issue 之前请先阅读 Issue 指引,然后回答下面的问题,谢谢。 除非特殊情况,请完整填写所有问题。不按模板发的 issue 将直接被关闭。

1) 你正在使用哪个版本的 V2Ray?(如果服务器和客户端使用了不同版本,请注明) 3.14

2) 你的使用场景是什么?比如使用 Chrome 通过 Socks/VMess 代理观看 YouTube 视频。 v2ray使用http/2作为backend,nghttp2作为frontend根据路径决定将请求转发给v2ray或者nginx

3) 你看到的不正常的现象是什么?(请描述具体现象,比如访问超时,TLS 证书错误等) 正常使用,但是v2ray使用http2时强制要求tls

4) 你期待看到的正确表现是怎样的? 类似ws,http2不要求tls(允许http2 over cleartext),tls交由frontend处理(frontend作为ssl terminator)

5) 请附上你的配置(提交 Issue 前请隐藏服务器端IP地址)。

服务器端配置:
    // 在这里附上服务器端配置文件
客户端配置:
    // 在这里附上客户端配置

6) 请附上出错时软件输出的错误日志。在 Linux 中,日志通常在 /var/log/v2ray/error.log 文件中。

服务器端错误日志:
Failed to start App|Proxyman|Inbound: failed to listen TCP on 10086 > Transport|Internet: failed to listen on address: [::1]:10086 > Transport|Internet|HTTP: TLS must be enabled for http transport.
    // 在这里附上服务器端日志
客户端错误日志:
    // 在这里附上客户端日志

7) 请附上访问日志。在 Linux 中,日志通常在 /var/log/v2ray/access.log 文件中。

    // 在这里附上服务器端日志

8) 其它相关的配置文件(如 Nginx)和相关日志。

请预览一下你填的内容再提交。

如果你已经填完上面的问卷,请把下面的英文部份删除,再提交 Issue。

DarienRaymond commented 6 years ago

暂时不作考虑,Golang不支持这个功能:https://github.com/golang/go/issues/14141

你可以使用Caddy进行http2转发。

raidenii commented 6 years ago

caddy试不出来,一直报405,而且反代功能貌似比nginx差了不少(比如反代到带路径的url) nghttpx目前还行,除了拦截不了backend的error code(caddy也不行,nginx可以)至少可以用了。 thanks anyway

linshixiong commented 6 years ago

@raidenii 我也想像ws那样,用nginx反代HTTP/2到到v2ray端口,网上说nginx不支持HTTP/2反代,你是如何实现反代的,求教。

raidenii commented 6 years ago

说了啊,用nghttpx apache应该也行,跟nghttpx本质是一个东西,因为apache的http2 proxy使用的是libnghttp2 https://httpd.apache.org/docs/trunk/mod/mod_proxy_http2.html

mgsqz commented 6 years ago

我有个思路,回头我回去试一下,用nginx前端开启stream模块转发ssl端口的tcp流量到v2ray后端,v2ray在后端接收还没解密的ssl流量

mgsqz commented 6 years ago

我是根据域名分流的,如果是根据路径那我不知道了

mgsqz commented 6 years ago

或者nginx使用proxy pass 重写host然后转发为https试试,非专业人士,如有不对请多包涵

raidenii commented 6 years ago

@mgsqz host属于header的一部分,不解密ssl看不到 根据域名分流可以不解密(依靠sni),但是两个问题:

  1. 做不到像ws+tls+web的同域名隐藏的隐蔽性
  2. nginx不支持以http/2连接到backend,随便你用什么分流都不行
o0HalfLife0o commented 6 years ago

3.17服务端好像可以不用指定证书文件了,但是caddy怎么配置还是一脸懵逼

mgsqz commented 6 years ago

@523860169 客户端和服务器必须同时开启 TLS 才可以正常使用这个传输方式。caddy可以转发h2,配置谷歌找找,配置比nginx还简单

o0HalfLife0o commented 6 years ago

@mgsqz https://github.com/v2ray/v2ray-core/issues/1049

raidenii commented 6 years ago

可以用caddy。

o0HalfLife0o commented 6 years ago

@raidenii 搭配caddy怎么配置?

raidenii commented 6 years ago

https://gist.github.com/raidenii/62afc355ab600b546a2aac80c2bf2c5c

o0HalfLife0o commented 6 years ago

原来不能加gzip,我去掉就好了,谢谢

o0HalfLife0o commented 6 years ago

@raidenii 大佬,H2加cloudflareCDN的话,是不是就不行了

raidenii commented 6 years ago

https://support.cloudflare.com/hc/en-us/articles/214534978-Are-the-HTTP-2-or-SPDY-protocols-supported-between-Cloudflare-and-the-origin-server-

o0HalfLife0o commented 6 years ago

好吧,看来要ws和h2两个同时用了,谢谢

IceCodeNew commented 5 years ago

暂时不作考虑,Golang不支持这个功能:golang/go#14141

你可以使用Caddy进行http2转发。

您好,Golang 在 2018 年 7 月合并的一个 CL 里已经实现了 h2c。请问开发者这边是否可以考虑允许 HTTP2 使用明文传输了呢? 我现在的确是用 caddy 做的 H2 反代,但是性能损失很大。在用 IDM 下载文件时会变得无法缓冲 YouTube 视频。我用 tcpdump 抓包以后发现被 caddy 抓发后的流量居然还是加密的,确认了这里是性能瓶颈后我找到了这个 issue,并且希望能重新打开这个 issue 让开发者注意到。